@@ -131,7 +131,8 @@ func (p *Parser) parseVariable() (ast.Expr, error) {
131131 it := p .next ()
132132
133133 if it .Type () != token .Variable {
134- return nil , errors .NewError ("Unexpected token %v. Expected VARIABLE" , it )
134+ return nil , newParserError (it , p .name ,
135+ "Unexpected token %v. Expected VARIABLE" , it )
135136 }
136137
137138 variable := ast .NewVarExpr (it .FileInfo , it .Value ())
@@ -143,7 +144,8 @@ func (p *Parser) parseVariable() (ast.Expr, error) {
143144 it = p .next ()
144145
145146 if it .Type () != token .Number && it .Type () != token .Variable {
146- return nil , errors .NewError ("Expected number or variable in index. Found %v" , it )
147+ return nil , newParserError (it , p .name ,
148+ "Expected number or variable in index. Found %v" , it )
147149 }
148150
149151 var index ast.Expr
@@ -170,7 +172,8 @@ func (p *Parser) parseVariable() (ast.Expr, error) {
170172 it = p .next ()
171173
172174 if it .Type () != token .RBrack {
173- return nil , errors .NewError ("Unexpected token %v. Expecting ']'" , it )
175+ return nil , newParserError (it , p .name ,
176+ "Unexpected token %v. Expecting ']'" , it )
174177 }
175178
176179 return ast .NewIndexExpr (variable .FileInfo , variable , index ), nil
@@ -256,7 +259,8 @@ cmdLoop:
256259
257260 n .AddArg (arg )
258261 case typ == token .Plus :
259- return nil , errors .NewError ("%s:%d:%d: Unexpected '+'" , p .name , it .Line (), it .Column ())
262+ return nil , newParserError (it , p .name ,
263+ "Unexpected '+'" , p .name , it .Line (), it .Column ())
260264 case typ == token .Gt :
261265 p .next ()
262266 redir , err := p .parseRedirection (it )
@@ -513,7 +517,8 @@ func (p *Parser) parseAssignment(ident scanner.Token) (ast.Node, error) {
513517 it := p .next ()
514518
515519 if it .Type () != token .Assign && it .Type () != token .AssignCmd {
516- return nil , errors .NewError ("Unexpected token %v, expected '=' or '<='" , it )
520+ return nil , newParserError (it , p .name ,
521+ "Unexpected token %v, expected '=' or '<='" , it )
517522 }
518523
519524 if it .Type () == token .Assign {
@@ -601,7 +606,8 @@ func (p *Parser) parseAssignCmdOut(name scanner.Token) (ast.Node, error) {
601606 it := p .next ()
602607
603608 if it .Type () != token .Ident && it .Type () != token .Arg && it .Type () != token .Variable && it .Type () != token .LParen {
604- return nil , errors .NewError ("Invalid token %v. Expected command or function invocation" , it )
609+ return nil , newParserError (it , p .name ,
610+ "Invalid token %v. Expected command or function invocation" , it )
605611 }
606612
607613 if it .Type () == token .LParen {
@@ -820,7 +826,8 @@ func (p *Parser) parseFnDecl(it scanner.Token) (ast.Node, error) {
820826 }
821827
822828 if it .Type () != token .LParen {
823- return nil , errors .NewError ("Unexpected token %v. Expected '('" , it )
829+ return nil , newParserError (it , p .name ,
830+ "Unexpected token %v. Expected '('" , it )
824831 }
825832
826833 args , err := p .parseFnArgs ()
@@ -836,7 +843,8 @@ func (p *Parser) parseFnDecl(it scanner.Token) (ast.Node, error) {
836843 it = p .next ()
837844
838845 if it .Type () != token .LBrace {
839- return nil , errors .NewError ("Unexpected token %v. Expected '{'" , it )
846+ return nil , newParserError (it , p .name ,
847+ "Unexpected token %v. Expected '{'" , it )
840848 }
841849
842850 p .openblocks ++
@@ -935,13 +943,14 @@ func (p *Parser) parseBindFn(bindIt scanner.Token) (ast.Node, error) {
935943 nameIt := p .next ()
936944
937945 if nameIt .Type () != token .Ident {
938- return nil , errors .NewError ("Expected identifier, but found '%v'" , nameIt )
946+ return nil , newParserError (nameIt , p .name ,
947+ "Expected identifier, but found '%v'" , nameIt )
939948 }
940949
941950 cmdIt := p .next ()
942951
943952 if cmdIt .Type () != token .Ident {
944- return nil , errors . NewError ( "Expected identifier, but found '%v'" , cmdIt )
953+ return nil , newParserError ( cmdIt , p . name , "Expected identifier, but found '%v'" , cmdIt )
945954 }
946955
947956 if p .peek ().Type () == token .Semicolon {
@@ -1075,21 +1084,24 @@ func (p *Parser) parseFor(it scanner.Token) (ast.Node, error) {
10751084 it = p .next ()
10761085
10771086 if it .Type () != token .Ident || it .Value () != "in" {
1078- return nil , errors .NewError ("Expected 'in' but found %q" , it )
1087+ return nil , newParserError (it , p .name ,
1088+ "Expected 'in' but found %q" , it )
10791089 }
10801090
10811091 it = p .next ()
10821092
10831093 if it .Type () != token .Variable {
1084- return nil , errors .NewError ("Expected variable but found %q" , it )
1094+ return nil , newParserError (it , p .name ,
1095+ "Expected variable but found %q" , it )
10851096 }
10861097
10871098 forStmt .SetInVar (it .Value ())
10881099forBlockParse:
10891100 it = p .peek ()
10901101
10911102 if it .Type () != token .LBrace {
1092- return nil , errors .NewError ("Expected '{' but found %q" , it )
1103+ return nil , newParserError (it , p .name ,
1104+ "Expected '{' but found %q" , it )
10931105 }
10941106
10951107 blockPos := it .FileInfo
@@ -1169,12 +1181,14 @@ func (p *Parser) parseBlock(lineStart, columnStart int) (*ast.BlockNode, error)
11691181 case token .LBrace :
11701182 p .ignore ()
11711183
1172- return nil , errors .NewError ("Parser error: Unexpected '{'" )
1184+ return nil , newParserError (it , p .name ,
1185+ "Unexpected '{'" )
11731186 case token .RBrace :
11741187 p .ignore ()
11751188
11761189 if p .openblocks <= 0 {
1177- return nil , errors .NewError ("Parser error: No block open for close" )
1190+ return nil , newParserError (it , p .name ,
1191+ "No block open for close" )
11781192 }
11791193
11801194 p .openblocks --
0 commit comments