diff options
Diffstat (limited to 'src/parser.c')
-rw-r--r-- | src/parser.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/parser.c b/src/parser.c index b956c4e..b1e6a1f 100644 --- a/src/parser.c +++ b/src/parser.c @@ -70,12 +70,12 @@ parser_parse_type(parser_t *parser) return TYPE_I32; } - fprintf(stderr, "[ERROR]: expected type 'i32' but got '"SVFMT"'\n", SVARG(&token.value)); + fprintf(stderr, "[ERROR]: expected type 'i32' but got '"SVFMT"'\n", SVARG(&token.value)); exit(EXIT_FAILURE); } -static ast_return_stmt_t -parser_parse_return_stmt(parser_t *parser) +void +parser_parse_return_stmt(parser_t *parser, ast_node_t *node) { expected_token(parser, TOKEN_OCURLY); token_t return_keyword_token = expected_token(parser, TOKEN_NAME); @@ -93,11 +93,11 @@ parser_parse_return_stmt(parser_t *parser) char number_as_str[number_token.value.size]; string_view_to_str(&number_token.value, number_as_str); - return ast_return_stmt_create(atoi(number_as_str)); + ast_node_init_return_stmt(node, atoi(number_as_str)); } -ast_function_t -parser_parse_function(parser_t *parser) +void +parser_parse_function_declaration(parser_t *parser, ast_node_t *node) { token_t func_name_token = expected_token(parser, TOKEN_NAME); expected_token(parser, TOKEN_OPAREN); @@ -105,9 +105,13 @@ parser_parse_function(parser_t *parser) expected_token(parser, TOKEN_COLON); type_t return_type = parser_parse_type(parser); - return ast_function_create( + ast_node_t *return_node = ast_node_new(); + parser_parse_return_stmt(parser, return_node); + + ast_node_init_function_declaration( + node, func_name_token.value, return_type, - parser_parse_return_stmt(parser) + return_node ); } |