diff options
-rw-r--r-- | src/ast.c | 9 | ||||
-rw-r--r-- | src/ast.h | 16 | ||||
-rw-r--r-- | src/gas_assembly_generator.c | 2 | ||||
-rw-r--r-- | test/parser_test.c | 6 |
4 files changed, 18 insertions, 15 deletions
@@ -77,10 +77,12 @@ ast_node_init_return_stmt(ast_node_t *node, ast_node_t *argument) } void -ast_node_init_function_declaration(ast_node_t *node, string_view_t name, type_t return_type, vector_t *body) +ast_node_init_function_declaration(ast_node_t *node, string_view_t function_name, type_t return_type, vector_t *body) { node->kind = AST_FUNCTION_DECLARATION; - node->data = (ast_node_data_t){ .function = { .name = name, .return_type = return_type, .body = body } }; + node->data = (ast_node_data_t){ + .function = { .identifier = { .name = function_name }, .return_type = return_type, .body = body } + }; } void @@ -101,7 +103,8 @@ void ast_node_init_variable_declaration(ast_node_t *node, string_view_t variable_name, type_t type, ast_node_t *value) { node->kind = AST_VARIABLE_DECLARATION; - node->data = (ast_node_data_t){ .variable = { .name = variable_name, .type = type, .value = value } }; + node->data = + (ast_node_data_t){ .variable = { .identifier = { .name = variable_name }, .type = type, .value = value } }; } void @@ -32,9 +32,14 @@ typedef struct ast_return_stmt_t ast_node_t *argument; } ast_return_stmt_t; -typedef struct ast_function_declaration_t +typedef struct ast_identifier_t { string_view_t name; +} ast_identifier_t; + +typedef struct ast_function_declaration_t +{ + ast_identifier_t identifier; type_t return_type; vector_t *body; } ast_function_declaration_t; @@ -70,14 +75,9 @@ typedef struct ast_literal_t ast_literal_value_t value; } ast_literal_t; -typedef struct ast_identifier_t -{ - string_view_t name; -} ast_identifier_t; - typedef struct ast_variable_declaration_t { - string_view_t name; + ast_identifier_t identifier; type_t type; ast_node_t *value; } ast_variable_declaration_t; @@ -117,7 +117,7 @@ ast_node_destroy(ast_node_t *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); void -ast_node_init_function_declaration(ast_node_t *node, string_view_t name, type_t return_type, vector_t *body); +ast_node_init_function_declaration(ast_node_t *node, string_view_t function_name, type_t return_type, vector_t *body); void ast_node_init_identifier(ast_node_t *node, string_view_t name); void diff --git a/src/gas_assembly_generator.c b/src/gas_assembly_generator.c index 34864dd..ea76c5f 100644 --- a/src/gas_assembly_generator.c +++ b/src/gas_assembly_generator.c @@ -71,7 +71,7 @@ gas_assembly_generator_compile_function(gas_assembly_generator_t *gen, ast_funct { assert(func); - if (!string_view_eq(func->name, string_view_from_str("main"))) { + if (!string_view_eq(func->identifier.name, string_view_from_str("main"))) { fprintf(stderr, "[ERROR]: no main function has been defined!\n"); exit(EXIT_FAILURE); } diff --git a/test/parser_test.c b/test/parser_test.c index 251054d..40c0198 100644 --- a/test/parser_test.c +++ b/test/parser_test.c @@ -71,7 +71,7 @@ test_parse_function(const MunitParameter params[], void *user_data_or_fixture) char actual[5]; - string_view_to_str(&ast_function->data.function.name, actual); + string_view_to_str(&ast_function->data.function.identifier.name, actual); assert_string_equal("main", actual); assert_int(AST_FUNCTION_DECLARATION, ==, ast_function->kind); @@ -105,14 +105,14 @@ test_parse_variable_definition(const MunitParameter params[], void *user_data_or char actual[5]; - string_view_to_str(&ast_function->data.function.name, actual); + string_view_to_str(&ast_function->data.function.identifier.name, actual); assert_string_equal("main", actual); assert_int(AST_FUNCTION_DECLARATION, ==, ast_function->kind); ast_node_t *ast_variable = vector_at(ast_function->data.function.body, 0); assert_int(AST_VARIABLE_DECLARATION, ==, ast_variable->kind); - assert_string_view_equal("variable", ast_variable->data.variable.name); + assert_string_view_equal("variable", ast_variable->data.variable.identifier.name); ast_node_t *ast_return = vector_at(ast_function->data.function.body, 1); |