diff --git a/build_file.c b/build_file.c index 9c0fcec..01210b6 100644 --- a/build_file.c +++ b/build_file.c @@ -6,23 +6,24 @@ #define BUILD_TOOL_LIB #define S8_String s8_t #include "src/meta/build_tool.c" -#include "src/meta/parser.c" -#include "src/meta/serialize.c" -#include "src/meta/cgen.c" +#include "src/meta/meta_format.c" +#include "src/meta/meta_serialize_format.c" +#include "src/meta/meta_table_format.c" +#include "src/meta/meta_cfiles.c" #include "src/app/app.meta.c" #include "src/ui/ui.meta.c" #include "src/wasm_app/wasm_app.meta.c" int main(int argc, char **argv) { + int ok = 0; + ma_arena_t *arena = ma_create(ma_default_reserve_size); + SRC_SearchPaths.include_path = (char*[]){OS_GetAbsolutePath(&Perm, s8_lit("../src")).str}; SRC_SearchPaths.include_path_count = 1; cache_init(&Perm, s8_lit("cache_build_file")); - ma_arena_t *arena = ma_create(ma_default_reserve_size); - int ok = 0; b32 generate_math = true; - if (generate_math && cache_code_modified(s8_lit("../src/core/core_math_gen.py"), s8_null)) { os_set_working_dir("../src/core"); os_systemf("py core_math_gen.py"); diff --git a/src/app/app.meta.c b/src/app/app.meta.c index 5778697..7dce4f8 100644 --- a/src/app/app.meta.c +++ b/src/app/app.meta.c @@ -3,7 +3,7 @@ void mt_app(ma_arena_t *arena) { sb8_t *c = sb8_serial_begin(arena); - ast_t *keys = parse_table(arena, __FILE__, S8_CODE( + ast_t *keys = mt_table_parse(arena, __FILE__, S8_CODE( // javascript filter out | name | js1 | js2 | jf | windows1 | windows2 | | null | XXX | XXX | 1 | XXX | XXX | @@ -76,14 +76,14 @@ void mt_app(ma_arena_t *arena) { | page_up | PageUp | XXX | 1 | VK_INSERT | XXX | | page_down | PageDown | XXX | 1 | VK_PRIOR | XXX | )); - sb8_serial_table_enum(c, h, keys, s8_lit("app_key")); + mt_table_serial(c, h, keys, s8_lit("app_key")); // Javascript { - i32 name_idx = row_findi(keys->first, "name"); - i32 js1_idx = row_findi(keys->first, "js1"); - i32 js2_idx = row_findi(keys->first, "js2"); - i32 filter_out_idx = row_findi(keys->first, "jf"); + i32 name_idx = mt_table_find_rowi(keys->first, "name"); + i32 js1_idx = mt_table_find_rowi(keys->first, "js1"); + i32 js2_idx = mt_table_find_rowi(keys->first, "js2"); + i32 filter_out_idx = mt_table_find_rowi(keys->first, "jf"); sb8_stmtf(c, "\n#if PLATFORM_WASM"); @@ -92,11 +92,11 @@ void mt_app(ma_arena_t *arena) { c->indent += 1; sb8_stmtf(c, "if (0) {}"); for (ast_t *row = keys->first->next; row; row = row->next) { - s8_t name = row_geti(row, name_idx)->string; - i64 filter_out = row_geti(row, filter_out_idx)->integer; + s8_t name = mt_table_get_rowi(row, name_idx)->string; + i64 filter_out = mt_table_get_rowi(row, filter_out_idx)->integer; assert(filter_out == 0 || filter_out == 1); - s8_t js[] = {row_geti(row, js1_idx)->string, row_geti(row, js2_idx)->string}; + s8_t js[] = {mt_table_get_rowi(row, js1_idx)->string, mt_table_get_rowi(row, js2_idx)->string}; for (i32 i = 0; i < lengthof(js); i += 1) { if (s8_are_equal(js[i], s8_lit("XXX"))) continue; sb8_stmtf(c, "else if (s8_are_equal_ex(key, s8_lit(\"%S\"), s8_ignore_case)) return (wasm_key_map_t){app_key_%S, %d};", js[i], name, (i32)filter_out); @@ -110,9 +110,9 @@ void mt_app(ma_arena_t *arena) { // Windows { - i32 name_idx = row_findi(keys->first, "name"); - i32 w1i = row_findi(keys->first, "windows1"); - i32 w2i = row_findi(keys->first, "windows2"); + i32 name_idx = mt_table_find_rowi(keys->first, "name"); + i32 w1i = mt_table_find_rowi(keys->first, "windows1"); + i32 w2i = mt_table_find_rowi(keys->first, "windows2"); sb8_stmtf(c, "\n#if PLATFORM_WINDOWS"); sb8_stmtf(c, "app_key_t w32_map_wparam_to_app_key(WPARAM wparam) {"); @@ -120,8 +120,8 @@ void mt_app(ma_arena_t *arena) { sb8_stmtf(c, "switch(wparam) {"); c->indent += 1; for (ast_t *row = keys->first->next; row; row = row->next) { - s8_t name = row_geti(row, name_idx)->string; - s8_t w[] = {row_geti(row, w1i)->string, row_geti(row, w2i)->string}; + s8_t name = mt_table_get_rowi(row, name_idx)->string; + s8_t w[] = {mt_table_get_rowi(row, w1i)->string, mt_table_get_rowi(row, w2i)->string}; for (i32 i = 0; i < lengthof(w); i += 1) { if (s8_are_equal(w[i], s8_lit("XXX"))) continue; sb8_stmtf(c, "case %S: return app_key_%S; break;", w[i], name); @@ -136,7 +136,7 @@ void mt_app(ma_arena_t *arena) { } { - ast_t *decls = parse_decls(arena, __FILE__, S8_CODE( + ast_t *decls = mt_parse_decls(arena, __FILE__, S8_CODE( typedef enum { app_mouse_button_null, app_mouse_button_left, @@ -195,10 +195,10 @@ void mt_app(ma_arena_t *arena) { }; )); - sb8_serial_ast_to_code(h, decls); - sb8_serial_ast_to_type_info(c, decls); + mt_serialb_ast_to_code(h, decls); + mt_serialb_ast_to_type_info(c, decls); } - os_write_file(cg_cpath(arena), sb8_serial_end(arena, c)); - os_write_file(cg_hpath(arena), sb8_serial_end(arena, h)); + os_write_file(mt_cpath(arena), sb8_serial_end(arena, c)); + os_write_file(mt_hpath(arena), sb8_serial_end(arena, h)); } \ No newline at end of file diff --git a/src/core/core_hash_table.h b/src/core/core_hash_table.h index 972b1f0..564fd57 100644 --- a/src/core/core_hash_table.h +++ b/src/core/core_hash_table.h @@ -32,19 +32,19 @@ struct ht_t { ht_bucket_t *buckets; }; -fn ht_t *ht_create(ma_arena_t *arena, i32 size); -fn ht_node_t *ht_insert_kv(ht_t *ht, u64 hash, ht_key_value_t kv); -fn ht_node_t *ht_insert_u64(ht_t *ht, u64 key, u64 value); -fn ht_node_t *ht_insert_ptr(ht_t *ht, void *key, void *value); -fn ht_node_t *ht_insert_string(ht_t *ht, s8_t key, s8_t value); -fn ht_node_t *ht_insert_string_ptr(ht_t *ht, s8_t key, void *value); -fn ht_node_t *ht_search_u64_ex(ht_t *ht, u64 key); -fn ht_node_t *ht_search_ptr_ex(ht_t *ht, void *key); -fn ht_node_t *ht_search_string_ex(ht_t *ht, s8_t key); -fn u64 *ht_search_u64(ht_t *ht, u64 key); -fn void **ht_search_ptr(ht_t *ht, void *key); -fn s8_t *ht_search_string(ht_t *ht, s8_t key); -fn void **ht_search_string_ptr(ht_t *ht, s8_t key); +fn ht_t *ht_create (ma_arena_t *arena, i32 size); +fn ht_node_t *ht_insert_kv (ht_t *ht, u64 hash, ht_key_value_t kv); +fn ht_node_t *ht_insert_u64 (ht_t *ht, u64 key, u64 value); +fn ht_node_t *ht_insert_ptr (ht_t *ht, void *key, void *value); +fn ht_node_t *ht_insert_string (ht_t *ht, s8_t key, s8_t value); +fn ht_node_t *ht_insert_string_ptr (ht_t *ht, s8_t key, void *value); +fn u64 *ht_search_u64 (ht_t *ht, u64 key); +fn void **ht_search_ptr (ht_t *ht, void *key); +fn s8_t *ht_search_string (ht_t *ht, s8_t key); +fn void **ht_search_string_ptr (ht_t *ht, s8_t key); +fn ht_node_t *ht_search_u64_ex (ht_t *ht, u64 key); +fn ht_node_t *ht_search_ptr_ex (ht_t *ht, void *key); +fn ht_node_t *ht_search_string_ex (ht_t *ht, s8_t key); /////////////////////////////// // string interning diff --git a/src/meta/cgen.c b/src/meta/meta_cfiles.c similarity index 67% rename from src/meta/cgen.c rename to src/meta/meta_cfiles.c index f396031..5438b83 100644 --- a/src/meta/cgen.c +++ b/src/meta/meta_cfiles.c @@ -1,18 +1,18 @@ -typedef struct cg_file_t cg_file_t; -struct cg_file_t { - cg_file_t *next; +typedef struct mt_file_t mt_file_t; +struct mt_file_t { + mt_file_t *next; s8_t path; s8_t content; lex_array_t tokens; }; -typedef struct cg_files_t cg_files_t; -struct cg_files_t { - cg_file_t *first; - cg_file_t *last; +typedef struct mt_files_t mt_files_t; +struct mt_files_t { + mt_file_t *first; + mt_file_t *last; }; -fn s8_t cg_resolve_path(ma_arena_t *arena, sb8_t *include_paths, s8_t filename, s8_t parent_file, b32 is_system_include) { +fn s8_t mt_resolve_path(ma_arena_t *arena, sb8_t *include_paths, s8_t filename, s8_t parent_file, b32 is_system_include) { if (OS_IsAbsolute(filename) && os_file_exists(filename)) { return filename; } @@ -39,28 +39,28 @@ fn s8_t cg_resolve_path(ma_arena_t *arena, sb8_t *include_paths, s8_t filename, return s8_null; } -fn cg_file_t *cg_find_file_exact(cg_files_t *root, s8_t path) { - for (cg_file_t *it = root->first; it; it = it->next) { +fn mt_file_t *mt_find_file_exact(mt_files_t *root, s8_t path) { + for (mt_file_t *it = root->first; it; it = it->next) { if (s8_are_equal(path, it->path)) return it; } return NULL; } -fn cg_file_t *cg_find_file(cg_files_t *root, s8_t name) { - for (cg_file_t *it = root->first; it; it = it->next) { +fn mt_file_t *mt_find_file(mt_files_t *root, s8_t name) { + for (mt_file_t *it = root->first; it; it = it->next) { if (s8_ends_with(name, it->path, false)) return it; } return NULL; } -fn void cg__lex_files(ma_arena_t *arena, cg_files_t *root, s8_t path, sb8_t *include_paths) { +fn void mt__lex_files(ma_arena_t *arena, mt_files_t *root, s8_t path, sb8_t *include_paths) { s8_t content = OS_ReadFile(&Perm, path); if (content.len == 0) { return; } lex_array_t array = lex_tokens(arena, path.str, content); - cg_file_t *file = ma_push_type(arena, cg_file_t); + mt_file_t *file = ma_push_type(arena, mt_file_t); file->tokens = array; file->content = content; file->path = path; @@ -72,32 +72,32 @@ fn void cg__lex_files(ma_arena_t *arena, cg_files_t *root, s8_t path, sb8_t *inc continue; } - s8_t inc_path = cg_resolve_path(arena, include_paths, token->string, s8_from_char(token->file), token->system_include); - if (inc_path.len && cg_find_file_exact(root, inc_path) == NULL) { + s8_t inc_path = mt_resolve_path(arena, include_paths, token->string, s8_from_char(token->file), token->system_include); + if (inc_path.len && mt_find_file_exact(root, inc_path) == NULL) { // debugf("%s:%d %S, %S", token->file, token->line + 1, token->string, inc_path); - cg__lex_files(arena, root, inc_path, include_paths); + mt__lex_files(arena, root, inc_path, include_paths); } } } -fn cg_files_t cg_lex_files(ma_arena_t *arena, s8_t path, sb8_t *include_paths) { - cg_files_t files = {0}; +fn mt_files_t mt_lex_files(ma_arena_t *arena, s8_t path, sb8_t *include_paths) { + mt_files_t files = {0}; path = OS_GetAbsolutePath(&Perm, path); - cg__lex_files(arena, &files, path, include_paths); + mt__lex_files(arena, &files, path, include_paths); return files; } -fn void cg_list_files_recursive(sb8_t *sb, s8_t path) { +fn void mt_list_files_recursive(sb8_t *sb, s8_t path) { for (OS_FileIter iter = OS_IterateFiles(&Perm, path); OS_IsValid(iter); OS_Advance(&iter)) { if (iter.is_directory) { - cg_list_files_recursive(sb, iter.absolute_path); + mt_list_files_recursive(sb, iter.absolute_path); } else { sb8_append(sb, iter.absolute_path); } } } -fn void cg_byte_array_from_data_ex(sb8_t *sb, s8_t file, s8_t var_name) { +fn void mt_serial_to_cbyte_array_ex(sb8_t *sb, s8_t file, s8_t var_name) { sb8_printf(sb, "u8 %S[] = {", var_name); for (i64 i = 0; i < file.len; i += 1) { if ((i % 64) == 0) sb8_printf(sb, "\n"); @@ -107,18 +107,18 @@ fn void cg_byte_array_from_data_ex(sb8_t *sb, s8_t file, s8_t var_name) { sb8_printf(sb, "\n};\n"); } -fn s8_t cg_byte_array_from_data(ma_arena_t *arena, s8_t file, s8_t var_name) { +fn s8_t mt_serial_to_cbyte_array(ma_arena_t *arena, s8_t file, s8_t var_name) { ma_temp_t scratch = ma_begin_scratch1(arena); sb8_t *sb = sb8_serial_begin(scratch.arena); - cg_byte_array_from_data_ex(sb, file, var_name); + mt_serial_to_cbyte_array_ex(sb, file, var_name); s8_t result = sb8_serial_end(arena, sb); ma_end_scratch(scratch); return result; } -#define cg_cpath(arena) cg_gen_filename(arena, s8_lit(__FILE__), s8_lit("c")) -#define cg_hpath(arena) cg_gen_filename(arena, s8_lit(__FILE__), s8_lit("h")) -fn s8_t cg_gen_filename(ma_arena_t *arena, s8_t lit_file, s8_t ext) { +#define mt_cpath(arena) mt_gen_filename(arena, s8_lit(__FILE__), s8_lit("c")) +#define mt_hpath(arena) mt_gen_filename(arena, s8_lit(__FILE__), s8_lit("h")) +fn s8_t mt_gen_filename(ma_arena_t *arena, s8_t lit_file, s8_t ext) { s8_t file_noext = s8_chop_last_period(s8_chop_last_period(lit_file)); s8_t file = s8_printf(arena, "%S.gen.%S", file_noext, ext); return file; diff --git a/src/meta/parser.c b/src/meta/meta_format.c similarity index 58% rename from src/meta/parser.c rename to src/meta/meta_format.c index 8dce7a2..f25f2a1 100644 --- a/src/meta/parser.c +++ b/src/meta/meta_format.c @@ -1,6 +1,6 @@ typedef enum { -#define AST_FLAG_XLIST \ +#define MT_AST_FLAG_XLIST \ X(ast_flag_null) \ X(ast_flag_string) \ X(ast_flag_integer) \ @@ -19,7 +19,7 @@ typedef enum { #define X(NAME) NAME, - AST_FLAG_XLIST + MT_AST_FLAG_XLIST #undef X } ast_flag_t; @@ -38,18 +38,18 @@ struct ast_t { i64 integer; }; -s8_t s8_serial_ast_flag_t(ma_arena_t *arena, ast_flag_t flag) { +fn s8_t s8_serial_ast_flag_t(ma_arena_t *arena, ast_flag_t flag) { ma_temp_t scratch = ma_begin_scratch1(arena); sb8_t *sb = sb8_serial_begin(scratch.arena); #define X(NAME) if (flag & set_bit(NAME)) sb8_printf(sb, #NAME); - AST_FLAG_XLIST + MT_AST_FLAG_XLIST #undef X s8_t result = sb8_serial_end(arena, sb); ma_end_scratch(scratch); return result; } -ast_t *create_ast(parser_t *par, lex_t *pos, ast_flag_t flags) { +fn ast_t *mt_create_ast(parser_t *par, lex_t *pos, ast_flag_t flags) { ast_t *result = ma_push_type(par->arena, ast_t); memset(result, 0, sizeof(ast_t)); result->flags = flags; @@ -57,35 +57,35 @@ ast_t *create_ast(parser_t *par, lex_t *pos, ast_flag_t flags) { return result; } -void ast_append(ast_t *parent, ast_t *node) { +fn void mt_ast_append(ast_t *parent, ast_t *node) { SLLQ_APPEND(parent->first, parent->last, node); parent->len += 1; } -ast_t *create_ast_binary(parser_t *par, lex_t *pos, ast_t *left, lex_kind_t op, ast_t *right) { - ast_t *result = create_ast(par, pos, set_bit(ast_flag_string) | set_bit(ast_flag_binary) | set_bit(ast_flag_integer)); - ast_append(result, left); - ast_append(result, right); +fn ast_t *mt_create_ast_binary(parser_t *par, lex_t *pos, ast_t *left, lex_kind_t op, ast_t *right) { + ast_t *result = mt_create_ast(par, pos, set_bit(ast_flag_string) | set_bit(ast_flag_binary) | set_bit(ast_flag_integer)); + mt_ast_append(result, left); + mt_ast_append(result, right); result->integer = op; result->string = lex_kind_to_simple_s8(op); return result; } -ast_t *parse_expr(parser_t *par); -ast_t *parse_lit_expr(parser_t *par) { +fn ast_t *mt_parse_expr(parser_t *par); +fn ast_t *mt_parse_lit_expr(parser_t *par) { lex_t *token = parser_next(par); if (token->kind == lex_kind_integer) { - ast_t *result = create_ast(par, token, set_bit(ast_flag_integer) | set_bit(ast_flag_string)); + ast_t *result = mt_create_ast(par, token, set_bit(ast_flag_integer) | set_bit(ast_flag_string)); result->integer = token->integer; result->string = token->string; return result; } else if (token->kind == lex_kind_real) { - ast_t *result = create_ast(par, token, set_bit(ast_flag_real) | set_bit(ast_flag_string)); + ast_t *result = mt_create_ast(par, token, set_bit(ast_flag_real) | set_bit(ast_flag_string)); result->real = (double)token->real; result->string = token->string; return result; } else if (token->kind == lex_kind_open_paren) { - ast_t *result = parse_expr(par); + ast_t *result = mt_parse_expr(par); parser_expect(par, lex_kind_close_paren); return result; } else { @@ -94,61 +94,61 @@ ast_t *parse_lit_expr(parser_t *par) { } } -ast_t *parse_mul_expr(parser_t *par) { - ast_t *left = parse_lit_expr(par); +fn ast_t *mt_parse_mul_expr(parser_t *par) { + ast_t *left = mt_parse_lit_expr(par); while (par->at->kind == lex_kind_multiply || par->at->kind == lex_kind_divide || par->at->kind == lex_kind_modulo) { lex_t *op = parser_next(par); - left = create_ast_binary(par, op, left, op->kind, parse_lit_expr(par)); + left = mt_create_ast_binary(par, op, left, op->kind, mt_parse_lit_expr(par)); } return left; } -ast_t *parse_add_expr(parser_t *par) { - ast_t *left = parse_mul_expr(par); +fn ast_t *mt_parse_add_expr(parser_t *par) { + ast_t *left = mt_parse_mul_expr(par); while (par->at->kind == lex_kind_plus || par->at->kind == lex_kind_minus) { lex_t *op = parser_next(par); - left = create_ast_binary(par, op, left, op->kind, parse_lit_expr(par)); + left = mt_create_ast_binary(par, op, left, op->kind, mt_parse_lit_expr(par)); } return left; } -ast_t *parse_logical_and_expr(parser_t *par) { - ast_t *left = parse_add_expr(par); +fn ast_t *mt_parse_logical_and_expr(parser_t *par) { + ast_t *left = mt_parse_add_expr(par); while (par->at->kind == lex_kind_or) { lex_t *op = parser_next(par); - left = create_ast_binary(par, op, left, op->kind, parse_lit_expr(par)); + left = mt_create_ast_binary(par, op, left, op->kind, mt_parse_lit_expr(par)); } return left; } -ast_t *parse_logical_or_expr(parser_t *par) { - ast_t *left = parse_logical_and_expr(par); +fn ast_t *parse_logical_or_expr(parser_t *par) { + ast_t *left = mt_parse_logical_and_expr(par); while (par->at->kind == lex_kind_or) { lex_t *op = parser_next(par); - left = create_ast_binary(par, op, left, op->kind, parse_lit_expr(par)); + left = mt_create_ast_binary(par, op, left, op->kind, mt_parse_lit_expr(par)); } return left; } -ast_t *parse_expr(parser_t *par) { +fn ast_t *mt_parse_expr(parser_t *par) { ast_t *expr = parse_logical_or_expr(par); return expr; } -ast_t *parse_expr_str(ma_arena_t *arena, char *file_name, s8_t stream) { +fn ast_t *mt_parse_expr_str(ma_arena_t *arena, char *file_name, s8_t stream) { lex_array_t tokens = lex_tokens(arena, file_name, stream); parser_t *par = parser_make(arena, tokens.data); - ast_t *result = parse_expr(par); + ast_t *result = mt_parse_expr(par); return result; } -i64 eval_const_expr(ast_t *expr) { +fn i64 mt_eval_const_expr(ast_t *expr) { if (expr->flags & set_bit(ast_flag_integer)) { return expr->integer; } else if (expr->flags & set_bit(ast_flag_binary)) { assert(expr->first != expr->last); - i64 left = eval_const_expr(expr->first); - i64 right = eval_const_expr(expr->last); + i64 left = mt_eval_const_expr(expr->first); + i64 right = mt_eval_const_expr(expr->last); switch(expr->integer) { case lex_kind_plus: return left + right; @@ -171,13 +171,13 @@ i64 eval_const_expr(ast_t *expr) { #define test_expr(x) do {\ lex_array_t tokens = lex_tokens(scratch.arena, "parser_test", s8_lit(#x));\ parser_t *par = parser_make(scratch.arena, tokens.data);\ - ast_t *expr = parse_expr(par);\ + ast_t *expr = mt_parse_expr(par);\ assert(expr != NULL);\ - i64 value = eval_const_expr(expr);\ + i64 value = mt_eval_const_expr(expr);\ assert(value == x);\ } while (0) -void run_parser_test() { +fn void run_parser_test() { ma_temp_t scratch = ma_begin_scratch(); test_expr(32 + 2 + 5 + 5); test_expr(32 - 2 + 5 - 5); @@ -191,14 +191,14 @@ void run_parser_test() { ma_end_scratch(scratch); } -ast_t *parse_struct_mem(parser_t *par, s8_t *name) { +fn ast_t *mt_parse_struct_mem(parser_t *par, s8_t *name) { lex_t *type_name = parser_expect(par, lex_kind_ident); - ast_t *type = create_ast(par, type_name, set_bit(ast_flag_type_name) | set_bit(ast_flag_string)); + ast_t *type = mt_create_ast(par, type_name, set_bit(ast_flag_type_name) | set_bit(ast_flag_string)); type->string = type_name->string; while (parser_match(par, lex_kind_multiply)) { - ast_t *pointer = create_ast(par, par->at, set_bit(ast_flag_type_pointer) | set_bit(ast_flag_string)); - ast_append(pointer, type); + ast_t *pointer = mt_create_ast(par, par->at, set_bit(ast_flag_type_pointer) | set_bit(ast_flag_string)); + mt_ast_append(pointer, type); pointer->string = s8_printf(par->arena, "%S*", type->string); type = pointer; } @@ -206,8 +206,8 @@ ast_t *parse_struct_mem(parser_t *par, s8_t *name) { *name = parser_expect(par, lex_kind_ident)->string; while (parser_match(par, lex_kind_open_bracket)) { - ast_t *array = create_ast(par, par->at, set_bit(ast_flag_type_array) | set_bit(ast_flag_string)); - ast_append(array, type); + ast_t *array = mt_create_ast(par, par->at, set_bit(ast_flag_type_array) | set_bit(ast_flag_string)); + mt_ast_append(array, type); lex_t *num = parser_match(par, lex_kind_integer); if (num) { array->flags |= set_bit(ast_flag_integer); @@ -223,10 +223,10 @@ ast_t *parse_struct_mem(parser_t *par, s8_t *name) { return type; } -ast_t *parse_decls(ma_arena_t *arena, char *file, s8_t code) { +fn ast_t *mt_parse_decls(ma_arena_t *arena, char *file, s8_t code) { lex_array_t tokens = lex_tokens(arena, file, code); parser_t *par = parser_make(arena, tokens.data); - ast_t *result = create_ast(par, par->at, set_bit(ast_flag_string)); + ast_t *result = mt_create_ast(par, par->at, set_bit(ast_flag_string)); result->string = s8_copy_char(arena, file); for (;par->at->kind != lex_kind_eof;) { lex_t *pos = par->at; @@ -235,18 +235,18 @@ ast_t *parse_decls(ma_arena_t *arena, char *file, s8_t code) { 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); + ast_t *n = mt_create_ast(par, pos, set_bit(ast_flag_string) | set_bit(ast_flag_enum)); + mt_ast_append(result, n); parser_expect(par, lex_kind_open_brace); while (par->at->kind == lex_kind_ident) { lex_t *val = parser_expect(par, lex_kind_ident); - ast_t *mem = create_ast(par, val, set_bit(ast_flag_enum_member) | set_bit(ast_flag_string)); + ast_t *mem = mt_create_ast(par, val, set_bit(ast_flag_enum_member) | set_bit(ast_flag_string)); mem->string = val->string; - ast_append(n, mem); + mt_ast_append(n, mem); // if (parser_match(par, lex_kind_assign)) { - // parse_expr(); + // mt_parse_expr(); // } if (!parser_match(par, lex_kind_comma)) break; @@ -254,12 +254,14 @@ 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); - if (parser_match(par, lex_kind_tag) && parser_expecti(par, s8_lit("flags"))) { - n->flags |= set_bit(ast_flag_flag_enum); + + if (parser_matchi(par, s8_lit("mt_tag")) && parser_expect(par, lex_kind_open_paren)) { + if (parser_expecti(par, s8_lit("flags"))) { + n->flags |= set_bit(ast_flag_flag_enum); + } + parser_expect(par, lex_kind_close_paren); } - - matched = true; } @@ -271,23 +273,25 @@ ast_t *parse_decls(ma_arena_t *arena, char *file, s8_t code) { } 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); + ast_t *n = mt_create_ast(par, pos, set_bit(ast_flag_string) | set_bit(ast_flag_struct)); + mt_ast_append(result, n); n->string = parser_expect(par, lex_kind_ident)->string; parser_expect(par, lex_kind_open_brace); while (par->at->kind != lex_kind_close_brace) { - ast_t *mem = create_ast(par, par->at, set_bit(ast_flag_struct_member) | set_bit(ast_flag_var) | set_bit(ast_flag_string)); - ast_append(n, mem); + ast_t *mem = mt_create_ast(par, par->at, set_bit(ast_flag_struct_member) | set_bit(ast_flag_var) | set_bit(ast_flag_string)); + mt_ast_append(n, mem); - ast_t *type = parse_struct_mem(par, &mem->string); - ast_append(mem, type); + ast_t *type = mt_parse_struct_mem(par, &mem->string); + mt_ast_append(mem, type); parser_expect(par, lex_kind_semicolon); - if (parser_match(par, lex_kind_tag)) { + + if (parser_matchi(par, s8_lit("mt_tag")) && parser_expect(par, lex_kind_open_paren)) { if (parser_expecti(par, s8_lit("dont_serialize"))) { - mem->flags |= set_bit(ast_flag_dont_serialize); + n->flags |= set_bit(ast_flag_dont_serialize); } + parser_expect(par, lex_kind_close_paren); } } parser_expect(par, lex_kind_close_brace); @@ -300,38 +304,3 @@ ast_t *parse_decls(ma_arena_t *arena, char *file, s8_t code) { return result; } - -ast_t *parse_table(ma_arena_t *arena, char *file, s8_t code) { - lex_array_t tokens = lex_tokens(arena, file, code); - parser_t *par = parser_make(arena, tokens.data); - ast_t *table = create_ast(par, par->at, 0); - while (par->at->kind != lex_kind_eof) { - ast_t *row = create_ast(par, par->at, 0); - ast_append(table, row); - while (par->at->kind != lex_kind_eof) { - parser_match(par, lex_kind_bit_or); - - lex_t *token = par->at; - if (parser_match(par, lex_kind_ident) || parser_match(par, lex_kind_string)) { - ast_t *col = create_ast(par, par->at, set_bit(ast_flag_string)); - ast_append(row, col); - col->string = token->string; - } else if (parser_match(par, lex_kind_integer)) { - ast_t *col = create_ast(par, par->at, set_bit(ast_flag_string) | set_bit(ast_flag_integer)); - ast_append(row, col); - col->string = token->string; - col->integer = token->integer; - } else if (parser_match(par, lex_kind_real)) { - ast_t *col = create_ast(par, par->at, set_bit(ast_flag_string) | set_bit(ast_flag_real)); - ast_append(row, col); - col->string = token->string; - col->real = token->real; - } else if (parser_match(par, lex_kind_bit_or) || parser_match(par, lex_kind_eof)) { - break; - } else { - parser_panicf(par->at, "invalid token: %S", lex_kind_to_s8(par->at->kind)); - } - } - } - return table; -} \ No newline at end of file diff --git a/src/meta/serialize.c b/src/meta/meta_serialize_format.c similarity index 63% rename from src/meta/serialize.c rename to src/meta/meta_serialize_format.c index 7bf82f3..345dc1c 100644 --- a/src/meta/serialize.c +++ b/src/meta/meta_serialize_format.c @@ -1,8 +1,8 @@ -s8_t s8_ast_to_cvar(ma_arena_t *arena, ast_t *ast, s8_t *name) { +fn s8_t mt_serial_ast_to_cvar(ma_arena_t *arena, ast_t *ast, s8_t *name) { if (ast->flags & set_bit(ast_flag_type_name)) { return ast->string; } else if (ast->flags & set_bit(ast_flag_type_pointer)) { - s8_t base = s8_ast_to_cvar(arena, ast->first, name); + s8_t base = mt_serial_ast_to_cvar(arena, ast->first, name); return s8_printf(arena, "%S*", base); } else if (ast->flags & set_bit(ast_flag_type_array)) { if (ast->flags & set_bit(ast_flag_integer)) { @@ -11,7 +11,7 @@ s8_t s8_ast_to_cvar(ma_arena_t *arena, ast_t *ast, s8_t *name) { *name = s8_printf(arena, "%S[%d]", *name, ast->integer); } - s8_t base = s8_ast_to_cvar(arena, ast->first, name); + s8_t base = mt_serial_ast_to_cvar(arena, ast->first, name); return base; } else { assert(!"invalid ast_str case"); @@ -19,7 +19,7 @@ s8_t s8_ast_to_cvar(ma_arena_t *arena, ast_t *ast, s8_t *name) { } } -void sb8_serial_ast(sb8_t *sb, ast_t *n) { +fn void mt_serialb_ast(sb8_t *sb, ast_t *n) { if (n->flags & set_bit(ast_flag_string)) { sb8_stmtf(sb, "%S", n->string); } @@ -28,24 +28,24 @@ void sb8_serial_ast(sb8_t *sb, ast_t *n) { sb8_printf(sb, "{"); sb->indent += 1; for (ast_t *it = n->first; it; it = it->next) { - sb8_serial_ast(sb, it); + mt_serialb_ast(sb, it); } sb->indent -= 1; sb8_stmtf(sb, "}"); } } -s8_t s8_serial_ast(ma_arena_t *arena, ast_t *n) { +fn s8_t mt_serial_ast(ma_arena_t *arena, ast_t *n) { ma_temp_t scratch = ma_begin_scratch1(arena); sb8_t *sb = sb8_serial_begin(scratch.arena); - sb8_serial_ast(sb, n); + mt_serialb_ast(sb, n); s8_t result = sb8_serial_end(arena, sb); ma_end_scratch(scratch); return result; } -s8_t s8_serial_ast_to_code(ma_arena_t *arena, ast_t *n); -void sb8_serial_ast_to_code(sb8_t *sb, ast_t *n) { +fn s8_t mt_serial_ast_to_code(ma_arena_t *arena, ast_t *n); +fn void mt_serialb_ast_to_code(sb8_t *sb, ast_t *n) { if (n->flags & set_bit(ast_flag_flag_enum)) { sb8_stmtf(sb, "typedef u32 %S;", n->string); sb8_stmtf(sb, "enum {"); @@ -70,7 +70,7 @@ void sb8_serial_ast_to_code(sb8_t *sb, ast_t *n) { sb->indent += 1; for (ast_t *it = n->first; it; it = it->next) { s8_t name = it->string; - s8_t type = s8_ast_to_cvar(sb->arena, it->first, &name); + s8_t type = mt_serial_ast_to_cvar(sb->arena, it->first, &name); sb8_stmtf(sb, "%S %S;", type, name); } sb->indent -= 1; @@ -85,28 +85,28 @@ void sb8_serial_ast_to_code(sb8_t *sb, ast_t *n) { for (ast_t *it = n->first; it; it = it->next) { sb8_indent(sb); - sb8_serial_ast_to_code(sb, it); + mt_serialb_ast_to_code(sb, it); } } } -s8_t s8_serial_ast_to_code(ma_arena_t *arena, ast_t *n) { +fn s8_t mt_serial_ast_to_code(ma_arena_t *arena, ast_t *n) { ma_temp_t scratch = ma_begin_scratch1(arena); sb8_t *sb = sb8_serial_begin(scratch.arena); - sb8_serial_ast_to_code(sb, n); + mt_serialb_ast_to_code(sb, n); s8_t result = sb8_serial_end(arena, sb); ma_end_scratch(scratch); return result; } -s8_t s8_serial_ast_type_to_type_info(ma_arena_t *arena, ast_t *n) { +fn s8_t mt_serial_ast_type_to_type_info(ma_arena_t *arena, ast_t *n) { if (n->flags & set_bit(ast_flag_type_name)) { return s8_printf(arena, "type__%S", n->string); } else if (n->flags & set_bit(ast_flag_type_pointer)) { - s8_t base = s8_serial_ast_type_to_type_info(arena, n->first); + s8_t base = mt_serial_ast_type_to_type_info(arena, n->first); return s8_printf(arena, "(type_t){type_kind_pointer, s8_const_lit(\"%S\"), sizeof(void *), .base = &%S}", n->string, base); } else if (n->flags & set_bit(ast_flag_type_array)) { - s8_t base = s8_serial_ast_type_to_type_info(arena, n->first); + s8_t base = mt_serial_ast_type_to_type_info(arena, n->first); return s8_printf(arena, "(type_t){type_kind_array, s8_const_lit(\"%S\"), sizeof(%S), %d, .base = &%S}", n->string, n->string, (int)n->integer, base); } else { parser_panicf(n->pos, "expected type"); @@ -114,7 +114,7 @@ s8_t s8_serial_ast_type_to_type_info(ma_arena_t *arena, ast_t *n) { return (s8_t){0}; } -void sb8_serial_ast_to_type_info(sb8_t *sb, ast_t *n) { +fn void mt_serialb_ast_to_type_info(sb8_t *sb, ast_t *n) { if (n->flags & set_bit(ast_flag_enum)) { sb8_printf(sb, "type_t type__%S = { type_kind_enum, s8_const_lit(\"%S\"), sizeof(%S),", n->string, n->string, n->string); sb->indent += 1; @@ -138,7 +138,7 @@ void sb8_serial_ast_to_type_info(sb8_t *sb, ast_t *n) { sb->indent += 1; 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); + s8_t type_info = mt_serial_ast_type_to_type_info(sb->arena, it->first); 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); } @@ -157,78 +157,16 @@ void sb8_serial_ast_to_type_info(sb8_t *sb, ast_t *n) { for (ast_t *it = n->first; it; it = it->next) { sb8_indent(sb); - sb8_serial_ast_to_type_info(sb, it); + mt_serialb_ast_to_type_info(sb, it); } } } -s8_t s8_serial_ast_to_type_info(ma_arena_t *arena, ast_t *n) { +fn s8_t mt_serial_ast_to_type_info(ma_arena_t *arena, ast_t *n) { ma_temp_t scratch = ma_begin_scratch1(arena); sb8_t *sb = sb8_serial_begin(scratch.arena); - sb8_serial_ast_to_type_info(sb, n); + mt_serialb_ast_to_type_info(sb, n); s8_t result = sb8_serial_end(arena, sb); ma_end_scratch(scratch); return result; -} - -// -// -// -int row_findi(ast_t *row, char *name) { - s8_t s = s8_from_char(name); - int i = 0; - for (ast_t *col = row->first; col; col = col->next) { - if (s8_are_equal(col->string, s)) { - return i; - } - i += 1; - } - return -1; -} - -ast_t *row_geti(ast_t *row, int idx) { - if (idx == -1) return NULL; - - int i = 0; - for (ast_t *col = row->first; col; col = col->next, i+=1) { - if (i == idx) return col; - } - return false; -} - -void sb8_serial_table_enum(sb8_t *c, sb8_t *h, ast_t *table, s8_t decl) { - int name_idx = row_findi(table->first, "name"); - int value_idx = row_findi(table->first, "value"); - - s8_t name_t = s8_printf(c->arena, "%S_t", decl); - - sb8_printf(h, "typedef enum {\n"); - for (ast_t *row = table->first->next; row; row = row->next) { - s8_t name = row_geti(row, name_idx)->string; - ast_t *value = row_geti(row, value_idx); - sb8_printf(h, "%S_%S", decl, name); - if (value) sb8_printf(h, " = %S", value->string); - sb8_printf(h, ",\n"); - } - sb8_printf(h, "%S_count,\n", decl); - sb8_printf(h, "} %S;\n", name_t); - - sb8_stmtf(c, "type_t type__%S = { type_kind_enum, s8_const_lit(\"%S\"), sizeof(%S),", name_t, name_t, name_t); - c->indent += 1; - - sb8_stmtf(c, ".members = (type_member_t[]){"); - c->indent += 1; - int item_count = 0; - for (ast_t *row = table->first->next; row; row = row->next) { - s8_t name = row_geti(row, name_idx)->string; - ast_t *value = row_geti(row, value_idx); - sb8_stmtf(c, "{.name = s8_const_lit(\"%S_%S\"), .value = %S_%S},", decl, name, decl, name); - item_count += 1; - } - c->indent -= 1; - sb8_stmtf(c, "},"); - - sb8_stmtf(c, ".count = %d,", item_count); - c->indent -= 1; - sb8_stmtf(c, "};"); -} +} \ No newline at end of file diff --git a/src/meta/meta_table_format.c b/src/meta/meta_table_format.c new file mode 100644 index 0000000..82ae4a3 --- /dev/null +++ b/src/meta/meta_table_format.c @@ -0,0 +1,93 @@ +fn ast_t *mt_table_parse(ma_arena_t *arena, char *file, s8_t code) { + lex_array_t tokens = lex_tokens(arena, file, code); + parser_t *par = parser_make(arena, tokens.data); + ast_t *table = mt_create_ast(par, par->at, 0); + while (par->at->kind != lex_kind_eof) { + ast_t *row = mt_create_ast(par, par->at, 0); + mt_ast_append(table, row); + while (par->at->kind != lex_kind_eof) { + parser_match(par, lex_kind_bit_or); + + lex_t *token = par->at; + if (parser_match(par, lex_kind_ident) || parser_match(par, lex_kind_string)) { + ast_t *col = mt_create_ast(par, par->at, set_bit(ast_flag_string)); + mt_ast_append(row, col); + col->string = token->string; + } else if (parser_match(par, lex_kind_integer)) { + ast_t *col = mt_create_ast(par, par->at, set_bit(ast_flag_string) | set_bit(ast_flag_integer)); + mt_ast_append(row, col); + col->string = token->string; + col->integer = token->integer; + } else if (parser_match(par, lex_kind_real)) { + ast_t *col = mt_create_ast(par, par->at, set_bit(ast_flag_string) | set_bit(ast_flag_real)); + mt_ast_append(row, col); + col->string = token->string; + col->real = token->real; + } else if (parser_match(par, lex_kind_bit_or) || parser_match(par, lex_kind_eof)) { + break; + } else { + parser_panicf(par->at, "invalid token: %S", lex_kind_to_s8(par->at->kind)); + } + } + } + return table; +} + +fn int mt_table_find_rowi(ast_t *row, char *name) { + s8_t s = s8_from_char(name); + int i = 0; + for (ast_t *col = row->first; col; col = col->next) { + if (s8_are_equal(col->string, s)) { + return i; + } + i += 1; + } + return -1; +} + +fn ast_t *mt_table_get_rowi(ast_t *row, int idx) { + if (idx == -1) return NULL; + + int i = 0; + for (ast_t *col = row->first; col; col = col->next, i+=1) { + if (i == idx) return col; + } + return false; +} + +fn void mt_table_serial(sb8_t *c, sb8_t *h, ast_t *table, s8_t decl) { + int name_idx = mt_table_find_rowi(table->first, "name"); + int value_idx = mt_table_find_rowi(table->first, "value"); + + s8_t name_t = s8_printf(c->arena, "%S_t", decl); + + sb8_printf(h, "typedef enum {\n"); + for (ast_t *row = table->first->next; row; row = row->next) { + s8_t name = mt_table_get_rowi(row, name_idx)->string; + ast_t *value = mt_table_get_rowi(row, value_idx); + sb8_printf(h, "%S_%S", decl, name); + if (value) sb8_printf(h, " = %S", value->string); + sb8_printf(h, ",\n"); + } + sb8_printf(h, "%S_count,\n", decl); + sb8_printf(h, "} %S;\n", name_t); + + sb8_stmtf(c, "type_t type__%S = { type_kind_enum, s8_const_lit(\"%S\"), sizeof(%S),", name_t, name_t, name_t); + c->indent += 1; + + sb8_stmtf(c, ".members = (type_member_t[]){"); + c->indent += 1; + int item_count = 0; + for (ast_t *row = table->first->next; row; row = row->next) { + s8_t name = mt_table_get_rowi(row, name_idx)->string; + ast_t *value = mt_table_get_rowi(row, value_idx); + sb8_stmtf(c, "{.name = s8_const_lit(\"%S_%S\"), .value = %S_%S},", decl, name, decl, name); + item_count += 1; + } + c->indent -= 1; + sb8_stmtf(c, "},"); + + sb8_stmtf(c, ".count = %d,", item_count); + c->indent -= 1; + sb8_stmtf(c, "};"); +} diff --git a/src/ui/ui.meta.c b/src/ui/ui.meta.c index a7f7121..d20d86a 100644 --- a/src/ui/ui.meta.c +++ b/src/ui/ui.meta.c @@ -1,6 +1,6 @@ void mt_ui(ma_arena_t *arena) { - typedef struct cg_ui_stacks_t cg_ui_stacks_t; - struct cg_ui_stacks_t { + typedef struct mt_ui_stacks_t mt_ui_stacks_t; + struct mt_ui_stacks_t { s8_t type; s8_t name; b32 skip_box_member; @@ -9,7 +9,7 @@ void mt_ui(ma_arena_t *arena) { s8_t node; }; - cg_ui_stacks_t stacks[] = { + mt_ui_stacks_t stacks[] = { {s8_lit("ui_id_t") , s8_lit("id") , .skip_box_member = true} , {s8_lit("ui_lop_t") , s8_lit("lop") , .skip_box_member = true} , {s8_lit("f32") , s8_lit("border_thickness")} , @@ -22,7 +22,7 @@ void mt_ui(ma_arena_t *arena) { /////////////////////////////// // fill stack and node - for (cg_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { + for (mt_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { s8_t core_type = it->type; if (s8_ends_with(core_type, s8_lit("_t"), false)) core_type = s8_chop(core_type, 2); it->stack = s8_printf(arena, "%S_stack", it->name); @@ -35,8 +35,8 @@ void mt_ui(ma_arena_t *arena) { /////////////////////////////// // generate types - for (cg_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { - for (cg_ui_stacks_t *jt = it - 1; jt >= stacks; jt -= 1) if (s8_are_equal(it->type, jt->type)) goto type_already_gened; + for (mt_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { + for (mt_ui_stacks_t *jt = it - 1; jt >= stacks; jt -= 1) if (s8_are_equal(it->type, jt->type)) goto type_already_gened; sb8_stmtf(h_sb, "typedef struct %S %S; struct %S { %S value; %S *next; };", it->node, it->node, it->node, it->type, it->node); type_already_gened:; } @@ -45,33 +45,34 @@ void mt_ui(ma_arena_t *arena) { /////////////////////////////// // generate field embeds sb8_stmtf(h_sb, "#define UI_DECL_BOX_MEMBERS \\"); - for (cg_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { + for (mt_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { if (it->skip_box_member) continue; sb8_stmtf(h_sb, "%S %S;\\", it->type, it->name); } sb8_printf(h_sb, "\n"); sb8_stmtf(h_sb, "#define UI_DECL_STACKS \\"); - for (cg_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { + for (mt_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { sb8_stmtf(h_sb, "%S *%S;\\", it->node, it->stack); } sb8_printf(h_sb, "\n"); /////////////////////////////// // generate stack functions - for (cg_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { + for (mt_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { sb8_stmtf(c_sb, "fn void ui_push_%S(%S v) { %S *n = ma_push_type(tcx.temp, %S); n->value = v; SLLS_PUSH(ui->%S, n); }", it->name, it->type, it->node, it->node, it->stack); sb8_stmtf(c_sb, "fn void ui_pop_%S(void) { SLLS_POP(ui->%S); }", it->name, it->stack); sb8_stmtf(c_sb, "#define ui_set_%S(x) defer_block(ui_push_%S(x), ui_pop_%S())", it->name, it->name, it->name); } sb8_stmtf(c_sb, "fn void ui_assert_stacks_are_null(void) {"); - for (cg_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { + for (mt_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) { sb8_stmtf(c_sb, "assert(ui->%S == NULL);", it->stack); } sb8_stmtf(c_sb, "}"); - - os_write_file(cg_cpath(arena), sb8_serial_end(arena, c_sb)); - os_write_file(cg_hpath(arena), sb8_serial_end(arena, h_sb)); + /////////////////////////////// + // write to disk + os_write_file(mt_cpath(arena), sb8_serial_end(arena, c_sb)); + os_write_file(mt_hpath(arena), sb8_serial_end(arena, h_sb)); } \ No newline at end of file diff --git a/src/wasm_app/wasm_app.meta.c b/src/wasm_app/wasm_app.meta.c index 0767bff..c922bb1 100644 --- a/src/wasm_app/wasm_app.meta.c +++ b/src/wasm_app/wasm_app.meta.c @@ -10,13 +10,13 @@ struct cg_tweak_t { void mt_wasm_app(ma_arena_t *arena) { sb8_t *include_paths = sb8(arena); sb8_append(include_paths, OS_GetAbsolutePath(&Perm, s8_lit("../src"))); - cg_files_t files = cg_lex_files(arena, s8_lit("../src/wasm_app/main.c"), include_paths); + mt_files_t files = mt_lex_files(arena, s8_lit("../src/wasm_app/main.c"), include_paths); cg_tweak_t *first_tweak = NULL; cg_tweak_t *last_tweak = NULL; sb8_t *sb_embeds = sb8_serial_begin(arena); - for (cg_file_t *it = files.first; it; it = it->next) { + for (mt_file_t *it = files.first; it; it = it->next) { parser_t *par = parser_make(arena, it->tokens.data); for (;par->at->kind != lex_kind_eof;) { b32 matched = false; @@ -31,7 +31,7 @@ void mt_wasm_app(ma_arena_t *arena) { s8_t content = OS_ReadFile(&Perm, relpath); sb8_printf(sb_embeds, "gb_read_only "); - cg_byte_array_from_data_ex(sb_embeds, content, s8_printf(arena, "%S_data", var_name->string)); + mt_serial_to_cbyte_array_ex(sb_embeds, content, s8_printf(arena, "%S_data", var_name->string)); sb8_printf(sb_embeds, "gb_read_only s8_t %S = s8_array_lit(%S_data);\n", var_name->string, var_name->string); matched = true; } @@ -98,5 +98,5 @@ void mt_wasm_app(ma_arena_t *arena) { s8_t embeds = sb8_serial_end(arena, sb_embeds); - os_write_file(cg_cpath(arena), embeds); + os_write_file(mt_cpath(arena), embeds); } \ No newline at end of file diff --git a/todo.txt b/todo.txt index f26aed8..93c019e 100644 --- a/todo.txt +++ b/todo.txt @@ -27,8 +27,8 @@ [x] somehow index properly the meta files and ignore generated files [x] extract declarations from c files meta(introspect) [x] tweak variables and embeds declared in c code - [ ] new simple format with tags + [x] replace @tags with mt_tag(dont_serialize) [x] revisit api [ ] s8_bin - [ ] hash table - [ ] intern table + [x] hash table + [x] intern table