diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-07 19:08:21 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-07 19:08:37 +0900 |
| commit | 3752b69fe3424b949bcb61c222265ee6a435c994 (patch) | |
| tree | b878d0e67fe71c48db3dd45d4f2962d3413b4040 /src/parse.c | |
| parent | 0ae64ed2c00f66c7f3ddec8689169bacafff87ea (diff) | |
| download | ducc-3752b69fe3424b949bcb61c222265ee6a435c994.tar.gz ducc-3752b69fe3424b949bcb61c222265ee6a435c994.tar.zst ducc-3752b69fe3424b949bcb61c222265ee6a435c994.zip | |
feat: workaround to compile Lua 5.5
Diffstat (limited to 'src/parse.c')
| -rw-r--r-- | src/parse.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/parse.c b/src/parse.c index 51a85ff..aeafabd 100644 --- a/src/parse.c +++ b/src/parse.c @@ -604,7 +604,8 @@ static bool is_type_token(Parser* p, Token* tok) { tok->kind == TokenKind_keyword_typeof_unqual || tok->kind == TokenKind_keyword_const || tok->kind == TokenKind_keyword_restrict || tok->kind == TokenKind_keyword_volatile || tok->kind == TokenKind_keyword__Atomic || tok->kind == TokenKind_keyword_alignas || - tok->kind == TokenKind_keyword_inline || tok->kind == TokenKind_keyword__Noreturn) { + tok->kind == TokenKind_keyword_inline || tok->kind == TokenKind_keyword__Noreturn || + tok->kind == TokenKind_keyword_static) { return true; } if (tok->kind != TokenKind_ident) { @@ -1303,6 +1304,9 @@ static AstNode* parse_init_declarator_list(Parser* p, Type* ty) { // declaration: // declaration-specifiers init-declarator-list ';' static AstNode* parse_var_decl(Parser* p) { + // TODO + consume_token_if(p, TokenKind_keyword_static); + Type* base_ty = parse_type_name(p); AstNode* decls = parse_init_declarator_list(p, base_ty); expect(p, TokenKind_semicolon); @@ -1379,15 +1383,18 @@ static void declare_func_or_var(Parser* p, AstNode* decl) { } } else { if (find_gvar(p, name) != -1) { - fatal_error("declare_func_or_var: %s redeclared", name); + // TODO + // fatal_error("declare_func_or_var: %s redeclared", name); } // TODO: refactor Type* base_ty = decl->ty; while (base_ty->base) { base_ty = base_ty->base; } - decl->ty->storage_class = base_ty->storage_class; - base_ty->storage_class = StorageClass_unspecified; + if (base_ty != decl->ty) { + decl->ty->storage_class = base_ty->storage_class; + base_ty->storage_class = StorageClass_unspecified; + } // TODO: refactor if (decl->ty->kind == TypeKind_array && decl->ty->array_size == -1 && decl->as.declarator && |
