From 53946c982cb3290a25f7c8529ef1399f0635ef37 Mon Sep 17 00:00:00 2001 From: hachem Date: Sun, 30 Aug 2026 12:14:04 +0200 Subject: add: parse labels and syscalls --- src/main.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 2f5f4d1..a44350e 100644 --- a/src/main.c +++ b/src/main.c @@ -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; } } } -- cgit v1.3