From 9420332149972a77f63c55d4ed44984cd5900f95 Mon Sep 17 00:00:00 2001 From: Justin Meza Date: Thu, 23 Oct 2014 22:57:10 -0700 Subject: [PATCH] fix induction variable update bug identified by LeartS --- interpreter.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/interpreter.c b/interpreter.c index a409219..61f3a4f 100644 --- a/interpreter.c +++ b/interpreter.c @@ -3471,12 +3471,19 @@ ReturnObject *interpretLoopStmtNode(StmtNode *node, * variable. */ if (stmt->update->type == ET_OP) { + ValueObject *updated = NULL; var = getScopeValue(scope, outer, stmt->var); OpExprNode *op = (OpExprNode *)stmt->update->expr; if (op->type == OP_ADD) - var->data.i++; + updated = createIntegerValueObject(var->data.i + 1); else if (op->type == OP_SUB) - var->data.i--; + updated = createIntegerValueObject(var->data.i - 1); + + if (!updateScopeValue(scope, outer, stmt->var, updated)) { + deleteValueObject(updated); + deleteScopeObject(outer); + return NULL; + } } else { ValueObject *update = interpretExprNode(stmt->update, outer);