diff --git a/project.4coder b/project.4coder index 767c54a9..444a7d12 100644 --- a/project.4coder +++ b/project.4coder @@ -48,7 +48,7 @@ commands = //- rjf: fkey command slots (change locally but do not commit) .f1 = { .win = "build raddbg telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, .f2 = { .win = "build rdi_from_pdb", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, - .f3 = { .win = "pushd build && raddbg.exe --user:local_dev.raddbg_user --project:local_dev.raddbg_project --auto_step && popd",.linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, + .f3 = { .win = "pushd build && raddbg.exe --user:local_dev.raddbg_user --project:local_dev.raddbg_project --xuto_step && popd",.linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, //- rjf: local target builds .build_raddbg = { .win = "build raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, diff --git a/src/base/base_core.h b/src/base/base_core.h index 89da4574..f6d55682 100644 --- a/src/base/base_core.h +++ b/src/base/base_core.h @@ -118,8 +118,8 @@ #define DeferLoop(begin, end) for(int _i_ = ((begin), 0); !_i_; _i_ += 1, (end)) #define DeferLoopChecked(begin, end) for(int _i_ = 2 * !(begin); (_i_ == 2 ? ((end), 0) : !_i_); _i_ += 1, (end)) -#define EachEnumVal(type, it) type it = (type)0; it < type##_COUNT; it = (type)(it+1) -#define EachNonZeroEnumVal(type, it) type it = (type)1; it < type##_COUNT; it = (type)(it+1) +#define EachEnumVal(type, it) (type it = (type)0; it < type##_COUNT; it = (type)(it+1)) +#define EachNonZeroEnumVal(type, it) (type it = (type)1; it < type##_COUNT; it = (type)(it+1)) //////////////////////////////// //~ rjf: Memory Operation Macros diff --git a/src/base/base_log.c b/src/base/base_log.c index 418b29ff..1c2a05f8 100644 --- a/src/base/base_log.c +++ b/src/base/base_log.c @@ -88,7 +88,7 @@ log_scope_end(Arena *arena) SLLStackPop(log_active->top_scope); if(arena != 0) { - for(EachEnumVal(LogMsgKind, kind)) + for EachEnumVal(LogMsgKind, kind) { Temp scratch = scratch_begin(&arena, 1); String8 result_unindented = str8_list_join(scratch.arena, &scope->strings[kind], 0); diff --git a/src/base/base_meta.c b/src/base/base_meta.c index ea2223c9..c5d6b824 100644 --- a/src/base/base_meta.c +++ b/src/base/base_meta.c @@ -277,7 +277,7 @@ deserialized_from_typed_data(Arena *arena, Type *type, String8 data, TypeSeriali } // rjf: allocate buffer for pointer destination; write address into pointer value slot - U64 ptr_dest_buffer_size = count*t->type->direct->size; + U64 ptr_dest_buffer_size = (count+1)*t->type->direct->size; U8 *ptr_dest_buffer = push_array(arena, U8, ptr_dest_buffer_size); MemoryCopy(t->dst, &ptr_dest_buffer, sizeof(ptr_dest_buffer)); diff --git a/src/base/base_meta.h b/src/base/base_meta.h index ae253222..ccfcf0b4 100644 --- a/src/base/base_meta.h +++ b/src/base/base_meta.h @@ -148,15 +148,15 @@ struct TypeSerializeParams //////////////////////////////// //~ rjf: Type Name -> Type Info -#define type(T) &(T##__type) +#define type(T) (&T##__type) //////////////////////////////// //~ rjf: Type Info Table Initializer Helpers -#define member_lit_comp(S, T, m, ...) {str8_lit_comp(#m), type(T), OffsetOf(S, m), __VA_ARGS__} +#define member_lit_comp(S, ti, m, ...) {str8_lit_comp(#m), (ti), OffsetOf(S, m), __VA_ARGS__} #define struct_members(S) read_only global Member S##__members[] = #define struct_type(S) read_only global Type S##__type = {TypeKind_Struct, sizeof(S), &type_nil, str8_lit_comp(#S), {0}, ArrayCount(S##__members), S##__members} -#define ptr_type(name, t, ...) read_only global Type name = {TypeKind_Ptr, sizeof(void *), (t), __VA_ARGS__} +#define ptr_type(name, ti, ...) read_only global Type name = {TypeKind_Ptr, sizeof(void *), (ti), __VA_ARGS__} //////////////////////////////// //~ rjf: Globals @@ -244,6 +244,7 @@ Type String8List__type = //~ rjf: Type Info Lookups internal Member *member_from_name(Type *type, String8 name); +#define EachMember(T, it) (Member *it = (type(T))->members; it != 0 && it < (type(T))->members + (type(T))->count; it += 1) //////////////////////////////// //~ rjf: Type Info * Instance Operations diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index 8c85f091..bd4e9f37 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -326,30 +326,6 @@ ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs) // rjf: write meta-eval-info array String8 meta_evals_srlzed = serialized_from_struct(scratch.arena, CTRL_MetaEvalArray, &msg->meta_evals); str8_serial_push_string(scratch.arena, &msgs_srlzed, meta_evals_srlzed); -#if 0 - str8_serial_push_struct(scratch.arena, &msgs_srlzed, &msg->meta_eval_infos.count); - for(U64 idx = 0; idx < msg->meta_eval_infos.count; idx += 1) - { - CTRL_MetaEvalInfo *mei = &msg->meta_eval_infos.v[idx]; - for(U64 member_idx = 0; member_idx < ArrayCount(ctrl_meta_eval_info_member_range_table); member_idx += 1) - { - switch(ctrl_meta_eval_member_dynamic_kind_table[member_idx]) - { - default: - case CTRL_MetaEvalDynamicKind_Null: - { - str8_serial_push_string(scratch.arena, &msgs_srlzed, str8((U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min, dim_1u64(ctrl_meta_eval_info_member_range_table[member_idx]))); - }break; - case CTRL_MetaEvalDynamicKind_String8: - { - String8 string = *(String8 *)((U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min); - str8_serial_push_struct(scratch.arena, &msgs_srlzed, &string.size); - str8_serial_push_string(scratch.arena, &msgs_srlzed, string); - }break; - } - } - } -#endif } } String8 string = str8_serial_end(arena, &msgs_srlzed); @@ -467,34 +443,6 @@ ctrl_msg_list_from_serialized_string(Arena *arena, String8 string) U64 meta_evals_size = 0; msg->meta_evals = *struct_from_serialized(arena, CTRL_MetaEvalArray, meta_evals_data, .advance_out = &meta_evals_size); read_off += meta_evals_size; -#if 0 - read_off += str8_deserial_read_struct(string, read_off, &msg->meta_eval_infos.count); - msg->meta_eval_infos.v = push_array(arena, CTRL_MetaEvalInfo, msg->meta_eval_infos.count); - for(U64 idx = 0; idx < msg->meta_eval_infos.count; idx += 1) - { - CTRL_MetaEvalInfo *mei = &msg->meta_eval_infos.v[idx]; - for(U64 member_idx = 0; member_idx < ArrayCount(ctrl_meta_eval_info_member_range_table); member_idx += 1) - { - switch(ctrl_meta_eval_member_dynamic_kind_table[member_idx]) - { - default: - case CTRL_MetaEvalDynamicKind_Null: - { - U64 size = dim_1u64(ctrl_meta_eval_info_member_range_table[member_idx]); - read_off += str8_deserial_read(string, read_off, (U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min, size, size); - }break; - case CTRL_MetaEvalDynamicKind_String8: - { - String8 str = {0}; - read_off += str8_deserial_read_struct(string, read_off, &str.size); - str.str = push_array_no_zero(arena, U8, str.size); - read_off += str8_deserial_read(string, read_off, str.str, str.size, 1); - MemoryCopy((U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min, &str, sizeof(str)); - }break; - } - } - } -#endif } } return msgs; @@ -631,7 +579,7 @@ ctrl_entity_store_alloc(void) store->arena = arena; store->hash_slots_count = 1024; store->hash_slots = push_array(arena, CTRL_EntityHashSlot, store->hash_slots_count); - for(EachEnumVal(CTRL_EntityKind, k)) + for EachEnumVal(CTRL_EntityKind, k) { store->entity_kind_lists_arenas[k] = arena_alloc(); } diff --git a/src/ctrl/ctrl_core.h b/src/ctrl/ctrl_core.h index 698c5790..95b94603 100644 --- a/src/ctrl/ctrl_core.h +++ b/src/ctrl/ctrl_core.h @@ -28,13 +28,13 @@ X(U32, color)\ X(String8, label)\ X(String8, location)\ X(String8, condition) -#define X(type, name) type name; +#define X(T, name) T name; CTRL_MetaEval_MemberXList #undef X }; struct_members(CTRL_MetaEval) { -#define X(type, name) member_lit_comp(CTRL_MetaEval, type, name), +#define X(T, name) member_lit_comp(CTRL_MetaEval, type(T), name), CTRL_MetaEval_MemberXList #undef X }; @@ -51,7 +51,7 @@ ptr_type(CTRL_MetaEvalArray__v_ptr_type, type(CTRL_MetaEval), .count_delimiter_n struct_members(CTRL_MetaEvalArray) { {str8_lit_comp("v"), &CTRL_MetaEvalArray__v_ptr_type, OffsetOf(CTRL_MetaEvalArray, v)}, - member_lit_comp(CTRL_MetaEvalArray, U64, count), + member_lit_comp(CTRL_MetaEvalArray, type(U64), count), }; struct_type(CTRL_MetaEvalArray); diff --git a/src/eval/eval_parse.c b/src/eval/eval_parse.c index f6d5ff48..b249afaf 100644 --- a/src/eval/eval_parse.c +++ b/src/eval/eval_parse.c @@ -1091,7 +1091,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to void *location = 0; // rjf: try op table - for(EachNonZeroEnumVal(E_ExprKind, k)) + for EachNonZeroEnumVal(E_ExprKind, k) { E_OpInfo *op_info = &e_expr_kind_op_info_table[k]; if(op_info->kind == E_OpKind_UnaryPrefix && str8_match(op_info->pre, token_string, 0)) @@ -1940,7 +1940,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to // rjf: first try to find a matching binary operator S64 binary_precedence = 0; E_ExprKind binary_kind = 0; - for(EachNonZeroEnumVal(E_ExprKind, k)) + for EachNonZeroEnumVal(E_ExprKind, k) { E_OpInfo *op_info = &e_expr_kind_op_info_table[k]; if(op_info->kind == E_OpKind_Binary && str8_match(op_info->sep, token_string, 0)) diff --git a/src/eval/eval_types.c b/src/eval/eval_types.c index e2b835c2..784656a4 100644 --- a/src/eval/eval_types.c +++ b/src/eval/eval_types.c @@ -447,6 +447,16 @@ e_type_key_cons_base(Type *type, String8 name) E_TypeKind kind = e_type_kind_from_base(type->kind); result = e_type_key_basic(kind); }break; + case TypeKind_Ptr: + { + E_TypeKey direct_type = e_type_key_cons_base(type->direct, str8_zero()); + result = e_type_key_cons_ptr(arch_from_context(), direct_type); + }break; + case TypeKind_Array: + { + E_TypeKey direct_type = e_type_key_cons_base(type->direct, str8_zero()); + result = e_type_key_cons_array(direct_type, type->count); + }break; case TypeKind_Struct: { Temp scratch = scratch_begin(0, 0); @@ -459,37 +469,13 @@ e_type_key_cons_base(Type *type, String8 name) E_MemberArray members_array = e_member_array_from_list(scratch.arena, &members); result = e_type_key_cons(.arch = arch_from_context(), .kind = E_TypeKind_Struct, - .name = name, + .name = name.size ? name : type->name, .members = members_array.v, .count = members_array.count); scratch_end(scratch); }break; } return result; -#if 0 - E_MemberList members = {0}; - { - for(U64 idx = 0; idx < ArrayCount(ctrl_meta_eval_member_range_table); idx += 1) - { - E_TypeKey member_type_key = e_type_key_basic(ctrl_meta_eval_member_type_kind_table[idx]); - switch(ctrl_meta_eval_member_dynamic_kind_table[idx]) - { - default:{}break; - case CTRL_MetaEvalDynamicKind_String8: - { - member_type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8)); - }break; - } - e_member_list_push_new(scratch.arena, &members, .name = ctrl_meta_eval_member_name_table[idx], .off = ctrl_meta_eval_member_range_table[idx].min, .type_key = member_type_key); - } - } - E_MemberArray members_array = e_member_array_from_list(scratch.arena, &members); - E_TypeKey meta_eval_type_key = e_type_key_cons(.arch = arch_from_context(), - .kind = E_TypeKind_Struct, - .name = str8_lit("Meta"), - .members = members_array.v, - .count = members_array.count); -#endif } //- rjf: basic type key functions diff --git a/src/eval_visualization/eval_visualization_core.c b/src/eval_visualization/eval_visualization_core.c index 6051513a..8101f336 100644 --- a/src/eval_visualization/eval_visualization_core.c +++ b/src/eval_visualization/eval_visualization_core.c @@ -317,7 +317,7 @@ ev_view_rule_info_table_push(Arena *arena, EV_ViewRuleInfoTable *table, EV_ViewR internal void ev_view_rule_info_table_push_builtins(Arena *arena, EV_ViewRuleInfoTable *table) { - for(EachEnumVal(EV_ViewRuleKind, kind)) + for EachEnumVal(EV_ViewRuleKind, kind) { ev_view_rule_info_table_push(arena, table, &ev_builtin_view_rule_info_table[kind]); } @@ -368,7 +368,7 @@ internal void ev_view_rule_list_push_string(Arena *arena, EV_ViewRuleList *list, String8 string) { MD_Node *root = md_tree_from_string(arena, string); - for(MD_EachNode(tln, root->first)) + for MD_EachNode(tln, root->first) { ev_view_rule_list_push_tree(arena, list, tln); } diff --git a/src/mdesk/mdesk.c b/src/mdesk/mdesk.c index fe2e502c..92c9bcff 100644 --- a/src/mdesk/mdesk.c +++ b/src/mdesk/mdesk.c @@ -393,7 +393,7 @@ md_string_from_children(Arena *arena, MD_Node *root) { Temp scratch = scratch_begin(&arena, 1); String8List strs = {0}; - for(MD_EachNode(child, root->first)) + for MD_EachNode(child, root->first) { if(child->flags == child->prev->flags) { diff --git a/src/mdesk/mdesk.h b/src/mdesk/mdesk.h index 512f2a6b..afe6fc32 100644 --- a/src/mdesk/mdesk.h +++ b/src/mdesk/mdesk.h @@ -263,7 +263,7 @@ internal MD_NodeFlags md_node_flags_from_token_flags(MD_TokenFlags flags); internal B32 md_node_is_nil(MD_Node *node); //- rjf: iteration -#define MD_EachNode(it, first) MD_Node *it = first; !md_node_is_nil(it); it = it->next +#define MD_EachNode(it, first) (MD_Node *it = first; !md_node_is_nil(it); it = it->next) internal MD_NodeRec md_node_rec_depth_first(MD_Node *node, MD_Node *subtree_root, U64 child_off, U64 sib_off); #define md_node_rec_depth_first_pre(node, subtree_root) md_node_rec_depth_first((node), (subtree_root), OffsetOf(MD_Node, first), OffsetOf(MD_Node, next)) #define md_node_rec_depth_first_pre_rev(node, subtree_root) md_node_rec_depth_first((node), (subtree_root), OffsetOf(MD_Node, last), OffsetOf(MD_Node, prev)) diff --git a/src/metagen/metagen.c b/src/metagen/metagen.c index 7b2e7304..4d68bf5a 100644 --- a/src/metagen/metagen.c +++ b/src/metagen/metagen.c @@ -517,7 +517,7 @@ mg_child_array_from_node(Arena *arena, MD_Node *node) { MG_NodeArray children = mg_node_array_make(arena, md_child_count_from_node(node)); U64 idx = 0; - for(MD_EachNode(child, node->first)) + for MD_EachNode(child, node->first) { children.v[idx] = child; idx += 1; @@ -533,7 +533,7 @@ mg_node_grid_make_from_node(Arena *arena, MD_Node *root) // rjf: determine dimensions U64 row_count = md_child_count_from_node(root); U64 column_count = 0; - for(MD_EachNode(row, root->first)) + for MD_EachNode(row, root->first) { U64 cell_count_this_row = md_child_count_from_node(row); column_count = Max(column_count, cell_count_this_row); @@ -548,11 +548,11 @@ mg_node_grid_make_from_node(Arena *arena, MD_Node *root) // rjf: fill nodes { U64 y = 0; - for(MD_EachNode(row, root->first)) + for MD_EachNode(row, root->first) { U64 x = 0; grid.row_parents.v[y] = row; - for(MD_EachNode(cell, row->first)) + for MD_EachNode(cell, row->first) { grid.cells.v[x*grid.x_stride + y*grid.y_stride] = cell; x += 1; @@ -622,7 +622,7 @@ mg_column_desc_array_from_tag(Arena *arena, MD_Node *tag) result.count = md_child_count_from_node(tag); result.v = push_array(arena, MG_ColumnDesc, result.count); U64 idx = 0; - for(MD_EachNode(hdr, tag->first)) + for MD_EachNode(hdr, tag->first) { result.v[idx].name = push_str8_copy(arena, hdr->string); result.v[idx].kind = MG_ColumnKind_DirectCell; @@ -1031,12 +1031,12 @@ mg_string_list_from_table_gen(Arena *arena, MG_Map grid_name_map, MG_Map grid_co str8_list_push(arena, &result, gen->string); str8_list_push(arena, &result, str8_lit("\n")); } - else for(MD_EachNode(strexpr_node, gen->first)) + else for MD_EachNode(strexpr_node, gen->first) { // rjf: build task list MG_TableExpandTask *first_task = 0; MG_TableExpandTask *last_task = 0; - for(MD_EachNode(tag, strexpr_node->first_tag)) + for MD_EachNode(tag, strexpr_node->first_tag) { if(str8_match(tag->string, str8_lit("expand"), 0)) { diff --git a/src/metagen/metagen_main.c b/src/metagen/metagen_main.c index d8acda1f..2323a6d9 100644 --- a/src/metagen/metagen_main.c +++ b/src/metagen/metagen_main.c @@ -129,7 +129,7 @@ entry_point(CmdLine *cmdline) for(MG_FileParseNode *n = parses.first; n != 0; n = n->next) { MD_Node *file = n->v.root; - for(MD_EachNode(node, file->first)) + for MD_EachNode(node, file->first) { MD_Node *table_tag = md_tag_from_string(node, str8_lit("table"), 0); if(!md_node_is_nil(table_tag)) @@ -154,7 +154,7 @@ entry_point(CmdLine *cmdline) MD_Node *file = n->v.root; String8 layer_key = mg_layer_key_from_path(file->string); MG_Layer *layer = mg_layer_from_key(layer_key); - for(MD_EachNode(node, file->first)) + for MD_EachNode(node, file->first) { if(md_node_has_tag(node, str8_lit("option"), 0)) { @@ -220,7 +220,7 @@ entry_point(CmdLine *cmdline) for(MG_FileParseNode *n = parses.first; n != 0; n = n->next) { MD_Node *file = n->v.root; - for(MD_EachNode(node, file->first)) + for MD_EachNode(node, file->first) { MD_Node *tag = md_tag_from_string(node, str8_lit("enum"), 0); if(!md_node_is_nil(tag)) @@ -267,7 +267,7 @@ entry_point(CmdLine *cmdline) for(MG_FileParseNode *n = parses.first; n != 0; n = n->next) { MD_Node *file = n->v.root; - for(MD_EachNode(node, file->first)) + for MD_EachNode(node, file->first) { MD_Node *tag = md_tag_from_string(node, str8_lit("xlist"), 0); if(!md_node_is_nil(tag)) @@ -292,7 +292,7 @@ entry_point(CmdLine *cmdline) for(MG_FileParseNode *n = parses.first; n != 0; n = n->next) { MD_Node *file = n->v.root; - for(MD_EachNode(node, file->first)) + for MD_EachNode(node, file->first) { if(md_node_has_tag(node, str8_lit("struct"), 0)) { @@ -317,7 +317,7 @@ entry_point(CmdLine *cmdline) for(MG_FileParseNode *n = parses.first; n != 0; n = n->next) { MD_Node *file = n->v.root; - for(MD_EachNode(node, file->first)) + for MD_EachNode(node, file->first) { MD_Node *tag = md_tag_from_string(node, str8_lit("data"), 0); if(!md_node_is_nil(tag)) @@ -347,7 +347,7 @@ entry_point(CmdLine *cmdline) for(MG_FileParseNode *n = parses.first; n != 0; n = n->next) { MD_Node *file = n->v.root; - for(MD_EachNode(node, file->first)) + for MD_EachNode(node, file->first) { MD_Node *tag = md_tag_from_string(node, str8_lit("enum2string_switch"), 0); if(!md_node_is_nil(tag)) @@ -380,7 +380,7 @@ entry_point(CmdLine *cmdline) for(MG_FileParseNode *n = parses.first; n != 0; n = n->next) { MD_Node *file = n->v.root; - for(MD_EachNode(node, file->first)) + for MD_EachNode(node, file->first) { MD_Node *tag = md_tag_from_string(node, str8_lit("gen"), 0); if(!md_node_is_nil(tag)) @@ -412,7 +412,7 @@ entry_point(CmdLine *cmdline) for(MG_FileParseNode *n = parses.first; n != 0; n = n->next) { MD_Node *file = n->v.root; - for(MD_EachNode(node, file->first)) + for MD_EachNode(node, file->first) { if(md_node_has_tag(node, str8_lit("embed_string"), 0)) { @@ -446,7 +446,7 @@ entry_point(CmdLine *cmdline) for(MG_FileParseNode *n = parses.first; n != 0; n = n->next) { MD_Node *file = n->v.root; - for(MD_EachNode(node, file->first)) + for MD_EachNode(node, file->first) { //- rjf: generate markdown page if(md_node_has_tag(node, str8_lit("markdown"), 0)) diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 684d75f2..23267281 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -64,7 +64,7 @@ rd_cfg_table_push_unparsed_string(Arena *arena, RD_CfgTable *table, String8 stri } MD_TokenizeResult tokenize = md_tokenize_from_text(arena, string); MD_ParseResult parse = md_parse_from_text_tokens(arena, str8_lit(""), string, tokenize.tokens); - for(MD_EachNode(tln, parse.root->first)) if(tln->string.size != 0) + for MD_EachNode(tln, parse.root->first) if(tln->string.size != 0) { // rjf: map string -> hash*slot String8 string = str8(tln->string.str, tln->string.size); @@ -661,7 +661,7 @@ internal RD_ViewRuleKind rd_view_rule_kind_from_string(String8 string) { RD_ViewRuleKind kind = RD_ViewRuleKind_Null; - for(EachEnumVal(RD_ViewRuleKind, k)) + for EachEnumVal(RD_ViewRuleKind, k) { if(str8_match(string, rd_view_rule_kind_info_table[k].string, 0)) { @@ -1864,6 +1864,16 @@ rd_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range) void *offsetify_base = push_array(scratch.arena, U8, 0); U64 pos_min = arena_pos(scratch.arena); String8 eval_srlzed = serialized_from_struct(scratch.arena, CTRL_MetaEval, eval); + CTRL_MetaEval *eval_read = struct_from_serialized(scratch.arena, CTRL_MetaEval, eval_srlzed); + for EachMember(CTRL_MetaEval, m) + { + if(str8_match(m->type->name, str8_lit("String8"), 0)) + { + U64 ptr_value = *(U64 *)((U8 *)eval_read + m->value); + U64 space_relative_ptr_value = ptr_value - (U64)eval_read; + *(U64 *)((U8 *)eval_read + m->value) = space_relative_ptr_value; + } + } U64 pos_opl = arena_pos(scratch.arena); Rng1U64 legal_range = r1u64(0, pos_opl-pos_min); if(contains_1u64(legal_range, range.min)) @@ -1871,7 +1881,7 @@ rd_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range) result = 1; U64 range_dim = dim_1u64(range); U64 bytes_to_read = Min(range_dim, (legal_range.max - range.min)); - MemoryCopy(out, (eval_srlzed.str) + range.min, bytes_to_read); + MemoryCopy(out, ((U8 *)eval_read) + range.min, bytes_to_read); if(bytes_to_read < range_dim) { MemoryZero((U8 *)out + bytes_to_read, range_dim - bytes_to_read); @@ -2194,7 +2204,7 @@ rd_tex2dformat_from_eval_params(E_Eval eval, MD_Node *params) R_Tex2DFormat result = R_Tex2DFormat_RGBA8; { MD_Node *fmt_node = md_child_from_string(params, str8_lit("fmt"), 0); - for(EachNonZeroEnumVal(R_Tex2DFormat, fmt)) + for EachNonZeroEnumVal(R_Tex2DFormat, fmt) { if(str8_match(r_tex2d_format_display_string_table[fmt], fmt_node->first->string, StringMatchFlag_CaseInsensitive)) { @@ -2423,7 +2433,7 @@ rd_view_store_param(RD_View *view, String8 key, String8 value) String8 value_copy = push_str8_copy(new_params_arena, value); MD_TokenizeResult value_tokenize = md_tokenize_from_text(new_params_arena, value_copy); MD_ParseResult value_parse = md_parse_from_text_tokens(new_params_arena, str8_zero(), value_copy, value_tokenize.tokens); - for(MD_EachNode(child, value_parse.root->first)) + for MD_EachNode(child, value_parse.root->first) { child->parent = key_node; } @@ -2678,7 +2688,7 @@ rd_window_open(Vec2F32 size, OS_Handle preferred_monitor, RD_CfgSrc cfg_src) window->query_cmd_arena = arena_alloc(); window->query_view_stack_top = &rd_nil_view; window->last_dpi = os_dpi_from_window(window->os); - for(EachEnumVal(RD_SettingCode, code)) + for EachEnumVal(RD_SettingCode, code) { if(rd_setting_code_default_is_per_window_table[code]) { @@ -2854,7 +2864,7 @@ rd_window_frame(RD_Window *ws) // { RD_Theme *current = &rd_state->cfg_theme; - for(EachEnumVal(RD_PaletteCode, code)) + for EachEnumVal(RD_PaletteCode, code) { ws->cfg_palettes[code].null = v4f32(1, 0, 1, 1); ws->cfg_palettes[code].cursor = current->colors[RD_ThemeColor_Cursor]; @@ -2910,7 +2920,7 @@ rd_window_frame(RD_Window *ws) ws->cfg_palettes[RD_PaletteCode_DropSiteOverlay].border = current->colors[RD_ThemeColor_DropSiteOverlay]; if(rd_setting_val_from_code(RD_SettingCode_OpaqueBackgrounds).s32) { - for(EachEnumVal(RD_PaletteCode, code)) + for EachEnumVal(RD_PaletteCode, code) { if(ws->cfg_palettes[code].background.x != 0 || ws->cfg_palettes[code].background.y != 0 || @@ -4000,7 +4010,7 @@ rd_window_frame(RD_Window *ws) { RD_Palette(RD_PaletteCode_Floating) ui_divider(ui_em(1.f, 1.f)); } - for(MD_EachNode(key, schema_root->first)) + for MD_EachNode(key, schema_root->first) { UI_Row { @@ -4410,7 +4420,7 @@ rd_window_frame(RD_Window *ws) //- rjf: gather languages if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Languages) { - for(EachNonZeroEnumVal(TXT_LangKind, lang)) + for EachNonZeroEnumVal(TXT_LangKind, lang) { RD_AutoCompListerItem item = {0}; { @@ -4428,7 +4438,7 @@ rd_window_frame(RD_Window *ws) //- rjf: gather architectures if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Architectures) { - for(EachNonZeroEnumVal(Arch, arch)) + for EachNonZeroEnumVal(Arch, arch) { RD_AutoCompListerItem item = {0}; { @@ -4446,7 +4456,7 @@ rd_window_frame(RD_Window *ws) //- rjf: gather tex2dformats if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Tex2DFormats) { - for(EachEnumVal(R_Tex2DFormat, fmt)) + for EachEnumVal(R_Tex2DFormat, fmt) { RD_AutoCompListerItem item = {0}; { @@ -5438,7 +5448,7 @@ rd_window_frame(RD_Window *ws) { UI_Palette *blended_scheme = push_array(ui_build_arena(), UI_Palette, 1); MemoryCopyStruct(blended_scheme, palette); - for(EachEnumVal(UI_ColorCode, code)) + for EachEnumVal(UI_ColorCode, code) { for(U64 idx = 0; idx < 4; idx += 1) { @@ -6171,7 +6181,7 @@ rd_window_frame(RD_Window *ws) { Vec2F32 panel_rect_center = center_2f32(panel_rect); Axis2 axis = axis2_flip(ws->root_panel->split_axis); - for(EachEnumVal(Side, side)) + for EachEnumVal(Side, side) { UI_Key key = ui_key_from_stringf(ui_key_zero(), "root_extra_split_%i", side); Rng2F32 site_rect = panel_rect; @@ -8006,7 +8016,9 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul // rjf: unpack info about pointer destination E_Eval value_eval = e_value_eval_from_eval(eval); B32 ptee_has_content = (direct_type_kind != E_TypeKind_Null && direct_type_kind != E_TypeKind_Void); - B32 ptee_has_string = (E_TypeKind_Char8 <= direct_type_kind && direct_type_kind <= E_TypeKind_UChar32); + B32 ptee_has_string = ((E_TypeKind_Char8 <= direct_type_kind && direct_type_kind <= E_TypeKind_UChar32) || + direct_type_kind == E_TypeKind_S8 || + direct_type_kind == E_TypeKind_U8); CTRL_Entity *thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->thread); CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); String8 symbol_name = d_symbol_name_from_process_vaddr(arena, process, value_eval.value.u64, 1); @@ -8516,7 +8528,7 @@ rd_view_rule_autocomp_lister_params_from_input_cursor(Arena *arena, String8 stri { if(step == 0) { - for(MD_EachNode(child, schema_node->first)) + for MD_EachNode(child, schema_node->first) { if(0){} else if(str8_match(child->string, str8_lit("expr"), StringMatchFlag_CaseInsensitive)) {params.flags |= RD_AutoCompListerFlag_Locals;} @@ -8833,7 +8845,7 @@ rd_setting_val_from_code(RD_SettingCode code) } if(result.set == 0) { - for(EachEnumVal(RD_CfgSrc, src)) + for EachEnumVal(RD_CfgSrc, src) { if(rd_state->cfg_setting_vals[src][code].set) { @@ -8863,7 +8875,7 @@ rd_cfg_strings_from_gfx(Arena *arena, String8 root_path, RD_CfgSrc source) //- rjf: write all entities { - for(EachEnumVal(RD_EntityKind, k)) + for EachEnumVal(RD_EntityKind, k) { RD_EntityKindFlags k_flags = rd_entity_kind_flags_table[k]; if(!(k_flags & RD_EntityKindFlag_IsSerializedToConfig)) @@ -9050,7 +9062,7 @@ rd_cfg_strings_from_gfx(Arena *arena, String8 root_path, RD_CfgSrc source) str8_list_pushf(arena, &strs, " monitor: \"%S\"\n", monitor_name); str8_list_pushf(arena, &strs, " size: (%i %i)\n", (int)size.x, (int)size.y); str8_list_pushf(arena, &strs, " dpi: %f\n", os_dpi_from_window(window->os)); - for(EachEnumVal(RD_SettingCode, code)) + for EachEnumVal(RD_SettingCode, code) { RD_SettingVal current = window->setting_vals[code]; if(current.set) @@ -9354,7 +9366,7 @@ rd_cfg_strings_from_gfx(Arena *arena, String8 root_path, RD_CfgSrc source) //- rjf: serialize global settings { B32 first = 1; - for(EachEnumVal(RD_SettingCode, code)) + for EachEnumVal(RD_SettingCode, code) { if(rd_setting_code_default_is_per_window_table[code]) { @@ -9389,7 +9401,7 @@ internal String8 rd_string_from_exception_code(U32 code) { String8 string = {0}; - for(EachNonZeroEnumVal(CTRL_ExceptionCodeKind, k)) + for EachNonZeroEnumVal(CTRL_ExceptionCodeKind, k) { if(code == ctrl_exception_code_kind_code_table[k]) { @@ -10442,7 +10454,7 @@ rd_frame(void) //- rjf: add macros for meta evaluations { - E_TypeKey meta_eval_type_key = e_type_key_cons_base(type(CTRL_MetaEval), str8_lit("debugger_entity")); + E_TypeKey meta_eval_type_key = e_type_key_cons_base(type(CTRL_MetaEval), str8_lit("RADDBG_Entity")); for(U64 idx = 0; idx < rd_state->meta_evals.count; idx += 1) { CTRL_MetaEval *meval = &rd_state->meta_evals.v[idx]; @@ -10501,7 +10513,7 @@ rd_frame(void) EV_ViewRuleInfoTable *view_rule_info_table = push_array(scratch.arena, EV_ViewRuleInfoTable, 1); { ev_view_rule_info_table_push_builtins(scratch.arena, view_rule_info_table); - for(EachEnumVal(RD_ViewRuleKind, k)) + for EachEnumVal(RD_ViewRuleKind, k) { RD_ViewRuleInfo *src_info = &rd_view_rule_kind_info_table[k]; if(src_info->flags & RD_ViewRuleInfoFlag_CanUseInWatchTable) @@ -10934,7 +10946,7 @@ rd_frame(void) //- rjf: eliminate all existing entities which are derived from config { - for(EachEnumVal(RD_EntityKind, k)) + for EachEnumVal(RD_EntityKind, k) { RD_EntityKindFlags k_flags = rd_entity_kind_flags_table[k]; if(k_flags & RD_EntityKindFlag_IsSerializedToConfig) @@ -10953,7 +10965,7 @@ rd_frame(void) //- rjf: apply all entities { - for(EachEnumVal(RD_EntityKind, k)) + for EachEnumVal(RD_EntityKind, k) { RD_EntityKindFlags k_flags = rd_entity_kind_flags_table[k]; if(k_flags & RD_EntityKindFlag_IsSerializedToConfig) @@ -10984,7 +10996,7 @@ rd_frame(void) for(Task *t = first_task; t != 0; t = t->next) { MD_Node *node = t->n; - for(MD_EachNode(child, node->first)) + for MD_EachNode(child, node->first) { // rjf: standalone string literals under an entity -> name if(child->flags & MD_NodeFlag_StringLiteral && child->first == &md_nil_node) @@ -11075,7 +11087,7 @@ rd_frame(void) // rjf: sub-entity -> create new task RD_EntityKind sub_entity_kind = RD_EntityKind_Nil; - for(EachEnumVal(RD_EntityKind, k2)) + for EachEnumVal(RD_EntityKind, k2) { if(child->flags & MD_NodeFlag_Identifier && child->first != &md_nil_node && (str8_match(child->string, d_entity_kind_name_lower_table[k2], StringMatchFlag_CaseInsensitive) || @@ -11102,7 +11114,7 @@ rd_frame(void) table != &d_nil_cfg_tree; table = table->next) { - for(MD_EachNode(rule, table->root->first)) + for MD_EachNode(rule, table->root->first) { String8 name = rule->string; String8 val_string = rule->first->string; @@ -11212,7 +11224,7 @@ rd_frame(void) F32 dpi = 0.f; RD_SettingVal setting_vals[RD_SettingCode_COUNT] = {0}; { - for(MD_EachNode(n, window_tree->root->first)) + for MD_EachNode(n, window_tree->root->first) { if(n->flags & MD_NodeFlag_Identifier && md_node_is_nil(n->first) && @@ -11271,7 +11283,7 @@ rd_frame(void) MD_Node *dpi_node = md_child_from_string(window_tree->root, str8_lit("dpi"), 0); String8 dpi_string = md_string_from_children(scratch.arena, dpi_node); dpi = f64_from_str8(dpi_string); - for(EachEnumVal(RD_SettingCode, code)) + for EachEnumVal(RD_SettingCode, code) { MD_Node *code_node = md_child_from_string(window_tree->root, rd_setting_code_lower_string_table[code], 0); if(!md_node_is_nil(code_node)) @@ -11288,7 +11300,7 @@ rd_frame(void) // rjf: open window RD_Window *ws = rd_window_open(size, preferred_monitor, window_tree->source); if(dpi != 0.f) { ws->last_dpi = dpi; } - for(EachEnumVal(RD_SettingCode, code)) + for EachEnumVal(RD_SettingCode, code) { if(setting_vals[code].set == 0 && rd_setting_code_default_is_per_window_table[code]) { @@ -11332,7 +11344,7 @@ rd_frame(void) { // rjf: determine if this panel has panel children B32 has_panel_children = 0; - for(MD_EachNode(child, n->first)) + for MD_EachNode(child, n->first) { if(child->flags & MD_NodeFlag_Numeric) { @@ -11342,7 +11354,7 @@ rd_frame(void) } // rjf: apply panel options - for(MD_EachNode(op, n->first)) + for MD_EachNode(op, n->first) { if(md_node_is_nil(op->first) && str8_match(op->string, str8_lit("tabs_on_bottom"), 0)) { @@ -11352,7 +11364,7 @@ rd_frame(void) // rjf: apply panel views/tabs/commands RD_View *selected_view = &rd_nil_view; - for(MD_EachNode(op, n->first)) + for MD_EachNode(op, n->first) { RD_ViewRuleInfo *view_rule_info = rd_view_rule_info_from_string(op->string); if(view_rule_info == &rd_nil_view_rule_info || has_panel_children != 0) @@ -11488,14 +11500,14 @@ rd_frame(void) keybinding_set != &d_nil_cfg_tree; keybinding_set = keybinding_set->next) { - for(MD_EachNode(keybind, keybinding_set->root->first)) + for MD_EachNode(keybind, keybinding_set->root->first) { String8 cmd_name = {0}; OS_Key key = OS_Key_Null; MD_Node *ctrl_node = &md_nil_node; MD_Node *shift_node = &md_nil_node; MD_Node *alt_node = &md_nil_node; - for(MD_EachNode(child, keybind->first)) + for MD_EachNode(child, keybind->first) { if(str8_match(child->string, str8_lit("ctrl"), 0)) { @@ -11578,7 +11590,7 @@ rd_frame(void) colors_set != &d_nil_cfg_tree; colors_set = colors_set->next) { - for(MD_EachNode(color, colors_set->root->first)) + for MD_EachNode(color, colors_set->root->first) { String8 saved_color_name = color->string; String8List candidate_color_names = {0}; @@ -11671,7 +11683,7 @@ rd_frame(void) //- rjf: apply settings B8 setting_codes_hit[RD_SettingCode_COUNT] = {0}; MemoryZero(&rd_state->cfg_setting_vals[src][0], sizeof(RD_SettingVal)*RD_SettingCode_COUNT); - for(EachEnumVal(RD_SettingCode, code)) + for EachEnumVal(RD_SettingCode, code) { String8 name = rd_setting_code_lower_string_table[code]; RD_CfgVal *code_cfg_val = rd_cfg_val_from_string(table, name); @@ -11692,7 +11704,7 @@ rd_frame(void) //- rjf: if config applied 0 settings, we need to do some sensible default if(src == RD_CfgSrc_User) { - for(EachEnumVal(RD_SettingCode, code)) + for EachEnumVal(RD_SettingCode, code) { if(!setting_codes_hit[code]) { diff --git a/src/raddbg/raddbg_views.c b/src/raddbg/raddbg_views.c index 5fc62354..18aa7025 100644 --- a/src/raddbg/raddbg_views.c +++ b/src/raddbg/raddbg_views.c @@ -849,9 +849,17 @@ rd_string_from_eval_viz_row_column(Arena *arena, EV_View *ev, EV_Row *row, RD_Wa }break; case RD_WatchViewColumnKind_Member: { - E_Expr *expr = e_expr_ref_member_access(arena, row->expr, str8(col->string_buffer, col->string_size)); + Temp scratch = scratch_begin(&arena, 1); + String8 access_string = str8(col->string_buffer, col->string_size); + String8List accesses = str8_split(scratch.arena, access_string, (U8 *)".", 1, 0); + E_Expr *expr = row->expr; + for(String8Node *n = accesses.first; n != 0; n = n->next) + { + expr = e_expr_ref_member_access(arena, expr, n->string); + } E_Eval eval = e_eval_from_expr(arena, expr); result = rd_value_string_from_eval(arena, !editable * EV_StringFlag_ReadOnlyDisplayRules, default_radix, font, font_size, max_size_px, eval, row->member, row->view_rules); + scratch_end(scratch); }break; } if(col->dequote_string && @@ -1043,7 +1051,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, B32 modifiable, U32 default_radix, R // case RD_WatchViewFillKind_Breakpoints: { - E_TypeKey meta_eval_type = e_type_key_cons_base(type(CTRL_MetaEval), str8_lit("debugger_entity")); + E_TypeKey meta_eval_type = e_type_key_cons_base(type(CTRL_MetaEval), str8_lit("RADDBG_Entity")); mutable_entity_kind = RD_EntityKind_Breakpoint; ev_view_rule_list_push_string(scratch.arena, &top_level_view_rules, str8_lit("no_addr")); RD_EntityList bps = rd_query_cached_entity_list_with_kind(mutable_entity_kind); @@ -1920,7 +1928,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, B32 modifiable, U32 default_radix, R default:{moved = 0;}break; case UI_EventDeltaUnit_Char: { - for(EachEnumVal(Axis2, axis)) + for EachEnumVal(Axis2, axis) { cursor_tbl.v[axis] += delta.v[axis]; if(cursor_tbl.v[axis] < cursor_tbl_range.min.v[axis]) @@ -1950,7 +1958,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, B32 modifiable, U32 default_radix, R }break; case UI_EventDeltaUnit_Whole: { - for(EachEnumVal(Axis2, axis)) + for EachEnumVal(Axis2, axis) { cursor_tbl.v[axis] = (delta.v[axis]>0 ? cursor_tbl_range.max.v[axis] : delta.v[axis]<0 ? cursor_tbl_range.min.v[axis] + !!cursor_tbl_min_is_empty_selection[axis] : cursor_tbl.v[axis]); } @@ -3063,7 +3071,7 @@ rd_cmd_lister_item_list_from_needle(Arena *arena, String8 needle) Temp scratch = scratch_begin(&arena, 1); RD_CmdListerItemList result = {0}; // TODO(rjf): extend this with dynamically-registered command info - for(EachNonZeroEnumVal(RD_CmdKind, k)) + for EachNonZeroEnumVal(RD_CmdKind, k) { RD_CmdKindInfo *info = &rd_cmd_kind_info_table[k]; if(info->flags & RD_CmdKindFlag_ListInUI) @@ -5458,11 +5466,11 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(breakpoints) if(!wv->initialized) { rd_watch_view_init(wv, RD_WatchViewFillKind_Breakpoints); - rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.25f, .string = str8_lit("label"), .display_string = str8_lit("Label"), .dequote_string = 1); - rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.35f, .string = str8_lit("location"), .display_string = str8_lit("Location"), .dequote_string = 1, .is_non_code = 1); - rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.20f, .string = str8_lit("condition"), .display_string = str8_lit("Condition"), .dequote_string = 1); - rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.10f, .string = str8_lit("enabled"), .display_string = str8_lit("Enabled"), .view_rule = str8_lit("checkbox")); - rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.10f, .string = str8_lit("hit_count"), .display_string = str8_lit("Hit Count")); + rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.25f, .string = str8_lit("label.str"), .display_string = str8_lit("Label"), .dequote_string = 1); + rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.35f, .string = str8_lit("location.str"), .display_string = str8_lit("Location"), .dequote_string = 1, .is_non_code = 1); + rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.20f, .string = str8_lit("condition.str"),.display_string = str8_lit("Condition"), .dequote_string = 1); + rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.10f, .string = str8_lit("enabled"), .display_string = str8_lit("Enabled"), .view_rule = str8_lit("checkbox")); + rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.10f, .string = str8_lit("hit_count"), .display_string = str8_lit("Hit Count")); } rd_watch_view_build(wv, 0, 10, rect); ProfEnd(); @@ -7733,7 +7741,7 @@ internal UI_BOX_CUSTOM_DRAW(rd_bitmap_view_canvas_box_draw) F32 grid_cell_size_cvs = box->font_size*10.f; F32 grid_line_thickness_px = Max(2.f, box->font_size*0.1f); Vec4F32 grid_line_color = rd_rgba_from_theme_color(RD_ThemeColor_TextWeak); - for(EachEnumVal(Axis2, axis)) + for EachEnumVal(Axis2, axis) { for(F32 v = rect_cvs.p0.v[axis] - mod_f32(rect_cvs.p0.v[axis], grid_cell_size_cvs); v < rect_cvs.p1.v[axis]; @@ -8558,7 +8566,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(settings) //- rjf: gather all global settings if(sv->category_opened[RD_SettingsItemKind_GlobalSetting] || query.size != 0) { - for(EachEnumVal(RD_SettingCode, code)) + for EachEnumVal(RD_SettingCode, code) { if(rd_setting_code_default_is_per_window_table[code]) { @@ -8600,7 +8608,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(settings) //- rjf: gather all window settings if(sv->category_opened[RD_SettingsItemKind_WindowSetting] || query.size != 0) { - for(EachEnumVal(RD_SettingCode, code)) + for EachEnumVal(RD_SettingCode, code) { if(!rd_setting_code_default_is_per_window_table[code]) { @@ -8642,7 +8650,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(settings) //- rjf: gather theme presets if(sv->category_opened[RD_SettingsItemKind_ThemePreset] || query.size != 0) { - for(EachEnumVal(RD_ThemePreset, preset)) + for EachEnumVal(RD_ThemePreset, preset) { String8 kind_string = str8_lit("Theme Preset"); String8 string = rd_theme_preset_display_string_table[preset]; @@ -8680,7 +8688,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(settings) //- rjf: gather all theme colors if(sv->category_opened[RD_SettingsItemKind_ThemeColor] || query.size != 0) { - for(EachNonZeroEnumVal(RD_ThemeColor, color)) + for EachNonZeroEnumVal(RD_ThemeColor, color) { String8 kind_string = str8_lit("Theme Color"); String8 string = rd_theme_color_display_string_table[color]; diff --git a/src/rdi_from_pdb/rdi_from_pdb.c b/src/rdi_from_pdb/rdi_from_pdb.c index b84fb4b0..7c4bb8bd 100644 --- a/src/rdi_from_pdb/rdi_from_pdb.c +++ b/src/rdi_from_pdb/rdi_from_pdb.c @@ -4768,7 +4768,7 @@ p2r_bake(Arena *arena, P2R_Convert2Bake *in) TS_Ticket bake_type_nodes_ticket = ts_kickoff(p2r_bake_type_nodes_task__entry_point, 0, &bake_type_nodes_in); TS_Ticket bake_name_maps_tickets[RDI_NameMapKind_COUNT] = {0}; { - for(EachNonZeroEnumVal(RDI_NameMapKind, k)) + for EachNonZeroEnumVal(RDI_NameMapKind, k) { if(name_maps[k] == 0 || name_maps[k]->name_count == 0) { @@ -4811,7 +4811,7 @@ p2r_bake(Arena *arena, P2R_Convert2Bake *in) RDIM_NameMapBakeResult name_map_bakes[RDI_NameMapKind_COUNT] = {0}; ProfScope("name maps") { - for(EachNonZeroEnumVal(RDI_NameMapKind, k)) + for EachNonZeroEnumVal(RDI_NameMapKind, k) { RDIM_NameMapBakeResult *bake = ts_join_struct(bake_name_maps_tickets[k], max_U64, RDIM_NameMapBakeResult); if(bake != 0) @@ -4847,7 +4847,7 @@ p2r_compress(Arena *arena, P2R_Serialize2File *in) ctx.m_hashTable = push_array(arena, U16, 1<bundle.sections[k]; RDIM_SerializedSection *dst = &out->bundle.sections[k]; diff --git a/src/ui/ui_core.c b/src/ui/ui_core.c index caa854ca..b2acb1a2 100644 --- a/src/ui/ui_core.c +++ b/src/ui/ui_core.c @@ -754,7 +754,7 @@ ui_drop_hot_key(void) internal void ui_kill_action(void) { - for(EachEnumVal(UI_MouseButtonKind, k)) + for EachEnumVal(UI_MouseButtonKind, k) { ui_state->active_box_key[k] = ui_key_zero(); } @@ -834,7 +834,7 @@ ui_begin_build(OS_Handle window, UI_EventList *events, UI_IconInfo *icon_info, U } //- rjf: detect external press & holds - for(EachEnumVal(UI_MouseButtonKind, k)) + for EachEnumVal(UI_MouseButtonKind, k) { if(ui_key_match(ui_state->active_box_key[k], ui_key_zero()) && os_key_is_down(OS_Key_LeftMouseButton+k)) { @@ -1127,7 +1127,7 @@ ui_begin_build(OS_Handle window, UI_EventList *events, UI_IconInfo *icon_info, U //- rjf: reset hot if we don't have an active widget { B32 has_active = 0; - for(EachEnumVal(UI_MouseButtonKind, k)) + for EachEnumVal(UI_MouseButtonKind, k) { if(!ui_key_match(ui_state->active_box_key[k], ui_key_zero())) { @@ -1146,7 +1146,7 @@ ui_begin_build(OS_Handle window, UI_EventList *events, UI_IconInfo *icon_info, U } //- rjf: reset active if our active box is disabled - for(EachEnumVal(UI_MouseButtonKind, k)) + for EachEnumVal(UI_MouseButtonKind, k) { if(!ui_key_match(ui_state->active_box_key[k], ui_key_zero())) { @@ -1159,7 +1159,7 @@ ui_begin_build(OS_Handle window, UI_EventList *events, UI_IconInfo *icon_info, U } //- rjf: reset active keys if they have been pruned - for(EachEnumVal(UI_MouseButtonKind, k)) + for EachEnumVal(UI_MouseButtonKind, k) { UI_Box *box = ui_box_from_key(ui_state->active_box_key[k]); if(ui_box_is_nil(box)) @@ -1495,7 +1495,7 @@ ui_end_build(void) //- rjf: hovering possibly-truncated drawn text -> store text { B32 inactive = 1; - for(EachEnumVal(UI_MouseButtonKind, k)) + for EachEnumVal(UI_MouseButtonKind, k) { if(!ui_key_match(ui_key_zero(), ui_state->active_box_key[k])) { @@ -2164,7 +2164,7 @@ ui_build_palette_(UI_Palette *base, UI_Palette *overrides) { MemoryCopyStruct(palette, base); } - for(EachEnumVal(UI_ColorCode, code)) + for EachEnumVal(UI_ColorCode, code) { if(overrides->colors[code].x != 0 || overrides->colors[code].y != 0 || @@ -2804,7 +2804,7 @@ ui_signal_from_box(UI_Box *box) // if(box->flags & UI_BoxFlag_MouseClickable) { - for(EachEnumVal(UI_MouseButtonKind, k)) + for EachEnumVal(UI_MouseButtonKind, k) { if(ui_key_match(ui_state->active_box_key[k], box->key) || sig.f & (UI_SignalFlag_LeftPressed<flags & UI_BoxFlag_MouseClickable) { - for(EachEnumVal(UI_MouseButtonKind, k)) + for EachEnumVal(UI_MouseButtonKind, k) { if(sig.f & (UI_SignalFlag_LeftDragging<press_key_history[k][0], box->key) && @@ -2837,7 +2837,7 @@ ui_signal_from_box(UI_Box *box) // if(box->flags & UI_BoxFlag_MouseClickable) { - for(EachEnumVal(UI_MouseButtonKind, k)) + for EachEnumVal(UI_MouseButtonKind, k) { if(sig.f & (UI_SignalFlag_LeftDragging<press_key_history[k][0], box->key) && @@ -2889,7 +2889,7 @@ ui_signal_from_box(UI_Box *box) !contains_2f32(blacklist_rect, ui_state->mouse) && !ui_key_match(ui_key_zero(), box->group_key)) { - for(EachEnumVal(UI_MouseButtonKind, k)) + for EachEnumVal(UI_MouseButtonKind, k) { UI_Box *active_box = ui_box_from_key(ui_state->active_box_key[k]); if(ui_key_match(box->group_key, active_box->group_key))