diff options
| -rw-r--r-- | compile.c | 6 | ||||
| -rw-r--r-- | parse.c | 8 |
2 files changed, 9 insertions, 5 deletions
@@ -644,9 +644,9 @@ CORD compile(env_t *env, ast_t *ast) // Pass 2: assign positional args // Pass 3: compile and typecheck each arg table_t arg_bindings = {}; - for (arg_ast_t *arg = args; arg; arg = arg->next) { - if (arg->name) - Table_str_set(&arg_bindings, arg->name, arg->value); + for (arg_ast_t *call_arg = args; call_arg; call_arg = call_arg->next) { + if (call_arg->name) + Table_str_set(&arg_bindings, call_arg->name, call_arg->value); } for (arg_ast_t *call_arg = args; call_arg; call_arg = call_arg->next) { if (call_arg->name) @@ -1177,8 +1177,10 @@ ast_t *parse_method_call_suffix(parse_ctx_t *ctx, ast_t *self) { const char *arg_start = pos; const char *name = get_id(&pos); whitespace(&pos); - if (!name || !match(&pos, "=")) + if (!name || !match(&pos, "=")) { + name = NULL; pos = arg_start; + } ast_t *arg = optional(ctx, &pos, parse_expr); if (!arg) { @@ -1214,8 +1216,10 @@ ast_t *parse_fncall_suffix(parse_ctx_t *ctx, ast_t *fn, bool is_extern) { const char *arg_start = pos; const char *name = get_id(&pos); whitespace(&pos); - if (!name || !match(&pos, "=")) + if (!name || !match(&pos, "=")) { + name = NULL; pos = arg_start; + } ast_t *arg = optional(ctx, &pos, parse_expr); if (!arg) { |
