diff options
| author | hachem <im@hachem.wtf> | 2026-08-30 12:14:04 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-08-30 12:14:04 +0200 |
| commit | 53946c982cb3290a25f7c8529ef1399f0635ef37 (patch) | |
| tree | 969bc78c304e13d733b794ffc98d44bf44b53621 /src/main.c | |
| parent | 6532b074e5c1db4a1c32298cc338a1a533208641 (diff) | |
add: parse labels and syscalls
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 27 |
1 files changed, 20 insertions, 7 deletions
@@ -62,14 +62,27 @@ int main(int argc, char** argv) for (size_t s = 0; s < proc.body_count; s += 1) { struct Statement statement = proc.body[s]; - if (statement.kind == STATEMENT_ASSIGN) + switch (statement.kind) { - struct AssignStatement assign = statement.assign; - printf(" %s%.*s %.*s %.*s\n", - assign.target_deref ? "^" : "", - (int)assign.target.length, assign.target.start, - (int)assign.op.length, assign.op.start, - (int)assign.value.length, assign.value.start); + case STATEMENT_ASSIGN: + { + struct AssignStatement assign = statement.assign; + printf(" %s%.*s %.*s %.*s\n", + assign.target_deref ? "^" : "", + (int)assign.target.length, assign.target.start, + (int)assign.op.length, assign.op.start, + (int)assign.value.length, assign.value.start); + break; + } + case STATEMENT_LABEL: + printf(" %.*s:\n", (int)statement.label.name.length, statement.label.name.start); + break; + case STATEMENT_GOTO: + printf(" goto %.*s\n", (int)statement.jump.label.length, statement.jump.label.start); + break; + case STATEMENT_SYSCALL: + printf(" syscall\n"); + break; } } } |
