aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/parse.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-14 23:30:18 +0900
committernsfisis <nsfisis@gmail.com>2026-02-14 23:30:18 +0900
commitef0cb4dbdc1c036f70f94a905cbacae9be5abf5e (patch)
tree39e612997349dd66050fe5820fefc4da65457821 /src/parse.c
parent5a1789c2de30ec503e488ca77d664199a545a04a (diff)
downloadducc-ef0cb4dbdc1c036f70f94a905cbacae9be5abf5e.tar.gz
ducc-ef0cb4dbdc1c036f70f94a905cbacae9be5abf5e.tar.zst
ducc-ef0cb4dbdc1c036f70f94a905cbacae9be5abf5e.zip
refactor: shallow copy typedef-ed types to remove work-around
Diffstat (limited to 'src/parse.c')
-rw-r--r--src/parse.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/src/parse.c b/src/parse.c
index aeafabd..494e4a2 100644
--- a/src/parse.c
+++ b/src/parse.c
@@ -1209,15 +1209,12 @@ static Type* parse_function_declarator_suffix(Parser* p, Type* ty) {
next_token(p); // skip '('
AstNode* params;
- // FIXME: save and restore ty->storage_class because it will be modified somewhere for some reason.
- StorageClass FIXME_storage_class = ty->storage_class;
if (consume_token_if(p, TokenKind_paren_r)) {
params = ast_new_list(1);
} else {
params = parse_parameter_type_list(p);
expect(p, TokenKind_paren_r);
}
- ty->storage_class = FIXME_storage_class;
return type_new_func(ty, params);
}
@@ -1693,7 +1690,7 @@ static Type* parse_declaration_specifiers(Parser* p) {
}
next_token(p);
int typedef_idx = find_typedef(p, tok->value.string);
- ty = p->typedefs->as.list->items[typedef_idx].ty;
+ ty = type_dup(p->typedefs->as.list->items[typedef_idx].ty);
type_specifiers += TypeSpecifierMask_typedef_name;
}
// type-specifier-qualifier > type-qualifier
@@ -2047,7 +2044,7 @@ static Type* parse_specifier_qualifier_list(Parser* p) {
}
next_token(p);
int typedef_idx = find_typedef(p, tok->value.string);
- ty = p->typedefs->as.list->items[typedef_idx].ty;
+ ty = type_dup(p->typedefs->as.list->items[typedef_idx].ty);
type_specifiers += TypeSpecifierMask_typedef_name;
}
// type-specifier-qualifier > type-qualifier
@@ -2075,6 +2072,7 @@ static Type* parse_specifier_qualifier_list(Parser* p) {
ty = ty_;
}
+ ty->storage_class = StorageClass_unspecified;
return ty;
}