@@ -373,7 +373,22 @@ func (p *parser) parseClosure() Node {
373
373
}
374
374
375
375
func (p * parser ) parseArrayExpression (token Token ) Node {
376
- nodes := p .parseList ("[" , "]" )
376
+ nodes := make ([]Node , 0 )
377
+
378
+ p .expect (Bracket , "[" )
379
+ for ! p .current .Is (Bracket , "]" ) && p .err == nil {
380
+ if len (nodes ) > 0 {
381
+ p .expect (Operator , "," )
382
+ if p .current .Is (Bracket , "]" ) {
383
+ goto end
384
+ }
385
+ }
386
+ node := p .parseExpression (0 )
387
+ nodes = append (nodes , node )
388
+ }
389
+ end:
390
+ p .expect (Bracket , "]" )
391
+
377
392
return & ArrayNode {Base : Loc (token .Location ), Nodes : nodes }
378
393
}
379
394
@@ -384,6 +399,12 @@ func (p *parser) parseMapExpression(token Token) Node {
384
399
for ! p .current .Is (Bracket , "}" ) && p .err == nil {
385
400
if len (nodes ) > 0 {
386
401
p .expect (Operator , "," )
402
+ if p .current .Is (Bracket , "}" ) {
403
+ goto end
404
+ }
405
+ if p .current .Is (Operator , "," ) {
406
+ p .error ("unexpected token %v" , p .current )
407
+ }
387
408
}
388
409
389
410
var key Node
@@ -407,6 +428,7 @@ func (p *parser) parseMapExpression(token Token) Node {
407
428
nodes = append (nodes , & PairNode {Base : Loc (token .Location ), Key : key , Value : node })
408
429
}
409
430
431
+ end:
410
432
p .expect (Bracket , "}" )
411
433
412
434
return & MapNode {Base : Loc (token .Location ), Pairs : nodes }
@@ -526,21 +548,16 @@ func isAlphabetic(r rune) bool {
526
548
}
527
549
528
550
func (p * parser ) parseArguments () []Node {
529
- return p .parseList ("(" , ")" )
530
- }
531
-
532
- func (p * parser ) parseList (start , end string ) []Node {
533
- p .expect (Bracket , start )
534
-
551
+ p .expect (Bracket , "(" )
535
552
nodes := make ([]Node , 0 )
536
- for ! p .current .Is (Bracket , end ) && p .err == nil {
553
+ for ! p .current .Is (Bracket , ")" ) && p .err == nil {
537
554
if len (nodes ) > 0 {
538
555
p .expect (Operator , "," )
539
556
}
540
557
node := p .parseExpression (0 )
541
558
nodes = append (nodes , node )
542
559
}
560
+ p .expect (Bracket , ")" )
543
561
544
- p .expect (Bracket , end )
545
562
return nodes
546
563
}
0 commit comments