remove addr-mode assumption for string visualizing; eliminate entity deleted flag

This commit is contained in:
Ryan Fleury
2024-08-14 12:26:53 -07:00
parent 728120690d
commit afdb0e5b2e
4 changed files with 45 additions and 52 deletions
+13 -41
View File
@@ -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);
}
}
}
-1
View File
@@ -332,7 +332,6 @@ struct DF_Entity
DF_EntityID id;
U64 gen;
U64 alloc_time_us;
B32 deleted;
F32 alive_t;
// rjf: basic equipment
+2 -5
View File
@@ -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);
+30 -5
View File
@@ -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);