more dead code elimination & simplification & floating from engine -> frontend

This commit is contained in:
Ryan Fleury
2024-09-11 15:04:12 -07:00
parent e7b4912e4a
commit cc2b5138b0
6 changed files with 143 additions and 228 deletions
+29
View File
@@ -214,6 +214,35 @@ ctrl_msg_list_push(Arena *arena, CTRL_MsgList *list)
return msg;
}
internal CTRL_MsgList
ctrl_msg_list_deep_copy(Arena *arena, CTRL_MsgList *src)
{
CTRL_MsgList dst = {0};
for(CTRL_MsgNode *n = src->first; n != 0; n = n->next)
{
CTRL_Msg *src_msg = &n->v;
CTRL_Msg *dst_msg = ctrl_msg_list_push(arena, &dst);
ctrl_msg_deep_copy(arena, dst_msg, src_msg);
}
return dst;
}
internal void
ctrl_msg_list_concat_in_place(CTRL_MsgList *dst, CTRL_MsgList *src)
{
if(dst->last && src->first)
{
dst->last->next = src->first;
dst->last = src->last;
dst->count += src->count;
}
else if(src->first)
{
MemoryCopyStruct(dst, src);
}
MemoryZeroStruct(src);
}
//- rjf: serialization
internal String8
+2
View File
@@ -696,6 +696,8 @@ internal void ctrl_msg_deep_copy(Arena *arena, CTRL_Msg *dst, CTRL_Msg *src);
//- rjf: list building
internal CTRL_Msg *ctrl_msg_list_push(Arena *arena, CTRL_MsgList *list);
internal CTRL_MsgList ctrl_msg_list_deep_copy(Arena *arena, CTRL_MsgList *src);
internal void ctrl_msg_list_concat_in_place(CTRL_MsgList *dst, CTRL_MsgList *src);
//- rjf: serialization
internal String8 ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs);
+54 -121
View File
@@ -77,28 +77,6 @@ d_handle_list_push(Arena *arena, D_HandleList *list, D_Handle handle)
d_handle_list_push_node(list, n);
}
internal void
d_handle_list_remove(D_HandleList *list, D_HandleNode *node)
{
DLLRemove(list->first, list->last, node);
list->count -= 1;
}
internal D_HandleNode *
d_handle_list_find(D_HandleList *list, D_Handle handle)
{
D_HandleNode *result = 0;
for(D_HandleNode *n = list->first; n != 0; n = n->next)
{
if(d_handle_match(n->handle, handle))
{
result = n;
break;
}
}
return result;
}
internal D_HandleList
d_handle_list_copy(Arena *arena, D_HandleList list)
{
@@ -2925,20 +2903,6 @@ d_unwind_from_ctrl_unwind(Arena *arena, DI_Scope *di_scope, D_Entity *process, C
////////////////////////////////
//~ rjf: Target Controls
//- rjf: control message dispatching
internal void
d_push_ctrl_msg(CTRL_Msg *msg)
{
CTRL_Msg *dst = ctrl_msg_list_push(d_state->ctrl_msg_arena, &d_state->ctrl_msgs);
ctrl_msg_deep_copy(d_state->ctrl_msg_arena, dst, msg);
if(d_state->ctrl_soft_halt_issued == 0 && d_ctrl_targets_running())
{
d_state->ctrl_soft_halt_issued = 1;
ctrl_halt();
}
}
//- rjf: stopped info from the control thread
internal CTRL_Event
@@ -3764,14 +3728,6 @@ d_cfg_strings_from_core(Arena *arena, String8 root_path, D_CfgSrc source)
return strs;
}
//- rjf: current path
internal String8
d_current_path(void)
{
return d_state->current_path;
}
//- rjf: entity kind cache
internal D_EntityList
@@ -4141,7 +4097,6 @@ d_init(void)
d_state->entities_root = &d_nil_entity;
d_state->entities_base = push_array(d_state->entities_arena, D_Entity, 0);
d_state->entities_count = 0;
d_state->ctrl_msg_arena = arena_alloc();
d_state->ctrl_entity_store = ctrl_entity_store_alloc();
d_state->ctrl_stop_arena = arena_alloc();
d_state->entities_root = d_entity_alloc(&d_nil_entity, D_EntityKind_Root);
@@ -4150,6 +4105,7 @@ d_init(void)
d_state->view_rule_spec_table_size = 1024;
d_state->view_rule_spec_table = push_array(arena, D_ViewRuleSpec *, d_state->view_rule_spec_table_size);
d_state->top_regs = &d_state->base_regs;
d_state->ctrl_msg_arena = arena_alloc();
// rjf: set up initial exception filtering rules
for(CTRL_ExceptionCodeKind k = (CTRL_ExceptionCodeKind)0; k < CTRL_ExceptionCodeKind_COUNT; k = (CTRL_ExceptionCodeKind)(k+1))
@@ -4201,22 +4157,13 @@ d_init(void)
// rjf: set up run state
d_state->ctrl_last_run_arena = arena_alloc();
// rjf: set up initial browse path
{
Temp scratch = scratch_begin(0, 0);
String8 current_path = os_get_current_path(scratch.arena);
String8 current_path_with_slash = push_str8f(scratch.arena, "%S/", current_path);
d_state->current_path_arena = arena_alloc();
d_state->current_path = push_str8_copy(d_state->current_path_arena, current_path_with_slash);
scratch_end(scratch);
}
}
internal CTRL_EventList
d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_Scope *di_scope, F32 dt)
{
ProfBeginFunction();
Temp scratch = scratch_begin(&arena, 1);
CTRL_EventList result = {0};
d_state->frame_index += 1;
arena_clear(d_frame_arena());
@@ -4231,8 +4178,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
//
ProfScope("sync with ctrl thread")
{
Temp scratch = scratch_begin(&arena, 1);
//- rjf: grab next reggen/memgen
U64 new_mem_gen = ctrl_mem_gen();
U64 new_reg_gen = ctrl_reg_gen();
@@ -4632,8 +4577,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
cache->table = 0;
d_state->member_cache_reggen_idx = new_reg_gen;
}
scratch_end(scratch);
}
//////////////////////////////
@@ -4641,8 +4584,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
//
U128 ctrl_param_state_hash = {0};
{
Temp scratch = scratch_begin(0, 0);
// rjf: build data strings of all param data
String8List strings = {0};
{
@@ -4666,8 +4607,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
// rjf: join & hash to produce result
String8 string = str8_list_join(scratch.arena, &strings, 0);
blake2b((U8 *)&ctrl_param_state_hash.u64[0], sizeof(ctrl_param_state_hash), string.str, string.size, 0, 0);
scratch_end(scratch);
}
//////////////////////////////
@@ -4732,7 +4671,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
//
ProfScope("sync with di parsers")
{
Temp scratch = scratch_begin(&arena, 1);
DI_EventList events = di_p2u_pop_events(scratch.arena, 0);
for(DI_EventNode *n = events.first; n != 0; n = n->next)
{
@@ -4755,7 +4693,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
}break;
}
}
scratch_end(scratch);
}
//////////////////////////////
@@ -4776,13 +4713,11 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
//////////////////////////////
//- rjf: process top-level commands
//
CTRL_MsgList ctrl_msgs = {0};
ProfScope("process top-level commands")
{
Temp scratch = scratch_begin(&arena, 1);
for(D_Cmd *cmd = 0; d_next_cmd(&cmd);)
{
temp_end(scratch);
// rjf: unpack command
D_CmdParams params = cmd->params;
D_CmdKind core_cmd_kind = d_cmd_kind_from_string(cmd->spec->info.string);
@@ -4863,13 +4798,13 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
// rjf: push message to launch
{
CTRL_Msg msg = {CTRL_MsgKind_Launch};
msg.path = path;
msg.cmd_line_string_list = cmdln_strings;
msg.env_inherit = 1;
MemoryCopyArray(msg.exception_code_filters, d_state->ctrl_exception_code_filters);
str8_list_push(scratch.arena, &msg.entry_points, entry);
d_push_ctrl_msg(&msg);
CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs);
msg->kind = CTRL_MsgKind_Launch;
msg->path = path;
msg->cmd_line_string_list = cmdln_strings;
msg->env_inherit = 1;
MemoryCopyArray(msg->exception_code_filters, d_state->ctrl_exception_code_filters);
str8_list_push(scratch.arena, &msg->entry_points, entry);
}
}
@@ -4902,13 +4837,11 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
for(D_EntityNode *n = processes.first; n != 0; n = n->next)
{
D_Entity *process = n->entity;
CTRL_Msg msg = {CTRL_MsgKind_Kill};
{
msg.exit_code = 1;
msg.entity = process->ctrl_handle;
MemoryCopyArray(msg.exception_code_filters, d_state->ctrl_exception_code_filters);
}
d_push_ctrl_msg(&msg);
CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs);
msg->kind = CTRL_MsgKind_Kill;
msg->exit_code = 1;
msg->entity = process->ctrl_handle;
MemoryCopyArray(msg->exception_code_filters, d_state->ctrl_exception_code_filters);
}
}
@@ -4926,13 +4859,11 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
for(D_EntityNode *n = processes.first; n != 0; n = n->next)
{
D_Entity *process = n->entity;
CTRL_Msg msg = {CTRL_MsgKind_Kill};
{
msg.exit_code = 1;
msg.entity = process->ctrl_handle;
MemoryCopyArray(msg.exception_code_filters, d_state->ctrl_exception_code_filters);
}
d_push_ctrl_msg(&msg);
CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs);
msg->kind = CTRL_MsgKind_Kill;
msg->exit_code = 1;
msg->entity = process->ctrl_handle;
MemoryCopyArray(msg->exception_code_filters, d_state->ctrl_exception_code_filters);
}
}
if(processes.count == 0)
@@ -4947,10 +4878,10 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
D_Entity *entity = d_entity_from_handle(n->handle);
if(entity->kind == D_EntityKind_Process)
{
CTRL_Msg msg = {CTRL_MsgKind_Detach};
msg.entity = entity->ctrl_handle;
MemoryCopyArray(msg.exception_code_filters, d_state->ctrl_exception_code_filters);
d_push_ctrl_msg(&msg);
CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs);
msg->kind = CTRL_MsgKind_Detach;
msg->entity = entity->ctrl_handle;
MemoryCopyArray(msg->exception_code_filters, d_state->ctrl_exception_code_filters);
}
}
}break;
@@ -5090,8 +5021,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
}
}
}
scratch_end(scratch);
}
}break;
@@ -5349,9 +5278,9 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
{
CTRL_Entity *thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, e->ctrl_handle);
thread->is_frozen = should_freeze;
CTRL_Msg msg = {should_freeze ? CTRL_MsgKind_FreezeThread : CTRL_MsgKind_ThawThread};
msg.entity = thread->handle;
d_push_ctrl_msg(&msg);
CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs);
msg->kind = (should_freeze ? CTRL_MsgKind_FreezeThread : CTRL_MsgKind_ThawThread);
msg->entity = thread->handle;
}
}
}break;
@@ -5362,10 +5291,10 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
U64 pid = params.id;
if(pid != 0)
{
CTRL_Msg msg = {CTRL_MsgKind_Attach};
msg.entity_id = (U32)pid;
MemoryCopyArray(msg.exception_code_filters, d_state->ctrl_exception_code_filters);
d_push_ctrl_msg(&msg);
CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs);
msg->kind = CTRL_MsgKind_Attach;
msg->entity_id = (U32)pid;
MemoryCopyArray(msg->exception_code_filters, d_state->ctrl_exception_code_filters);
}
}break;
}
@@ -5378,15 +5307,16 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
d_state->ctrl_last_run_param_state_hash = ctrl_param_state_hash;
}
// rjf: build run message
CTRL_Msg msg = {(run_kind == D_RunKind_Run || run_kind == D_RunKind_Step) ? CTRL_MsgKind_Run : CTRL_MsgKind_SingleStep};
// rjf: push & fill run message
CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs);
{
CTRL_Entity *process = ctrl_entity_ancestor_from_kind(run_thread, CTRL_EntityKind_Process);
msg.run_flags = run_flags;
msg.entity = run_thread->handle;
msg.parent = process->handle;
MemoryCopyArray(msg.exception_code_filters, d_state->ctrl_exception_code_filters);
MemoryCopyStruct(&msg.traps, &run_traps);
msg->kind = (run_kind == D_RunKind_Run || run_kind == D_RunKind_Step) ? CTRL_MsgKind_Run : CTRL_MsgKind_SingleStep;
msg->run_flags = run_flags;
msg->entity = run_thread->handle;
msg->parent = process->handle;
MemoryCopyArray(msg->exception_code_filters, d_state->ctrl_exception_code_filters);
MemoryCopyStruct(&msg->traps, &run_traps);
for(U64 idx = 0; idx < breakpoints->count; idx += 1)
{
// rjf: unpack user breakpoint entity
@@ -5402,7 +5332,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
ctrl_user_bp.string = n->string;
ctrl_user_bp.pt = bp->pt;
ctrl_user_bp.condition = bp->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);
}
}
@@ -5412,7 +5342,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
CTRL_UserBreakpoint ctrl_user_bp = {CTRL_UserBreakpointKind_VirtualAddress};
ctrl_user_bp.u64 = bp->vaddr;
ctrl_user_bp.condition = bp->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: symbol name location -> add breakpoint for symbol name
@@ -5421,14 +5351,11 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
CTRL_UserBreakpoint ctrl_user_bp = {CTRL_UserBreakpointKind_SymbolNameAndOffset};
ctrl_user_bp.string = bp->symbol_name;
ctrl_user_bp.condition = bp->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: push msg
d_push_ctrl_msg(&msg);
// rjf: copy run traps to scratch (needed, if run_traps can be `d_state->ctrl_last_run_traps`)
CTRL_TrapList run_traps_copy = ctrl_trap_list_copy(scratch.arena, &run_traps);
@@ -5446,7 +5373,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
d_state->base_regs.v.inline_depth = 0;
}
}
scratch_end(scratch);
}
//////////////////////////////
@@ -5458,17 +5384,24 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
}
//////////////////////////////
//- rjf: send messages to control
//- rjf: push new control messages to queue - try to send queue to control,
// clear queue if successful (if not, we'll just keep them around until
// the next tick)
//
if(d_state->ctrl_msgs.count != 0)
{
if(ctrl_u2c_push_msgs(&d_state->ctrl_msgs, os_now_microseconds()+100))
CTRL_MsgList msgs_copy = ctrl_msg_list_deep_copy(d_state->ctrl_msg_arena, &ctrl_msgs);
ctrl_msg_list_concat_in_place(&d_state->ctrl_msgs, &msgs_copy);
if(d_state->ctrl_msgs.count != 0)
{
MemoryZeroStruct(&d_state->ctrl_msgs);
arena_clear(d_state->ctrl_msg_arena);
if(ctrl_u2c_push_msgs(&d_state->ctrl_msgs, os_now_microseconds()+100))
{
MemoryZeroStruct(&d_state->ctrl_msgs);
arena_clear(d_state->ctrl_msg_arena);
}
}
}
ProfEnd();
scratch_end(scratch);
return result;
}
+1 -39
View File
@@ -808,31 +808,6 @@ struct D_EntityListCache
D_EntityList list;
};
//- rjf: auto view rules hash table cache
typedef struct D_AutoViewRuleNode D_AutoViewRuleNode;
struct D_AutoViewRuleNode
{
D_AutoViewRuleNode *next;
String8 type;
String8 view_rule;
};
typedef struct D_AutoViewRuleSlot D_AutoViewRuleSlot;
struct D_AutoViewRuleSlot
{
D_AutoViewRuleNode *first;
D_AutoViewRuleNode *last;
};
typedef struct D_AutoViewRuleMapCache D_AutoViewRuleMapCache;
struct D_AutoViewRuleMapCache
{
Arena *arena;
U64 slots_count;
D_AutoViewRuleSlot *slots;
};
//- rjf: per-thread unwind cache
typedef struct D_UnwindCacheNode D_UnwindCacheNode;
@@ -969,7 +944,6 @@ struct D_State
// rjf: entity query caches
U64 kind_alloc_gens[D_EntityKind_COUNT];
D_EntityListCache kind_caches[D_EntityKind_COUNT];
D_AutoViewRuleMapCache auto_view_rule_cache;
// rjf: per-run caches
D_UnwindCache unwind_cache;
@@ -1006,9 +980,9 @@ struct D_State
U128 ctrl_last_run_param_state_hash;
B32 ctrl_is_running;
B32 ctrl_soft_halt_issued;
U64 ctrl_exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64];
Arena *ctrl_msg_arena;
CTRL_MsgList ctrl_msgs;
U64 ctrl_exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64];
// rjf: control thread ctrl -> user reading state
CTRL_EntityStore *ctrl_entity_store;
@@ -1021,10 +995,6 @@ struct D_State
U64 cfg_cached_timestamp[D_CfgSrc_COUNT];
Arena *cfg_arena;
D_CfgTable cfg_table;
// rjf: current path
Arena *current_path_arena;
String8 current_path;
};
////////////////////////////////
@@ -1062,8 +1032,6 @@ internal D_Handle d_handle_zero(void);
internal B32 d_handle_match(D_Handle a, D_Handle b);
internal void d_handle_list_push_node(D_HandleList *list, D_HandleNode *node);
internal void d_handle_list_push(Arena *arena, D_HandleList *list, D_Handle handle);
internal void d_handle_list_remove(D_HandleList *list, D_HandleNode *node);
internal D_HandleNode *d_handle_list_find(D_HandleList *list, D_Handle handle);
internal D_HandleList d_handle_list_copy(Arena *arena, D_HandleList list);
////////////////////////////////
@@ -1285,9 +1253,6 @@ internal D_Unwind d_unwind_from_ctrl_unwind(Arena *arena, DI_Scope *di_scope, D_
////////////////////////////////
//~ rjf: Target Controls
//- rjf: control message dispatching
internal void d_push_ctrl_msg(CTRL_Msg *msg);
//- rjf: stopped info from the control thread
internal CTRL_Event d_ctrl_last_stop_event(void);
@@ -1363,9 +1328,6 @@ internal String8 d_cfg_escaped_from_raw_string(Arena *arena, String8 string);
internal String8 d_cfg_raw_from_escaped_string(Arena *arena, String8 string);
internal String8List d_cfg_strings_from_core(Arena *arena, String8 root_path, D_CfgSrc source);
//- rjf: current path
internal String8 d_current_path(void);
//- rjf: entity kind cache
internal D_EntityList d_query_cached_entity_list_with_kind(D_EntityKind kind);
+47 -68
View File
@@ -9,6 +9,33 @@
#include "generated/dbg_frontend.meta.c"
////////////////////////////////
//~ rjf: Registers Type Pure Functions
internal void
df_regs_copy_contents(Arena *arena, DF_Regs *dst, DF_Regs *src)
{
MemoryCopyStruct(dst, src);
dst->entity_list = d_handle_list_copy(arena, src->entity_list);
dst->file_path = push_str8_copy(arena, src->file_path);
dst->lines = d_line_list_copy(arena, &src->lines);
dst->dbgi_key = di_key_copy(arena, &src->dbgi_key);
dst->string = push_str8_copy(arena, src->string);
dst->params_tree = md_tree_copy(arena, src->params_tree);
if(dst->entity_list.count == 0 && !d_handle_match(d_handle_zero(), dst->entity))
{
d_handle_list_push(arena, &dst->entity_list, dst->entity);
}
}
internal DF_Regs *
df_regs_copy(Arena *arena, DF_Regs *src)
{
DF_Regs *dst = push_array(arena, DF_Regs, 1);
df_regs_copy_contents(arena, dst, src);
return dst;
}
////////////////////////////////
//~ rjf: View Type Functions
@@ -3615,7 +3642,7 @@ df_window_frame(DF_Window *ws)
}break;
case D_CmdParamSlot_FilePath:
{
default_query = path_normalized_from_string(scratch.arena, d_current_path());
default_query = path_normalized_from_string(scratch.arena, df_state->current_path);
default_query = push_str8f(scratch.arena, "%S/", default_query);
}break;
}
@@ -7676,6 +7703,16 @@ df_init(CmdLine *cmdln)
scratch_end(scratch);
}
// rjf: set up initial browse path
{
Temp scratch = scratch_begin(0, 0);
String8 current_path = os_get_current_path(scratch.arena);
String8 current_path_with_slash = push_str8f(scratch.arena, "%S/", current_path);
df_state->current_path_arena = arena_alloc();
df_state->current_path = push_str8_copy(df_state->current_path_arena, current_path_with_slash);
scratch_end(scratch);
}
ProfEnd();
}
@@ -9656,32 +9693,25 @@ df_frame(void)
}break;
//- rjf: undo/redo
case DF_CmdKind_Undo:
{
}break;
case DF_CmdKind_Redo:
{
}break;
case DF_CmdKind_Undo:{}break;
case DF_CmdKind_Redo:{}break;
//- rjf: focus history
case DF_CmdKind_GoBack:
{
}break;
case DF_CmdKind_GoForward:
{
}break;
case DF_CmdKind_GoBack:{}break;
case DF_CmdKind_GoForward:{}break;
//- rjf: files
case DF_CmdKind_SetCurrentPath:
{
arena_clear(d_state->current_path_arena);
d_state->current_path = push_str8_copy(d_state->current_path_arena, params->file_path);
arena_clear(df_state->current_path_arena);
df_state->current_path = push_str8_copy(df_state->current_path_arena, params->file_path);
}break;
//- rjf: override file links
case DF_CmdKind_SetFileOverrideLinkSrc:
case DF_CmdKind_SetFileOverrideLinkDst:
{
#if 0 // TODO(rjf): @msgs
// rjf: unpack args
D_Entity *map = d_entity_from_handle(params->entity);
String8 path = path_normalized_from_string(scratch.arena, params->file_path);
@@ -9725,6 +9755,7 @@ df_frame(void)
{
d_entity_mark_for_deletion(map);
}
#endif
}break;
case DF_CmdKind_SetFileReplacementPath:
{
@@ -9745,8 +9776,7 @@ df_frame(void)
//- rjf: unpack
String8 src_path = params->string;
String8 dst_path = params->file_path;
#if 0
// TODO(rjf):
#if 0 // TODO(rjf): @msgs
//- rjf: grab src file & chosen replacement
D_Entity *file = d_entity_from_handle(params.entity);
@@ -9787,57 +9817,6 @@ df_frame(void)
case DF_CmdKind_SetAutoViewRuleType:
case DF_CmdKind_SetAutoViewRuleViewRule:
{
D_Entity *map = d_entity_from_handle(params->entity);
if(d_entity_is_nil(map))
{
map = d_entity_alloc(d_entity_root(), D_EntityKind_AutoViewRule);
d_entity_equip_cfg_src(map, D_CfgSrc_Project);
}
D_Entity *src = d_entity_child_from_kind(map, D_EntityKind_Source);
if(d_entity_is_nil(src))
{
src = d_entity_alloc(map, D_EntityKind_Source);
}
D_Entity *dst = d_entity_child_from_kind(map, D_EntityKind_Dest);
if(d_entity_is_nil(dst))
{
dst = d_entity_alloc(map, D_EntityKind_Dest);
}
if(map->kind == D_EntityKind_AutoViewRule)
{
D_Entity *edit_child = (kind == DF_CmdKind_SetAutoViewRuleType ? src : dst);
d_entity_equip_name(edit_child, params->string);
}
if(src->string.size == 0 && dst->string.size == 0)
{
d_entity_mark_for_deletion(map);
}
{
D_AutoViewRuleMapCache *cache = &d_state->auto_view_rule_cache;
if(cache->arena == 0)
{
cache->arena = arena_alloc();
}
arena_clear(cache->arena);
cache->slots_count = 1024;
cache->slots = push_array(cache->arena, D_AutoViewRuleSlot, cache->slots_count);
D_EntityList maps = d_query_cached_entity_list_with_kind(D_EntityKind_AutoViewRule);
for(D_EntityNode *n = maps.first; n != 0; n = n->next)
{
D_Entity *map = n->entity;
D_Entity *src = d_entity_child_from_kind(map, D_EntityKind_Source);
D_Entity *dst = d_entity_child_from_kind(map, D_EntityKind_Dest);
String8 type = src->string;
String8 view_rule = dst->string;
U64 hash = d_hash_from_string(type);
U64 slot_idx = hash%cache->slots_count;
D_AutoViewRuleSlot *slot = &cache->slots[slot_idx];
D_AutoViewRuleNode *node = push_array(cache->arena, D_AutoViewRuleNode, 1);
node->type = push_str8_copy(cache->arena, type);
node->view_rule = push_str8_copy(cache->arena, view_rule);
SLLQueuePush(slot->first, slot->last, node);
}
}
}break;
//- rjf: panel removal
+10
View File
@@ -760,6 +760,10 @@ struct DF_State
// rjf: icon texture
R_Handle icon_texture;
// rjf: current path
Arena *current_path_arena;
String8 current_path;
};
////////////////////////////////
@@ -809,6 +813,12 @@ global DF_DragDropPayload df_drag_drop_payload = {0};
global D_Handle df_last_drag_drop_panel = {0};
global D_Handle df_last_drag_drop_prev_tab = {0};
////////////////////////////////
//~ rjf: Registers Type Pure Functions
internal void df_regs_copy_contents(Arena *arena, DF_Regs *dst, DF_Regs *src);
internal DF_Regs *df_regs_copy(Arena *arena, DF_Regs *src);
////////////////////////////////
//~ rjf: View Type Functions