diff options
Diffstat (limited to 'src/ast.c')
-rw-r--r-- | src/ast.c | 56 |
1 files changed, 42 insertions, 14 deletions
@@ -67,18 +67,24 @@ ast_node_destroy(ast_node_t *node) free(node); } -void -ast_node_init_return_stmt(ast_node_t *node, ast_node_t *argument) +ast_node_t * +ast_node_new_return_stmt(ast_node_t *argument) { + ast_node_t *node = ast_node_new(); + *node = (ast_node_t){ .kind = AST_RETURN_STMT, .data = { .return_stmt = { .argument = argument } }, }; + + return node; } -void -ast_node_init_function_declaration(ast_node_t *node, string_view_t function_name, type_t return_type, vector_t *body) +ast_node_t * +ast_node_new_function_declaration(string_view_t function_name, type_t return_type, vector_t *body) { + ast_node_t *node = ast_node_new(); + *node = (ast_node_t){ .kind = AST_FUNCTION_DECLARATION, .data = { @@ -89,11 +95,15 @@ ast_node_init_function_declaration(ast_node_t *node, string_view_t function_name } }, }; + + return node; } -void -ast_literal_integer_create(ast_node_t *node, uint32_t number) +ast_node_t * +ast_node_new_literal_integer(uint32_t number) { + ast_node_t *node = ast_node_new(); + *node = (ast_node_t){ .kind = AST_LITERAL, .data = { @@ -103,11 +113,15 @@ ast_literal_integer_create(ast_node_t *node, uint32_t number) }, }, }; + + return node; } -void -ast_node_init_binary_operation(ast_node_t *node, ast_binary_operation_kind_t kind, ast_node_t *left, ast_node_t *right) +ast_node_t * +ast_node_new_binary_operation(ast_binary_operation_kind_t kind, ast_node_t *left, ast_node_t *right) { + ast_node_t *node = ast_node_new(); + *node = (ast_node_t){ .kind = AST_BINARY_OPERATION, .data = { @@ -118,11 +132,15 @@ ast_node_init_binary_operation(ast_node_t *node, ast_binary_operation_kind_t kin }, }, }; + + return node; } -void -ast_node_init_variable_declaration(ast_node_t *node, string_view_t variable_name, type_t type, ast_node_t *value) +ast_node_t * +ast_node_new_variable_declaration(string_view_t variable_name, type_t type, ast_node_t *value) { + ast_node_t *node = ast_node_new(); + *node = (ast_node_t){ .kind = AST_VARIABLE_DECLARATION, .data = { @@ -133,11 +151,15 @@ ast_node_init_variable_declaration(ast_node_t *node, string_view_t variable_name }, }, }; + + return node; } -void -ast_node_init_variable_assignment(ast_node_t *node, ast_identifier_t *identifier, ast_node_t *expression) +ast_node_t * +ast_node_new_variable_assignment(ast_identifier_t *identifier, ast_node_t *expression) { + ast_node_t *node = ast_node_new(); + *node = (ast_node_t){ .kind = AST_VARIABLE_ASSIGNMENT, .data = { @@ -147,13 +169,19 @@ ast_node_init_variable_assignment(ast_node_t *node, ast_identifier_t *identifier }, }, }; + + return node; } -void -ast_node_init_variable(ast_node_t *node, ast_identifier_t *identifier) +ast_node_t * +ast_node_new_variable(ast_identifier_t *identifier) { + ast_node_t *node = ast_node_new(); + *node = (ast_node_t){ .kind = AST_VARIABLE, .data = { .variable = { .identifier = identifier } }, }; + + return node; } |