summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2019-11-08 13:02:54 -0500
committerLeo Tenenbaum <pommicket@gmail.com>2019-11-08 13:02:54 -0500
commit6800a6691602aa3b38fc8fea182bf4d1cef092ef (patch)
tree39ff92fe777dd19c8f2e44869e7025a572831189 /eval.c
parent15d0f9a50bcd19e4d1efdd3574bc48bc712d4471 (diff)
fixed, e.g. each x := x
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/eval.c b/eval.c
index e2beb26..90f29c6 100644
--- a/eval.c
+++ b/eval.c
@@ -1176,7 +1176,6 @@ static bool eval_expr(Evaluator *ev, Expression *e, Value *v) {
} break;
case EXPR_EACH: {
EachExpr *ea = &e->each;
- if (!each_enter(e, 0)) return false;
if (ea->flags & EACH_IS_RANGE) {
Value from, to;
Value stepval;
@@ -1192,6 +1191,7 @@ static bool eval_expr(Evaluator *ev, Expression *e, Value *v) {
Value x = from;
Value *index_val;
Value *value_val;
+ if (!each_enter(e, 0)) return false;
if (ea->index) {
IdentDecl *idecl = ident_decl(ea->index);
idecl->flags |= IDECL_HAS_VAL;
@@ -1237,6 +1237,7 @@ static bool eval_expr(Evaluator *ev, Expression *e, Value *v) {
if (!eval_expr(ev, ea->of, &of)) return false;
Value *index_val, *value_val;
Value i, val;
+ if (!each_enter(e, 0)) return false;
if (ea->index) {
IdentDecl *idecl = ident_decl(ea->index);
idecl->flags |= IDECL_HAS_VAL;
@@ -1318,7 +1319,7 @@ static bool eval_expr(Evaluator *ev, Expression *e, Value *v) {
case EXPR_IDENT: {
IdentDecl *idecl = ident_decl(e->ident);
bool is_decl = idecl->kind == IDECL_DECL;
- Declaration *d;
+ Declaration *d = NULL;
if (is_decl) {
d = idecl->decl;
if (!types_decl(ev->typer, d)) return false;
@@ -1331,7 +1332,6 @@ static bool eval_expr(Evaluator *ev, Expression *e, Value *v) {
if (!eval_expr(ev, &d->expr, &d->val)) return false;
d->flags |= DECL_FLAG_FOUND_VAL;
}
-
int index = ident_index_in_decl(e->ident, d);
assert(index != -1);
if (e->type.kind == TYPE_TYPE) {