dont serialize meta flag, wasm work

This commit is contained in:
Krzosa Karol
2025-01-05 12:05:39 +01:00
parent 67f654f72e
commit b9106abadb
15 changed files with 139 additions and 219 deletions

View File

@@ -1,19 +1,20 @@
typedef enum {
#define AST_FLAG_XLIST\
X(null)\
X(string)\
X(integer)\
X(real)\
X(binary)\
X(enum)\
X(enum_member)\
X(struct)\
X(struct_member)\
X(var)\
X(type_name)\
X(type_pointer)\
X(type_array)\
#define AST_FLAG_XLIST \
X(null) \
X(string) \
X(integer) \
X(real) \
X(binary) \
X(enum) \
X(enum_member) \
X(struct) \
X(struct_member) \
X(var) \
X(type_name) \
X(type_pointer) \
X(type_array) \
X(dont_serialize)
#define X(NAME) ast_flag_##NAME,
AST_FLAG_XLIST
@@ -259,6 +260,11 @@ ast_t *parse_decls(ma_arena_t *arena, char *file, s8_t code) {
ast_append(mem, type);
parser_expect(par, lex_kind_semicolon);
if (parser_match(par, lex_kind_tag)) {
if (parser_expecti(par, s8_lit("dont_serialize"))) {
mem->flags |= set_bit(ast_flag_dont_serialize);
}
}
}
parser_expect(par, lex_kind_close_brace);
parser_expect(par, lex_kind_semicolon);

View File

@@ -124,7 +124,8 @@ void sb8_serial_ast_to_type_info(sb8_t *sb, ast_t *n) {
for (ast_t *it = n->first; it; it = it->next) {
s8_t name = it->string;
s8_t type_info = s8_serial_ast_type_to_type_info(sb->arena, it->first);
sb8_stmtf(sb, "{.name = s8_const_lit(\"%S\"), .type = &%S, .offset = offsetof(%S, %S)},", name, type_info, n->string, name);
b32 dont_serialize = (it->flags & set_bit(ast_flag_dont_serialize)) ? true : false;
sb8_stmtf(sb, "{.name = s8_const_lit(\"%S\"), .type = &%S, .offset = offsetof(%S, %S), .dont_serialize = %d},", name, type_info, n->string, name, dont_serialize);
}
sb->indent -= 1;
sb8_stmtf(sb, "},");