diff --git a/bytes/regexp.go b/bytes/regexp.go index 44b2d0e..539406e 100644 --- a/bytes/regexp.go +++ b/bytes/regexp.go @@ -69,6 +69,9 @@ func Regexp(pattern string) gigaparsec.Parser[byte, string] { return gigaparsec.Result[byte, string]{}, fmt.Errorf("Regexp: reader error: %w", err) } if idx == nil { + if err == io.EOF { + return gigaparsec.Fail[byte, string](false, gigaparsec.MessageEnd(input.Pos())), nil + } got := make([]byte, r.Count()) _, _, err = input.Read(got) if err != nil { diff --git a/bytes/regexp_test.go b/bytes/regexp_test.go index 6e409f6..b91f61f 100644 --- a/bytes/regexp_test.go +++ b/bytes/regexp_test.go @@ -69,6 +69,13 @@ func TestRegexp(t *testing.T) { must.True(t, succeeded) must.EqOp(t, "", value) }) + t.Run("fails without an error at EOF", func(t *testing.T) { + p := pbytes.Regexp("a") + result, err := p(gigaparsec.MakeState(strings.NewReader(""))) + succeeded, _, _ := result.Status() + must.NoError(t, err) + must.False(t, succeeded) + }) } func TestRuneReader(t *testing.T) {