aboutsummaryrefslogtreecommitdiff
path: root/src/parser.c
diff options
context:
space:
mode:
authorMustafa Quraish <[email protected]>2022-02-04 01:31:55 -0500
committerMustafa Quraish <[email protected]>2022-02-04 01:31:55 -0500
commitcaf131c26deaf363b2fce95a7fda676729eb2e65 (patch)
tree75d6aa001969645fdbbe9a1890b85f63ce361f9f /src/parser.c
parentMinor fixes, rearranging, whitespace trimming. No functional changes. (diff)
downloadcup-caf131c26deaf363b2fce95a7fda676729eb2e65.tar.xz
cup-caf131c26deaf363b2fce95a7fda676729eb2e65.zip
Some minor bug fixes
(1) Return correct size for unions (2) Make sure function name identifier doesn't exist (3) Assign `<anonymous>` as display name for nested compound types
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/parser.c b/src/parser.c
index 30d080b..e917564 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -873,10 +873,14 @@ Node *parse_func(Lexer *lexer)
Token token;
token = assert_token(Lexer_next(lexer), TOKEN_FN);
+ token = assert_token(Lexer_next(lexer), TOKEN_IDENTIFIER);
+ if (identifier_exists(&token))
+ die_location(token.loc, "Function name already exists as an identifier");
+
Node *func = Node_new(AST_FUNC);
push_new_function(func);
- token = assert_token(Lexer_next(lexer), TOKEN_IDENTIFIER);
+
func->func.name = token.value.as_string;
parse_func_args(lexer, func);
@@ -922,6 +926,8 @@ Type *parse_struct_union_declaration(Lexer *lexer, bool is_global) {
struct_type->struct_name = token.value.as_string;
push_struct_definition(struct_type);
Lexer_next(lexer);
+ } else {
+ struct_type->struct_name = "<anonymous>";
}
assert_token(Lexer_next(lexer), TOKEN_OPEN_BRACE);