diff options
| author | hachem <im@hachem.wtf> | 2026-09-09 05:14:44 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-09-09 05:14:44 +0200 |
| commit | 8b76d35b0a045e0a3277be422513b938ef33dcce (patch) | |
| tree | b876d92ba3afb810e38f3f83792fc3fb849dd457 /src/parser.c | |
| parent | b9eff51ee157b22d8fa46aeecac7b95d5ed345d9 (diff) | |
feat: fasm backend
Diffstat (limited to 'src/parser.c')
| -rw-r--r-- | src/parser.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/parser.c b/src/parser.c index ddaee72..ae7c1b3 100644 --- a/src/parser.c +++ b/src/parser.c @@ -552,6 +552,14 @@ static bool parse_if(struct Parser* parser, struct Statement* out) static bool parse_while(struct Parser* parser, struct Statement* out) { + // an optional .name makes the loop's asm labels readable (.name / .name_end) + struct Token name = { 0 }; + bool named = match_token(parser, TOKEN_DOT); + if (named && !consume(parser, TOKEN_IDENTIFIER, "expected a loop name after '.'")) + return false; + if (named) + name = parser->previous; + struct Expr* left; struct Token comparison; struct Expr* right; @@ -568,6 +576,8 @@ static bool parse_while(struct Parser* parser, struct Statement* out) } out->kind = STATEMENT_WHILE; + out->loop.named = named; + out->loop.name = name; out->loop.left = left; out->loop.comparison = comparison; out->loop.right = right; |
