summaryrefslogtreecommitdiff
path: root/src/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c20
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
);
}