Skip to content

Commit 6114379

Browse files
gh-35: BREAK errors on failure.
1 parent 5bc1c3f commit 6114379

1 file changed

Lines changed: 12 additions & 1 deletion

File tree

src/interpreter.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2113,10 +2113,21 @@ static ExecResult exec_stmt(Interpreter* interp, Stmt* stmt, Env* env, LabelMap*
21132113
value_free(v);
21142114
return make_error("BREAK requires INT argument", stmt->line, stmt->column);
21152115
}
2116+
int64_t bc = v.as.i;
2117+
if (bc <= 0) {
2118+
value_free(v);
2119+
return make_error("BREAK count must be > 0", stmt->line, stmt->column);
2120+
}
2121+
if (bc > interp->loop_depth) {
2122+
char buf[128];
2123+
snprintf(buf, sizeof(buf), "BREAK count %lld exceeds current loop nesting depth %d", (long long)bc, interp->loop_depth);
2124+
value_free(v);
2125+
return make_error(buf, stmt->line, stmt->column);
2126+
}
21162127
ExecResult res;
21172128
res.status = EXEC_BREAK;
21182129
res.value = value_null();
2119-
res.break_count = (int)v.as.i;
2130+
res.break_count = (int)bc;
21202131
res.jump_index = -1;
21212132
res.error = NULL;
21222133
res.error_line = 0;

0 commit comments

Comments
 (0)