further progress on eliminating file entities; further entity simplification; set up external identifier resolution map for evaluating 'meta' variables; sketch out generalized entity serialization path

This commit is contained in:
Ryan Fleury
2024-08-13 11:39:25 -07:00
parent 057d4d485e
commit 6d30455e76
17 changed files with 467 additions and 359 deletions
+24 -24
View File
@@ -720,7 +720,7 @@ dmn_w32_thread_read_reg_block(Architecture arch, HANDLE thread, void *reg_block)
break; break;
} }
result = 1; result = 1;
DWORD64 xstate_mask = 0; DWORD64 xstate_mask = 0;
GetXStateFeaturesMask(ctx, &xstate_mask); GetXStateFeaturesMask(ctx, &xstate_mask);
@@ -776,7 +776,7 @@ dmn_w32_thread_read_reg_block(Architecture arch, HANDLE thread, void *reg_block)
MemoryCopy(float_d, float_s, sizeof(*float_d)); MemoryCopy(float_d, float_s, sizeof(*float_d));
} }
} }
// SSE registers are always available in x64 // SSE registers are always available in x64
{ {
M128A *xmm_s = xsave->XmmRegisters; M128A *xmm_s = xsave->XmmRegisters;
@@ -786,14 +786,14 @@ dmn_w32_thread_read_reg_block(Architecture arch, HANDLE thread, void *reg_block)
MemoryCopy(zmm_d, xmm_s, sizeof(*xmm_s)); MemoryCopy(zmm_d, xmm_s, sizeof(*xmm_s));
} }
} }
// AVX // AVX
if(xstate_mask & XSTATE_MASK_AVX) if(xstate_mask & XSTATE_MASK_AVX)
{ {
DWORD avx_length = 0; DWORD avx_length = 0;
U8* avx_s = (U8*)LocateXStateFeature(ctx, XSTATE_AVX, &avx_length); U8* avx_s = (U8*)LocateXStateFeature(ctx, XSTATE_AVX, &avx_length);
Assert(avx_length == 16 * sizeof(REGS_Reg128)); Assert(avx_length == 16 * sizeof(REGS_Reg128));
REGS_Reg512 *zmm_d = &dst->zmm0; REGS_Reg512 *zmm_d = &dst->zmm0;
for(U32 n = 0; n < 16; n += 1, avx_s += sizeof(REGS_Reg128), zmm_d += 1) for(U32 n = 0; n < 16; n += 1, avx_s += sizeof(REGS_Reg128), zmm_d += 1)
{ {
@@ -808,34 +808,34 @@ dmn_w32_thread_read_reg_block(Architecture arch, HANDLE thread, void *reg_block)
MemoryZero(&zmm_d->v[16], sizeof(REGS_Reg128)); MemoryZero(&zmm_d->v[16], sizeof(REGS_Reg128));
} }
} }
// AVX-512 // AVX-512
if(xstate_mask & XSTATE_MASK_AVX512) if(xstate_mask & XSTATE_MASK_AVX512)
{ {
DWORD kmask_length = 0; DWORD kmask_length = 0;
U64* kmask_s = (U64*)LocateXStateFeature(ctx, XSTATE_AVX512_KMASK, &kmask_length); U64* kmask_s = (U64*)LocateXStateFeature(ctx, XSTATE_AVX512_KMASK, &kmask_length);
Assert(kmask_length == 8 * sizeof(U64)); Assert(kmask_length == 8 * sizeof(U64));
REGS_Reg64 *kmask_d = &dst->k0; REGS_Reg64 *kmask_d = &dst->k0;
for(U32 n = 0; n < 8; n += 1, kmask_s += 1, kmask_d += 1) for(U32 n = 0; n < 8; n += 1, kmask_s += 1, kmask_d += 1)
{ {
MemoryCopy(kmask_d, kmask_s, sizeof(*kmask_s)); MemoryCopy(kmask_d, kmask_s, sizeof(*kmask_s));
} }
DWORD avx512h_length = 0; DWORD avx512h_length = 0;
U8* avx512h_s = (U8*)LocateXStateFeature(ctx, XSTATE_AVX512_ZMM_H, &avx512h_length); U8* avx512h_s = (U8*)LocateXStateFeature(ctx, XSTATE_AVX512_ZMM_H, &avx512h_length);
Assert(avx512h_length == 16 * sizeof(REGS_Reg256)); Assert(avx512h_length == 16 * sizeof(REGS_Reg256));
REGS_Reg512 *zmmh_d = &dst->zmm0; REGS_Reg512 *zmmh_d = &dst->zmm0;
for(U32 n = 0; n < 16; n += 1, avx512h_s += sizeof(REGS_Reg256), zmmh_d += 1) for(U32 n = 0; n < 16; n += 1, avx512h_s += sizeof(REGS_Reg256), zmmh_d += 1)
{ {
MemoryCopy(&zmmh_d->v[32], avx512h_s, sizeof(REGS_Reg256)); MemoryCopy(&zmmh_d->v[32], avx512h_s, sizeof(REGS_Reg256));
} }
DWORD avx512_length = 0; DWORD avx512_length = 0;
U8* avx512_s = (U8*)LocateXStateFeature(ctx, XSTATE_AVX512_ZMM, &avx512_length); U8* avx512_s = (U8*)LocateXStateFeature(ctx, XSTATE_AVX512_ZMM, &avx512_length);
Assert(avx512_length == 16 * sizeof(REGS_Reg512)); Assert(avx512_length == 16 * sizeof(REGS_Reg512));
REGS_Reg512 *zmm_d = &dst->zmm16; REGS_Reg512 *zmm_d = &dst->zmm16;
for(U32 n = 0; n < 16; n += 1, avx512_s += sizeof(REGS_Reg512), zmm_d += 1) for(U32 n = 0; n < 16; n += 1, avx512_s += sizeof(REGS_Reg512), zmm_d += 1)
{ {
@@ -849,20 +849,20 @@ dmn_w32_thread_read_reg_block(Architecture arch, HANDLE thread, void *reg_block)
{ {
MemoryZero(kmask_d, sizeof(*kmask_d)); MemoryZero(kmask_d, sizeof(*kmask_d));
} }
REGS_Reg512 *zmmh_d = &dst->zmm0; REGS_Reg512 *zmmh_d = &dst->zmm0;
for(U32 n = 0; n < 16; n += 1, zmmh_d += 1) for(U32 n = 0; n < 16; n += 1, zmmh_d += 1)
{ {
MemoryZero(&zmmh_d->v[32], sizeof(REGS_Reg256)); MemoryZero(&zmmh_d->v[32], sizeof(REGS_Reg256));
} }
REGS_Reg512 *zmm_d = &dst->zmm16; REGS_Reg512 *zmm_d = &dst->zmm16;
for(U32 n = 0; n < 16; n += 1, zmm_d += 1) for(U32 n = 0; n < 16; n += 1, zmm_d += 1)
{ {
MemoryZero(zmm_d, sizeof(*zmm_d)); MemoryZero(zmm_d, sizeof(*zmm_d));
} }
} }
scratch_end(scratch); scratch_end(scratch);
}break; }break;
} }
@@ -986,7 +986,7 @@ dmn_w32_thread_write_reg_block(Architecture arch, HANDLE thread, void *reg_block
{ {
SetXStateFeaturesMask(ctx, XSTATE_MASK_AVX | XSTATE_MASK_AVX512); SetXStateFeaturesMask(ctx, XSTATE_MASK_AVX | XSTATE_MASK_AVX512);
} }
//- rjf: bad context -> abort //- rjf: bad context -> abort
if(ctx == 0) if(ctx == 0)
{ {
@@ -1043,7 +1043,7 @@ dmn_w32_thread_write_reg_block(Architecture arch, HANDLE thread, void *reg_block
MemoryCopy(float_d, float_s, 10); MemoryCopy(float_d, float_s, 10);
} }
} }
// SSE registers are always available in x64 // SSE registers are always available in x64
{ {
M128A *xmm_d = fxsave->XmmRegisters; M128A *xmm_d = fxsave->XmmRegisters;
@@ -1053,55 +1053,55 @@ dmn_w32_thread_write_reg_block(Architecture arch, HANDLE thread, void *reg_block
MemoryCopy(xmm_d, zmm_s, sizeof(*xmm_d)); MemoryCopy(xmm_d, zmm_s, sizeof(*xmm_d));
} }
} }
// AVX // AVX
if(feature_mask & XSTATE_MASK_AVX) if(feature_mask & XSTATE_MASK_AVX)
{ {
DWORD avx_length = 0; DWORD avx_length = 0;
U8* avx_d = (U8*)LocateXStateFeature(ctx, XSTATE_AVX, &avx_length); U8* avx_d = (U8*)LocateXStateFeature(ctx, XSTATE_AVX, &avx_length);
Assert(avx_length == 16 * sizeof(REGS_Reg128)); Assert(avx_length == 16 * sizeof(REGS_Reg128));
REGS_Reg512 *zmm_s = &src->zmm0; REGS_Reg512 *zmm_s = &src->zmm0;
for(U32 n = 0; n < 16; n += 1, avx_d += sizeof(REGS_Reg128), zmm_s += 1) for(U32 n = 0; n < 16; n += 1, avx_d += sizeof(REGS_Reg128), zmm_s += 1)
{ {
MemoryCopy(avx_d, &zmm_s->v[16], sizeof(REGS_Reg128)); MemoryCopy(avx_d, &zmm_s->v[16], sizeof(REGS_Reg128));
} }
} }
// AVX-512 // AVX-512
if(feature_mask & XSTATE_MASK_AVX512) if(feature_mask & XSTATE_MASK_AVX512)
{ {
DWORD kmask_length = 0; DWORD kmask_length = 0;
U64* kmask_d = (U64*)LocateXStateFeature(ctx, XSTATE_AVX512_KMASK, &kmask_length); U64* kmask_d = (U64*)LocateXStateFeature(ctx, XSTATE_AVX512_KMASK, &kmask_length);
Assert(kmask_length == 8 * sizeof(*kmask_d)); Assert(kmask_length == 8 * sizeof(*kmask_d));
REGS_Reg64 *kmask_s = &src->k0; REGS_Reg64 *kmask_s = &src->k0;
for(U32 n = 0; n < 8; n += 1, kmask_s += 1, kmask_d += 1) for(U32 n = 0; n < 8; n += 1, kmask_s += 1, kmask_d += 1)
{ {
MemoryCopy(kmask_d, kmask_s, sizeof(*kmask_d)); MemoryCopy(kmask_d, kmask_s, sizeof(*kmask_d));
} }
DWORD avx512h_length = 0; DWORD avx512h_length = 0;
U8* avx512h_d = (U8*)LocateXStateFeature(ctx, XSTATE_AVX512_ZMM_H, &avx512h_length); U8* avx512h_d = (U8*)LocateXStateFeature(ctx, XSTATE_AVX512_ZMM_H, &avx512h_length);
Assert(avx512h_length == 16 * sizeof(REGS_Reg256)); Assert(avx512h_length == 16 * sizeof(REGS_Reg256));
REGS_Reg512 *zmmh_s = &src->zmm0; REGS_Reg512 *zmmh_s = &src->zmm0;
for(U32 n = 0; n < 16; n += 1, avx512h_d += sizeof(REGS_Reg256), zmmh_s += 1) for(U32 n = 0; n < 16; n += 1, avx512h_d += sizeof(REGS_Reg256), zmmh_s += 1)
{ {
MemoryCopy(avx512h_d, &zmmh_s->v[32], sizeof(REGS_Reg256)); MemoryCopy(avx512h_d, &zmmh_s->v[32], sizeof(REGS_Reg256));
} }
DWORD avx512_length = 0; DWORD avx512_length = 0;
U8* avx512_d = (U8*)LocateXStateFeature(ctx, XSTATE_AVX512_ZMM, &avx512_length); U8* avx512_d = (U8*)LocateXStateFeature(ctx, XSTATE_AVX512_ZMM, &avx512_length);
Assert(avx512_length == 16 * sizeof(REGS_Reg512)); Assert(avx512_length == 16 * sizeof(REGS_Reg512));
REGS_Reg512 *zmm_s = &src->zmm16; REGS_Reg512 *zmm_s = &src->zmm16;
for(U32 n = 0; n < 16; n += 1, avx512_d += sizeof(REGS_Reg512), zmm_s += 1) for(U32 n = 0; n < 16; n += 1, avx512_d += sizeof(REGS_Reg512), zmm_s += 1)
{ {
MemoryCopy(avx512_d, zmm_s, sizeof(REGS_Reg512)); MemoryCopy(avx512_d, zmm_s, sizeof(REGS_Reg512));
} }
} }
//- rjf: set thread context //- rjf: set thread context
if(SetThreadContext(thread, ctx)) if(SetThreadContext(thread, ctx))
{ {
+236 -149
View File
@@ -1062,7 +1062,7 @@ df_entity_rec_df(DF_Entity *entity, DF_Entity *subtree_root, U64 sib_off, U64 ch
} }
else for(DF_Entity *parent = entity; parent != subtree_root && !df_entity_is_nil(parent); parent = parent->parent) else for(DF_Entity *parent = entity; parent != subtree_root && !df_entity_is_nil(parent); parent = parent->parent)
{ {
if(!df_entity_is_nil(*MemberFromOffset(DF_Entity **, parent, sib_off))) if(parent != subtree_root && !df_entity_is_nil(*MemberFromOffset(DF_Entity **, parent, sib_off)))
{ {
result.next = *MemberFromOffset(DF_Entity **, parent, sib_off); result.next = *MemberFromOffset(DF_Entity **, parent, sib_off);
break; break;
@@ -1273,21 +1273,20 @@ df_display_string_from_entity(Arena *arena, DF_Entity *entity)
{ {
result = push_str8_copy(arena, entity->name); result = push_str8_copy(arena, entity->name);
} }
else if(entity->flags & DF_EntityFlag_HasVAddr)
{
result = str8_from_u64(arena, entity->vaddr, 16, 16, 0);
}
else else
{ {
DF_Entity *symb = df_entity_child_from_kind(entity, DF_EntityKind_EntryPointName); DF_Entity *loc = df_entity_child_from_kind(entity, DF_EntityKind_Location);
DF_Entity *file = df_entity_ancestor_from_kind(entity, DF_EntityKind_File); if(loc->flags & DF_EntityFlag_HasTextPoint)
if(!df_entity_is_nil(symb))
{ {
result = push_str8_copy(arena, symb->name); result = push_str8f(arena, "%S:%I64d:%I64d", str8_skip_last_slash(loc->name), loc->text_point.line, loc->text_point.column);
} }
else if(!df_entity_is_nil(file) && entity->flags & DF_EntityFlag_HasTextPoint) else if(loc->flags & DF_EntityFlag_HasVAddr)
{ {
result = push_str8f(arena, "%S:%I64d:%I64d", file->name, entity->text_point.line, entity->text_point.column); result = str8_from_u64(arena, loc->vaddr, 16, 16, 0);
}
else if(loc->name.size != 0)
{
result = push_str8_copy(arena, loc->name);
} }
} }
}break; }break;
@@ -1538,24 +1537,24 @@ df_entity_notify_mutation(DF_Entity *entity)
for(DF_Entity *e = entity; !df_entity_is_nil(e); e = e->parent) for(DF_Entity *e = entity; !df_entity_is_nil(e); e = e->parent)
{ {
DF_EntityKindFlags flags = df_g_entity_kind_flags_table[entity->kind]; DF_EntityKindFlags flags = df_g_entity_kind_flags_table[entity->kind];
if(e == entity && flags & DF_EntityKindFlag_LeafMutationProjectConfig) if(e == entity && flags & DF_EntityKindFlag_LeafMutProjectConfig)
{ {
DF_CmdParams p = {0}; DF_CmdParams p = {0};
df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_WriteProjectData)); df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_WriteProjectData));
} }
if(e == entity && flags & DF_EntityKindFlag_LeafMutationSoftHalt && df_ctrl_targets_running()) if(e == entity && flags & DF_EntityKindFlag_LeafMutSoftHalt && df_ctrl_targets_running())
{ {
df_state->entities_mut_soft_halt = 1; df_state->entities_mut_soft_halt = 1;
} }
if(e == entity && flags & DF_EntityKindFlag_LeafMutationDebugInfoMap) if(e == entity && flags & DF_EntityKindFlag_LeafMutDebugInfoMap)
{ {
df_state->entities_mut_dbg_info_map = 1; df_state->entities_mut_dbg_info_map = 1;
} }
if(flags & DF_EntityKindFlag_TreeMutationSoftHalt && df_ctrl_targets_running()) if(flags & DF_EntityKindFlag_TreeMutSoftHalt && df_ctrl_targets_running())
{ {
df_state->entities_mut_soft_halt = 1; df_state->entities_mut_soft_halt = 1;
} }
if(flags & DF_EntityKindFlag_TreeMutationDebugInfoMap) if(flags & DF_EntityKindFlag_TreeMutDebugInfoMap)
{ {
df_state->entities_mut_dbg_info_map = 1; df_state->entities_mut_dbg_info_map = 1;
} }
@@ -3281,8 +3280,18 @@ df_lines_from_dbgi_key_voff(Arena *arena, DI_Key *dbgi_key, U64 voff)
RDI_Line *line = &parsed_line_table.lines[line_info_idx]; RDI_Line *line = &parsed_line_table.lines[line_info_idx];
RDI_Column *column = (line_info_idx < parsed_line_table.col_count) ? &parsed_line_table.cols[line_info_idx] : 0; RDI_Column *column = (line_info_idx < parsed_line_table.col_count) ? &parsed_line_table.cols[line_info_idx] : 0;
RDI_SourceFile *file = rdi_element_from_name_idx(rdi, SourceFiles, line->file_idx); RDI_SourceFile *file = rdi_element_from_name_idx(rdi, SourceFiles, line->file_idx);
String8 file_normalized_full_path = {0}; String8List path_parts = {0};
file_normalized_full_path.str = rdi_string_from_idx(rdi, file->normal_full_path_string_idx, &file_normalized_full_path.size); for(RDI_FilePathNode *fpn = rdi_element_from_name_idx(rdi, FilePathNodes, file->file_path_node_idx);
fpn != rdi_element_from_name_idx(rdi, FilePathNodes, 0);
fpn = rdi_element_from_name_idx(rdi, FilePathNodes, fpn->parent_path_node))
{
String8 path_part = {0};
path_part.str = rdi_string_from_idx(rdi, fpn->name_string_idx, &path_part.size);
str8_list_push_front(scratch.arena, &path_parts, path_part);
}
StringJoin join = {0};
join.sep = str8_lit("/");
String8 file_normalized_full_path = str8_list_join(arena, &path_parts, &join);
DF_LineNode *n = push_array(arena, DF_LineNode, 1); DF_LineNode *n = push_array(arena, DF_LineNode, 1);
SLLQueuePush(result.first, result.last, n); SLLQueuePush(result.first, result.last, n);
result.count += 1; result.count += 1;
@@ -3802,49 +3811,40 @@ df_ctrl_run(DF_RunKind run, DF_Entity *run_thread, CTRL_RunFlags flags, CTRL_Tra
{ {
continue; continue;
} }
DF_Entity *file = df_entity_ancestor_from_kind(user_bp, DF_EntityKind_File); DF_Entity *loc = df_entity_child_from_kind(user_bp, DF_EntityKind_Location);
DF_Entity *symb = df_entity_child_from_kind(user_bp, DF_EntityKind_EntryPointName); DF_Entity *cnd = df_entity_child_from_kind(user_bp, DF_EntityKind_Condition);
DF_EntityList overrides = df_possible_overrides_from_entity(scratch.arena, file);
for(DF_EntityNode *override_n = overrides.first; override_n != 0; override_n = override_n->next) // rjf: textual location -> add breakpoints for all possible override locations
if(loc->flags & DF_EntityFlag_HasTextPoint)
{ {
DF_Entity *override = override_n->entity; String8List overrides = df_possible_overrides_from_file_path(scratch.arena, loc->name);
DF_Entity *condition_child = df_entity_child_from_kind(user_bp, DF_EntityKind_Condition); for(String8Node *n = overrides.first; n != 0; n = n->next)
String8 condition = condition_child->name;
// rjf: generate user breakpoint info depending on breakpoint placement
CTRL_UserBreakpointKind ctrl_user_bp_kind = CTRL_UserBreakpointKind_FileNameAndLineColNumber;
String8 ctrl_user_bp_string = {0};
TxtPt ctrl_user_bp_pt = {0};
U64 ctrl_user_bp_u64 = 0;
{ {
if(user_bp->flags & DF_EntityFlag_HasTextPoint) CTRL_UserBreakpoint ctrl_user_bp = {CTRL_UserBreakpointKind_FileNameAndLineColNumber};
{ ctrl_user_bp.string = n->string;
ctrl_user_bp_kind = CTRL_UserBreakpointKind_FileNameAndLineColNumber; ctrl_user_bp.pt = loc->text_point;
ctrl_user_bp_string = df_full_path_from_entity(scratch.arena, override); ctrl_user_bp.condition = cnd->name;
ctrl_user_bp_pt = user_bp->text_point;
}
else if(user_bp->flags & DF_EntityFlag_HasVAddr)
{
ctrl_user_bp_kind = CTRL_UserBreakpointKind_VirtualAddress;
ctrl_user_bp_u64 = user_bp->vaddr;
}
else if(!df_entity_is_nil(symb))
{
ctrl_user_bp_kind = CTRL_UserBreakpointKind_SymbolNameAndOffset;
ctrl_user_bp_string = symb->name;
}
}
// rjf: push user breakpoint to list
{
CTRL_UserBreakpoint ctrl_user_bp = {ctrl_user_bp_kind};
ctrl_user_bp.string = ctrl_user_bp_string;
ctrl_user_bp.pt = ctrl_user_bp_pt;
ctrl_user_bp.u64 = ctrl_user_bp_u64;
ctrl_user_bp.condition = condition;
ctrl_user_breakpoint_list_push(scratch.arena, &msg.user_bps, &ctrl_user_bp); ctrl_user_breakpoint_list_push(scratch.arena, &msg.user_bps, &ctrl_user_bp);
} }
} }
// rjf: virtual address location -> add breakpoint for address
else if(loc->flags & DF_EntityFlag_HasVAddr)
{
CTRL_UserBreakpoint ctrl_user_bp = {CTRL_UserBreakpointKind_VirtualAddress};
ctrl_user_bp.u64 = loc->vaddr;
ctrl_user_bp.condition = cnd->name;
ctrl_user_breakpoint_list_push(scratch.arena, &msg.user_bps, &ctrl_user_bp);
}
// rjf: symbol name location -> add breakpoint for symbol name
else if(loc->name.size != 0)
{
CTRL_UserBreakpoint ctrl_user_bp = {CTRL_UserBreakpointKind_SymbolNameAndOffset};
ctrl_user_bp.string = loc->name;
ctrl_user_bp.condition = cnd->name;
ctrl_user_breakpoint_list_push(scratch.arena, &msg.user_bps, &ctrl_user_bp);
}
} }
for(DF_HandleNode *n = df_state->frozen_threads.first; n != 0; n = n->next) for(DF_HandleNode *n = df_state->frozen_threads.first; n != 0; n = n->next)
{ {
@@ -3898,18 +3898,20 @@ df_ctrl_last_stop_event(void)
internal B32 internal B32
df_eval_memory_read(void *u, void *out, Rng1U64 vaddr_range) df_eval_memory_read(void *u, void *out, Rng1U64 vaddr_range)
{ {
DF_Entity *process = (DF_Entity *)u;
Assert(process->kind == DF_EntityKind_Process);
Temp scratch = scratch_begin(0, 0);
B32 result = 0; B32 result = 0;
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_range, 0); DF_Entity *process = (DF_Entity *)u;
String8 data = slice.data; if(process->kind == DF_EntityKind_Process)
if(data.size == dim_1u64(vaddr_range))
{ {
result = 1; Temp scratch = scratch_begin(0, 0);
MemoryCopy(out, data.str, data.size); CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_range, 0);
String8 data = slice.data;
if(data.size == dim_1u64(vaddr_range))
{
result = 1;
MemoryCopy(out, data.str, data.size);
}
scratch_end(scratch);
} }
scratch_end(scratch);
return result; return result;
} }
@@ -5409,7 +5411,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) for(DF_EntityNode *n = entities.first; n != 0; n = n->next)
{ {
DF_Entity *entity = n->entity; DF_Entity *entity = n->entity;
if(entity->cfg_src != source) if(entity->cfg_src != source || entity->deleted)
{ {
continue; continue;
} }
@@ -5418,53 +5420,115 @@ df_cfg_strings_from_core(Arena *arena, String8 root_path, DF_CfgSrc source)
first = 0; first = 0;
str8_list_pushf(arena, &strs, "/// %S %.*s\n\n", str8_list_pushf(arena, &strs, "/// %S %.*s\n\n",
kinds_to_write[idx].title, kinds_to_write[idx].title,
(int)Max(0, 80 - ((S64)kinds_to_write[idx].title.size + 5)), (int)Max(0, 79 - ((S64)kinds_to_write[idx].title.size + 5)),
slashes); slashes);
} }
DF_EntityRec rec = {0}; DF_EntityRec rec = {0};
S64 depth = 0; S64 depth = 0;
for(DF_Entity *e = entity; !df_entity_is_nil(e); e = rec.next) for(DF_Entity *e = entity; !df_entity_is_nil(e); e = rec.next)
{ {
// rjf: write entity title //- rjf: get next iteration
str8_list_pushf(arena, &strs, "WIP_%S:\n{\n", df_g_entity_kind_name_lower_table[e->kind]);
// rjf: write this entity's info
String8 entity_name_escaped = df_cfg_escaped_from_raw_string(arena, e->name);
if(entity_name_escaped.size != 0)
{
str8_list_pushf(arena, &strs, "name: \"%S\"\n", entity_name_escaped);
}
if(e->disabled)
{
str8_list_pushf(arena, &strs, "disabled: 1\n");
}
if(e->flags & DF_EntityFlag_HasColor)
{
Vec4F32 hsva = df_hsva_from_entity(e);
Vec4F32 rgba = rgba_from_hsva(hsva);
U32 rgba_hex = u32_from_rgba(rgba);
str8_list_pushf(arena, &strs, "color: 0x%x\n", rgba_hex);
}
// rjf: get next iteration
rec = df_entity_rec_df_pre(e, entity); rec = df_entity_rec_df_pre(e, entity);
// rjf: push //- rjf: skip unqualified
if(rec.push_count == 0) if(e->deleted)
{ {
str8_list_pushf(arena, &strs, "}\n%s", depth == 0 ? "\n" : ""); continue;
} }
//- rjf: unpack entity info
typedef U32 EntityInfoFlags;
enum
{
EntityInfoFlag_HasName = (1<<0),
EntityInfoFlag_HasDisabled = (1<<1),
EntityInfoFlag_HasTxtPt = (1<<2),
EntityInfoFlag_HasVAddr = (1<<3),
EntityInfoFlag_HasColor = (1<<4),
EntityInfoFlag_HasChildren = (1<<5),
};
String8 entity_name_escaped = e->name;
if(df_g_entity_kind_flags_table[e->kind] & DF_EntityKindFlag_NameIsPath)
{
Temp scratch = scratch_begin(&arena, 1);
String8 path_normalized = path_normalized_from_string(scratch.arena, e->name);
entity_name_escaped = path_relative_dst_from_absolute_dst_src(arena, path_normalized, root_path);
scratch_end(scratch);
}
else
{
entity_name_escaped = df_cfg_escaped_from_raw_string(arena, e->name);
}
EntityInfoFlags info_flags = 0;
if(entity_name_escaped.size != 0) { info_flags |= EntityInfoFlag_HasName; }
if(!!e->disabled) { info_flags |= EntityInfoFlag_HasDisabled; }
if(e->flags & DF_EntityFlag_HasTextPoint) { info_flags |= EntityInfoFlag_HasTxtPt; }
if(e->flags & DF_EntityFlag_HasVAddr) { info_flags |= EntityInfoFlag_HasVAddr; }
if(e->flags & DF_EntityFlag_HasColor) { info_flags |= EntityInfoFlag_HasColor; }
if(!df_entity_is_nil(e->first)) { info_flags |= EntityInfoFlag_HasChildren; }
//- rjf: write entity info
B32 opened_brace = 0;
switch(info_flags)
{
//- rjf: default path -> entity has lots of stuff, so write all info generically
default:
{
opened_brace = 1;
// rjf: write entity title
str8_list_pushf(arena, &strs, "WIP_%S:\n{\n", df_g_entity_kind_name_lower_table[e->kind]);
// rjf: write this entity's info
if(entity_name_escaped.size != 0)
{
str8_list_pushf(arena, &strs, "name: \"%S\"\n", entity_name_escaped);
}
if(e->disabled)
{
str8_list_pushf(arena, &strs, "disabled: 1\n");
}
if(e->flags & DF_EntityFlag_HasColor)
{
Vec4F32 hsva = df_hsva_from_entity(e);
Vec4F32 rgba = rgba_from_hsva(hsva);
U32 rgba_hex = u32_from_rgba(rgba);
str8_list_pushf(arena, &strs, "color: 0x%x\n", rgba_hex);
}
}break;
//- rjf: single-line fast-paths
case EntityInfoFlag_HasName:
{str8_list_pushf(arena, &strs, "WIP_%S: \"%S\"\n", df_g_entity_kind_name_lower_table[e->kind], entity_name_escaped);}break;
case EntityInfoFlag_HasName|EntityInfoFlag_HasTxtPt:
{str8_list_pushf(arena, &strs, "WIP_%S: (\"%S\":%I64d)\n", df_g_entity_kind_name_lower_table[e->kind], entity_name_escaped, e->text_point.line);}break;
//- rjf: empty
case 0:
{}break;
}
// rjf: push
depth += rec.push_count; depth += rec.push_count;
// rjf: pop // rjf: pop
if(rec.push_count == 0)
{ {
DF_Entity *e_popped = e; for(S64 pop_idx = 0; pop_idx < rec.pop_count + opened_brace; pop_idx += 1)
for(S64 pop_idx = 0; pop_idx < rec.pop_count; e_popped = e_popped->parent, pop_idx += 1)
{ {
depth -= 1; if(depth > 0)
str8_list_pushf(arena, &strs, "}\n%s", depth == 0 ? "\n" : ""); {
depth -= 1;
}
str8_list_pushf(arena, &strs, "}\n");
} }
} }
// rjf: separate top-level entities with extra newline
if(df_entity_is_nil(rec.next))
{
str8_list_pushf(arena, &strs, "\n");
}
} }
} }
} }
@@ -5516,8 +5580,8 @@ df_cfg_strings_from_core(Arena *arena, String8 root_path, DF_CfgSrc source)
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
DF_Entity *exe__ent = df_entity_child_from_kind(target, DF_EntityKind_Executable); DF_Entity *exe__ent = df_entity_child_from_kind(target, DF_EntityKind_Executable);
DF_Entity *args__ent = df_entity_child_from_kind(target, DF_EntityKind_Arguments); DF_Entity *args__ent = df_entity_child_from_kind(target, DF_EntityKind_Arguments);
DF_Entity *wdir__ent = df_entity_child_from_kind(target, DF_EntityKind_ExecutionPath); DF_Entity *wdir__ent = df_entity_child_from_kind(target, DF_EntityKind_WorkingDirectory);
DF_Entity *entr__ent = df_entity_child_from_kind(target, DF_EntityKind_EntryPointName); DF_Entity *entr__ent = df_entity_child_from_kind(target, DF_EntityKind_EntryPoint);
String8 label = target->name; String8 label = target->name;
String8 exe = exe__ent->name; String8 exe = exe__ent->name;
String8 exe_normalized = path_normalized_from_string(scratch.arena, exe); String8 exe_normalized = path_normalized_from_string(scratch.arena, exe);
@@ -5621,7 +5685,7 @@ df_cfg_strings_from_core(Arena *arena, String8 root_path, DF_CfgSrc source)
if(bp->cfg_src == source) if(bp->cfg_src == source)
{ {
DF_Entity *file = df_entity_ancestor_from_kind(bp, DF_EntityKind_File); DF_Entity *file = df_entity_ancestor_from_kind(bp, DF_EntityKind_File);
DF_Entity *symb = df_entity_child_from_kind(bp, DF_EntityKind_EntryPointName); DF_Entity *symb = df_entity_child_from_kind(bp, DF_EntityKind_EntryPoint);
DF_Entity *cond = df_entity_child_from_kind(bp, DF_EntityKind_Condition); DF_Entity *cond = df_entity_child_from_kind(bp, DF_EntityKind_Condition);
if(first) if(first)
{ {
@@ -6926,8 +6990,8 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
DF_Entity *target = n->entity; DF_Entity *target = n->entity;
String8 name = df_entity_child_from_kind(target, DF_EntityKind_Executable)->name; String8 name = df_entity_child_from_kind(target, DF_EntityKind_Executable)->name;
String8 args = df_entity_child_from_kind(target, DF_EntityKind_Arguments)->name; String8 args = df_entity_child_from_kind(target, DF_EntityKind_Arguments)->name;
String8 path = df_entity_child_from_kind(target, DF_EntityKind_ExecutionPath)->name; String8 path = df_entity_child_from_kind(target, DF_EntityKind_WorkingDirectory)->name;
String8 entry= df_entity_child_from_kind(target, DF_EntityKind_EntryPointName)->name; String8 entry= df_entity_child_from_kind(target, DF_EntityKind_EntryPoint)->name;
name = str8_skip_chop_whitespace(name); name = str8_skip_chop_whitespace(name);
args = str8_skip_chop_whitespace(args); args = str8_skip_chop_whitespace(args);
path = str8_skip_chop_whitespace(path); path = str8_skip_chop_whitespace(path);
@@ -7409,28 +7473,6 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
arena_clear(df_state->current_path_arena); arena_clear(df_state->current_path_arena);
df_state->current_path = push_str8_copy(df_state->current_path_arena, params.file_path); df_state->current_path = push_str8_copy(df_state->current_path_arena, params.file_path);
}break; }break;
case DF_CoreCmdKind_Open:
{
String8 path = path_normalized_from_string(scratch.arena, params.file_path);
if(path.size == 0)
{
DF_CmdParams p = params;
p.string = str8_lit("File name not specified.");
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_String);
df_cmd_list_push(arena, cmds, &p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Error));
}
else
{
DF_Entity *loaded_file = df_entity_from_path(path, DF_EntityFromPathFlag_OpenAsNeeded|DF_EntityFromPathFlag_OpenMissing);
if(loaded_file->flags & DF_EntityFlag_IsMissing)
{
DF_CmdParams p = params;
p.string = push_str8f(scratch.arena, "Could not load \"%S\".", path);
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_String);
df_cmd_list_push(arena, cmds, &p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Error));
}
}
}break;
//- rjf: config path saving/loading/applying //- rjf: config path saving/loading/applying
case DF_CoreCmdKind_OpenRecentProject: case DF_CoreCmdKind_OpenRecentProject:
@@ -7485,14 +7527,14 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
} }
} }
//- rjf: get config files //- rjf: get config file properties
DF_Entity *cfg_files[DF_CfgSrc_COUNT] = {0}; FileProperties cfg_props[DF_CfgSrc_COUNT] = {0};
if(file_is_okay) if(file_is_okay)
{ {
for(DF_CfgSrc src = (DF_CfgSrc)0; src < DF_CfgSrc_COUNT; src = (DF_CfgSrc)(src+1)) for(DF_CfgSrc src = (DF_CfgSrc)0; src < DF_CfgSrc_COUNT; src = (DF_CfgSrc)(src+1))
{ {
String8 path = df_cfg_path_from_src(src); String8 path = df_cfg_path_from_src(src);
cfg_files[src] = df_entity_from_path(path, DF_EntityFromPathFlag_OpenMissing|DF_EntityFromPathFlag_OpenAsNeeded); cfg_props[src] = os_properties_from_file_path(path);
} }
} }
@@ -7503,8 +7545,7 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
{ {
for(DF_CfgSrc src = (DF_CfgSrc)0; src < DF_CfgSrc_COUNT; src = (DF_CfgSrc)(src+1)) for(DF_CfgSrc src = (DF_CfgSrc)0; src < DF_CfgSrc_COUNT; src = (DF_CfgSrc)(src+1))
{ {
DF_Entity *file_entity = cfg_files[src]; String8 path = df_cfg_path_from_src(src);
String8 path = df_full_path_from_entity(scratch.arena, file_entity);
OS_Handle file = os_file_open(OS_AccessFlag_ShareRead|OS_AccessFlag_Read, path); OS_Handle file = os_file_open(OS_AccessFlag_ShareRead|OS_AccessFlag_Read, path);
FileProperties props = os_properties_from_file(file); FileProperties props = os_properties_from_file(file);
String8 data = os_string_from_file_range(scratch.arena, file, r1u64(0, props.size)); String8 data = os_string_from_file_range(scratch.arena, file, r1u64(0, props.size));
@@ -7523,7 +7564,7 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
{ {
for(DF_CfgSrc src = (DF_CfgSrc)0; src < DF_CfgSrc_COUNT; src = (DF_CfgSrc)(src+1)) for(DF_CfgSrc src = (DF_CfgSrc)0; src < DF_CfgSrc_COUNT; src = (DF_CfgSrc)(src+1))
{ {
cfg_save[src] = (load_cfg[src] && cfg_files[src]->flags & DF_EntityFlag_IsMissing); cfg_save[src] = (load_cfg[src] && cfg_props[src].created == 0);
} }
} }
@@ -7534,7 +7575,7 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
{ {
for(DF_CfgSrc src = (DF_CfgSrc)0; src < DF_CfgSrc_COUNT; src = (DF_CfgSrc)(src+1)) for(DF_CfgSrc src = (DF_CfgSrc)0; src < DF_CfgSrc_COUNT; src = (DF_CfgSrc)(src+1))
{ {
cfg_load[src] = (load_cfg[src] && ((cfg_save[src] == 0 && df_state->cfg_cached_timestamp[src] != cfg_timestamps[src]) || cfg_files[src]->timestamp == 0)); cfg_load[src] = (load_cfg[src] && ((cfg_save[src] == 0 && df_state->cfg_cached_timestamp[src] != cfg_timestamps[src]) || cfg_props[src].created == 0));
cfg_load_any = cfg_load_any || cfg_load[src]; cfg_load_any = cfg_load_any || cfg_load[src];
} }
} }
@@ -7738,8 +7779,8 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
DF_Entity *target__ent = df_entity_alloc(df_entity_root(), DF_EntityKind_Target); DF_Entity *target__ent = df_entity_alloc(df_entity_root(), DF_EntityKind_Target);
DF_Entity *exe__ent = df_entity_alloc(target__ent, DF_EntityKind_Executable); DF_Entity *exe__ent = df_entity_alloc(target__ent, DF_EntityKind_Executable);
DF_Entity *args__ent = df_entity_alloc(target__ent, DF_EntityKind_Arguments); DF_Entity *args__ent = df_entity_alloc(target__ent, DF_EntityKind_Arguments);
DF_Entity *path__ent = df_entity_alloc(target__ent, DF_EntityKind_ExecutionPath); DF_Entity *path__ent = df_entity_alloc(target__ent, DF_EntityKind_WorkingDirectory);
DF_Entity *entry__ent = df_entity_alloc(target__ent, DF_EntityKind_EntryPointName); DF_Entity *entry__ent = df_entity_alloc(target__ent, DF_EntityKind_EntryPoint);
String8 saved_label = label_cfg->first->string; String8 saved_label = label_cfg->first->string;
String8 saved_exe = exe_cfg->first->string; String8 saved_exe = exe_cfg->first->string;
String8 saved_exe_absolute = path_absolute_dst_from_relative_dst_src(scratch.arena, saved_exe, cfg_folder); String8 saved_exe_absolute = path_absolute_dst_from_relative_dst_src(scratch.arena, saved_exe, cfg_folder);
@@ -7895,7 +7936,7 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
if(symb_cfg != &df_g_nil_cfg_node) if(symb_cfg != &df_g_nil_cfg_node)
{ {
String8 symb_raw = df_cfg_raw_from_escaped_string(scratch.arena, symb_cfg->first->string); String8 symb_raw = df_cfg_raw_from_escaped_string(scratch.arena, symb_cfg->first->string);
DF_Entity *symb = df_entity_alloc(bp_ent, DF_EntityKind_EntryPointName); DF_Entity *symb = df_entity_alloc(bp_ent, DF_EntityKind_EntryPoint);
df_entity_equip_name(symb, symb_raw); df_entity_equip_name(symb, symb_raw);
} }
if(labl_cfg->string.size != 0) if(labl_cfg->string.size != 0)
@@ -8265,8 +8306,8 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
case DF_CoreCmdKind_RemoveTarget: case DF_CoreCmdKind_RemoveTarget:
{ {
DF_Entity *entity = df_entity_from_handle(params.entity); DF_Entity *entity = df_entity_from_handle(params.entity);
DF_EntityOpFlags op_flags = df_g_entity_kind_op_flags_table[entity->kind]; DF_EntityKindFlags kind_flags = df_g_entity_kind_flags_table[entity->kind];
if(op_flags & DF_EntityOpFlag_Delete) if(kind_flags & DF_EntityKindFlag_CanDelete)
{ {
df_entity_mark_for_deletion(entity); df_entity_mark_for_deletion(entity);
} }
@@ -8326,25 +8367,47 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
//- rjf: breakpoints //- rjf: breakpoints
case DF_CoreCmdKind_AddBreakpoint: case DF_CoreCmdKind_AddBreakpoint:
case DF_CoreCmdKind_ToggleBreakpoint:
{ {
String8 file_path = params.file_path; String8 file_path = params.file_path;
TxtPt pt = params.text_point; TxtPt pt = params.text_point;
String8 name = params.string; String8 name = params.string;
U64 vaddr = params.vaddr; U64 vaddr = params.vaddr;
DF_Entity *bp = df_entity_alloc(df_entity_root(), DF_EntityKind_Breakpoint); B32 removed_already_existing = 0;
DF_Entity *loc = df_entity_alloc(bp, DF_EntityKind_Location); if(core_cmd_kind == DF_CoreCmdKind_ToggleBreakpoint)
if(file_path.size != 0 && pt.line != 0)
{ {
df_entity_equip_name(loc, file_path); DF_EntityList bps = df_query_cached_entity_list_with_kind(DF_EntityKind_Breakpoint);
df_entity_equip_txt_pt(loc, pt); for(DF_EntityNode *n = bps.first; n != 0; n = n->next)
{
DF_Entity *bp = n->entity;
DF_Entity *loc = df_entity_child_from_kind(bp, DF_EntityKind_Location);
if((loc->flags & DF_EntityFlag_HasTextPoint && path_match_normalized(loc->name, file_path) && loc->text_point.line == pt.line) ||
(loc->flags & DF_EntityFlag_HasVAddr && loc->vaddr == vaddr) ||
(!(loc->flags & DF_EntityFlag_HasTextPoint) && str8_match(loc->name, name, 0)))
{
df_entity_mark_for_deletion(bp);
removed_already_existing = 1;
break;
}
}
} }
else if(name.size != 0) if(!removed_already_existing)
{ {
df_entity_equip_name(loc, name); DF_Entity *bp = df_entity_alloc(df_entity_root(), DF_EntityKind_Breakpoint);
} DF_Entity *loc = df_entity_alloc(bp, DF_EntityKind_Location);
else if(vaddr != 0) if(file_path.size != 0 && pt.line != 0)
{ {
df_entity_equip_vaddr(loc, vaddr); df_entity_equip_name(loc, file_path);
df_entity_equip_txt_pt(loc, pt);
}
else if(name.size != 0)
{
df_entity_equip_name(loc, name);
}
else if(vaddr != 0)
{
df_entity_equip_vaddr(loc, vaddr);
}
} }
}break; }break;
case DF_CoreCmdKind_TextBreakpoint: case DF_CoreCmdKind_TextBreakpoint:
@@ -8415,7 +8478,7 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
String8 function_name = params.string; String8 function_name = params.string;
if(function_name.size != 0) if(function_name.size != 0)
{ {
DF_Entity *symb = df_entity_from_name_and_kind(function_name, DF_EntityKind_EntryPointName); DF_Entity *symb = df_entity_from_name_and_kind(function_name, DF_EntityKind_EntryPoint);
DF_Entity *bp = df_entity_ancestor_from_kind(symb, DF_EntityKind_Breakpoint); DF_Entity *bp = df_entity_ancestor_from_kind(symb, DF_EntityKind_Breakpoint);
if(df_entity_is_nil(bp)) if(df_entity_is_nil(bp))
{ {
@@ -8423,7 +8486,7 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
{ {
bp = df_entity_alloc(df_entity_root(), DF_EntityKind_Breakpoint); bp = df_entity_alloc(df_entity_root(), DF_EntityKind_Breakpoint);
} }
DF_Entity *symbol_name_entity = df_entity_alloc(bp, DF_EntityKind_EntryPointName); DF_Entity *symbol_name_entity = df_entity_alloc(bp, DF_EntityKind_EntryPoint);
df_entity_equip_name(symbol_name_entity, function_name); df_entity_equip_name(symbol_name_entity, function_name);
df_entity_equip_cfg_src(bp, DF_CfgSrc_Project); df_entity_equip_cfg_src(bp, DF_CfgSrc_Project);
} }
@@ -8593,6 +8656,7 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
{ {
entity = df_entity_alloc(df_entity_root(), DF_EntityKind_Target); entity = df_entity_alloc(df_entity_root(), DF_EntityKind_Target);
} }
df_entity_equip_disabled(entity, 1);
df_entity_equip_cfg_src(entity, DF_CfgSrc_Project); df_entity_equip_cfg_src(entity, DF_CfgSrc_Project);
DF_Entity *exe = df_entity_alloc(entity, DF_EntityKind_Executable); DF_Entity *exe = df_entity_alloc(entity, DF_EntityKind_Executable);
df_entity_equip_name(exe, params.file_path); df_entity_equip_name(exe, params.file_path);
@@ -8600,7 +8664,7 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
if(working_dir.size != 0) if(working_dir.size != 0)
{ {
String8 working_dir_path = push_str8f(scratch.arena, "%S/", working_dir); String8 working_dir_path = push_str8f(scratch.arena, "%S/", working_dir);
DF_Entity *execution_path = df_entity_alloc(entity, DF_EntityKind_ExecutionPath); DF_Entity *execution_path = df_entity_alloc(entity, DF_EntityKind_WorkingDirectory);
df_entity_equip_name(execution_path, working_dir_path); df_entity_equip_name(execution_path, working_dir_path);
} }
DF_CmdParams p = params; DF_CmdParams p = params;
@@ -8782,6 +8846,8 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
ctx->reg_alias_map = ctrl_string2alias_from_arch(ctx->arch); ctx->reg_alias_map = ctrl_string2alias_from_arch(ctx->arch);
ctx->locals_map = df_query_cached_locals_map_from_dbgi_key_voff(&primary_dbgi_key, rip_voff); ctx->locals_map = df_query_cached_locals_map_from_dbgi_key_voff(&primary_dbgi_key, rip_voff);
ctx->member_map = df_query_cached_member_map_from_dbgi_key_voff(&primary_dbgi_key, rip_voff); ctx->member_map = df_query_cached_member_map_from_dbgi_key_voff(&primary_dbgi_key, rip_voff);
ctx->ext_map = push_array(arena, E_String2NumMap, 1);
*ctx->ext_map = e_string2num_map_make(arena, 512);
} }
e_select_parse_ctx(parse_ctx); e_select_parse_ctx(parse_ctx);
@@ -8791,6 +8857,27 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
E_IRCtx *ctx = ir_ctx; E_IRCtx *ctx = ir_ctx;
ctx->macro_map = push_array(arena, E_String2ExprMap, 1); ctx->macro_map = push_array(arena, E_String2ExprMap, 1);
ctx->macro_map[0] = e_string2expr_map_make(arena, 512); ctx->macro_map[0] = e_string2expr_map_make(arena, 512);
//- rjf: add macros for constants
{
// rjf: pid -> current process' ID
if(!df_entity_is_nil(process))
{
E_Expr *expr = e_push_expr(arena, E_ExprKind_LeafU64, 0);
expr->u64 = process->ctrl_id;
e_string2expr_map_insert(arena, ctx->macro_map, str8_lit("pid"), expr);
}
// rjf: tid -> current thread's ID
if(!df_entity_is_nil(thread))
{
E_Expr *expr = e_push_expr(arena, E_ExprKind_LeafU64, 0);
expr->u64 = thread->ctrl_id;
e_string2expr_map_insert(arena, ctx->macro_map, str8_lit("tid"), expr);
}
}
//- rjf: add macros for all watches which define identifiers
DF_EntityList watches = df_query_cached_entity_list_with_kind(DF_EntityKind_Watch); DF_EntityList watches = df_query_cached_entity_list_with_kind(DF_EntityKind_Watch);
for(DF_EntityNode *n = watches.first; n != 0; n = n->next) for(DF_EntityNode *n = watches.first; n != 0; n = n->next)
{ {
+25 -26
View File
@@ -74,31 +74,31 @@ struct DF_ExpandTreeTable
typedef U32 DF_EntityKindFlags; typedef U32 DF_EntityKindFlags;
enum enum
{ {
DF_EntityKindFlag_LeafMutationUserConfig = (1<<0), //- rjf: allowed operations
DF_EntityKindFlag_TreeMutationUserConfig = (1<<1), DF_EntityKindFlag_CanDelete = (1<<8),
DF_EntityKindFlag_LeafMutationProjectConfig= (1<<2), DF_EntityKindFlag_CanFreeze = (1<<9),
DF_EntityKindFlag_TreeMutationProjectConfig= (1<<3), DF_EntityKindFlag_CanEdit = (1<<10),
DF_EntityKindFlag_LeafMutationSoftHalt = (1<<4), DF_EntityKindFlag_CanRename = (1<<11),
DF_EntityKindFlag_TreeMutationSoftHalt = (1<<5), DF_EntityKindFlag_CanEnable = (1<<12),
DF_EntityKindFlag_LeafMutationDebugInfoMap = (1<<6), DF_EntityKindFlag_CanCondition = (1<<13),
DF_EntityKindFlag_TreeMutationDebugInfoMap = (1<<7), DF_EntityKindFlag_CanDuplicate = (1<<14),
DF_EntityKindFlag_NameIsCode = (1<<8),
DF_EntityKindFlag_UserDefinedLifetime = (1<<9), //- rjf: mutation -> cascading effects
}; DF_EntityKindFlag_LeafMutUserConfig = (1<<0),
DF_EntityKindFlag_TreeMutUserConfig = (1<<1),
//////////////////////////////// DF_EntityKindFlag_LeafMutProjectConfig = (1<<2),
//~ rjf: Entity Operation Flags DF_EntityKindFlag_TreeMutProjectConfig = (1<<3),
DF_EntityKindFlag_LeafMutSoftHalt = (1<<4),
typedef U32 DF_EntityOpFlags; DF_EntityKindFlag_TreeMutSoftHalt = (1<<5),
enum DF_EntityKindFlag_LeafMutDebugInfoMap = (1<<6),
{ DF_EntityKindFlag_TreeMutDebugInfoMap = (1<<7),
DF_EntityOpFlag_Delete = (1<<0),
DF_EntityOpFlag_Freeze = (1<<1), //- rjf: name categorization
DF_EntityOpFlag_Edit = (1<<2), DF_EntityKindFlag_NameIsCode = (1<<15),
DF_EntityOpFlag_Rename = (1<<3), DF_EntityKindFlag_NameIsPath = (1<<16),
DF_EntityOpFlag_Enable = (1<<4),
DF_EntityOpFlag_Condition = (1<<5), //- rjf: lifetime categorization
DF_EntityOpFlag_Duplicate = (1<<6), DF_EntityKindFlag_UserDefinedLifetime = (1<<17),
}; };
//////////////////////////////// ////////////////////////////////
@@ -110,7 +110,6 @@ enum
DF_EntityFromPathFlag_AllowOverrides = (1<<0), DF_EntityFromPathFlag_AllowOverrides = (1<<0),
DF_EntityFromPathFlag_OpenAsNeeded = (1<<1), DF_EntityFromPathFlag_OpenAsNeeded = (1<<1),
DF_EntityFromPathFlag_OpenMissing = (1<<2), DF_EntityFromPathFlag_OpenMissing = (1<<2),
DF_EntityFromPathFlag_All = 0xffffffff, DF_EntityFromPathFlag_All = 0xffffffff,
}; };
+36 -35
View File
@@ -16,61 +16,67 @@ DF_CfgSrcTable:
//////////////////////////////// ////////////////////////////////
//~ rjf: Entity Kind Tables //~ rjf: Entity Kind Tables
@table(name name_lower op_delete op_freeze op_edit op_rename op_enable op_cond op_dup lf_mut_user_cfg tr_mut_user_cfg lf_mut_prof_cfg tr_mut_prof_cfg lf_mut_halt lf_mut_dbg tr_mut_halt tr_mut_dbg name_is_code user_lifetime name_label icon_kind display_string) @table(name name_lower op_delete op_freeze op_edit op_rename op_enable op_cond op_dup lf_mut_user_cfg tr_mut_user_cfg lf_mut_prof_cfg tr_mut_prof_cfg lf_mut_halt lf_mut_dbg tr_mut_halt tr_mut_dbg name_is_code name_is_path user_lifetime name_label icon_kind display_string)
// | |
// | __________________________________________________________________________________________________________________________________________________________________________________/
// | /
// operations________ mutation cascading__ names lt
// /..................\ /....................\ /...\ |
// dl fz ed rn en cn dp lu tu lp tp lh ld th td nc np ul
DF_EntityKindTable: DF_EntityKindTable:
{ {
{Nil nil 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Nil" } {Nil nil 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Nil" }
{Root root 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Root" } {Root root 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Root" }
{Machine machine 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Machine "Machine" } {Machine machine 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Machine "Machine" }
//- rjf: filesystem modeling //- rjf: filesystem modeling
{File file 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" FileOutline "File" } {File file 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" FileOutline "File" }
{OverrideFileLink override_file_link 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 "Label" FileOutline "Override File Link" } {OverrideFileLink override_file_link 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 "Label" FileOutline "Override File Link" }
//- rjf: auto view rules //- rjf: auto view rules
{AutoViewRule auto_view_rule 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 "Label" Binoculars "Auto View Rule" } {AutoViewRule auto_view_rule 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 "Label" Binoculars "Auto View Rule" }
//- rjf: watch pins //- rjf: watch pins
{WatchPin watch_pin 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 1 "Expression" Pin "Watch Pin" } {WatchPin watch_pin 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 1 "Expression" Pin "Watch Pin" }
//- rjf: watches //- rjf: watches
{Watch watch 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 "Expression" Binoculars "Watch" } {Watch watch 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 1 "Expression" Binoculars "Watch" }
{ViewRule view_rule 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 "Expression" Binoculars "View Rule" } {ViewRule view_rule 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 1 "Expression" Binoculars "View Rule" }
//- rjf: breakpoints //- rjf: breakpoints
{Breakpoint breakpoint 1 0 0 1 1 1 1 0 0 1 0 1 0 0 0 0 1 "Label" CircleFilled "Breakpoint" } {Breakpoint breakpoint 1 0 0 1 1 1 1 0 0 1 0 1 0 0 0 0 0 1 "Label" CircleFilled "Breakpoint" }
{Condition condition 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 "Expression" CircleFilled "Condition" } {Condition condition 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 1 "Expression" CircleFilled "Condition" }
//- rjf: user-controlled locations (source, addresses, symbol names) //- rjf: user-controlled locations (source, addresses, symbol names)
{Location location 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 "Location" Null "Location" } {Location location 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 "Location" Null "Location" }
//- rjf: targets //- rjf: targets
{Target target 1 0 1 1 1 0 1 0 0 1 0 0 0 0 0 0 1 "Label" Target "Target" } {Target target 1 0 1 1 1 0 1 0 0 1 0 0 0 0 0 0 0 1 "Label" Target "Target" }
{Executable executable 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 "Executable" Null "Executable" } {Executable executable 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 "Executable" Null "Executable" }
{Arguments arguments 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 "Arguments" Null "Arguments" } {Arguments arguments 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 "Arguments" Null "Arguments" }
{ExecutionPath execution_path 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 "Execution Path" Null "Execution Path" } {WorkingDirectory working_directory 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 "Execution Path" Null "Working Directory" }
{EntryPointName entry_point_name 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 "Symbol Name" Null "Entry Point Name" } {EntryPoint entry_point 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 "Symbol Name" Null "Entry Point" }
//- rjf: recent projects //- rjf: recent projects
{RecentProject recent_project 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 "Path" Briefcase "Recent Project" } {RecentProject recent_project 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 "Path" Briefcase "Recent Project" }
//- rjf: src -> dst mapping //- rjf: src -> dst mapping
{Source source 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Path" Null "Source" } {Source source 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Path" Null "Source" }
{Dest dest 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Path" Null "Destination" } {Dest dest 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Path" Null "Destination" }
//- rjf: control system entities //- rjf: control system entities
{Process process 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Threads "Process" } {Process process 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Threads "Process" }
{Thread thread 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Thread "Thread" } {Thread thread 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Thread "Thread" }
{Module module 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Module "Module" } {Module module 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Module "Module" }
{PendingThreadName pending_thread_name 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Threads "Pending Thread Name" } {PendingThreadName pending_thread_name 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Threads "Pending Thread Name" }
{DebugInfoPath debug_info_path 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Module "Debug Info Path" } {DebugInfoPath debug_info_path 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Module "Debug Info Path" }
//- rjf: parser task entities //- rjf: parser task entities
{ConversionTask conversion_task 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Conversion Task" } {ConversionTask conversion_task 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Conversion Task" }
{ConversionFail conversion_fail 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Conversion Failure" } {ConversionFail conversion_fail 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Conversion Failure" }
//- rjf: history //- rjf: history
{EndedProcess ended_process 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "EndedProcess" } {EndedProcess ended_process 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "EndedProcess" }
} }
//////////////////////////////// ////////////////////////////////
@@ -711,12 +717,7 @@ DF_DevToggleTable:
@data(DF_EntityKindFlags) df_g_entity_kind_flags_table: @data(DF_EntityKindFlags) df_g_entity_kind_flags_table:
{ {
@expand(DF_EntityKindTable a) `($(a.lf_mut_user_cfg)*DF_EntityKindFlag_LeafMutationUserConfig | $(a.lf_mut_prof_cfg)*DF_EntityKindFlag_LeafMutationProjectConfig | $(a.lf_mut_halt)*DF_EntityKindFlag_LeafMutationSoftHalt | $(a.lf_mut_dbg)*DF_EntityKindFlag_LeafMutationDebugInfoMap | $(a.tr_mut_user_cfg)*DF_EntityKindFlag_TreeMutationUserConfig | $(a.tr_mut_prof_cfg)*DF_EntityKindFlag_TreeMutationProjectConfig | $(a.tr_mut_halt)*DF_EntityKindFlag_TreeMutationSoftHalt | $(a.tr_mut_dbg)*DF_EntityKindFlag_TreeMutationDebugInfoMap | $(a.name_is_code)*DF_EntityKindFlag_NameIsCode | $(a.user_lifetime)*DF_EntityKindFlag_UserDefinedLifetime)`, @expand(DF_EntityKindTable a) `($(a.op_delete)*DF_EntityKindFlag_CanDelete) | ($(a.op_freeze)*DF_EntityKindFlag_CanFreeze) | ($(a.op_edit)*DF_EntityKindFlag_CanEdit) | ($(a.op_rename)*DF_EntityKindFlag_CanRename) | ($(a.op_enable)*DF_EntityKindFlag_CanEnable) | ($(a.op_cond)*DF_EntityKindFlag_CanCondition) | ($(a.op_dup)*DF_EntityKindFlag_CanDuplicate) | ($(a.lf_mut_user_cfg)*DF_EntityKindFlag_LeafMutUserConfig | $(a.lf_mut_prof_cfg)*DF_EntityKindFlag_LeafMutProjectConfig | $(a.lf_mut_halt)*DF_EntityKindFlag_LeafMutSoftHalt | $(a.lf_mut_dbg)*DF_EntityKindFlag_LeafMutDebugInfoMap | $(a.tr_mut_user_cfg)*DF_EntityKindFlag_TreeMutUserConfig | $(a.tr_mut_prof_cfg)*DF_EntityKindFlag_TreeMutProjectConfig | $(a.tr_mut_halt)*DF_EntityKindFlag_TreeMutSoftHalt | $(a.tr_mut_dbg)*DF_EntityKindFlag_TreeMutDebugInfoMap | $(a.name_is_code)*DF_EntityKindFlag_NameIsCode | $(a.name_is_path)*DF_EntityKindFlag_NameIsPath | $(a.user_lifetime)*DF_EntityKindFlag_UserDefinedLifetime)`,
}
@data(DF_EntityOpFlags) df_g_entity_kind_op_flags_table:
{
@expand(DF_EntityKindTable a) `($(a.op_delete)*DF_EntityOpFlag_Delete) | ($(a.op_freeze)*DF_EntityOpFlag_Freeze) | ($(a.op_edit)*DF_EntityOpFlag_Edit) | ($(a.op_rename)*DF_EntityOpFlag_Rename) | ($(a.op_enable)*DF_EntityOpFlag_Enable) | ($(a.op_cond)*DF_EntityOpFlag_Condition) | ($(a.op_dup)*DF_EntityOpFlag_Duplicate)`,
} }
//- rjf: config source tables //- rjf: config source tables
+32 -64
View File
@@ -81,8 +81,8 @@ str8_lit_comp("Location"),
str8_lit_comp("Target"), str8_lit_comp("Target"),
str8_lit_comp("Executable"), str8_lit_comp("Executable"),
str8_lit_comp("Arguments"), str8_lit_comp("Arguments"),
str8_lit_comp("Execution Path"), str8_lit_comp("Working Directory"),
str8_lit_comp("Entry Point Name"), str8_lit_comp("Entry Point"),
str8_lit_comp("Recent Project"), str8_lit_comp("Recent Project"),
str8_lit_comp("Source"), str8_lit_comp("Source"),
str8_lit_comp("Destination"), str8_lit_comp("Destination"),
@@ -113,8 +113,8 @@ str8_lit_comp("location"),
str8_lit_comp("target"), str8_lit_comp("target"),
str8_lit_comp("executable"), str8_lit_comp("executable"),
str8_lit_comp("arguments"), str8_lit_comp("arguments"),
str8_lit_comp("execution_path"), str8_lit_comp("working_directory"),
str8_lit_comp("entry_point_name"), str8_lit_comp("entry_point"),
str8_lit_comp("recent_project"), str8_lit_comp("recent_project"),
str8_lit_comp("source"), str8_lit_comp("source"),
str8_lit_comp("dest"), str8_lit_comp("dest"),
@@ -162,66 +162,34 @@ str8_lit_comp("Label"),
DF_EntityKindFlags df_g_entity_kind_flags_table[28] = DF_EntityKindFlags df_g_entity_kind_flags_table[28] =
{ {
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (1*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (1*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(1*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (1*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 1*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (1*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (1*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (1*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 1*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 1*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (1*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (1*DF_EntityKindFlag_CanRename) | (1*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (1*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 1*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 1*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (1*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (1*DF_EntityKindFlag_CanRename) | (1*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (1*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 1*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 1*DF_EntityKindFlag_LeafMutationProjectConfig | 1*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (1*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (1*DF_EntityKindFlag_CanRename) | (1*DF_EntityKindFlag_CanEnable) | (1*DF_EntityKindFlag_CanCondition) | (1*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 1*DF_EntityKindFlag_LeafMutProjectConfig | 1*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 1*DF_EntityKindFlag_LeafMutationProjectConfig | 1*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 1*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 1*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 1*DF_EntityKindFlag_LeafMutProjectConfig | 1*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 1*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 1*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 1*DF_EntityKindFlag_LeafMutationProjectConfig | 1*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 1*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 1*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 1*DF_EntityKindFlag_LeafMutProjectConfig | 1*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 1*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 1*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 1*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (1*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (1*DF_EntityKindFlag_CanEdit) | (1*DF_EntityKindFlag_CanRename) | (1*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (1*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 1*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 1*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 1*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 1*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 1*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 1*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 1*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 1*DF_EntityKindFlag_LeafMutationProjectConfig | 1*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 1*DF_EntityKindFlag_LeafMutProjectConfig | 1*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 1*DF_EntityKindFlag_UserDefinedLifetime),
(1*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 1*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (1*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 1*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 1*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (1*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (1*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (1*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (1*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (0*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (1*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (1*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProjectConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProjectConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (1*DF_EntityKindFlag_CanDelete) | (0*DF_EntityKindFlag_CanFreeze) | (0*DF_EntityKindFlag_CanEdit) | (1*DF_EntityKindFlag_CanRename) | (0*DF_EntityKindFlag_CanEnable) | (0*DF_EntityKindFlag_CanCondition) | (0*DF_EntityKindFlag_CanDuplicate) | (0*DF_EntityKindFlag_LeafMutUserConfig | 0*DF_EntityKindFlag_LeafMutProjectConfig | 0*DF_EntityKindFlag_LeafMutSoftHalt | 0*DF_EntityKindFlag_LeafMutDebugInfoMap | 0*DF_EntityKindFlag_TreeMutUserConfig | 0*DF_EntityKindFlag_TreeMutProjectConfig | 0*DF_EntityKindFlag_TreeMutSoftHalt | 0*DF_EntityKindFlag_TreeMutDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_NameIsPath | 0*DF_EntityKindFlag_UserDefinedLifetime),
};
DF_EntityOpFlags df_g_entity_kind_op_flags_table[28] =
{
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (1*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(1*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (1*DF_EntityOpFlag_Duplicate),
(1*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (1*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (1*DF_EntityOpFlag_Duplicate),
(1*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (1*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (1*DF_EntityOpFlag_Duplicate),
(1*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (1*DF_EntityOpFlag_Enable) | (1*DF_EntityOpFlag_Condition) | (1*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(1*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (1*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (1*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (1*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (1*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (1*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
(1*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
}; };
String8 df_g_cfg_src_string_table[4] = String8 df_g_cfg_src_string_table[4] =
+2 -3
View File
@@ -32,8 +32,8 @@ DF_EntityKind_Location,
DF_EntityKind_Target, DF_EntityKind_Target,
DF_EntityKind_Executable, DF_EntityKind_Executable,
DF_EntityKind_Arguments, DF_EntityKind_Arguments,
DF_EntityKind_ExecutionPath, DF_EntityKind_WorkingDirectory,
DF_EntityKind_EntryPointName, DF_EntityKind_EntryPoint,
DF_EntityKind_RecentProject, DF_EntityKind_RecentProject,
DF_EntityKind_Source, DF_EntityKind_Source,
DF_EntityKind_Dest, DF_EntityKind_Dest,
@@ -472,7 +472,6 @@ extern String8 df_g_entity_kind_display_string_table[28];
extern String8 df_g_entity_kind_name_lower_table[28]; extern String8 df_g_entity_kind_name_lower_table[28];
extern String8 df_g_entity_kind_name_label_table[28]; extern String8 df_g_entity_kind_name_label_table[28];
extern DF_EntityKindFlags df_g_entity_kind_flags_table[28]; extern DF_EntityKindFlags df_g_entity_kind_flags_table[28];
extern DF_EntityOpFlags df_g_entity_kind_op_flags_table[28];
extern String8 df_g_cfg_src_string_table[4]; extern String8 df_g_cfg_src_string_table[4];
extern DF_CoreCmdKind df_g_cfg_src_load_cmd_kind_table[4]; extern DF_CoreCmdKind df_g_cfg_src_load_cmd_kind_table[4];
extern DF_CoreCmdKind df_g_cfg_src_write_cmd_kind_table[4]; extern DF_CoreCmdKind df_g_cfg_src_write_cmd_kind_table[4];
+28 -20
View File
@@ -2068,10 +2068,21 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
//- rjf: files //- rjf: files
case DF_CoreCmdKind_Open: case DF_CoreCmdKind_Open:
{ {
DF_CmdParams p = params; String8 path = params.file_path;
p.window = df_handle_from_window(ws); FileProperties props = os_properties_from_file_path(path);
p.panel = df_handle_from_panel(ws->focused_panel); if(props.created != 0)
df_cmd_list_push(arena, cmds, &p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_PendingFile)); {
DF_CmdParams p = params;
p.window = df_handle_from_window(ws);
p.panel = df_handle_from_panel(ws->focused_panel);
df_cmd_list_push(arena, cmds, &p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_PendingFile));
}
else
{
DF_CmdParams p = df_cmd_params_zero();
p.string = push_str8f(scratch.arena, "Couldn't open file at \"%S\".", path);
df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Error));
}
}break; }break;
case DF_CoreCmdKind_Switch: case DF_CoreCmdKind_Switch:
{ {
@@ -2741,7 +2752,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
if(name_resolved == 0) if(name_resolved == 0)
{ {
DF_CmdParams p = params; DF_CmdParams p = params;
p.string = push_str8f(scratch.arena, "\"%S\" could not be found.", name); p.string = push_str8f(scratch.arena, "`%S` could not be found.", name);
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_String); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_String);
df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Error)); df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Error));
} }
@@ -3866,7 +3877,6 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
DF_Entity *entity = df_entity_from_handle(ws->entity_ctx_menu_entity); DF_Entity *entity = df_entity_from_handle(ws->entity_ctx_menu_entity);
DF_IconKind entity_icon = df_g_entity_kind_icon_kind_table[entity->kind]; DF_IconKind entity_icon = df_g_entity_kind_icon_kind_table[entity->kind];
DF_EntityKindFlags kind_flags = df_g_entity_kind_flags_table[entity->kind]; DF_EntityKindFlags kind_flags = df_g_entity_kind_flags_table[entity->kind];
DF_EntityOpFlags op_flags = df_g_entity_kind_op_flags_table[entity->kind];
String8 display_name = df_display_string_from_entity(scratch.arena, entity); String8 display_name = df_display_string_from_entity(scratch.arena, entity);
// rjf: title // rjf: title
@@ -3899,7 +3909,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
DF_Palette(ws, DF_PaletteCode_Floating) ui_divider(ui_em(1.f, 1.f)); DF_Palette(ws, DF_PaletteCode_Floating) ui_divider(ui_em(1.f, 1.f));
// rjf: name editor // rjf: name editor
if(op_flags & DF_EntityOpFlag_Rename) UI_TextPadding(ui_top_font_size()*1.5f) if(kind_flags & DF_EntityKindFlag_CanRename) UI_TextPadding(ui_top_font_size()*1.5f)
{ {
UI_Signal sig = df_line_editf(ws, DF_LineEditFlag_Border, 0, 0, &ws->entity_ctx_menu_input_cursor, &ws->entity_ctx_menu_input_mark, ws->entity_ctx_menu_input_buffer, sizeof(ws->entity_ctx_menu_input_buffer), &ws->entity_ctx_menu_input_size, 0, entity->name, "%S###entity_name_edit_%p", df_g_entity_kind_name_label_table[entity->kind], entity); UI_Signal sig = df_line_editf(ws, DF_LineEditFlag_Border, 0, 0, &ws->entity_ctx_menu_input_cursor, &ws->entity_ctx_menu_input_mark, ws->entity_ctx_menu_input_buffer, sizeof(ws->entity_ctx_menu_input_buffer), &ws->entity_ctx_menu_input_size, 0, entity->name, "%S###entity_name_edit_%p", df_g_entity_kind_name_label_table[entity->kind], entity);
if(ui_committed(sig)) if(ui_committed(sig))
@@ -3914,7 +3924,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
} }
// rjf: condition editor // rjf: condition editor
if(op_flags & DF_EntityOpFlag_Condition) if(kind_flags & DF_EntityKindFlag_CanCondition)
DF_Font(ws, DF_FontSlot_Code) DF_Font(ws, DF_FontSlot_Code)
UI_TextPadding(ui_top_font_size()*1.5f) UI_TextPadding(ui_top_font_size()*1.5f)
{ {
@@ -4013,7 +4023,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
} }
// rjf: duplicate // rjf: duplicate
if(op_flags & DF_EntityOpFlag_Duplicate && ui_clicked(df_icon_buttonf(ws, DF_IconKind_XSplit, 0, "Duplicate"))) if(kind_flags & DF_EntityKindFlag_CanDuplicate && ui_clicked(df_icon_buttonf(ws, DF_IconKind_XSplit, 0, "Duplicate")))
{ {
DF_CmdParams params = df_cmd_params_from_window(ws); DF_CmdParams params = df_cmd_params_from_window(ws);
params.entity = df_handle_from_entity(entity); params.entity = df_handle_from_entity(entity);
@@ -4023,7 +4033,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
} }
// rjf: edit // rjf: edit
if(op_flags & DF_EntityOpFlag_Edit && ui_clicked(df_icon_buttonf(ws, DF_IconKind_Pencil, 0, "Edit"))) if(kind_flags & DF_EntityKindFlag_CanEdit && ui_clicked(df_icon_buttonf(ws, DF_IconKind_Pencil, 0, "Edit")))
{ {
DF_CmdParams params = df_cmd_params_from_window(ws); DF_CmdParams params = df_cmd_params_from_window(ws);
params.entity = df_handle_from_entity(entity); params.entity = df_handle_from_entity(entity);
@@ -4033,7 +4043,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
} }
// rjf: deletion // rjf: deletion
if(op_flags & DF_EntityOpFlag_Delete && ui_clicked(df_icon_buttonf(ws, DF_IconKind_Trash, 0, "Delete"))) if(kind_flags & DF_EntityKindFlag_CanDelete && ui_clicked(df_icon_buttonf(ws, DF_IconKind_Trash, 0, "Delete")))
{ {
DF_CmdParams params = df_cmd_params_from_window(ws); DF_CmdParams params = df_cmd_params_from_window(ws);
params.entity = df_handle_from_entity(entity); params.entity = df_handle_from_entity(entity);
@@ -4043,7 +4053,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
} }
// rjf: enabling // rjf: enabling
if(op_flags & DF_EntityOpFlag_Enable) if(kind_flags & DF_EntityKindFlag_CanEnable)
{ {
B32 is_enabled = !entity->disabled; B32 is_enabled = !entity->disabled;
if(!is_enabled && ui_clicked(df_icon_buttonf(ws, DF_IconKind_CheckHollow, 0, "Enable###enabler"))) if(!is_enabled && ui_clicked(df_icon_buttonf(ws, DF_IconKind_CheckHollow, 0, "Enable###enabler")))
@@ -4063,7 +4073,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
} }
// rjf: freezing // rjf: freezing
if(op_flags & DF_EntityOpFlag_Freeze) if(kind_flags & DF_EntityKindFlag_CanFreeze)
{ {
B32 is_frozen = df_entity_is_frozen(entity); B32 is_frozen = df_entity_is_frozen(entity);
ui_set_next_palette(df_palette_from_code(ws, is_frozen ? DF_PaletteCode_NegativePopButton : DF_PaletteCode_PositivePopButton)); ui_set_next_palette(df_palette_from_code(ws, is_frozen ? DF_PaletteCode_NegativePopButton : DF_PaletteCode_PositivePopButton));
@@ -5825,7 +5835,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
DF_Font(ws, DF_FontSlot_Icons) DF_Font(ws, DF_FontSlot_Icons)
UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons)) UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons))
ui_label(df_g_icon_kind_text_table[DF_IconKind_WarningBig]); ui_label(df_g_icon_kind_text_table[DF_IconKind_WarningBig]);
ui_label(error_string); df_label(error_string);
} }
} }
} }
@@ -10648,7 +10658,6 @@ df_entity_desc_button(DF_Window *ws, DF_Entity *entity, FuzzyMatchRangeList *nam
UI_Parent(box) UI_PrefWidth(ui_text_dim(10, 0)) UI_Padding(ui_em(1.f, 1.f)) UI_Parent(box) UI_PrefWidth(ui_text_dim(10, 0)) UI_Padding(ui_em(1.f, 1.f))
{ {
DF_EntityKindFlags kind_flags = df_g_entity_kind_flags_table[entity->kind]; DF_EntityKindFlags kind_flags = df_g_entity_kind_flags_table[entity->kind];
DF_EntityOpFlags op_flags = df_g_entity_kind_op_flags_table[entity->kind];
DF_IconKind icon = df_g_entity_kind_icon_kind_table[entity->kind]; DF_IconKind icon = df_g_entity_kind_icon_kind_table[entity->kind];
Vec4F32 entity_color = palette->colors[UI_ColorCode_Text]; Vec4F32 entity_color = palette->colors[UI_ColorCode_Text];
Vec4F32 entity_color_weak = palette->colors[UI_ColorCode_TextWeak]; Vec4F32 entity_color_weak = palette->colors[UI_ColorCode_TextWeak];
@@ -10702,7 +10711,7 @@ df_entity_desc_button(DF_Window *ws, DF_Entity *entity, FuzzyMatchRangeList *nam
DF_Entity *args = df_entity_child_from_kind(entity, DF_EntityKind_Arguments); DF_Entity *args = df_entity_child_from_kind(entity, DF_EntityKind_Arguments);
ui_label(args->name); ui_label(args->name);
} }
if(op_flags & DF_EntityOpFlag_Enable && entity->disabled) UI_FlagsAdd(UI_BoxFlag_DrawTextWeak) UI_FontSize(ui_top_font_size()*0.95f) UI_HeightFill if(kind_flags & DF_EntityKindFlag_CanEnable && entity->disabled) UI_FlagsAdd(UI_BoxFlag_DrawTextWeak) UI_FontSize(ui_top_font_size()*0.95f) UI_HeightFill
{ {
ui_label(str8_lit("(Disabled)")); ui_label(str8_lit("(Disabled)"));
} }
@@ -10955,16 +10964,16 @@ internal UI_BOX_CUSTOM_DRAW(df_bp_box_draw_extensions)
F32 remap_px_delta = u->remap_px_delta; F32 remap_px_delta = u->remap_px_delta;
F32 circle_advance = f_dim_from_tag_size_string(box->font, box->font_size, 0, 0, df_g_icon_kind_text_table[DF_IconKind_CircleFilled]).x; F32 circle_advance = f_dim_from_tag_size_string(box->font, box->font_size, 0, 0, df_g_icon_kind_text_table[DF_IconKind_CircleFilled]).x;
Vec2F32 bp_text_pos = ui_box_text_position(box); Vec2F32 bp_text_pos = ui_box_text_position(box);
Vec2F32 bp_center = v2f32(bp_text_pos.x + circle_advance/2 + circle_advance/8.f, bp_text_pos.y); Vec2F32 bp_center = v2f32(bp_text_pos.x + circle_advance/2, bp_text_pos.y);
F_Metrics icon_font_metrics = f_metrics_from_tag_size(box->font, box->font_size); F_Metrics icon_font_metrics = f_metrics_from_tag_size(box->font, box->font_size);
F32 icon_font_line_height = f_line_height_from_metrics(&icon_font_metrics); F32 icon_font_line_height = f_line_height_from_metrics(&icon_font_metrics);
F32 remap_bar_thickness = 0.3f*ui_top_font_size(); F32 remap_bar_thickness = 0.3f*ui_top_font_size();
Vec4F32 remap_color = u->color; Vec4F32 remap_color = u->color;
remap_color.w *= 0.3f; remap_color.w *= 0.3f;
R_Rect2DInst *inst = d_rect(r2f32p(bp_center.x - remap_bar_thickness, R_Rect2DInst *inst = d_rect(r2f32p(bp_center.x - remap_bar_thickness,
bp_center.y + ClampTop(remap_px_delta, 0) - remap_bar_thickness, bp_center.y + ClampTop(remap_px_delta, 0) + remap_bar_thickness,
bp_center.x + remap_bar_thickness, bp_center.x + remap_bar_thickness,
bp_center.y + ClampBot(remap_px_delta, 0) + remap_bar_thickness), bp_center.y + ClampBot(remap_px_delta, 0) - remap_bar_thickness),
remap_color, 2.f, 0, 1.f); remap_color, 2.f, 0, 1.f);
d_text(box->font, box->font_size, 0, 0, F_RasterFlag_Smooth, d_text(box->font, box->font_size, 0, 0, F_RasterFlag_Smooth,
v2f32(bp_text_pos.x, v2f32(bp_text_pos.x,
@@ -13985,7 +13994,6 @@ df_gfx_begin_frame(Arena *arena, DF_CmdList *cmds)
// rjf: insert // rjf: insert
if(!df_view_is_nil(view)) if(!df_view_is_nil(view))
{ {
DF_Entity *current_project = df_entity_from_path(df_cfg_path_from_src(DF_CfgSrc_Project), DF_EntityFromPathFlag_OpenMissing|DF_EntityFromPathFlag_OpenAsNeeded);
df_panel_insert_tab_view(panel, panel->last_tab_view, view); df_panel_insert_tab_view(panel, panel->last_tab_view, view);
if(view_is_selected) if(view_is_selected)
{ {
+8 -8
View File
@@ -4198,7 +4198,7 @@ DF_VIEW_UI_FUNCTION_DEF(Target)
ProfBeginFunction(); ProfBeginFunction();
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
DF_Entity *entity = df_entity_from_handle(view->params_entity); DF_Entity *entity = df_entity_from_handle(view->params_entity);
DF_EntityList custom_entry_points = df_push_entity_child_list_with_kind(scratch.arena, entity, DF_EntityKind_EntryPointName); DF_EntityList custom_entry_points = df_push_entity_child_list_with_kind(scratch.arena, entity, DF_EntityKind_EntryPoint);
F32 row_height_px = floor_f32(ui_top_font_size()*2.5f); F32 row_height_px = floor_f32(ui_top_font_size()*2.5f);
//- rjf: grab state //- rjf: grab state
@@ -4222,11 +4222,11 @@ DF_VIEW_UI_FUNCTION_DEF(Target)
} }
kv_info[] = kv_info[] =
{ {
{ 0, 0, 0, str8_lit("Label"), DF_EntityKind_Nil, entity->name }, { 0, 0, 0, str8_lit("Label"), DF_EntityKind_Nil, entity->name },
{ 1, 0, 0, str8_lit("Executable"), DF_EntityKind_Executable, df_entity_child_from_kind(entity, DF_EntityKind_Executable)->name }, { 1, 0, 0, str8_lit("Executable"), DF_EntityKind_Executable, df_entity_child_from_kind(entity, DF_EntityKind_Executable)->name },
{ 0, 0, 0, str8_lit("Arguments"), DF_EntityKind_Arguments, df_entity_child_from_kind(entity, DF_EntityKind_Arguments)->name }, { 0, 0, 0, str8_lit("Arguments"), DF_EntityKind_Arguments, df_entity_child_from_kind(entity, DF_EntityKind_Arguments)->name },
{ 0, 1, 0, str8_lit("Working Directory"), DF_EntityKind_ExecutionPath, df_entity_child_from_kind(entity, DF_EntityKind_ExecutionPath)->name }, { 0, 1, 0, str8_lit("Working Directory"), DF_EntityKind_WorkingDirectory, df_entity_child_from_kind(entity, DF_EntityKind_WorkingDirectory)->name },
{ 0, 0, 1, str8_lit("Entry Point Override"), DF_EntityKind_EntryPointName, df_entity_child_from_kind(entity, DF_EntityKind_EntryPointName)->name }, { 0, 0, 1, str8_lit("Entry Point Override"), DF_EntityKind_EntryPoint, df_entity_child_from_kind(entity, DF_EntityKind_EntryPoint)->name },
}; };
//- rjf: take controls to start/end editing //- rjf: take controls to start/end editing
@@ -4312,7 +4312,7 @@ DF_VIEW_UI_FUNCTION_DEF(Target)
//- rjf: key (label) //- rjf: key (label)
UI_TableCell UI_FlagsAdd(UI_BoxFlag_DrawTextWeak) UI_TableCell UI_FlagsAdd(UI_BoxFlag_DrawTextWeak)
{ {
if(kv_info[idx].storage_child_kind == DF_EntityKind_EntryPointName) if(kv_info[idx].storage_child_kind == DF_EntityKind_EntryPoint)
{ {
if(df_help_label(str8_lit("Custom Entry Point"))) UI_Tooltip if(df_help_label(str8_lit("Custom Entry Point"))) UI_Tooltip
{ {
@@ -7918,7 +7918,7 @@ DF_VIEW_UI_FUNCTION_DEF(Breakpoints)
B32 loc_is_code = 0; B32 loc_is_code = 0;
String8 loc_string = {0}; String8 loc_string = {0};
DF_Entity *file_parent = df_entity_ancestor_from_kind(entity, DF_EntityKind_File); DF_Entity *file_parent = df_entity_ancestor_from_kind(entity, DF_EntityKind_File);
DF_Entity *symbol_name = df_entity_child_from_kind(entity, DF_EntityKind_EntryPointName); DF_Entity *symbol_name = df_entity_child_from_kind(entity, DF_EntityKind_EntryPoint);
if(!df_entity_is_nil(file_parent)) if(!df_entity_is_nil(file_parent))
{ {
loc_string = push_str8f(scratch.arena, "%S:%I64u:%I64u", file_parent->name, entity->text_point.line, entity->text_point.column); loc_string = push_str8f(scratch.arena, "%S:%I64u:%I64u", file_parent->name, entity->text_point.line, entity->text_point.column);
+2 -1
View File
@@ -105,6 +105,8 @@ E_ExprKindTable:
{ LeafU64 "U64" } { LeafU64 "U64" }
{ LeafF64 "F64" } { LeafF64 "F64" }
{ LeafF32 "F32" } { LeafF32 "F32" }
{ LeafIdent "leaf_ident" }
{ LeafExt "leaf_ext" }
{ TypeIdent "type_ident" } { TypeIdent "type_ident" }
{ Ptr "ptr" } { Ptr "ptr" }
@@ -112,7 +114,6 @@ E_ExprKindTable:
{ Func "function" } { Func "function" }
{ Define "=" } { Define "=" }
{ LeafIdent "leaf_ident" }
} }
@table(name display_string) @table(name display_string)
+23 -16
View File
@@ -1081,6 +1081,29 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
result.mode = E_Mode_Value; result.mode = E_Mode_Value;
}break; }break;
//- rjf: leaf identifiers
case E_ExprKind_LeafIdent:
{
E_Expr *macro_expr = e_expr_from_string(e_ir_ctx->macro_map, expr->string);
if(macro_expr == &e_expr_nil)
{
e_msgf(arena, &result.msgs, E_MsgKind_ResolutionFailure, expr->location, "`%S` could not be found.", expr->string);
}
else
{
e_string2expr_map_inc_poison(e_ir_ctx->macro_map, expr->string);
result = e_irtree_and_type_from_expr(arena, macro_expr);
e_string2expr_map_dec_poison(e_ir_ctx->macro_map, expr->string);
}
}break;
//- rjf: leaf externals
case E_ExprKind_LeafExt:
{
result.root = e_irtree_const_u(arena, expr->u64);
result.mode = E_Mode_Ext;
}break;
//- rjf: types //- rjf: types
case E_ExprKind_TypeIdent: case E_ExprKind_TypeIdent:
{ {
@@ -1109,22 +1132,6 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
} }
}break; }break;
//- rjf: leaf identifiers
case E_ExprKind_LeafIdent:
{
E_Expr *macro_expr = e_expr_from_string(e_ir_ctx->macro_map, expr->string);
if(macro_expr == &e_expr_nil)
{
e_msgf(arena, &result.msgs, E_MsgKind_ResolutionFailure, expr->location, "`%S` could not be found.", expr->string);
}
else
{
e_string2expr_map_inc_poison(e_ir_ctx->macro_map, expr->string);
result = e_irtree_and_type_from_expr(arena, macro_expr);
e_string2expr_map_dec_poison(e_ir_ctx->macro_map, expr->string);
}
}break;
} }
return result; return result;
+19 -1
View File
@@ -1174,6 +1174,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
REGS_AliasCode alias_code = 0; REGS_AliasCode alias_code = 0;
E_TypeKey type_key = zero_struct; E_TypeKey type_key = zero_struct;
String8 local_lookup_string = token_string; String8 local_lookup_string = token_string;
U64 ext_num = 0;
//- rjf: form namespaceified fallback versions of this lookup string //- rjf: form namespaceified fallback versions of this lookup string
String8List namespaceified_token_strings = {0}; String8List namespaceified_token_strings = {0};
@@ -1413,6 +1414,16 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
} }
} }
//- rjf: try external map
if(mapped_identifier == 0)
{
ext_num = e_num_from_string(e_parse_ctx->ext_map, token_string);
if(ext_num != 0)
{
mapped_identifier = 1;
}
}
//- rjf: try types //- rjf: try types
if(mapped_identifier == 0) if(mapped_identifier == 0)
{ {
@@ -1434,7 +1445,14 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
{ {
default: default:
{ {
if(identifier_looks_like_type_expr) if(ext_num != 0)
{
atom = e_push_expr(arena, E_ExprKind_LeafExt, token_string.str);
atom->mode = E_Mode_Ext;
atom->string = token_string;
atom->u64 = ext_num;
}
else if(identifier_looks_like_type_expr)
{ {
E_TokenArray type_parse_tokens = e_token_array_make_first_opl(it-1, it_opl); E_TokenArray type_parse_tokens = e_token_array_make_first_opl(it-1, it_opl);
E_Parse type_parse = e_parse_type_from_text_tokens(arena, text, &type_parse_tokens); E_Parse type_parse = e_parse_type_from_text_tokens(arena, text, &type_parse_tokens);
+2
View File
@@ -98,6 +98,7 @@ typedef enum E_Mode
E_Mode_Addr, E_Mode_Addr,
E_Mode_Reg, E_Mode_Reg,
E_Mode_InlineData, E_Mode_InlineData,
E_Mode_Ext,
} }
E_Mode; E_Mode;
@@ -205,6 +206,7 @@ struct E_ParseCtx
E_String2NumMap *reg_alias_map; E_String2NumMap *reg_alias_map;
E_String2NumMap *locals_map; // (within `rdis[rdis_primary_idx]`) E_String2NumMap *locals_map; // (within `rdis[rdis_primary_idx]`)
E_String2NumMap *member_map; // (within `rdis[rdis_primary_idx]`) E_String2NumMap *member_map; // (within `rdis[rdis_primary_idx]`)
E_String2NumMap *ext_map;
}; };
//////////////////////////////// ////////////////////////////////
+6 -4
View File
@@ -4,7 +4,7 @@
//- GENERATED CODE //- GENERATED CODE
C_LINKAGE_BEGIN C_LINKAGE_BEGIN
String8 e_expr_kind_strings[41] = String8 e_expr_kind_strings[42] =
{ {
str8_lit_comp("Nil"), str8_lit_comp("Nil"),
str8_lit_comp("ArrayIndex"), str8_lit_comp("ArrayIndex"),
@@ -41,12 +41,13 @@ str8_lit_comp("LeafStringLiteral"),
str8_lit_comp("LeafU64"), str8_lit_comp("LeafU64"),
str8_lit_comp("LeafF64"), str8_lit_comp("LeafF64"),
str8_lit_comp("LeafF32"), str8_lit_comp("LeafF32"),
str8_lit_comp("LeafIdent"),
str8_lit_comp("LeafExt"),
str8_lit_comp("TypeIdent"), str8_lit_comp("TypeIdent"),
str8_lit_comp("Ptr"), str8_lit_comp("Ptr"),
str8_lit_comp("Array"), str8_lit_comp("Array"),
str8_lit_comp("Func"), str8_lit_comp("Func"),
str8_lit_comp("Define"), str8_lit_comp("Define"),
str8_lit_comp("LeafIdent"),
}; };
String8 e_interpretation_code_display_strings[11] = String8 e_interpretation_code_display_strings[11] =
@@ -64,7 +65,7 @@ str8_lit_comp("Insufficient evaluation machine stack space."),
str8_lit_comp("Malformed bytecode."), str8_lit_comp("Malformed bytecode."),
}; };
String8 e_expr_op_strings[41] = String8 e_expr_op_strings[42] =
{ {
str8_lit_comp(""), str8_lit_comp(""),
str8_lit_comp("[]"), str8_lit_comp("[]"),
@@ -101,12 +102,13 @@ str8_lit_comp("string_literal"),
str8_lit_comp("U64"), str8_lit_comp("U64"),
str8_lit_comp("F64"), str8_lit_comp("F64"),
str8_lit_comp("F32"), str8_lit_comp("F32"),
str8_lit_comp("leaf_ident"),
str8_lit_comp("leaf_ext"),
str8_lit_comp("type_ident"), str8_lit_comp("type_ident"),
str8_lit_comp("ptr"), str8_lit_comp("ptr"),
str8_lit_comp("array"), str8_lit_comp("array"),
str8_lit_comp("function"), str8_lit_comp("function"),
str8_lit_comp("="), str8_lit_comp("="),
str8_lit_comp("leaf_ident"),
}; };
U8 e_kind_basic_byte_size_table[54] = U8 e_kind_basic_byte_size_table[54] =
+4 -3
View File
@@ -113,12 +113,13 @@ E_ExprKind_LeafStringLiteral,
E_ExprKind_LeafU64, E_ExprKind_LeafU64,
E_ExprKind_LeafF64, E_ExprKind_LeafF64,
E_ExprKind_LeafF32, E_ExprKind_LeafF32,
E_ExprKind_LeafIdent,
E_ExprKind_LeafExt,
E_ExprKind_TypeIdent, E_ExprKind_TypeIdent,
E_ExprKind_Ptr, E_ExprKind_Ptr,
E_ExprKind_Array, E_ExprKind_Array,
E_ExprKind_Func, E_ExprKind_Func,
E_ExprKind_Define, E_ExprKind_Define,
E_ExprKind_LeafIdent,
E_ExprKind_COUNT, E_ExprKind_COUNT,
} E_ExprKindEnum; } E_ExprKindEnum;
@@ -139,9 +140,9 @@ E_InterpretationCode_COUNT,
} E_InterpretationCode; } E_InterpretationCode;
C_LINKAGE_BEGIN C_LINKAGE_BEGIN
extern String8 e_expr_kind_strings[41]; extern String8 e_expr_kind_strings[42];
extern String8 e_interpretation_code_display_strings[11]; extern String8 e_interpretation_code_display_strings[11];
extern String8 e_expr_op_strings[41]; extern String8 e_expr_op_strings[42];
extern U8 e_kind_basic_byte_size_table[54]; extern U8 e_kind_basic_byte_size_table[54];
extern String8 e_kind_basic_string_table[54]; extern String8 e_kind_basic_string_table[54];
+10
View File
@@ -1577,6 +1577,16 @@ mule_bswap_u32(unsigned int x)
static void static void
fancy_viz_eval_tests(void) fancy_viz_eval_tests(void)
{ {
//- rjf: windows -> GetLastError
#if _WIN32
DWORD error_code = 0;
SetLastError(1234);
error_code = GetLastError();
SetLastError(4567);
error_code = GetLastError();
(void)error_code;
#endif
//- rjf: colors //- rjf: colors
float example_color_4f32[4] = {1.00f, 0.85f, 0.25f, 1.00f}; float example_color_4f32[4] = {1.00f, 0.85f, 0.25f, 1.00f};
unsigned int example_color_u32 = 0xff6f30ff; unsigned int example_color_u32 = 0xff6f30ff;
+7 -2
View File
@@ -977,8 +977,9 @@ os_thread_join(OS_Handle handle, U64 endt_us)
if(entity != 0) if(entity != 0)
{ {
wait_result = WaitForSingleObject(entity->thread.handle, sleep_ms); wait_result = WaitForSingleObject(entity->thread.handle, sleep_ms);
CloseHandle(entity->thread.handle);
os_w32_entity_release(entity);
} }
os_w32_entity_release(entity);
return (wait_result == WAIT_OBJECT_0); return (wait_result == WAIT_OBJECT_0);
} }
@@ -986,7 +987,11 @@ internal void
os_thread_detach(OS_Handle thread) os_thread_detach(OS_Handle thread)
{ {
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(thread.u64[0]); OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(thread.u64[0]);
os_w32_entity_release(entity); if(entity != 0)
{
CloseHandle(entity->thread.handle);
os_w32_entity_release(entity);
}
} }
//////////////////////////////// ////////////////////////////////
+3 -3
View File
@@ -270,13 +270,13 @@ entry_point(CmdLine *cmd_line)
df_entity_equip_name(exe, exe_name); df_entity_equip_name(exe, exe_name);
} }
// rjf: equip path // rjf: equip working directory
String8 path_part_of_arg = str8_chop_last_slash(args.first->string); String8 path_part_of_arg = str8_chop_last_slash(args.first->string);
if(path_part_of_arg.size != 0) if(path_part_of_arg.size != 0)
{ {
String8 path = push_str8f(scratch.arena, "%S/", path_part_of_arg); String8 path = push_str8f(scratch.arena, "%S/", path_part_of_arg);
DF_Entity *execution_path = df_entity_alloc(target, DF_EntityKind_ExecutionPath); DF_Entity *wdir = df_entity_alloc(target, DF_EntityKind_WorkingDirectory);
df_entity_equip_name(execution_path, path); df_entity_equip_name(wdir, path);
} }
// rjf: equip args // rjf: equip args