aboutsummaryrefslogtreecommitdiff
path: root/src/tools/zc0.c
diff options
context:
space:
mode:
authorGravatar zinc <zinc@downsta.ir> 2026-10-14 16:24:55 +0330
committerGravatar zinc <zinc@downsta.ir> 2026-10-14 16:24:55 +0330
commit886fa9c0b7ad3c0316e85de1b2c87c54a3681b12 (patch)
treec586a0d5428cbdb019b80f5a92a8ffd80c0d962d /src/tools/zc0.c
parentrt.zdiv: INT_MIN / -1 is INT_MIN and % is 0 in software division too, so zc0 ... (diff)
parentmerge bounds checking (diff)
Merge branch 'main' into work/spec
Diffstat (limited to 'src/tools/zc0.c')
-rw-r--r--src/tools/zc0.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/tools/zc0.c b/src/tools/zc0.c
index e673eee..81561ce 100644
--- a/src/tools/zc0.c
+++ b/src/tools/zc0.c
@@ -476,7 +476,7 @@ static int notatype(void)
static const char *w[] = { "return", "if", "else", "while", "for", "do", "break", "continue",
"let", "var", "fn", "const", "enhance", "struct", "enum", "asm", "switch", "case",
"default", "immediate", "type", "include", "as", "in", "new", "sizeof", "typeof",
- "o3", "unchecked", 0 };
+ "o3", "unchecked", "unbounded", 0 };
int i;
if (tk != T_ID) return 0;
for (i = 0; w[i]; i++) if (!strcmp(ts, w[i])) return 1;
@@ -782,7 +782,7 @@ static void stmt(void)
expect(";"); return;
}
}
- if (accept("unchecked")) { stmt(); return; }
+ if (accept("unchecked") || accept("unbounded")) { stmt(); return; }
if (accept("if")) {
expect("("); expr(); rval(); ftest(); expect(")");
a = here; lit(0); op(O_JZ); stmt();
@@ -1027,6 +1027,7 @@ static void top1(void)
}
if (accept("embed")) { embeddecl(0); return; }
{
+ if (accept("unbounded")) { if (accept(";")) return; top1(); return; }
if (accept("unchecked")) { top1(); return; }
if (accept("fn")) { fndef(0, 0); return; }
if (accept("const")) { optype(); do { char *n = ident(); if (dsn && !dnm[0]) strcpy(dnm, n); expect("="); add(n, K_CONST, cexpr()); } while (accept(",")); expect(";"); return; }