diff --git a/parser/parser.go b/parser/parser.go index 3a27a4df4..156abf674 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -2608,14 +2608,22 @@ func (p *parser) parseLambdaExpr(allowTuple, allowCmd, allowRangeExpr bool) (x a case *tupleExpr: items := make([]*ast.Ident, len(v.items)) for i, item := range v.items { - items[i] = p.toIdent(item) + ident := p.toIdent(item) + if ident == nil { + return &ast.BadExpr{From: item.Pos(), To: p.safePos(item.End())}, false + } + items[i] = ident } lhs, lhsHasParen = items, true case *ast.ParenExpr: e, lhsHasParen = v.X, true goto retry default: - lhs = []*ast.Ident{p.toIdent(v)} + ident := p.toIdent(v) + if ident == nil { + return &ast.BadExpr{From: v.Pos(), To: p.safePos(v.End())}, false + } + lhs = []*ast.Ident{ident} } } if debugParseOutput { diff --git a/parser/parser_test.go b/parser/parser_test.go index ccfa69889..3a67a4571 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -164,6 +164,10 @@ test "hello", (x, "y") => { println "lambda",x,y } `, `/foo/bar.gop:3:19: expected 'IDENT', found "y"`, ``) + testErrCode(t, `onTouchStart "someone" => { + say "touched by someone" +} +`, `/foo/bar.gop:1:14: expected 'IDENT', found "someone"`, ``) } func TestErrTooManyParseExpr(t *testing.T) {