diff options
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 25 |
1 files changed, 15 insertions, 10 deletions
@@ -726,17 +726,22 @@ static bool eval_expr_ptr_at_index(Evaluator *ev, Expression *e, void **ptr, Typ static Value *ident_val(Identifier i) { switch (i->decl_kind) { - case IDECL_FOR: { - ForExpr *fo = i->for_; - Value *v = *(Value **)arr_last(fo->val_stack); - if (i == fo->index) { - if (fo->value) - v = &v->tuple[0]; - } else { - if (fo->index) - v = &v->tuple[1]; + case IDECL_EXPR: { + switch (i->decl_expr->kind) { + case EXPR_FOR: { + ForExpr *fo = i->decl_expr->for_; + Value *v = *(Value **)arr_last(fo->val_stack); + if (i == fo->index) { + if (fo->value) + v = &v->tuple[0]; + } else { + if (fo->index) + v = &v->tuple[1]; + } + return v; + } + default: assert(0); return NULL; } - return v; } case IDECL_DECL: { Declaration *decl = i->decl; |