From 9e8e4a9313f8bff5c40d82166818f98b4a8cc9ed Mon Sep 17 00:00:00 2001
From: Robert Griesemer <gri@golang.org>
Date: Wed, 7 Mar 2012 10:19:32 -0800
Subject: [PATCH] go/parser: better error sync. if commas are missing

This time for sure.
Runs all tests.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5752060
---
 src/pkg/go/parser/parser.go | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/src/pkg/go/parser/parser.go b/src/pkg/go/parser/parser.go
index 4a391454ae..c39ea5c2a3 100644
--- a/src/pkg/go/parser/parser.go
+++ b/src/pkg/go/parser/parser.go
@@ -376,17 +376,15 @@ func (p *parser) expectSemi() {
 	}
 }
 
-func (p *parser) seesComma(context string) bool {
+func (p *parser) atComma(context string) bool {
 	if p.tok == token.COMMA {
 		return true
 	}
-	/*
-		if p.tok == token.SEMICOLON && p.lit == "\n" {
-			p.error(p.pos, "missing ',' before newline in "+context)
-			return true // "insert" the comma and continue
+	if p.tok == token.SEMICOLON && p.lit == "\n" {
+		p.error(p.pos, "missing ',' before newline in "+context)
+		return true // "insert" the comma and continue
 
-		}
-	*/
+	}
 	return false
 }
 
@@ -661,7 +659,7 @@ func (p *parser) parseVarList(isParam bool) (list []ast.Expr, typ ast.Expr) {
 	// accept them all for more robust parsing and complain later
 	for typ := p.parseVarType(isParam); typ != nil; {
 		list = append(list, typ)
-		if !p.seesComma("variable list") {
+		if p.tok != token.COMMA {
 			break
 		}
 		p.next()
@@ -702,7 +700,7 @@ func (p *parser) parseParameterList(scope *ast.Scope, ellipsisOk bool) (params [
 			// Go spec: The scope of an identifier denoting a function
 			// parameter or result variable is the function body.
 			p.declare(field, nil, scope, ast.Var, idents...)
-			if !p.seesComma("parameter list") {
+			if !p.atComma("parameter list") {
 				break
 			}
 			p.next()
@@ -1092,7 +1090,7 @@ func (p *parser) parseCallOrConversion(fun ast.Expr) *ast.CallExpr {
 			ellipsis = p.pos
 			p.next()
 		}
-		if !p.seesComma("argument list") {
+		if !p.atComma("argument list") {
 			break
 		}
 		p.next()
@@ -1132,7 +1130,7 @@ func (p *parser) parseElementList() (list []ast.Expr) {
 
 	for p.tok != token.RBRACE && p.tok != token.EOF {
 		list = append(list, p.parseElement(true))
-		if !p.seesComma("composite literal") {
+		if !p.atComma("composite literal") {
 			break
 		}
 		p.next()
-- 
2.30.9