|
@@ -2941,9 +2941,9 @@ parse_call_expr :: proc(p: ^Parser, operand: ^ast.Expr) -> ^ast.Expr {
|
|
|
p.expr_level += 1
|
|
|
open := expect_token(p, .Open_Paren)
|
|
|
|
|
|
+ seen_ellipsis := false
|
|
|
for p.curr_tok.kind != .Close_Paren &&
|
|
|
- p.curr_tok.kind != .EOF &&
|
|
|
- ellipsis.pos.line == 0 {
|
|
|
+ p.curr_tok.kind != .EOF {
|
|
|
|
|
|
if p.curr_tok.kind == .Comma {
|
|
|
error(p, p.curr_tok.pos, "expected an expression not ,")
|
|
@@ -2972,10 +2972,16 @@ parse_call_expr :: proc(p: ^Parser, operand: ^ast.Expr) -> ^ast.Expr {
|
|
|
fv.value = value
|
|
|
|
|
|
arg = fv
|
|
|
+ } else if seen_ellipsis {
|
|
|
+ error(p, arg.pos, "Positional arguments are not allowed after '..'")
|
|
|
}
|
|
|
|
|
|
append(&args, arg)
|
|
|
|
|
|
+ if ellipsis.pos.line != 0 {
|
|
|
+ seen_ellipsis = true
|
|
|
+ }
|
|
|
+
|
|
|
if !allow_token(p, .Comma) {
|
|
|
break
|
|
|
}
|