diff --git a/src/df/core/df_core.c b/src/df/core/df_core.c index c6bc480a..1f6162ec 100644 --- a/src/df/core/df_core.c +++ b/src/df/core/df_core.c @@ -1080,7 +1080,7 @@ df_entity_child_from_kind(DF_Entity *entity, DF_EntityKind kind) DF_Entity *result = &df_g_nil_entity; for(DF_Entity *child = entity->first; !df_entity_is_nil(child); child = child->next) { - if(!child->deleted && child->kind == kind) + if(child->kind == kind) { result = child; break; @@ -1110,7 +1110,7 @@ df_push_entity_child_list_with_kind(Arena *arena, DF_Entity *entity, DF_EntityKi DF_EntityList result = {0}; for(DF_Entity *child = entity->first; !df_entity_is_nil(child); child = child->next) { - if(!child->deleted && child->kind == kind) + if(child->kind == kind) { df_entity_list_push(arena, &result, child); } @@ -1124,7 +1124,7 @@ df_entity_child_from_name_and_kind(DF_Entity *parent, String8 string, DF_EntityK DF_Entity *result = &df_g_nil_entity; for(DF_Entity *child = parent->first; !df_entity_is_nil(child); child = child->next) { - if(!child->deleted && str8_match(child->name, string, 0) && child->kind == kind) + if(str8_match(child->name, string, 0) && child->kind == kind) { result = child; break; @@ -1616,10 +1616,7 @@ df_entity_alloc(DF_Entity *parent, DF_EntityKind kind) // rjf: initialize to deleted, record history, then "undelete" if this allocation can be undone if(user_defined_lifetime) { - entity->deleted = 1; - df_state_delta_history_push_struct_delta(df_state_delta_history(), &entity->deleted, .guard_entity = entity); - entity->deleted = 0; - df_state_delta_history_push_struct_delta(df_state_delta_history(), &df_state->kind_alloc_gens[kind], .guard_entity = entity); + // TODO(rjf) } // rjf: dirtify caches @@ -2240,7 +2237,7 @@ df_push_entity_list_with_kind(Arena *arena, DF_EntityKind kind) !df_entity_is_nil(entity); entity = df_entity_rec_df_pre(entity, &df_g_nil_entity).next) { - if(!entity->deleted && entity->kind == kind) + if(entity->kind == kind) { df_entity_list_push(arena, &result, entity); } @@ -5411,7 +5408,7 @@ df_cfg_strings_from_core(Arena *arena, String8 root_path, DF_CfgSrc source) for(DF_EntityNode *n = entities.first; n != 0; n = n->next) { DF_Entity *entity = n->entity; - if(entity->cfg_src != source || entity->deleted) + if(entity->cfg_src != source) { continue; } @@ -5430,12 +5427,6 @@ df_cfg_strings_from_core(Arena *arena, String8 root_path, DF_CfgSrc source) //- rjf: get next iteration rec = df_entity_rec_df_pre(e, entity); - //- rjf: skip unqualified - if(e->deleted) - { - continue; - } - //- rjf: unpack entity info typedef U32 EntityInfoFlags; enum @@ -5525,7 +5516,7 @@ df_cfg_strings_from_core(Arena *arena, String8 root_path, DF_CfgSrc source) } // rjf: separate top-level entities with extra newline - if(df_entity_is_nil(rec.next)) + if(df_entity_is_nil(rec.next) && (rec.pop_count != 0 || n->next == 0)) { str8_list_pushf(arena, &strs, "\n"); } @@ -8424,7 +8415,6 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt) for(DF_Entity *child = entity->first, *next = 0; !df_entity_is_nil(child); child = next) { next = child->next; - if(child->deleted) { continue; } if(child->kind == DF_EntityKind_Breakpoint && child->flags & DF_EntityFlag_HasTextPoint && child->text_point.line == line_num) { removed_existing = 1; @@ -8508,7 +8498,6 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt) for(DF_Entity *child = entity->first, *next = 0; !df_entity_is_nil(child); child = next) { next = child->next; - if(child->deleted) { continue; } if(child->kind == DF_EntityKind_WatchPin && child->flags & DF_EntityFlag_HasTextPoint && child->text_point.line == line_num && str8_match(child->name, params.string, 0)) { @@ -8980,32 +8969,15 @@ df_core_end_frame(void) // rjf: fixup next entity to iterate to next = df_entity_rec_df(entity, &df_g_nil_entity, OffsetOf(DF_Entity, next), OffsetOf(DF_Entity, next)).next; - // rjf: undoable -> just mark as deleted; this must be able to be trivially undone - if(undoable) + // rjf: eliminate root entity if we're freeing it + if(entity == df_state->entities_root) { - DF_StateDeltaHistoryBatch(df_state_delta_history()) - { - df_state_delta_history_push_struct_delta(df_state_delta_history(), &entity->deleted, .guard_entity = entity); - df_state_delta_history_push_struct_delta(df_state_delta_history(), &df_state->kind_alloc_gens[entity->kind], .guard_entity = entity); - entity->deleted = 1; - } - entity->flags &= ~DF_EntityFlag_MarkedForDeletion; - df_state->kind_alloc_gens[entity->kind] += 1; + df_state->entities_root = &df_g_nil_entity; } - // rjf: not undoable -> actually release - if(!undoable) - { - // rjf: eliminate root entity if we're freeing it - if(entity == df_state->entities_root) - { - df_state->entities_root = &df_g_nil_entity; - } - - // rjf: unhook & release this entity tree - df_entity_change_parent(entity, entity->parent, &df_g_nil_entity, &df_g_nil_entity); - df_entity_release(entity); - } + // rjf: unhook & release this entity tree + df_entity_change_parent(entity, entity->parent, &df_g_nil_entity, &df_g_nil_entity); + df_entity_release(entity); } } } diff --git a/src/df/core/df_core.h b/src/df/core/df_core.h index e8f31cc8..16e3d847 100644 --- a/src/df/core/df_core.h +++ b/src/df/core/df_core.h @@ -332,7 +332,6 @@ struct DF_Entity DF_EntityID id; U64 gen; U64 alloc_time_us; - B32 deleted; F32 alive_t; // rjf: basic equipment diff --git a/src/df/gfx/df_gfx.c b/src/df/gfx/df_gfx.c index 0c298a7a..5063da51 100644 --- a/src/df/gfx/df_gfx.c +++ b/src/df/gfx/df_gfx.c @@ -8420,9 +8420,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags E_TypeKind direct_type_kind = e_type_kind_from_key(direct_type_key); B32 direct_type_has_content = (direct_type_kind != E_TypeKind_Null && direct_type_kind != E_TypeKind_Void && value_eval.value.u64 != 0); B32 direct_type_is_string = (direct_type_kind != E_TypeKind_Null && value_eval.value.u64 != 0 && - ((E_TypeKind_Char8 <= direct_type_kind && direct_type_kind <= E_TypeKind_UChar32) || - direct_type_kind == E_TypeKind_Char8 || - direct_type_kind == E_TypeKind_UChar8)); + (E_TypeKind_Char8 <= direct_type_kind && direct_type_kind <= E_TypeKind_UChar32)); DF_Entity *thread = df_entity_from_handle(df_interact_regs()->thread); DF_Entity *process = df_entity_ancestor_from_kind(thread, DF_EntityKind_Process); String8 symbol_name = df_symbol_name_from_process_vaddr(arena, process, value_eval.value.u64); @@ -8448,8 +8446,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags // rjf: special-case: strings if(!has_array && direct_type_is_string && - (flags & DF_EvalVizStringFlag_ReadOnlyDisplayRules) && - eval.mode == E_Mode_Addr) + (flags & DF_EvalVizStringFlag_ReadOnlyDisplayRules)) { U64 string_memory_addr = value_eval.value.u64; U64 element_size = e_type_byte_size_from_key(direct_type_key); diff --git a/src/eval/eval_parse.c b/src/eval/eval_parse.c index ca69bc2e..c49cf12e 100644 --- a/src/eval/eval_parse.c +++ b/src/eval/eval_parse.c @@ -775,34 +775,59 @@ e_leaf_type_from_name(String8 name) if(!found) { #define Case(str) (str8_match(name, str8_lit(str), 0)) - if(Case("u8") || Case("uint8") || Case("uint8_t") || Case("uchar8") || Case("U8")) + if(0){} + else if(Case("u8") || Case("uint8") || Case("uint8_t") || Case("U8")) { key = e_type_key_basic(E_TypeKind_U8); } - else if(Case("u16") || Case("uint16") || Case("uint16_t") || Case("uchar16") || Case("U16")) + else if(Case("uchar8") || Case("uchar")) + { + key = e_type_key_basic(E_TypeKind_UChar8); + } + else if(Case("u16") || Case("uint16") || Case("uint16_t") || Case("U16")) { key = e_type_key_basic(E_TypeKind_U16); } - else if(Case("u32") || Case("uint32") || Case("uint32_t") || Case("uchar32") || Case("U32") || Case("uint")) + else if(Case("uchar16")) + { + key = e_type_key_basic(E_TypeKind_UChar16); + } + else if(Case("u32") || Case("uint32") || Case("uint32_t") || Case("U32") || Case("uint")) { key = e_type_key_basic(E_TypeKind_U32); } + else if(Case("uchar32")) + { + key = e_type_key_basic(E_TypeKind_UChar32); + } else if(Case("u64") || Case("uint64") || Case("uint64_t") || Case("U64")) { key = e_type_key_basic(E_TypeKind_U64); } - else if(Case("s8") || Case("b8") || Case("B8") || Case("i8") || Case("int8") || Case("int8_t") || Case("char8") || Case("S8")) + else if(Case("s8") || Case("b8") || Case("B8") || Case("i8") || Case("int8") || Case("int8_t") || Case("S8")) { key = e_type_key_basic(E_TypeKind_S8); } - else if(Case("s16") ||Case("b16") || Case("B16") || Case("i16") || Case("int16") || Case("int16_t") || Case("char16") || Case("S16")) + else if(Case("char8") || Case("char")) + { + key = e_type_key_basic(E_TypeKind_Char8); + } + else if(Case("s16") || Case("b16") || Case("B16") || Case("i16") || Case("int16") || Case("int16_t") || Case("S16")) { key = e_type_key_basic(E_TypeKind_S16); } + else if(Case("char16")) + { + key = e_type_key_basic(E_TypeKind_Char16); + } else if(Case("s32") || Case("b32") || Case("B32") || Case("i32") || Case("int32") || Case("int32_t") || Case("char32") || Case("S32") || Case("int")) { key = e_type_key_basic(E_TypeKind_S32); } + else if(Case("char32")) + { + key = e_type_key_basic(E_TypeKind_Char32); + } else if(Case("s64") || Case("b64") || Case("B64") || Case("i64") || Case("int64") || Case("int64_t") || Case("S64")) { key = e_type_key_basic(E_TypeKind_S64);