]> Cypherpunks repositories - gostls13.git/commitdiff
go/parser: fix ignored errors in ParseExprFrom
authorBen Shi <powerman1st@163.com>
Wed, 11 Sep 2019 07:22:35 +0000 (07:22 +0000)
committerRobert Griesemer <gri@golang.org>
Sun, 15 Sep 2019 00:18:30 +0000 (00:18 +0000)
This CL fixes a bug in ParseExprFrom which makes
error messages ignored when there are 10+ errors
in a single expression.

fixes #34241
fixes #34274

Change-Id: I29a82d3e3e726279005eb6fbcd7ee3aebffaa679
Reviewed-on: https://go-review.googlesource.com/c/go/+/194638
Run-TryBot: Ben Shi <powerman1st@163.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/go/parser/interface.go
src/go/parser/parser_test.go

index 9de160a7988aa07e5089a928661f6e35318a28d4..0c3f824c98d0149887a8f17790fe47cad03bc4c5 100644 (file)
@@ -173,7 +173,7 @@ func ParseDir(fset *token.FileSet, path string, filter func(os.FileInfo) bool, m
 // be a valid Go (type or value) expression. Specifically, fset must not
 // be nil.
 //
-func ParseExprFrom(fset *token.FileSet, filename string, src interface{}, mode Mode) (ast.Expr, error) {
+func ParseExprFrom(fset *token.FileSet, filename string, src interface{}, mode Mode) (expr ast.Expr, err error) {
        if fset == nil {
                panic("parser.ParseExprFrom: no token.FileSet provided (fset == nil)")
        }
index fb35a88ba1aa5565614762df24193cb237584dff..18c05bce203a2efc97902970b2c929a8fef74505 100644 (file)
@@ -42,6 +42,22 @@ func nameFilter(filename string) bool {
 
 func dirFilter(f os.FileInfo) bool { return nameFilter(f.Name()) }
 
+func TestParseFile(t *testing.T) {
+       src := "package p\nvar _=s[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]"
+       _, err := ParseFile(token.NewFileSet(), "", src, 0)
+       if err == nil {
+               t.Errorf("ParseFile(%s) succeeded unexpectedly", src)
+       }
+}
+
+func TestParseExprFrom(t *testing.T) {
+       src := "s[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]+\ns[::]"
+       _, err := ParseExprFrom(token.NewFileSet(), "", src, 0)
+       if err == nil {
+               t.Errorf("ParseExprFrom(%s) succeeded unexpectedly", src)
+       }
+}
+
 func TestParseDir(t *testing.T) {
        path := "."
        pkgs, err := ParseDir(token.NewFileSet(), path, dirFilter, 0)