diff options
author | Quinn Stephens <quinn@osmora.org> | 2024-11-07 16:59:19 -0500 |
---|---|---|
committer | Quinn Stephens <quinn@osmora.org> | 2024-11-07 16:59:19 -0500 |
commit | 6ab9c3732793b6fd40e6388cf1b08756194c0ea6 (patch) | |
tree | e7ae86e1bad944192f0b6fd130cb7d84afa4f180 /compiler/parser/proc.c | |
parent | 063c40584ae78a396b558a5e2a08e3d871450c0b (diff) |
[compiler] Parse return statementsmain
Laid groundwork for statements and AST trees.
Currently return values are not supported, expression parsing must be implemented first.
Also stopped dumping parsed type definitions.
Signed-off-by: Quinn Stephens <quinn@osmora.org>
Diffstat (limited to 'compiler/parser/proc.c')
-rw-r--r-- | compiler/parser/proc.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/compiler/parser/proc.c b/compiler/parser/proc.c index bbbdad1..b32f5e9 100644 --- a/compiler/parser/proc.c +++ b/compiler/parser/proc.c @@ -7,6 +7,7 @@ #include <stdbool.h> #include "debug.h" #include "parser/proc.h" +#include "parser/stmt.h" #include "parser/type.h" #include "parser.h" @@ -119,26 +120,29 @@ parse_proc(struct parser *ctx) } } - /* Add procedure to parser's registry */ - hashmap_add(ctx->procs, &proc->hashmap_entry); - /* We are finished now if this is just a declaration */ if (ctx->tok.kind == TK_SEMICOLON) { + proc->node = NULL; + + /* Add procedure to parser's registry */ + hashmap_add(ctx->procs, &proc->hashmap_entry); + next_token(ctx); return; } if (ctx->tok.kind != TK_LBRACE) { + proc->node = NULL; tok_error(&ctx->tok, "Expected \";\" or \"{\"\n"); return; } - /* TODO: Parse body/code */ + /* Allocate AST root node for body */ + proc->node = ast_new_node(NK_PROCEDURE); - if (next_token(ctx)->kind != TK_RBRACE) { - tok_error(&ctx->tok, "Expected \"}\" after procedure body\n"); - return; - } + /* Parse procedure body (code) */ + parse_stmt_block(ctx, proc->node, proc); - next_token(ctx); + /* Add procedure to parser's registry */ + hashmap_add(ctx->procs, &proc->hashmap_entry); } |