switch off rd_cfg to cfg layer

This commit is contained in:
Ryan Fleury
2025-10-16 14:59:06 -07:00
parent 46634f547f
commit 2f315911a5
13 changed files with 1341 additions and 2210 deletions
+23 -1
View File
@@ -150,6 +150,28 @@ cfg_ctx_select(CFG_Ctx *ctx)
//- rjf: tree navigations
internal U64
cfg_change_gen(void)
{
U64 result = 0;
if(cfg_ctx != 0)
{
result = cfg_ctx->change_gen;
}
return result;
}
internal CFG_Node *
cfg_node_root(void)
{
CFG_Node *result = &cfg_nil_node;
if(cfg_ctx != 0)
{
result = cfg_ctx->root;
}
return result;
}
internal CFG_Node *
cfg_node_from_id(CFG_ID id)
{
@@ -867,7 +889,7 @@ cfg_node_ptr_list_from_string(Arena *arena, CFG_State *state, CFG_SchemaTable *s
dst_active_parent_n = dst_active_parent_n->parent;
}
}
cfg_node_list_push(arena, &result, dst_root_n);
cfg_node_ptr_list_push(arena, &result, dst_root_n);
}
scratch_end(scratch);
return result;
+2
View File
@@ -185,6 +185,8 @@ internal MD_NodePtrList cfg_schemas_from_name(Arena *arena, CFG_SchemaTable *tab
internal void cfg_ctx_select(CFG_Ctx *ctx);
//- rjf: tree navigations
internal U64 cfg_change_gen(void);
internal CFG_Node *cfg_node_root(void);
internal CFG_Node *cfg_node_from_id(CFG_ID id);
internal CFG_Node *cfg_node_child_from_string(CFG_Node *parent, String8 string);
internal CFG_Node *cfg_node_child_from_string_or_parent(CFG_Node *parent, String8 string);
+1 -1
View File
@@ -979,7 +979,7 @@ internal void
ctrl_entity_string_release(CTRL_EntityCtxRWStore *store, String8 string)
{
U64 bucket_num = ctrl_name_bucket_num_from_string_size(string.size);
if(1 <= bucket_num && bucket_num <= ArrayCount(rd_name_bucket_chunk_sizes))
if(1 <= bucket_num && bucket_num <= ArrayCount(ctrl_entity_string_bucket_chunk_sizes))
{
U64 bucket_idx = bucket_num-1;
CTRL_EntityStringChunkNode *node = (CTRL_EntityStringChunkNode *)string.str;
+1116 -1882
View File
File diff suppressed because it is too large Load Diff
+27 -154
View File
@@ -247,59 +247,6 @@ struct RD_VocabInfoMap
RD_VocabInfoMapSlot *plural_slots;
};
////////////////////////////////
//~ rjf: Config Tree
typedef struct RD_Cfg RD_Cfg;
struct RD_Cfg
{
RD_Cfg *first;
RD_Cfg *last;
RD_Cfg *next;
RD_Cfg *prev;
RD_Cfg *parent;
CFG_ID id;
String8 string;
};
typedef struct RD_CfgNode RD_CfgNode;
struct RD_CfgNode
{
RD_CfgNode *next;
RD_CfgNode *prev;
RD_Cfg *v;
};
typedef struct RD_CfgSlot RD_CfgSlot;
struct RD_CfgSlot
{
RD_CfgNode *first;
RD_CfgNode *last;
};
typedef struct RD_CfgList RD_CfgList;
struct RD_CfgList
{
RD_CfgNode *first;
RD_CfgNode *last;
U64 count;
};
typedef struct RD_CfgArray RD_CfgArray;
struct RD_CfgArray
{
RD_Cfg **v;
U64 count;
};
typedef struct RD_CfgRec RD_CfgRec;
struct RD_CfgRec
{
RD_Cfg *next;
S32 push_count;
S32 pop_count;
};
////////////////////////////////
//~ rjf: Structured Locations, Parsed From Config Trees
@@ -324,7 +271,7 @@ struct RD_PanelNode
RD_PanelNode *prev;
RD_PanelNode *parent;
U64 child_count;
RD_Cfg *cfg;
CFG_Node *cfg;
// rjf: split data
Axis2 split_axis;
@@ -334,8 +281,8 @@ struct RD_PanelNode
Side tab_side;
// rjf: which tabs are attached
RD_CfgList tabs;
RD_Cfg *selected_tab;
CFG_NodePtrList tabs;
CFG_Node *selected_tab;
};
typedef struct RD_PanelTree RD_PanelTree;
@@ -489,25 +436,6 @@ struct RD_WindowStateSlot
////////////////////////////////
//~ rjf: Main Per-Process Graphical State
read_only global U64 rd_name_bucket_chunk_sizes[] =
{
16,
64,
256,
1024,
4096,
16384,
65536,
0xffffffffffffffffull,
};
typedef struct RD_NameChunkNode RD_NameChunkNode;
struct RD_NameChunkNode
{
RD_NameChunkNode *next;
U64 size;
};
typedef struct RD_AmbiguousPathNode RD_AmbiguousPathNode;
struct RD_AmbiguousPathNode
{
@@ -555,9 +483,6 @@ struct RD_State
C_Key cmdln_cfg_string_key;
C_Key transient_cfg_string_key;
// rjf: schema table
MD_NodePtrList *schemas;
// rjf: default theme table
MD_Node *theme_preset_trees[RD_ThemePreset_COUNT];
@@ -645,16 +570,8 @@ struct RD_State
RD_DragDropState drag_drop_state;
// rjf: cfg state
RD_NameChunkNode *free_name_chunks[ArrayCount(rd_name_bucket_chunk_sizes)];
RD_Cfg *free_cfg;
RD_Cfg *root_cfg;
U64 cfg_id_slots_count;
RD_CfgSlot *cfg_id_slots;
RD_CfgNode *free_cfg_id_node;
U64 cfg_id_gen;
CFG_ID cfg_last_accessed_id;
RD_Cfg *cfg_last_accessed;
U64 cfg_change_gen;
CFG_State *cfg;
CFG_SchemaTable *cfg_schema_table;
// rjf: window state cache
U64 window_state_slots_count;
@@ -688,15 +605,6 @@ struct RD_State
read_only global RD_VocabInfo rd_nil_vocab_info = {0};
read_only global RD_Cfg rd_nil_cfg =
{
&rd_nil_cfg,
&rd_nil_cfg,
&rd_nil_cfg,
&rd_nil_cfg,
&rd_nil_cfg,
};
read_only global RD_PanelNode rd_nil_panel_node =
{
&rd_nil_panel_node,
@@ -705,8 +613,8 @@ read_only global RD_PanelNode rd_nil_panel_node =
&rd_nil_panel_node,
&rd_nil_panel_node,
0,
&rd_nil_cfg,
.selected_tab = &rd_nil_cfg,
&cfg_nil_node,
.selected_tab = &cfg_nil_node,
};
read_only global RD_CmdKindInfo rd_nil_cmd_kind_info = {0};
@@ -767,65 +675,30 @@ internal void rd_set_hover_regs(RD_RegSlot slot);
internal RD_Regs *rd_get_hover_regs(void);
////////////////////////////////
//~ rjf: Name Allocation
//~ rjf: Config Functions
internal U64 rd_name_bucket_num_from_string_size(U64 size);
internal String8 rd_name_alloc(String8 string);
internal void rd_name_release(String8 string);
////////////////////////////////
//~ rjf: Config Tree Functions
internal RD_Cfg *rd_cfg_alloc(void);
internal void rd_cfg_release(RD_Cfg *cfg);
internal void rd_cfg_release_all_children(RD_Cfg *cfg);
internal RD_Cfg *rd_cfg_from_id(CFG_ID id);
internal RD_Cfg *rd_cfg_new(RD_Cfg *parent, String8 string);
internal RD_Cfg *rd_cfg_newf(RD_Cfg *parent, char *fmt, ...);
internal RD_Cfg *rd_cfg_new_replace(RD_Cfg *parent, String8 string);
internal RD_Cfg *rd_cfg_new_replacef(RD_Cfg *parent, char *fmt, ...);
internal RD_Cfg *rd_cfg_deep_copy(RD_Cfg *src_root);
internal void rd_cfg_equip_string(RD_Cfg *cfg, String8 string);
internal void rd_cfg_equip_stringf(RD_Cfg *cfg, char *fmt, ...);
internal void rd_cfg_insert_child(RD_Cfg *parent, RD_Cfg *prev_child, RD_Cfg *new_child);
internal void rd_cfg_unhook(RD_Cfg *parent, RD_Cfg *child);
internal RD_Cfg *rd_cfg_child_from_string(RD_Cfg *parent, String8 string);
internal RD_Cfg *rd_cfg_child_from_string_or_alloc(RD_Cfg *parent, String8 string);
internal RD_Cfg *rd_cfg_child_from_string_or_parent(RD_Cfg *parent, String8 string);
internal RD_CfgList rd_cfg_child_list_from_string(Arena *arena, RD_Cfg *parent, String8 string);
internal RD_CfgList rd_cfg_top_level_list_from_string(Arena *arena, String8 string);
internal RD_CfgArray rd_cfg_array_from_list(Arena *arena, RD_CfgList *list);
internal RD_CfgList rd_cfg_tree_list_from_string(Arena *arena, String8 root_path, String8 string);
internal String8 rd_string_from_cfg_tree(Arena *arena, String8 root_path, RD_Cfg *cfg);
internal RD_CfgRec rd_cfg_rec__depth_first(RD_Cfg *root, RD_Cfg *cfg);
internal void rd_cfg_list_push(Arena *arena, RD_CfgList *list, RD_Cfg *cfg);
internal void rd_cfg_list_push_front(Arena *arena, RD_CfgList *list, RD_Cfg *cfg);
#define rd_cfg_list_first(list) ((list)->count ? (list)->first->v : &rd_nil_cfg)
#define rd_cfg_list_last(list) ((list)->count ? (list)->last->v : &rd_nil_cfg)
internal RD_PanelTree rd_panel_tree_from_cfg(Arena *arena, RD_Cfg *cfg);
internal RD_PanelTree rd_panel_tree_from_cfg(Arena *arena, CFG_Node *cfg_root);
internal RD_PanelNodeRec rd_panel_node_rec__depth_first(RD_PanelNode *root, RD_PanelNode *panel, U64 sib_off, U64 child_off);
#define rd_panel_node_rec__depth_first_pre(root, p) rd_panel_node_rec__depth_first((root), (p), OffsetOf(RD_PanelNode, next), OffsetOf(RD_PanelNode, first))
#define rd_panel_node_rec__depth_first_pre_rev(root, p) rd_panel_node_rec__depth_first((root), (p), OffsetOf(RD_PanelNode, prev), OffsetOf(RD_PanelNode, last))
internal RD_PanelNode *rd_panel_node_from_tree_cfg(RD_PanelNode *root, RD_Cfg *cfg);
internal RD_PanelNode *rd_panel_node_from_tree_cfg(RD_PanelNode *root, CFG_Node *cfg);
internal Rng2F32 rd_target_rect_from_panel_node_child(Rng2F32 parent_rect, RD_PanelNode *parent, RD_PanelNode *panel);
internal Rng2F32 rd_target_rect_from_panel_node(Rng2F32 root_rect, RD_PanelNode *root, RD_PanelNode *panel);
internal B32 rd_cfg_is_project_filtered(RD_Cfg *cfg);
internal B32 rd_cfg_is_project_filtered(CFG_Node *cfg);
internal RD_KeyMapNodePtrList rd_key_map_node_ptr_list_from_name(Arena *arena, String8 string);
internal RD_KeyMapNodePtrList rd_key_map_node_ptr_list_from_binding(Arena *arena, RD_Binding binding);
internal Vec4F32 rd_hsva_from_cfg(RD_Cfg *cfg);
internal Vec4F32 rd_color_from_cfg(RD_Cfg *cfg);
internal Vec4F32 rd_hsva_from_cfg(CFG_Node *cfg);
internal Vec4F32 rd_color_from_cfg(CFG_Node *cfg);
internal B32 rd_disabled_from_cfg(RD_Cfg *cfg);
internal RD_Location rd_location_from_cfg(RD_Cfg *cfg);
internal String8 rd_label_from_cfg(RD_Cfg *cfg);
internal String8 rd_expr_from_cfg(RD_Cfg *cfg);
internal String8 rd_path_from_cfg(RD_Cfg *cfg);
internal D_Target rd_target_from_cfg(Arena *arena, RD_Cfg *cfg);
internal B32 rd_disabled_from_cfg(CFG_Node *cfg);
internal RD_Location rd_location_from_cfg(CFG_Node *cfg);
internal String8 rd_label_from_cfg(CFG_Node *cfg);
internal String8 rd_expr_from_cfg(CFG_Node *cfg);
internal String8 rd_path_from_cfg(CFG_Node *cfg);
internal D_Target rd_target_from_cfg(Arena *arena, CFG_Node *cfg);
internal MD_NodePtrList rd_schemas_from_name(String8 name);
internal String8 rd_default_setting_from_names(String8 schema_name, String8 setting_name);
internal String8 rd_setting_from_name(String8 name);
@@ -833,8 +706,8 @@ internal B32 rd_setting_b32_from_name(String8 name);
internal U64 rd_setting_u64_from_name(String8 name);
internal F32 rd_setting_f32_from_name(String8 name);
internal RD_Cfg *rd_immediate_cfg_from_key(String8 string);
internal RD_Cfg *rd_immediate_cfg_from_keyf(char *fmt, ...);
internal CFG_Node *rd_immediate_cfg_from_key(String8 string);
internal CFG_Node *rd_immediate_cfg_from_keyf(char *fmt, ...);
internal String8 rd_mapped_from_file_path(Arena *arena, String8 file_path);
internal String8List rd_possible_overrides_from_file_path(Arena *arena, String8 file_path);
@@ -849,8 +722,8 @@ internal String8 rd_name_from_ctrl_entity(Arena *arena, CTRL_Entity *entity);
//~ rjf: Evaluation Spaces
//- rjf: cfg <-> eval space
internal RD_Cfg *rd_cfg_from_eval_space(E_Space space);
internal E_Space rd_eval_space_from_cfg(RD_Cfg *cfg);
internal CFG_Node *rd_cfg_from_eval_space(E_Space space);
internal E_Space rd_eval_space_from_cfg(CFG_Node *cfg);
//- rjf: ctrl entity <-> eval space
internal CTRL_Entity *rd_ctrl_entity_from_eval_space(E_Space space);
@@ -887,8 +760,8 @@ internal String8 rd_query_from_eval_string(Arena *arena, String8 string);
////////////////////////////////
//~ rjf: View Functions
internal RD_Cfg *rd_view_from_eval(RD_Cfg *parent, E_Eval eval);
internal RD_ViewState *rd_view_state_from_cfg(RD_Cfg *cfg);
internal CFG_Node *rd_view_from_eval(CFG_Node *parent, E_Eval eval);
internal RD_ViewState *rd_view_state_from_cfg(CFG_Node *cfg);
internal void rd_view_ui(Rng2F32 rect);
////////////////////////////////
@@ -930,8 +803,8 @@ internal void rd_store_view_paramf(String8 key, char *fmt, ...);
//~ rjf: Window Functions
internal String8 rd_push_window_title(Arena *arena);
internal RD_Cfg *rd_window_from_cfg(RD_Cfg *cfg);
internal RD_WindowState *rd_window_state_from_cfg(RD_Cfg *cfg);
internal CFG_Node *rd_window_from_cfg(CFG_Node *cfg);
internal RD_WindowState *rd_window_state_from_cfg(CFG_Node *cfg);
internal RD_WindowState *rd_window_state_from_os_handle(OS_Handle os);
internal void rd_window_frame(void);
+53 -53
View File
@@ -245,7 +245,7 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(registers)
typedef struct RD_SchemaIRExt RD_SchemaIRExt;
struct RD_SchemaIRExt
{
RD_Cfg *cfg;
CFG_Node *cfg;
CTRL_Entity *entity;
MD_NodePtrList schemas;
};
@@ -262,7 +262,7 @@ E_TYPE_IREXT_FUNCTION_DEF(schema)
E_Type *type = e_type_from_key(type_key);
ext->cfg = rd_cfg_from_eval_space(interpret.space);
ext->entity = rd_ctrl_entity_from_eval_space(interpret.space);
ext->schemas = rd_schemas_from_name(type->name);
ext->schemas = cfg_schemas_from_name(arena, rd_state->cfg_schema_table, type->name);
scratch_end(scratch);
}
E_IRExt result = {ext};
@@ -289,9 +289,9 @@ E_TYPE_ACCESS_FUNCTION_DEF(schema)
}
if(child_schema != &md_nil_node)
{
RD_Cfg *cfg = ext->cfg;
CFG_Node *cfg = ext->cfg;
CTRL_Entity *entity = ext->entity;
RD_Cfg *child = rd_cfg_child_from_string(cfg, child_schema->string);
CFG_Node *child = cfg_node_child_from_string(cfg, child_schema->string);
E_TypeKey child_type_key = zero_struct;
B32 wrap_child_w_meta_expr = 0;
if(0){}
@@ -455,7 +455,7 @@ E_TYPE_ACCESS_FUNCTION_DEF(schema)
//- rjf: evaluate
E_Space child_eval_space = zero_struct;
if(cfg != &rd_nil_cfg)
if(cfg != &cfg_nil_node)
{
child_eval_space = e_space_make(RD_EvalSpaceKind_MetaCfg);
child_eval_space.u64s[0] = cfg->id;
@@ -637,7 +637,7 @@ E_TYPE_ACCESS_FUNCTION_DEF(cfgs)
{
String8 numeric_part = str8_skip(rhs->string, 1);
CFG_ID id = u64_from_str8(numeric_part, 16);
RD_Cfg *cfg = rd_cfg_from_id(id);
CFG_Node *cfg = cfg_node_from_id(id);
E_Space space = rd_eval_space_from_cfg(cfg);
result.root = e_irtree_set_space(arena, space, e_irtree_const_u(arena, 0));
result.type_key = e_string2typekey_map_lookup(rd_state->meta_name2type_map, cfg->string);
@@ -674,7 +674,7 @@ struct RD_CfgsIRExt
{
String8 cfg_name;
String8Array cmds;
RD_CfgArray cfgs;
CFG_NodePtrArray cfgs;
Rng1U64 cmds_idx_range;
Rng1U64 cfgs_idx_range;
};
@@ -691,12 +691,12 @@ E_TYPE_IREXT_FUNCTION_DEF(cfgs_slice)
String8 cfg_name = rd_singular_from_code_name_plural(type->name);
//- rjf: gather cfgs
RD_CfgList cfgs_list = rd_cfg_top_level_list_from_string(scratch.arena, cfg_name);
CFG_NodePtrList cfgs_list = cfg_node_top_level_list_from_string(scratch.arena, cfg_name);
//- rjf: gather commands
String8List cmds_list = {0};
{
MD_NodePtrList schemas = rd_schemas_from_name(cfg_name);
MD_NodePtrList schemas = cfg_schemas_from_name(scratch.arena, rd_state->cfg_schema_table, cfg_name);
for(MD_NodePtrNode *n = schemas.first; n != 0; n = n->next)
{
MD_Node *schema = n->v;
@@ -710,7 +710,7 @@ E_TYPE_IREXT_FUNCTION_DEF(cfgs_slice)
//- rjf: package & fill
ext->cfg_name = cfg_name;
ext->cfgs = rd_cfg_array_from_list(arena, &cfgs_list);
ext->cfgs = cfg_node_ptr_array_from_list(arena, &cfgs_list);
ext->cmds = str8_array_from_list(arena, &cmds_list);
scratch_end(scratch);
@@ -722,7 +722,7 @@ E_TYPE_IREXT_FUNCTION_DEF(cfgs_slice)
E_TYPE_ACCESS_FUNCTION_DEF(cfgs_slice)
{
E_IRTreeAndType result = {&e_irnode_nil};
RD_Cfg *cfg = &rd_nil_cfg;
CFG_Node *cfg = &cfg_nil_node;
RD_CfgsIRExt *ext = (RD_CfgsIRExt *)lhs_irtree->user_data;
switch(expr->kind)
{
@@ -743,11 +743,11 @@ E_TYPE_ACCESS_FUNCTION_DEF(cfgs_slice)
if(str8_match(str8_prefix(rhs_name, 1), str8_lit("$"), 0))
{
id = u64_from_str8(str8_skip(rhs_name, 1), 16);
cfg = rd_cfg_from_id(id);
cfg = cfg_node_from_id(id);
}
}break;
}
if(cfg != &rd_nil_cfg)
if(cfg != &cfg_nil_node)
{
result.root = e_irtree_set_space(arena, rd_eval_space_from_cfg(cfg), e_irtree_const_u(arena, 0));
result.mode = E_Mode_Offset;
@@ -760,7 +760,7 @@ typedef struct RD_CfgsExpandAccel RD_CfgsExpandAccel;
struct RD_CfgsExpandAccel
{
String8Array cmds;
RD_CfgArray cfgs;
CFG_NodePtrArray cfgs;
Rng1U64 cmds_idx_range;
Rng1U64 cfgs_idx_range;
};
@@ -775,27 +775,27 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(cfgs_slice)
RD_CfgsIRExt *ext = (RD_CfgsIRExt *)eval.irtree.user_data;
//- rjf: filter cfgs
RD_CfgArray cfgs__filtered = ext->cfgs;
CFG_NodePtrArray cfgs__filtered = ext->cfgs;
if(filter.size != 0)
{
RD_CfgList cfgs_list__filtered = {0};
CFG_NodePtrList cfgs_list__filtered = {0};
for EachIndex(idx, ext->cfgs.count)
{
RD_Cfg *cfg = ext->cfgs.v[idx];
CFG_Node *cfg = ext->cfgs.v[idx];
DR_FStrList fstrs = rd_title_fstrs_from_cfg(scratch.arena, cfg, 1);
String8 string = dr_string_from_fstrs(scratch.arena, &fstrs);
FuzzyMatchRangeList fuzzy_matches = fuzzy_match_find(scratch.arena, filter, string);
if(fuzzy_matches.count == fuzzy_matches.needle_part_count)
{
rd_cfg_list_push(scratch.arena, &cfgs_list__filtered, cfg);
cfg_node_ptr_list_push(scratch.arena, &cfgs_list__filtered, cfg);
}
}
cfgs__filtered = rd_cfg_array_from_list(arena, &cfgs_list__filtered);
cfgs__filtered = cfg_node_ptr_array_from_list(arena, &cfgs_list__filtered);
}
//- rjf: fill
// TODO(rjf): @cleanup don't smuggle this through like this...
if(rd_cfg_child_from_string(rd_cfg_from_id(rd_regs()->view), str8_lit("lister")) == &rd_nil_cfg)
if(cfg_node_child_from_string(cfg_node_from_id(rd_regs()->view), str8_lit("lister")) == &cfg_nil_node)
{
accel->cmds = ext->cmds;
accel->cmds_idx_range = r1u64(0, accel->cmds.count);
@@ -813,7 +813,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(cfgs_query)
RD_CfgsExpandAccel *accel = push_array(arena, RD_CfgsExpandAccel, 1);
{
Temp scratch = scratch_begin(&arena, 1);
RD_Cfg *root_cfg = rd_cfg_from_eval_space(eval.space);
CFG_Node *root_cfg = rd_cfg_from_eval_space(eval.space);
String8 child_key = e_string_from_id(eval.space.u64s[1]);
String8 child_key_singular = rd_singular_from_code_name_plural(child_key);
if(child_key_singular.size != 0)
@@ -821,7 +821,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(cfgs_query)
child_key = child_key_singular;
}
String8List cmds = {0};
MD_NodePtrList schemas = rd_schemas_from_name(child_key);
MD_NodePtrList schemas = cfg_schemas_from_name(scratch.arena, rd_state->cfg_schema_table, child_key);
for(MD_NodePtrNode *n = schemas.first; n != 0; n = n->next)
{
MD_Node *schema = n->v;
@@ -831,25 +831,25 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(cfgs_query)
str8_list_push(scratch.arena, &cmds, cmd->string);
}
}
RD_CfgList children = rd_cfg_child_list_from_string(scratch.arena, root_cfg, child_key);
RD_CfgList children__filtered = children;
CFG_NodePtrList children = cfg_node_child_list_from_string(scratch.arena, root_cfg, child_key);
CFG_NodePtrList children__filtered = children;
if(filter.size != 0)
{
MemoryZeroStruct(&children__filtered);
for(RD_CfgNode *n = children.first; n != 0; n = n->next)
for(CFG_NodePtrNode *n = children.first; n != 0; n = n->next)
{
DR_FStrList cfg_fstrs = rd_title_fstrs_from_cfg(scratch.arena, n->v, 1);
String8 cfg_string = dr_string_from_fstrs(scratch.arena, &cfg_fstrs);
FuzzyMatchRangeList ranges = fuzzy_match_find(scratch.arena, filter, cfg_string);
if(ranges.count == ranges.needle_part_count)
{
rd_cfg_list_push(scratch.arena, &children__filtered, n->v);
cfg_node_ptr_list_push(scratch.arena, &children__filtered, n->v);
}
}
}
accel->cmds = str8_array_from_list(arena, &cmds);
accel->cmds_idx_range = r1u64(0, accel->cmds.count);
accel->cfgs = rd_cfg_array_from_list(arena, &children__filtered);
accel->cfgs = cfg_node_ptr_array_from_list(arena, &children__filtered);
accel->cfgs_idx_range = r1u64(accel->cmds.count + 0, accel->cmds.count + accel->cfgs.count);
scratch_end(scratch);
}
@@ -883,7 +883,7 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(cfgs_slice)
U64 read_count = dim_1u64(read_range);
for(U64 idx = 0; idx < read_count; idx += 1, dst_idx += 1)
{
RD_Cfg *cfg = accel->cfgs.v[idx + read_range.min - cfgs_idx_range.min];
CFG_Node *cfg = accel->cfgs.v[idx + read_range.min - cfgs_idx_range.min];
evals_out[dst_idx] = e_eval_from_stringf("query:config.$%I64x", cfg->id);
}
}
@@ -898,7 +898,7 @@ E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_DEF(cfgs_slice)
U64 idx = num-1;
if(contains_1u64(accel->cfgs_idx_range, idx))
{
RD_Cfg *cfg = accel->cfgs.v[idx - accel->cfgs_idx_range.min];
CFG_Node *cfg = accel->cfgs.v[idx - accel->cfgs_idx_range.min];
id = cfg->id;
}
else if(contains_1u64(accel->cmds_idx_range, idx))
@@ -1001,7 +1001,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(call_stack)
typedef struct RD_EnvironmentAccel RD_EnvironmentAccel;
struct RD_EnvironmentAccel
{
RD_CfgArray cfgs;
CFG_NodePtrArray cfgs;
};
E_TYPE_IREXT_FUNCTION_DEF(environment)
@@ -1013,16 +1013,16 @@ E_TYPE_IREXT_FUNCTION_DEF(environment)
String8 bytecode = e_bytecode_from_oplist(scratch.arena, &oplist);
E_Interpretation interpret = e_interpret(bytecode);
E_Space space = interpret.space;
RD_Cfg *target = rd_cfg_from_eval_space(space);
RD_CfgList env_strings = {0};
for(RD_Cfg *child = target->first; child != &rd_nil_cfg; child = child->next)
CFG_Node *target = rd_cfg_from_eval_space(space);
CFG_NodePtrList env_strings = {0};
for(CFG_Node *child = target->first; child != &cfg_nil_node; child = child->next)
{
if(str8_match(child->string, str8_lit("environment"), 0))
{
rd_cfg_list_push(scratch.arena, &env_strings, child);
cfg_node_ptr_list_push(scratch.arena, &env_strings, child);
}
}
accel->cfgs = rd_cfg_array_from_list(arena, &env_strings);
accel->cfgs = cfg_node_ptr_array_from_list(arena, &env_strings);
scratch_end(scratch);
}
E_IRExt result = {accel};
@@ -1035,11 +1035,11 @@ E_TYPE_ACCESS_FUNCTION_DEF(environment)
if(expr->kind == E_ExprKind_ArrayIndex)
{
RD_EnvironmentAccel *accel = (RD_EnvironmentAccel *)lhs_irtree->user_data;
RD_CfgArray *cfgs = &accel->cfgs;
CFG_NodePtrArray *cfgs = &accel->cfgs;
E_Value rhs_value = e_value_from_expr(expr->first->next);
if(0 <= rhs_value.u64 && rhs_value.u64 < cfgs->count)
{
RD_Cfg *cfg = cfgs->v[rhs_value.u64];
CFG_Node *cfg = cfgs->v[rhs_value.u64];
result.root = e_irtree_set_space(arena, rd_eval_space_from_cfg(cfg), e_irtree_const_u(arena, 0));
result.type_key = e_type_key_cons_array(e_type_key_basic(E_TypeKind_U8), cfg->first->string.size, E_TypeFlag_IsCodeText);
result.mode = E_Mode_Offset;
@@ -1115,7 +1115,7 @@ E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_DEF(environment)
typedef struct RD_WatchesAccel RD_WatchesAccel;
struct RD_WatchesAccel
{
RD_CfgArray cfgs;
CFG_NodePtrArray cfgs;
};
E_TYPE_IREXT_FUNCTION_DEF(watches)
@@ -1127,16 +1127,16 @@ E_TYPE_IREXT_FUNCTION_DEF(watches)
String8 bytecode = e_bytecode_from_oplist(scratch.arena, &oplist);
E_Interpretation interpret = e_interpret(bytecode);
E_Space space = interpret.space;
RD_Cfg *target = rd_cfg_from_eval_space(space);
RD_CfgList env_strings = {0};
for(RD_Cfg *child = target->first; child != &rd_nil_cfg; child = child->next)
CFG_Node *target = rd_cfg_from_eval_space(space);
CFG_NodePtrList env_strings = {0};
for(CFG_Node *child = target->first; child != &cfg_nil_node; child = child->next)
{
if(str8_match(child->string, str8_lit("watch"), 0))
{
rd_cfg_list_push(scratch.arena, &env_strings, child);
cfg_node_ptr_list_push(scratch.arena, &env_strings, child);
}
}
accel->cfgs = rd_cfg_array_from_list(arena, &env_strings);
accel->cfgs = cfg_node_ptr_array_from_list(arena, &env_strings);
scratch_end(scratch);
}
E_IRExt result = {accel};
@@ -1149,11 +1149,11 @@ E_TYPE_ACCESS_FUNCTION_DEF(watches)
if(expr->kind == E_ExprKind_ArrayIndex)
{
RD_WatchesAccel *accel = (RD_WatchesAccel *)lhs_irtree->user_data;
RD_CfgArray *cfgs = &accel->cfgs;
CFG_NodePtrArray *cfgs = &accel->cfgs;
E_Value rhs_value = e_value_from_expr(expr->first->next);
if(0 <= rhs_value.u64 && rhs_value.u64 < cfgs->count)
{
RD_Cfg *cfg = cfgs->v[rhs_value.u64];
CFG_Node *cfg = cfgs->v[rhs_value.u64];
result.root = e_irtree_set_space(arena, rd_eval_space_from_cfg(cfg), e_irtree_const_u(arena, 0));
result.type_key = e_type_key_cons_array(e_type_key_basic(E_TypeKind_U8), cfg->first->string.size, E_TypeFlag_IsCodeText);
result.mode = E_Mode_Offset;
@@ -1167,22 +1167,22 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(watches)
RD_WatchesAccel *ext = (RD_WatchesAccel *)eval.irtree.user_data;
RD_WatchesAccel *accel = push_array(arena, RD_WatchesAccel, 1);
{
RD_CfgArray cfgs__filtered = ext->cfgs;
CFG_NodePtrArray cfgs__filtered = ext->cfgs;
if(filter.size != 0)
{
Temp scratch = scratch_begin(&arena, 1);
RD_CfgList cfgs_list__filtered = {0};
CFG_NodePtrList cfgs_list__filtered = {0};
for EachIndex(idx, ext->cfgs.count)
{
RD_Cfg *watch = ext->cfgs.v[idx];
CFG_Node *watch = ext->cfgs.v[idx];
String8 string = watch->first->string;
FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, string);
if(matches.count == matches.needle_part_count)
{
rd_cfg_list_push(scratch.arena, &cfgs_list__filtered, watch);
cfg_node_ptr_list_push(scratch.arena, &cfgs_list__filtered, watch);
}
}
cfgs__filtered = rd_cfg_array_from_list(arena, &cfgs_list__filtered);
cfgs__filtered = cfg_node_ptr_array_from_list(arena, &cfgs_list__filtered);
scratch_end(scratch);
}
accel->cfgs = cfgs__filtered;
@@ -1202,7 +1202,7 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(watches)
U64 cfg_idx = read_range.min + idx;
if(cfg_idx < accel->cfgs.count)
{
RD_Cfg *cfg = accel->cfgs.v[cfg_idx];
CFG_Node *cfg = accel->cfgs.v[cfg_idx];
evals_out[idx] = e_eval_from_string(cfg->first->string);
}
}
@@ -1651,7 +1651,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(debug_info_table)
B32 stale = 0;
accel->section = section;
accel->items = di_search_item_array_from_target_query(rd_state->frame_access, section, filter, endt_us, &stale);
RD_Cfg *last_successful_query_cfg = rd_immediate_cfg_from_keyf("last_successful_query_%I64x_%I64u", rd_regs()->view, (U64)section);
CFG_Node *last_successful_query_cfg = rd_immediate_cfg_from_keyf("last_successful_query_%I64x_%I64u", rd_regs()->view, (U64)section);
if(stale)
{
String8 last_query = last_successful_query_cfg->first->string;
@@ -1660,7 +1660,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(debug_info_table)
}
else
{
rd_cfg_new_replace(last_successful_query_cfg, filter);
cfg_node_new_replace(rd_state->cfg, last_successful_query_cfg, filter);
}
}
+20 -20
View File
@@ -1,10 +1,10 @@
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
internal RD_CfgList
internal CFG_NodePtrList
rd_cfg_tree_list_from_string__pre_0_9_16(Arena *arena, String8 file_path, String8 data)
{
RD_CfgList result = {0};
CFG_NodePtrList result = {0};
{
Temp scratch = scratch_begin(&arena, 1);
String8 folder_path = str8_skip_last_slash(file_path);
@@ -24,20 +24,20 @@ rd_cfg_tree_list_from_string__pre_0_9_16(Arena *arena, String8 file_path, String
String8 stderr_path = md_child_from_string(tln, str8_lit("stderr_path"), 0)->first->string;
String8 stdin_path = md_child_from_string(tln, str8_lit("stdin_path"), 0)->first->string;
String8 debug_subprocesses= md_child_from_string(tln, str8_lit("debug_subprocesses"), 0)->first->string;
RD_Cfg *dst_root = rd_cfg_new(&rd_nil_cfg, str8_lit("target"));
rd_cfg_list_push(arena, &result, dst_root);
CFG_Node *dst_root = cfg_node_new(rd_state->cfg, &cfg_nil_node, str8_lit("target"));
cfg_node_ptr_list_push(arena, &result, dst_root);
{
if(executable.size != 0) { rd_cfg_new(rd_cfg_new(dst_root, str8_lit("executable")), path_absolute_dst_from_relative_dst_src(scratch.arena, executable, folder_path)); }
if(arguments.size != 0) { rd_cfg_new(rd_cfg_new(dst_root, str8_lit("arguments")), raw_from_escaped_str8(scratch.arena, arguments)); }
if(working_directory.size != 0) { rd_cfg_new(rd_cfg_new(dst_root, str8_lit("working_directory")), path_absolute_dst_from_relative_dst_src(scratch.arena, working_directory, folder_path)); }
if(entry_point.size != 0) { rd_cfg_new(rd_cfg_new(dst_root, str8_lit("entry_point")), raw_from_escaped_str8(scratch.arena, entry_point)); }
if(stdout_path.size != 0) { rd_cfg_new(rd_cfg_new(dst_root, str8_lit("stdout_path")), path_absolute_dst_from_relative_dst_src(scratch.arena, stdout_path, folder_path)); }
if(stderr_path.size != 0) { rd_cfg_new(rd_cfg_new(dst_root, str8_lit("stderr_path")), path_absolute_dst_from_relative_dst_src(scratch.arena, stderr_path, folder_path)); }
if(stdin_path.size != 0) { rd_cfg_new(rd_cfg_new(dst_root, str8_lit("stdin_path")), path_absolute_dst_from_relative_dst_src(scratch.arena, stdin_path, folder_path)); }
if(debug_subprocesses.size != 0) { rd_cfg_new(rd_cfg_new(dst_root, str8_lit("debug_subprocesses")), raw_from_escaped_str8(scratch.arena, debug_subprocesses)); }
if(executable.size != 0) { cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("executable")), path_absolute_dst_from_relative_dst_src(scratch.arena, executable, folder_path)); }
if(arguments.size != 0) { cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("arguments")), raw_from_escaped_str8(scratch.arena, arguments)); }
if(working_directory.size != 0) { cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("working_directory")), path_absolute_dst_from_relative_dst_src(scratch.arena, working_directory, folder_path)); }
if(entry_point.size != 0) { cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("entry_point")), raw_from_escaped_str8(scratch.arena, entry_point)); }
if(stdout_path.size != 0) { cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("stdout_path")), path_absolute_dst_from_relative_dst_src(scratch.arena, stdout_path, folder_path)); }
if(stderr_path.size != 0) { cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("stderr_path")), path_absolute_dst_from_relative_dst_src(scratch.arena, stderr_path, folder_path)); }
if(stdin_path.size != 0) { cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("stdin_path")), path_absolute_dst_from_relative_dst_src(scratch.arena, stdin_path, folder_path)); }
if(debug_subprocesses.size != 0) { cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("debug_subprocesses")), raw_from_escaped_str8(scratch.arena, debug_subprocesses)); }
if(!str8_match(disabled_string, str8_lit("1"), 0))
{
rd_cfg_new(rd_cfg_new(dst_root, str8_lit("enabled")), str8_lit("1"));
cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("enabled")), str8_lit("1"));
}
}
}
@@ -46,9 +46,9 @@ rd_cfg_tree_list_from_string__pre_0_9_16(Arena *arena, String8 file_path, String
if(str8_match(tln->string, str8_lit("recent_file"), 0) ||
str8_match(tln->string, str8_lit("recent_project"), 0))
{
RD_Cfg *dst_root = rd_cfg_new(&rd_nil_cfg, tln->string);
rd_cfg_list_push(arena, &result, dst_root);
rd_cfg_new(rd_cfg_new(dst_root, str8_lit("path")), path_absolute_dst_from_relative_dst_src(scratch.arena, tln->first->string, folder_path));
CFG_Node *dst_root = cfg_node_new(rd_state->cfg, &cfg_nil_node, tln->string);
cfg_node_ptr_list_push(arena, &result, dst_root);
cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("path")), path_absolute_dst_from_relative_dst_src(scratch.arena, tln->first->string, folder_path));
}
//- rjf: file path maps
@@ -56,10 +56,10 @@ rd_cfg_tree_list_from_string__pre_0_9_16(Arena *arena, String8 file_path, String
{
String8 source = md_child_from_string(tln, str8_lit("source"), 0)->first->string;
String8 dest = md_child_from_string(tln, str8_lit("dest"), 0)->first->string;
RD_Cfg *dst_root = rd_cfg_new(&rd_nil_cfg, tln->string);
rd_cfg_list_push(arena, &result, dst_root);
rd_cfg_new(rd_cfg_new(dst_root, str8_lit("source")), path_absolute_dst_from_relative_dst_src(scratch.arena, source, folder_path));
rd_cfg_new(rd_cfg_new(dst_root, str8_lit("dest")), path_absolute_dst_from_relative_dst_src(scratch.arena, dest, folder_path));
CFG_Node *dst_root = cfg_node_new(rd_state->cfg, &cfg_nil_node, tln->string);
cfg_node_ptr_list_push(arena, &result, dst_root);
cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("source")), path_absolute_dst_from_relative_dst_src(scratch.arena, source, folder_path));
cfg_node_new(rd_state->cfg, cfg_node_new(rd_state->cfg, dst_root, str8_lit("dest")), path_absolute_dst_from_relative_dst_src(scratch.arena, dest, folder_path));
}
}
}
+1 -1
View File
@@ -4,6 +4,6 @@
#ifndef RADDBG_LEGACY_CONFIG_H
#define RADDBG_LEGACY_CONFIG_H
internal RD_CfgList rd_cfg_tree_list_from_string__pre_0_9_16(Arena *arena, String8 file_path, String8 data);
internal CFG_NodePtrList rd_cfg_tree_list_from_string__pre_0_9_16(Arena *arena, String8 file_path, String8 data);
#endif // RADDBG_LEGACY_CONFIG_H
+1 -1
View File
@@ -582,7 +582,7 @@ entry_point(CmdLine *cmd_line)
if(dst_ws->cfg_id != rd_regs()->window)
{
Temp scratch = scratch_begin(0, 0);
RD_PanelTree panel_tree = rd_panel_tree_from_cfg(scratch.arena, rd_cfg_from_id(dst_ws->cfg_id));
RD_PanelTree panel_tree = rd_panel_tree_from_cfg(scratch.arena, cfg_node_from_id(dst_ws->cfg_id));
rd_regs()->window = dst_ws->cfg_id;
rd_regs()->panel = panel_tree.focused->cfg->id;
rd_regs()->tab = panel_tree.focused->selected_tab->id;
+52 -52
View File
@@ -174,20 +174,20 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
//
if(rd_regs()->cursor.line == rd_regs()->mark.line)
{
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
CFG_Node *view = cfg_node_from_id(rd_regs()->view);
RD_ViewState *vs = rd_view_state_from_cfg(view);
if(!vs->query_is_open)
{
RD_Cfg *query = rd_cfg_child_from_string_or_alloc(view, str8_lit("query"));
RD_Cfg *input = rd_cfg_child_from_string_or_alloc(query, str8_lit("input"));
CFG_Node *query = cfg_node_child_from_string_or_alloc(rd_state->cfg, view, str8_lit("query"));
CFG_Node *input = cfg_node_child_from_string_or_alloc(rd_state->cfg, query, str8_lit("input"));
String8 text = txt_string_from_info_data_txt_rng(text_info, text_data, txt_rng(rd_regs()->cursor, rd_regs()->mark));
if(text.size < 256)
{
rd_cfg_new_replace(input, text);
cfg_node_new_replace(rd_state->cfg, input, text);
}
else
{
rd_cfg_new_replace(input, str8_zero());
cfg_node_new_replace(rd_state->cfg, input, str8_zero());
}
}
}
@@ -217,9 +217,9 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
code_slice_params.line_text = push_array(scratch.arena, String8, visible_line_count);
code_slice_params.line_ranges = push_array(scratch.arena, Rng1U64, visible_line_count);
code_slice_params.line_tokens = push_array(scratch.arena, TXT_TokenArray, visible_line_count);
code_slice_params.line_bps = push_array(scratch.arena, RD_CfgList, visible_line_count);
code_slice_params.line_bps = push_array(scratch.arena, CFG_NodePtrList, visible_line_count);
code_slice_params.line_ips = push_array(scratch.arena, CTRL_EntityList, visible_line_count);
code_slice_params.line_pins = push_array(scratch.arena, RD_CfgList, visible_line_count);
code_slice_params.line_pins = push_array(scratch.arena, CFG_NodePtrList, visible_line_count);
code_slice_params.line_vaddrs = push_array(scratch.arena, U64, visible_line_count);
code_slice_params.line_infos = push_array(scratch.arena, D_LineList, visible_line_count);
code_slice_params.text_info = text_info;
@@ -252,10 +252,10 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
// rjf: find visible breakpoints for source code
if(!dasm_lines) ProfScope("find visible breakpoints for source code")
{
RD_CfgList bps = rd_cfg_top_level_list_from_string(scratch.arena, str8_lit("breakpoint"));
for(RD_CfgNode *n = bps.first; n != 0; n = n->next)
CFG_NodePtrList bps = cfg_node_top_level_list_from_string(scratch.arena, str8_lit("breakpoint"));
for(CFG_NodePtrNode *n = bps.first; n != 0; n = n->next)
{
RD_Cfg *bp = n->v;
CFG_Node *bp = n->v;
RD_Location loc = rd_location_from_cfg(bp);
if(visible_line_num_range.min <= loc.pt.line && loc.pt.line <= visible_line_num_range.max)
{
@@ -266,7 +266,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
if(path_match_normalized(loc.file_path, override_n->string))
{
U64 slice_line_idx = (U64)(loc.pt.line-visible_line_num_range.min);
rd_cfg_list_push(scratch.arena, &code_slice_params.line_bps[slice_line_idx], bp);
cfg_node_ptr_list_push(scratch.arena, &code_slice_params.line_bps[slice_line_idx], bp);
break;
}
}
@@ -314,10 +314,10 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
// rjf: find visible watch pins for source code
if(!dasm_lines) ProfScope("find visible watch pins for source code")
{
RD_CfgList wps = rd_cfg_top_level_list_from_string(scratch.arena, str8_lit("watch_pin"));
for(RD_CfgNode *n = wps.first; n != 0; n = n->next)
CFG_NodePtrList wps = cfg_node_top_level_list_from_string(scratch.arena, str8_lit("watch_pin"));
for(CFG_NodePtrNode *n = wps.first; n != 0; n = n->next)
{
RD_Cfg *wp = n->v;
CFG_Node *wp = n->v;
RD_Location loc = rd_location_from_cfg(wp);
if(visible_line_num_range.min <= loc.pt.line && loc.pt.line <= visible_line_num_range.max)
{
@@ -328,7 +328,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
if(path_match_normalized(loc.file_path, override_n->string))
{
U64 slice_line_idx = (loc.pt.line-visible_line_num_range.min);
rd_cfg_list_push(scratch.arena, &code_slice_params.line_pins[slice_line_idx], wp);
cfg_node_ptr_list_push(scratch.arena, &code_slice_params.line_pins[slice_line_idx], wp);
break;
}
}
@@ -376,10 +376,10 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
// rjf: find breakpoints mapping to this disasm
if(dasm_lines) ProfScope("find breakpoints mapping to this disassembly")
{
RD_CfgList bps = rd_cfg_top_level_list_from_string(scratch.arena, str8_lit("breakpoint"));
for(RD_CfgNode *n = bps.first; n != 0; n = n->next)
CFG_NodePtrList bps = cfg_node_top_level_list_from_string(scratch.arena, str8_lit("breakpoint"));
for(CFG_NodePtrNode *n = bps.first; n != 0; n = n->next)
{
RD_Cfg *bp = n->v;
CFG_Node *bp = n->v;
RD_Location loc = rd_location_from_cfg(bp);
E_Value loc_value = e_value_from_string(loc.expr);
if(contains_1u64(dasm_vaddr_range, loc_value.u64))
@@ -390,7 +390,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
if(contains_1s64(visible_line_num_range, line_num))
{
U64 slice_line_idx = (line_num-visible_line_num_range.min);
rd_cfg_list_push(scratch.arena, &code_slice_params.line_bps[slice_line_idx], bp);
cfg_node_ptr_list_push(scratch.arena, &code_slice_params.line_bps[slice_line_idx], bp);
}
}
}
@@ -399,10 +399,10 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
// rjf: find watch pins mapping to this disasm
if(dasm_lines) ProfScope("find watch pins mapping to this disassembly")
{
RD_CfgList wps = rd_cfg_top_level_list_from_string(scratch.arena, str8_lit("watch_pin"));
for(RD_CfgNode *n = wps.first; n != 0; n = n->next)
CFG_NodePtrList wps = cfg_node_top_level_list_from_string(scratch.arena, str8_lit("watch_pin"));
for(CFG_NodePtrNode *n = wps.first; n != 0; n = n->next)
{
RD_Cfg *wp = n->v;
CFG_Node *wp = n->v;
RD_Location loc = rd_location_from_cfg(wp);
E_Value loc_value = e_value_from_string(loc.expr);
if(contains_1u64(dasm_vaddr_range, loc_value.u64))
@@ -413,7 +413,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
if(contains_1s64(visible_line_num_range, line_num))
{
U64 slice_line_idx = (line_num-visible_line_num_range.min);
rd_cfg_list_push(scratch.arena, &code_slice_params.line_pins[slice_line_idx], wp);
cfg_node_ptr_list_push(scratch.arena, &code_slice_params.line_pins[slice_line_idx], wp);
}
}
}
@@ -942,8 +942,8 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
{
.module = &ctrl_entity_nil,
.can_expand = ev_row_is_expandable(row),
.group_cfg_parent = &rd_nil_cfg,
.group_cfg_child = &rd_nil_cfg,
.group_cfg_parent = &cfg_nil_node,
.group_cfg_child = &cfg_nil_node,
.group_entity = &ctrl_entity_nil,
.callstack_thread = &ctrl_entity_nil,
.view_ui_rule = &rd_nil_view_ui_rule,
@@ -962,7 +962,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
E_TypeKey block_type_key = e_type_key_unwrap(block_eval.irtree.type_key, E_TypeUnwrapFlag_Meta);
E_TypeKind block_type_kind = e_type_kind_from_key(block_type_key);
E_Type *block_type = e_type_from_key(block_type_key);
RD_Cfg *evalled_cfg = rd_cfg_from_eval_space(row->eval.space);
CFG_Node *evalled_cfg = rd_cfg_from_eval_space(row->eval.space);
CTRL_Entity *evalled_entity = (row->eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity ? rd_ctrl_entity_from_eval_space(row->eval.space) : &ctrl_entity_nil);
////////////////////////////
@@ -970,7 +970,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
// are evaluating a cfg tree, or some descendant of it
//
B32 is_top_level = 0;
if(evalled_cfg != &rd_nil_cfg)
if(evalled_cfg != &cfg_nil_node)
{
E_TypeKey top_level_type_key = e_string2typekey_map_lookup(rd_state->meta_name2type_map, evalled_cfg->string);
is_top_level = (row->eval.value.u64 == 0 && e_type_key_match(top_level_type_key, row->eval.irtree.type_key));
@@ -1090,7 +1090,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
block_type->expand.id_from_num == E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_NAME(environment)))
{
CFG_ID id = row->key.child_id;
info.group_cfg_child = rd_cfg_from_id(id);
info.group_cfg_child = cfg_node_from_id(id);
}
}
@@ -1129,9 +1129,9 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
{
U64 column_count = maybe_table_type->count;
info.cell_style_key = push_str8f(arena, "table_%I64u_cols", column_count);
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
RD_Cfg *style = rd_cfg_child_from_string(view, info.cell_style_key);
RD_Cfg *w_cfg = style->first;
CFG_Node *view = cfg_node_from_id(rd_regs()->view);
CFG_Node *style = cfg_node_child_from_string(view, info.cell_style_key);
CFG_Node *w_cfg = style->first;
F32 next_pct = 0;
#define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct)
E_ParentKey(row->eval.key)
@@ -1175,7 +1175,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
////////////////////////////
//- rjf: @watch_row_build_cells autocomplete rows
//
else if(rd_cfg_child_from_string(rd_cfg_from_id(rd_regs()->view), str8_lit("autocomplete")) != &rd_nil_cfg)
else if(cfg_node_child_from_string(cfg_node_from_id(rd_regs()->view), str8_lit("autocomplete")) != &cfg_nil_node)
{
info.can_expand = 0;
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Button|RD_WatchCellFlag_Indented, .pct = 1.f);
@@ -1184,7 +1184,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
////////////////////////////
//- rjf: @watch_row_build_cells lister rows
//
else if(rd_cfg_child_from_string(rd_cfg_from_id(rd_regs()->view), str8_lit("lister")) != &rd_nil_cfg)
else if(cfg_node_child_from_string(cfg_node_from_id(rd_regs()->view), str8_lit("lister")) != &cfg_nil_node)
{
info.can_expand = 0;
RD_WatchCellFlags extra_flags = RD_WatchCellFlag_Expr;
@@ -1202,11 +1202,11 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
////////////////////////////
//- rjf: @watch_row_build_cells top-level cfg evaluations
//
else if(is_top_level && evalled_cfg != &rd_nil_cfg)
else if(is_top_level && evalled_cfg != &cfg_nil_node)
{
RD_Cfg *cfg = evalled_cfg;
CFG_Node *cfg = evalled_cfg;
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Button|RD_WatchCellFlag_Indented, .pct = 1.f);
MD_NodePtrList schemas = rd_schemas_from_name(cfg->string);
MD_NodePtrList schemas = cfg_schemas_from_name(scratch.arena, rd_state->cfg_schema_table, cfg->string);
for(MD_NodePtrNode *n = schemas.first; n != 0; n = n->next)
{
MD_Node *schema = n->v;
@@ -1222,8 +1222,8 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
if(is_cmd_line_only)
{
B32 is_cmd_line = 0;
RD_Cfg *cmd_line = rd_cfg_child_from_string(rd_state->root_cfg, str8_lit("command_line"));
for(RD_Cfg *p = evalled_cfg->parent; p != &rd_nil_cfg; p = p->parent)
CFG_Node *cmd_line = cfg_node_child_from_string(cfg_node_root(), str8_lit("command_line"));
for(CFG_Node *p = evalled_cfg->parent; p != &cfg_nil_node; p = p->parent)
{
if(p == cmd_line)
{
@@ -1362,7 +1362,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
////////////////////////////
//- rjf: @watch_row_build_cells "add new" expression rows
//
else if(row->eval.expr == &e_expr_nil && info.group_cfg_name.size != 0 && info.group_cfg_child == &rd_nil_cfg)
else if(row->eval.expr == &e_expr_nil && info.group_cfg_name.size != 0 && info.group_cfg_child == &cfg_nil_node)
{
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
.flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .pct = 1.f);
@@ -1371,7 +1371,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
////////////////////////////
//- rjf: @watch_row_build_cells meta-evaluation booleans
//
else if(info.group_cfg_child == &rd_nil_cfg &&
else if(info.group_cfg_child == &cfg_nil_node &&
e_type_kind_from_key(e_type_key_unwrap(row->eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative)) == E_TypeKind_Bool &&
(row->eval.space.kind == RD_EvalSpaceKind_MetaCfg ||
row->eval.space.kind == RD_EvalSpaceKind_MetaCmd ||
@@ -1387,9 +1387,9 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
else if(block_type->kind == E_TypeKind_Set && str8_match(block_type->name, str8_lit("procedures"), 0))
{
info.cell_style_key = str8_lit("procedure_expr_eval");
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
RD_Cfg *style = rd_cfg_child_from_string(view, info.cell_style_key);
RD_Cfg *w_cfg = style->first;
CFG_Node *view = cfg_node_from_id(rd_regs()->view);
CFG_Node *style = cfg_node_child_from_string(view, info.cell_style_key);
CFG_Node *w_cfg = style->first;
F32 next_pct = 0;
#define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct)
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
@@ -1409,9 +1409,9 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
CTRL_Entity *process = ctrl_process_from_entity(info.callstack_thread);
CTRL_Entity *module = ctrl_module_from_process_vaddr(process, info.callstack_vaddr);
E_Eval module_eval = e_eval_from_stringf("query:control.%S", ctrl_string_from_handle(scratch.arena, module->handle));
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
RD_Cfg *style = rd_cfg_child_from_string(view, info.cell_style_key);
RD_Cfg *w_cfg = style->first;
CFG_Node *view = cfg_node_from_id(rd_regs()->view);
CFG_Node *style = cfg_node_child_from_string(view, info.cell_style_key);
CFG_Node *w_cfg = style->first;
F32 next_pct = 0;
#define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct)
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_CallStackFrame, row->eval, .default_pct = 0.05f, .pct = take_pct());
@@ -1440,9 +1440,9 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
}
}
info.cell_style_key = str8_lit("normal");
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
RD_Cfg *style = rd_cfg_child_from_string(view, info.cell_style_key);
RD_Cfg *w_cfg = style->first;
CFG_Node *view = cfg_node_from_id(rd_regs()->view);
CFG_Node *style = cfg_node_child_from_string(view, info.cell_style_key);
CFG_Node *w_cfg = style->first;
F32 next_pct = 0;
#define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct)
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
@@ -1484,7 +1484,7 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla
{
.flags = cell->flags,
.view_ui_rule = &rd_nil_view_ui_rule,
.cfg = &rd_nil_cfg,
.cfg = &cfg_nil_node,
.entity = &ctrl_entity_nil,
};
@@ -1493,7 +1493,7 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla
//
E_Type *block_type = e_type_from_key(row->block->eval.irtree.type_key);
E_Type *cell_type = e_type_from_key(cell->eval.irtree.type_key);
MD_NodePtrList cell_schemas = rd_schemas_from_name(cell_type->name);
MD_NodePtrList cell_schemas = cfg_schemas_from_name(scratch.arena, rd_state->cfg_schema_table, cell_type->name);
if(cell->eval.space.u64s[1] == 0 && cell_schemas.count != 0)
{
result.cfg = rd_cfg_from_eval_space(cell->eval.space);
@@ -1591,7 +1591,7 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla
}
//- rjf: cfg evaluation -> button for cfg
else if(result.cfg != &rd_nil_cfg)
else if(result.cfg != &cfg_nil_node)
{
result.expr_fstrs = rd_title_fstrs_from_cfg(arena, result.cfg, 0);
result.flags |= RD_WatchCellFlag_Button;
+3 -3
View File
@@ -124,8 +124,8 @@ struct RD_WatchRowInfo
B32 can_expand;
B32 expr_is_editable;
String8 group_cfg_name;
RD_Cfg *group_cfg_parent;
RD_Cfg *group_cfg_child;
CFG_Node *group_cfg_parent;
CFG_Node *group_cfg_child;
CTRL_Entity *group_entity;
CTRL_Entity *callstack_thread;
U64 callstack_unwind_index;
@@ -140,7 +140,7 @@ typedef struct RD_WatchRowCellInfo RD_WatchRowCellInfo;
struct RD_WatchRowCellInfo
{
RD_WatchCellFlags flags;
RD_Cfg *cfg;
CFG_Node *cfg;
CTRL_Entity *entity;
String8 cmd_name;
String8 file_path;
+39 -39
View File
@@ -5,7 +5,7 @@
//~ rjf: UI Widgets: Fancy Title Strings
internal DR_FStrList
rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, B32 include_extras)
rd_title_fstrs_from_cfg(Arena *arena, CFG_Node *cfg, B32 include_extras)
{
DR_FStrList result = {0};
{
@@ -32,8 +32,8 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, B32 include_extras)
RD_IconKind icon_kind = rd_icon_kind_from_code_name(cfg->string);
B32 is_from_command_line = 0;
{
RD_Cfg *cmd_line_root = rd_cfg_child_from_string(rd_state->root_cfg, str8_lit("command_line"));
for(RD_Cfg *p = cfg->parent; p != &rd_nil_cfg; p = p->parent)
CFG_Node *cmd_line_root = cfg_node_child_from_string(cfg_node_root(), str8_lit("command_line"));
for(CFG_Node *p = cfg->parent; p != &cfg_nil_node; p = p->parent)
{
if(p == cmd_line_root)
{
@@ -44,7 +44,7 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, B32 include_extras)
}
B32 is_within_window = 0;
{
for(RD_Cfg *p = cfg->parent; p != &rd_nil_cfg; p = p->parent)
for(CFG_Node *p = cfg->parent; p != &cfg_nil_node; p = p->parent)
{
if(str8_match(p->string, str8_lit("window"), 0))
{
@@ -105,7 +105,7 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, B32 include_extras)
CTRL_Event stop_event = d_ctrl_last_stop_event();
if(stop_event.cause == CTRL_EventCause_UserBreakpoint)
{
RD_Cfg *bp = rd_cfg_from_id(stop_event.u64_code);
CFG_Node *bp = cfg_node_from_id(stop_event.u64_code);
if(bp == cfg)
{
CTRL_Entity *thread = ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, stop_event.entity);
@@ -147,7 +147,7 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, B32 include_extras)
}
//- rjf: push bucket name
if(cfg->parent == rd_state->root_cfg)
if(cfg->parent == cfg_node_root())
{
if(str8_match(cfg->string, str8_lit("user"), 0))
{
@@ -328,7 +328,7 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, B32 include_extras)
//- rjf: push conditions
{
String8 condition = rd_cfg_child_from_string(cfg, str8_lit("condition"))->first->string;
String8 condition = cfg_node_child_from_string(cfg, str8_lit("condition"))->first->string;
if(condition.size != 0)
{
dr_fstrs_push_new(arena, &result, &params, str8_lit("if "), .font = rd_font_from_slot(RD_FontSlot_Code), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Code));
@@ -350,7 +350,7 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, B32 include_extras)
//- rjf: push hit count
{
String8 hit_count_value_string = rd_cfg_child_from_string(cfg, str8_lit("hit_count"))->first->string;
String8 hit_count_value_string = cfg_node_child_from_string(cfg, str8_lit("hit_count"))->first->string;
U64 hit_count = 0;
if(try_u64_from_str8_c_rules(hit_count_value_string, &hit_count) && hit_count != 0)
{
@@ -362,8 +362,8 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, B32 include_extras)
//- rjf: special case: type views
if(str8_match(cfg->string, str8_lit("type_view"), 0))
{
String8 src_string = rd_cfg_child_from_string(cfg, str8_lit("type"))->first->string;
String8 dst_string = rd_cfg_child_from_string(cfg, str8_lit("expr"))->first->string;
String8 src_string = cfg_node_child_from_string(cfg, str8_lit("type"))->first->string;
String8 dst_string = cfg_node_child_from_string(cfg, str8_lit("expr"))->first->string;
Vec4F32 src_color = rgba;
Vec4F32 dst_color = rgba;
DR_FStrList src_fstrs = {0};
@@ -398,8 +398,8 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, B32 include_extras)
//- rjf: special case: file path maps
if(str8_match(cfg->string, str8_lit("file_path_map"), 0))
{
String8 src_string = rd_cfg_child_from_string(cfg, str8_lit("source"))->first->string;
String8 dst_string = rd_cfg_child_from_string(cfg, str8_lit("dest"))->first->string;
String8 src_string = cfg_node_child_from_string(cfg, str8_lit("source"))->first->string;
String8 dst_string = cfg_node_child_from_string(cfg, str8_lit("dest"))->first->string;
Vec4F32 src_color = rgba;
Vec4F32 dst_color = rgba;
if(src_string.size == 0)
@@ -422,8 +422,8 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, B32 include_extras)
//- rjf: special case: colors
if(str8_match(cfg->string, str8_lit("theme_color"), 0))
{
String8 tags = rd_cfg_child_from_string(cfg, str8_lit("tags"))->first->string;
String8 color_string = rd_cfg_child_from_string(cfg, str8_lit("value"))->first->string;
String8 tags = cfg_node_child_from_string(cfg, str8_lit("tags"))->first->string;
String8 color_string = cfg_node_child_from_string(cfg, str8_lit("value"))->first->string;
U32 color_u32 = e_value_from_stringf("(uint32)(%S)", color_string).u32;
Vec4F32 color = linear_from_srgba(rgba_from_u32(color_u32));
if(tags.size != 0)
@@ -860,7 +860,7 @@ rd_cmd_binding_buttons(String8 name, String8 filter, B32 add_new)
UI_Signal sig = rd_icon_button(RD_IconKind_X, 0, str8_lit("###delete_binding"));
if(ui_clicked(sig))
{
rd_cfg_release(rd_cfg_from_id(rd_state->bind_change_binding_id));
cfg_node_release(rd_state->cfg, cfg_node_from_id(rd_state->bind_change_binding_id));
rd_state->bind_change_active = 0;
}
}
@@ -972,7 +972,7 @@ rd_cmd_list_menu_buttons(U64 count, String8 *cmd_names, U32 *fastpath_codepoints
{
rd_cmd(RD_CmdKind_RunCommand, .cmd_name = cmd_names[idx]);
ui_ctx_menu_close();
RD_Cfg *window = rd_cfg_from_id(rd_regs()->window);
CFG_Node *window = cfg_node_from_id(rd_regs()->window);
RD_WindowState *ws = rd_window_state_from_cfg(window);
ws->menu_bar_focused = 0;
}
@@ -1308,14 +1308,14 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
//- rjf: dragging cfgs/entities/expressions? -> drop site
//
B32 drop_can_hit_lines = 0;
RD_Cfg *drop_cfg = &rd_nil_cfg;
CFG_Node *drop_cfg = &cfg_nil_node;
CTRL_Entity *drop_thread = &ctrl_entity_nil;
String8 drop_expr = {0};
Vec4F32 drop_color = pop_color;
UI_Key drop_site_key = ui_key_from_stringf(top_container_box->key, "drop_site");
if(rd_drag_is_active())
{
RD_Cfg *cfg = rd_cfg_from_id(rd_state->drag_drop_regs->cfg);
CFG_Node *cfg = cfg_node_from_id(rd_state->drag_drop_regs->cfg);
if(rd_state->drag_drop_regs_slot == RD_RegSlot_Cfg &&
(str8_match(cfg->string, str8_lit("breakpoint"), 0) ||
str8_match(cfg->string, str8_lit("watch_pin"), 0)))
@@ -1553,8 +1553,8 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
line_num += 1, line_idx += 1)
{
CTRL_EntityList line_ips = params->line_ips[line_idx];
RD_CfgList line_bps = params->line_bps[line_idx];
RD_CfgList line_pins = params->line_pins[line_idx];
CFG_NodePtrList line_bps = params->line_bps[line_idx];
CFG_NodePtrList line_pins = params->line_pins[line_idx];
ui_set_next_hover_cursor(OS_Cursor_HandPoint);
ui_set_next_background_color(v4f32(0, 0, 0, 0));
UI_Box *line_margin_box = ui_build_box_from_stringf(UI_BoxFlag_Clickable*!!(params->flags & RD_CodeSliceFlag_Clickable)|UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawActiveEffects, "line_margin_%I64x", line_num);
@@ -1683,9 +1683,9 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
}
//- rjf: build margin breakpoint ui
for(RD_CfgNode *n = line_bps.first; n != 0; n = n->next)
for(CFG_NodePtrNode *n = line_bps.first; n != 0; n = n->next)
{
RD_Cfg *bp = n->v;
CFG_Node *bp = n->v;
Vec4F32 bp_rgba = rd_color_from_cfg(bp);
if(bp_rgba.w == 0)
{
@@ -1701,14 +1701,14 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
RD_BreakpointBoxDrawExtData *bp_draw = push_array(ui_build_arena(), RD_BreakpointBoxDrawExtData, 1);
{
RD_Regs *hover_regs = rd_get_hover_regs();
B32 is_hovering = (rd_cfg_from_id(hover_regs->cfg) == bp && rd_state->hover_regs_slot == RD_RegSlot_Cfg);
B32 is_hovering = (cfg_node_from_id(hover_regs->cfg) == bp && rd_state->hover_regs_slot == RD_RegSlot_Cfg);
bp_draw->color = bp_rgba;
bp_draw->alive_t = ui_anim(ui_key_from_stringf(ui_key_zero(), "cfg_alive_t_%p", bp), 1.f, .rate = entity_alive_t_rate);
bp_draw->hover_t = ui_anim(ui_key_from_stringf(ui_key_zero(), "cfg_hover_t_%p", bp), (F32)!!is_hovering, .rate = entity_hover_t_rate);
bp_draw->do_lines = do_bp_lines;
bp_draw->do_glow = do_bp_glow;
bp_draw->is_disabled = bp_is_disabled;
bp_draw->is_conditioned = (rd_cfg_child_from_string(bp, str8_lit("condition"))->first->string.size != 0);
bp_draw->is_conditioned = (cfg_node_child_from_string(bp, str8_lit("condition"))->first->string.size != 0);
if(params->line_vaddrs[line_idx] == 0)
{
D_LineList *lines = &params->line_infos[line_idx];
@@ -1773,9 +1773,9 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
}
//- rjf: build margin watch pin ui
for(RD_CfgNode *n = line_pins.first; n != 0; n = n->next)
for(CFG_NodePtrNode *n = line_pins.first; n != 0; n = n->next)
{
RD_Cfg *pin = n->v;
CFG_Node *pin = n->v;
Vec4F32 color = rd_color_from_cfg(pin);
if(color.w == 0)
{
@@ -2017,7 +2017,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
line_num < params->line_num_range.max;
line_num += 1, line_idx += 1)
{
RD_CfgList immediate_pins = {0};
CFG_NodePtrList immediate_pins = {0};
String8 line_text = params->line_text[line_idx];
for(U64 off = 0, next_off = line_text.size;
off < line_text.size;
@@ -2086,29 +2086,29 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
// rjf: build immediate pin for this markup
if(expr_string.size != 0)
{
RD_Cfg *immediate_root = rd_immediate_cfg_from_keyf("markup_pin_%I64x_%I64x", line_num, off);
RD_Cfg *pin = rd_cfg_child_from_string_or_alloc(immediate_root, str8_lit("watch_pin"));
RD_Cfg *expr = rd_cfg_child_from_string_or_alloc(pin, str8_lit("expression"));
rd_cfg_new_replace(expr, expr_string);
rd_cfg_list_push(scratch.arena, &immediate_pins, pin);
CFG_Node *immediate_root = rd_immediate_cfg_from_keyf("markup_pin_%I64x_%I64x", line_num, off);
CFG_Node *pin = cfg_node_child_from_string_or_alloc(rd_state->cfg, immediate_root, str8_lit("watch_pin"));
CFG_Node *expr = cfg_node_child_from_string_or_alloc(rd_state->cfg, pin, str8_lit("expression"));
cfg_node_new_replace(rd_state->cfg, expr, expr_string);
cfg_node_ptr_list_push(scratch.arena, &immediate_pins, pin);
}
}
RD_CfgList pin_lists[] =
CFG_NodePtrList pin_lists[] =
{
params->line_pins[line_idx],
immediate_pins,
};
E_ParentKey(e_key_zero()) for EachElement(list_idx, pin_lists)
{
RD_CfgList pins = pin_lists[list_idx];
CFG_NodePtrList pins = pin_lists[list_idx];
if(pins.count != 0) UI_Parent(line_extras_boxes[line_idx])
RD_Font(RD_FontSlot_Code)
UI_FontSize(params->font_size)
UI_PrefHeight(ui_px(params->line_height_px, 1.f))
{
for(RD_CfgNode *n = pins.first; n != 0; n = n->next)
for(CFG_NodePtrNode *n = pins.first; n != 0; n = n->next)
{
RD_Cfg *pin = n->v;
CFG_Node *pin = n->v;
String8 pin_expr = rd_expr_from_cfg(pin);
E_Eval eval = e_eval_from_string(pin_expr);
String8 eval_string = {0};
@@ -2243,7 +2243,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
.cursor = line_vaddr == 0 ? txt_pt(line_num, 1) : txt_pt(0, 0),
.vaddr = line_vaddr);
}
if(rd_state->drag_drop_regs_slot == RD_RegSlot_Cfg && drop_cfg != &rd_nil_cfg)
if(rd_state->drag_drop_regs_slot == RD_RegSlot_Cfg && drop_cfg != &cfg_nil_node)
{
S64 line_num = mouse_pt.line;
U64 line_idx = line_num - params->line_num_range.min;
@@ -3917,7 +3917,7 @@ rd_cell(RD_CellParams *params, String8 string)
// rjf: any valid *additive* op & autocomplete hint? -> perform autocomplete first, then re-compute op
if(!(evt->flags & UI_EventFlag_Delete) && autocomplete_hint_string.size != 0)
{
RD_Cfg *window = rd_cfg_from_id(rd_regs()->window);
CFG_Node *window = cfg_node_from_id(rd_regs()->window);
RD_WindowState *ws = rd_window_state_from_cfg(window);
RD_AutocompCursorInfo *autocomp_cursor_info = &ws->autocomp_cursor_info;
String8 new_string = ui_push_string_replace_range(scratch.arena, edit_string, r1s64(autocomp_cursor_info->replaced_range.min+1, autocomp_cursor_info->replaced_range.max+1), autocomplete_hint_string);
@@ -4015,7 +4015,7 @@ rd_cell(RD_CellParams *params, String8 string)
}
if(autocomplete_hint_string.size != 0)
{
RD_Cfg *window = rd_cfg_from_id(rd_regs()->window);
CFG_Node *window = cfg_node_from_id(rd_regs()->window);
RD_WindowState *ws = rd_window_state_from_cfg(window);
RD_AutocompCursorInfo *autocomp_cursor_info = &ws->autocomp_cursor_info;
String8 autocomplete_append_string = str8_skip(autocomplete_hint_string, params->cursor->column-1 - autocomp_cursor_info->replaced_range.min);
+3 -3
View File
@@ -101,9 +101,9 @@ struct RD_CodeSliceParams
String8 *line_text;
Rng1U64 *line_ranges;
TXT_TokenArray *line_tokens;
RD_CfgList *line_bps;
CFG_NodePtrList *line_bps;
CTRL_EntityList *line_ips;
RD_CfgList *line_pins;
CFG_NodePtrList *line_pins;
U64 *line_vaddrs;
D_LineList *line_infos;
DI_KeyList relevant_dbgi_keys;
@@ -139,7 +139,7 @@ struct RD_CodeSliceSignal
////////////////////////////////
//~ rjf: UI Widgets: Fancy Title Strings
internal DR_FStrList rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, B32 include_extras);
internal DR_FStrList rd_title_fstrs_from_cfg(Arena *arena, CFG_Node *cfg, B32 include_extras);
internal DR_FStrList rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, B32 include_extras);
internal DR_FStrList rd_title_fstrs_from_code_name(Arena *arena, String8 code_name);
internal DR_FStrList rd_title_fstrs_from_file_path(Arena *arena, String8 file_path);