ui expander working!

This commit is contained in:
Krzosa Karol
2025-01-11 10:34:51 +01:00
parent fa3d59ed3e
commit 3acc1c2ca4
7 changed files with 194 additions and 107 deletions

View File

@@ -228,7 +228,11 @@ ast_t *parse_decls(ma_arena_t *arena, char *file, s8_t code) {
result->string = s8_copy_char(arena, file);
for (;par->at->kind != lex_kind_eof;) {
lex_t *pos = par->at;
if (parser_matchi(par, s8_lit("enum"))) {
b32 matched = false;
b32 is_typedef = !!parser_matchi(par, s8_lit("typedef"));
if (is_typedef && parser_matchi(par, s8_lit("enum"))) {
ast_t *n = create_ast(par, pos, set_bit(ast_flag_string) | set_bit(ast_flag_enum));
ast_append(result, n);
@@ -248,7 +252,17 @@ ast_t *parse_decls(ma_arena_t *arena, char *file, s8_t code) {
parser_expect(par, lex_kind_close_brace);
n->string = parser_expect(par, lex_kind_ident)->string;
parser_expect(par, lex_kind_semicolon);
} else if (parser_matchi(par, s8_lit("struct"))) {
matched = true;
}
if (is_typedef && parser_matchi(par, s8_lit("struct"))) {
parser_match(par, lex_kind_ident);
parser_match(par, lex_kind_ident);
parser_match(par, lex_kind_semicolon);
matched = true;
}
if (parser_matchi(par, s8_lit("struct"))) {
ast_t *n = create_ast(par, pos, set_bit(ast_flag_string) | set_bit(ast_flag_struct));
ast_append(result, n);
n->string = parser_expect(par, lex_kind_ident)->string;
@@ -270,10 +284,10 @@ ast_t *parse_decls(ma_arena_t *arena, char *file, s8_t code) {
}
parser_expect(par, lex_kind_close_brace);
parser_expect(par, lex_kind_semicolon);
} else {
parser_next(par);
matched = true;
}
if (!matched) parser_next(par);
}
return result;