eliminate old serialization/deserialization paths

This commit is contained in:
Ryan Fleury
2024-08-14 15:27:36 -07:00
parent 52f4474cc8
commit 94791e62ff
-619
View File
@@ -5506,302 +5506,6 @@ df_cfg_strings_from_core(Arena *arena, String8 root_path, DF_CfgSrc source)
}
}
#if 0
//- rjf: write recent projects
{
B32 first = 1;
DF_EntityList recent_projects = df_query_cached_entity_list_with_kind(DF_EntityKind_RecentProject);
for(DF_EntityNode *n = recent_projects.first; n != 0; n = n->next)
{
DF_Entity *rp = n->entity;
if(rp->cfg_src == source)
{
if(first)
{
first = 0;
str8_list_push(arena, &strs, str8_lit("/// recent projects ///////////////////////////////////////////////////////////\n"));
str8_list_push(arena, &strs, str8_lit("\n"));
}
Temp scratch = scratch_begin(&arena, 1);
String8 path_absolute = path_normalized_from_string(scratch.arena, rp->name);
String8 path_relative = path_relative_dst_from_absolute_dst_src(scratch.arena, path_absolute, root_path);
str8_list_pushf(arena, &strs, "recent_project: {\"%S\"}\n", path_relative);
scratch_end(scratch);
}
}
if(!first)
{
str8_list_push(arena, &strs, str8_lit("\n"));
}
}
//- rjf: write targets
{
B32 first = 1;
DF_EntityList targets = df_query_cached_entity_list_with_kind(DF_EntityKind_Target);
for(DF_EntityNode *n = targets.first; n != 0; n = n->next)
{
DF_Entity *target = n->entity;
if(target->cfg_src == source)
{
if(first)
{
first = 0;
str8_list_push(arena, &strs, str8_lit("/// targets ///////////////////////////////////////////////////////////////////\n"));
str8_list_push(arena, &strs, str8_lit("\n"));
}
Temp scratch = scratch_begin(&arena, 1);
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 *wdir__ent = df_entity_child_from_kind(target, DF_EntityKind_WorkingDirectory);
DF_Entity *entr__ent = df_entity_child_from_kind(target, DF_EntityKind_EntryPoint);
String8 label = target->name;
String8 exe = exe__ent->name;
String8 exe_normalized = path_normalized_from_string(scratch.arena, exe);
String8 exe_normalized_rel = path_relative_dst_from_absolute_dst_src(scratch.arena, exe_normalized, root_path);
String8 wdir = wdir__ent->name;
String8 wdir_normalized = path_normalized_from_string(scratch.arena, wdir);
String8 wdir_normalized_rel = path_relative_dst_from_absolute_dst_src(scratch.arena, wdir_normalized, root_path);
String8 entry_point_name = entr__ent->name;
String8 label_escaped = df_cfg_escaped_from_raw_string(arena, label);
String8 args_escaped = df_cfg_escaped_from_raw_string(arena, args__ent->name);
String8 entry_escaped = df_cfg_escaped_from_raw_string(arena, entry_point_name);
str8_list_push (arena, &strs, str8_lit("target:\n"));
str8_list_push (arena, &strs, str8_lit("{\n"));
if(label.size != 0)
{
str8_list_pushf(arena, &strs, " label: \"%S\"\n", label_escaped);
}
str8_list_pushf(arena, &strs, " exe: \"%S\"\n", exe_normalized_rel);
str8_list_pushf(arena, &strs, " arguments: \"%S\"\n", args_escaped);
str8_list_pushf(arena, &strs, " working_directory: \"%S\"\n", wdir_normalized_rel);
if(entry_point_name.size != 0)
{
str8_list_pushf(arena, &strs, " entry_point: \"%S\"\n", entry_escaped);
}
str8_list_pushf(arena, &strs, " active: %i\n", (int)!target->disabled);
if(target->flags & DF_EntityFlag_HasColor)
{
Vec4F32 hsva = df_hsva_from_entity(target);
str8_list_pushf(arena, &strs, " hsva: %.2f %.2f %.2f %.2f\n", hsva.x, hsva.y, hsva.z, hsva.w);
}
str8_list_push (arena, &strs, str8_lit("}\n"));
str8_list_push (arena, &strs, str8_lit("\n"));
scratch_end(scratch);
}
}
}
//- rjf: write path maps
{
B32 first = 1;
DF_EntityList path_maps = df_query_cached_entity_list_with_kind(DF_EntityKind_OverrideFileLink);
for(DF_EntityNode *n = path_maps.first; n != 0; n = n->next)
{
DF_Entity *map = n->entity;
if(map->cfg_src == source)
{
if(first)
{
first = 0;
str8_list_push(arena, &strs, str8_lit("/// file path maps ////////////////////////////////////////////////////////////\n"));
str8_list_push(arena, &strs, str8_lit("\n"));
}
String8 src_path = df_full_path_from_entity(arena, map);
String8 dst_path = df_full_path_from_entity(arena, df_entity_from_handle(map->entity_handle));
str8_list_push (arena, &strs, str8_lit("file_path_map:\n"));
str8_list_push (arena, &strs, str8_lit("{\n"));
str8_list_pushf(arena, &strs, " source_path: \"%S\"\n", src_path);
str8_list_pushf(arena, &strs, " dest_path: \"%S\"\n", dst_path);
str8_list_push (arena, &strs, str8_lit("}\n"));
str8_list_push (arena, &strs, str8_lit("\n"));
}
}
}
//- rjf: write auto view rules
{
B32 first = 1;
DF_EntityList avrs = df_query_cached_entity_list_with_kind(DF_EntityKind_AutoViewRule);
for(DF_EntityNode *n = avrs.first; n != 0; n = n->next)
{
DF_Entity *map = n->entity;
if(map->cfg_src == source)
{
if(first)
{
first = 0;
str8_list_push(arena, &strs, str8_lit("/// auto view rules ///////////////////////////////////////////////////////////\n"));
str8_list_push(arena, &strs, str8_lit("\n"));
}
String8 type = df_entity_child_from_kind(map, DF_EntityKind_Source)->name;
String8 view_rule = df_entity_child_from_kind(map, DF_EntityKind_Dest)->name;
type = df_cfg_escaped_from_raw_string(arena, type);
view_rule= df_cfg_escaped_from_raw_string(arena, view_rule);
str8_list_push (arena, &strs, str8_lit("auto_view_rule:\n"));
str8_list_push (arena, &strs, str8_lit("{\n"));
str8_list_pushf(arena, &strs, " type: \"%S\"\n", type);
str8_list_pushf(arena, &strs, " view_rule: \"%S\"\n", view_rule);
str8_list_push (arena, &strs, str8_lit("}\n"));
str8_list_push (arena, &strs, str8_lit("\n"));
}
}
}
//- rjf: write breakpoints
{
B32 first = 1;
DF_EntityList bps = df_query_cached_entity_list_with_kind(DF_EntityKind_Breakpoint);
for(DF_EntityNode *n = bps.first; n != 0; n = n->next)
{
DF_Entity *bp = n->entity;
if(bp->cfg_src == source)
{
DF_Entity *file = df_entity_ancestor_from_kind(bp, DF_EntityKind_File);
DF_Entity *symb = df_entity_child_from_kind(bp, DF_EntityKind_EntryPoint);
DF_Entity *cond = df_entity_child_from_kind(bp, DF_EntityKind_Condition);
if(first)
{
first = 0;
str8_list_push(arena, &strs, str8_lit("/// breakpoints ///////////////////////////////////////////////////////////////\n"));
str8_list_push(arena, &strs, str8_lit("\n"));
}
// rjf: begin
str8_list_push(arena, &strs, str8_lit("breakpoint:\n"));
str8_list_push(arena, &strs, str8_lit("{\n"));
// rjf: textual breakpoints
if(!df_entity_is_nil(file) && bp->flags & DF_EntityFlag_HasTextPoint)
{
String8 bp_file_path = df_full_path_from_entity(arena, file);
String8 srlized_bp_file_path = path_relative_dst_from_absolute_dst_src(arena, bp_file_path, root_path);
String8 string = push_str8f(arena, " line: (\"%S\":%I64d)\n", srlized_bp_file_path, bp->text_point.line);
str8_list_push(arena, &strs, string);
}
// rjf: function name breakpoints
else if(!df_entity_is_nil(symb) && symb->name.size != 0)
{
String8 symb_escaped = df_cfg_escaped_from_raw_string(arena, symb->name);
str8_list_pushf(arena, &strs, " symbol: \"%S\"\n", symb_escaped);
}
// rjf: address breakpoints
else if(bp->flags & DF_EntityFlag_HasVAddr)
{
str8_list_pushf(arena, &strs, " addr: 0x%I64x\n", bp->vaddr);
}
// rjf: conditions
if(!df_entity_is_nil(cond))
{
String8 cond_escaped = df_cfg_escaped_from_raw_string(arena, cond->name);
str8_list_pushf(arena, &strs, " condition: \"%S\"\n", cond_escaped);
}
// rjf: universal options
str8_list_pushf(arena, &strs, " enabled: %i\n", (int)!bp->disabled);
if(bp->name.size != 0)
{
String8 label_escaped = df_cfg_escaped_from_raw_string(arena, bp->name);
str8_list_pushf(arena, &strs, " label: \"%S\"\n", bp->name);
}
if(bp->flags & DF_EntityFlag_HasColor)
{
Vec4F32 hsva = df_hsva_from_entity(bp);
str8_list_pushf(arena, &strs, " hsva: %.2f %.2f %.2f %.2f\n", hsva.x, hsva.y, hsva.z, hsva.w);
}
// rjf: end
str8_list_push(arena, &strs, str8_lit("}\n\n"));
}
}
}
//- rjf: write watches
{
B32 first = 1;
DF_EntityList watches = df_query_cached_entity_list_with_kind(DF_EntityKind_Watch);
for(DF_EntityNode *n = watches.first; n != 0; n = n->next)
{
DF_Entity *watch = n->entity;
if(watch->cfg_src == source)
{
if(first)
{
first = 0;
str8_list_push(arena, &strs, str8_lit("/// watches ///////////////////////////////////////////////////////////////////\n"));
str8_list_push(arena, &strs, str8_lit("\n"));
}
Temp scratch = scratch_begin(&arena, 1);
DF_Entity *view_rule_entity = df_entity_child_from_kind(watch, DF_EntityKind_ViewRule);
String8 expr = watch->name;
String8 view_rule = view_rule_entity->name;
String8 expr_escaped = df_cfg_escaped_from_raw_string(arena, expr);
String8 view_rule_escaped = df_cfg_escaped_from_raw_string(arena, view_rule);
str8_list_push (arena, &strs, str8_lit("watch:\n"));
str8_list_push (arena, &strs, str8_lit("{\n"));
str8_list_pushf(arena, &strs, " expression: \"%S\"\n", expr_escaped);
str8_list_pushf(arena, &strs, " view_rule: \"%S\"\n", view_rule_escaped);
if(watch->flags & DF_EntityFlag_HasColor)
{
Vec4F32 hsva = df_hsva_from_entity(watch);
str8_list_pushf(arena, &strs, " hsva: %.2f %.2f %.2f %.2f\n", hsva.x, hsva.y, hsva.z, hsva.w);
}
str8_list_push (arena, &strs, str8_lit("}\n"));
str8_list_push (arena, &strs, str8_lit("\n"));
scratch_end(scratch);
}
}
}
//- rjf: write watch pins
{
B32 first = 1;
DF_EntityList pins = df_query_cached_entity_list_with_kind(DF_EntityKind_WatchPin);
for(DF_EntityNode *n = pins.first; n != 0; n = n->next)
{
DF_Entity *pin = n->entity;
if(pin->cfg_src == source)
{
if(first)
{
first = 0;
str8_list_push(arena, &strs, str8_lit("/// watch pins ////////////////////////////////////////////////////////////////\n"));
str8_list_push(arena, &strs, str8_lit("\n"));
}
// rjf: write
str8_list_push(arena, &strs, str8_lit("watch_pin:\n"));
str8_list_push(arena, &strs, str8_lit("{\n"));
String8 expr_escaped = df_cfg_escaped_from_raw_string(arena, pin->name);
str8_list_pushf(arena, &strs, " expression: \"%S\"\n", expr_escaped);
DF_Entity *file = df_entity_ancestor_from_kind(pin, DF_EntityKind_File);
if(pin->flags & DF_EntityFlag_HasTextPoint && !df_entity_is_nil(file))
{
String8 project_path = root_path;
String8 pin_file_path = df_full_path_from_entity(arena, file);
project_path = path_normalized_from_string(arena, project_path);
pin_file_path = path_normalized_from_string(arena, pin_file_path);
String8 srlized_pin_file_path = path_relative_dst_from_absolute_dst_src(arena, pin_file_path, project_path);
str8_list_pushf(arena, &strs, " line: (\"%S\":%I64d)\n", srlized_pin_file_path, pin->text_point.line);
}
else if(pin->flags & DF_EntityFlag_HasVAddr)
{
str8_list_pushf(arena, &strs, " addr: (0x%I64x)\n", pin->vaddr);
}
if(pin->flags & DF_EntityFlag_HasColor)
{
Vec4F32 hsva = df_hsva_from_entity(pin);
str8_list_pushf(arena, &strs, " hsva: %.2f %.2f %.2f %.2f\n", hsva.x, hsva.y, hsva.z, hsva.w);
}
str8_list_push(arena, &strs, str8_lit("}\n\n"));
}
}
}
#endif
//- rjf: write exception code filters
if(source == DF_CfgSrc_Project)
{
@@ -7813,329 +7517,6 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
}
}
#if 0
//- rjf: apply recent projects
DF_CfgVal *recent_projects = df_cfg_val_from_string(table, str8_lit("recent_project"));
for(DF_CfgNode *rp = recent_projects->first;
rp != &df_g_nil_cfg_node;
rp = rp->next)
{
if(rp->source == src)
{
String8 path_saved = rp->first->string;
String8 path_absolute = path_absolute_dst_from_relative_dst_src(scratch.arena, path_saved, cfg_folder);
DF_Entity *existing = df_entity_from_name_and_kind(path_absolute, DF_EntityKind_RecentProject);
if(df_entity_is_nil(existing))
{
DF_Entity *rp_ent = df_entity_alloc(df_entity_root(), DF_EntityKind_RecentProject);
df_entity_equip_cfg_src(rp_ent, src);
df_entity_equip_name(rp_ent, path_absolute);
}
}
}
//- rjf: apply targets
DF_CfgVal *targets = df_cfg_val_from_string(table, str8_lit("target"));
{
B32 cmd_line_target_present = 0;
{
DF_EntityList existing_target_entities = df_query_cached_entity_list_with_kind(DF_EntityKind_Target);
for(DF_EntityNode *n = existing_target_entities.first; n != 0; n = n->next)
{
DF_Entity *target = n->entity;
if(target->cfg_src == DF_CfgSrc_CommandLine && !target->disabled)
{
cmd_line_target_present = 1;
}
}
}
for(DF_CfgNode *target = targets->first;
target != &df_g_nil_cfg_node;
target = target->next)
{
if(target->source == src)
{
DF_CfgNode *label_cfg = df_cfg_node_child_from_string(target, str8_lit("label"), StringMatchFlag_CaseInsensitive);
DF_CfgNode *exe_cfg = df_cfg_node_child_from_string(target, str8_lit("exe"), StringMatchFlag_CaseInsensitive);
if(exe_cfg == &df_g_nil_cfg_node)
{
exe_cfg = df_cfg_node_child_from_string(target, str8_lit("name"), StringMatchFlag_CaseInsensitive);
}
DF_CfgNode *args_cfg = df_cfg_node_child_from_string(target, str8_lit("arguments"), StringMatchFlag_CaseInsensitive);
DF_CfgNode *wdir_cfg = df_cfg_node_child_from_string(target, str8_lit("working_directory"), StringMatchFlag_CaseInsensitive);
DF_CfgNode *entry_cfg = df_cfg_node_child_from_string(target, str8_lit("entry_point"), StringMatchFlag_CaseInsensitive);
DF_CfgNode *active_cfg = df_cfg_node_child_from_string(target, str8_lit("active"), StringMatchFlag_CaseInsensitive);
Vec4F32 hsva = df_hsva_from_cfg_node(target);
U64 is_active_u64 = 0;
if(!cmd_line_target_present)
{
try_u64_from_str8_c_rules(active_cfg->first->string, &is_active_u64);
}
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 *args__ent = df_entity_alloc(target__ent, DF_EntityKind_Arguments);
DF_Entity *path__ent = df_entity_alloc(target__ent, DF_EntityKind_WorkingDirectory);
DF_Entity *entry__ent = df_entity_alloc(target__ent, DF_EntityKind_EntryPoint);
String8 saved_label = label_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_wdir = wdir_cfg->first->string;
String8 saved_wdir_absolute = path_absolute_dst_from_relative_dst_src(scratch.arena, saved_wdir, cfg_folder);
String8 saved_entry_point = entry_cfg->first->string;
String8 saved_label_raw = df_cfg_raw_from_escaped_string(scratch.arena, saved_label);
String8 saved_entry_raw = df_cfg_raw_from_escaped_string(scratch.arena, saved_entry_point);
String8 saved_args_raw = df_cfg_raw_from_escaped_string(scratch.arena, args_cfg->first->string);
if(!is_active_u64)
{
df_entity_equip_disabled(target__ent, 1);
}
df_entity_equip_name(target__ent, saved_label_raw);
df_entity_equip_name(exe__ent, saved_exe_absolute);
df_entity_equip_name(args__ent, saved_args_raw);
df_entity_equip_name(path__ent, saved_wdir_absolute);
df_entity_equip_name(entry__ent, saved_entry_raw);
df_entity_equip_cfg_src(target__ent, src);
if(!memory_is_zero(&hsva, sizeof(hsva)))
{
df_entity_equip_color_hsva(target__ent, hsva);
}
}
}
}
//- rjf: apply path maps
DF_CfgVal *path_maps = df_cfg_val_from_string(table, str8_lit("file_path_map"));
for(DF_CfgNode *map = path_maps->first;
map != &df_g_nil_cfg_node;
map = map->next)
{
if(map->source == src)
{
DF_CfgNode *src_cfg = df_cfg_node_child_from_string(map, str8_lit("source_path"), StringMatchFlag_CaseInsensitive);
DF_CfgNode *dst_cfg = df_cfg_node_child_from_string(map, str8_lit("dest_path"), StringMatchFlag_CaseInsensitive);
String8 src_path = src_cfg->first->string;
String8 dst_path = dst_cfg->first->string;
DF_Entity *link_loc_entity = df_entity_from_path(src_path, DF_EntityFromPathFlag_OpenAsNeeded|DF_EntityFromPathFlag_OpenMissing);
DF_Entity *link_entity = df_entity_alloc(link_loc_entity->parent, DF_EntityKind_OverrideFileLink);
DF_Entity *link_dst_entity = df_entity_from_path(dst_path, DF_EntityFromPathFlag_OpenAsNeeded|DF_EntityFromPathFlag_OpenMissing);
df_entity_equip_name(link_entity, str8_skip_last_slash(src_path));
df_entity_equip_entity_handle(link_entity, df_handle_from_entity(link_dst_entity));
df_entity_equip_cfg_src(link_entity, src);
}
}
//- rjf: apply auto view rules
DF_CfgVal *avrs = df_cfg_val_from_string(table, str8_lit("auto_view_rule"));
for(DF_CfgNode *map = avrs->first;
map != &df_g_nil_cfg_node;
map = map->next)
{
if(map->source == src)
{
DF_CfgNode *src_cfg = df_cfg_node_child_from_string(map, str8_lit("type"), StringMatchFlag_CaseInsensitive);
DF_CfgNode *dst_cfg = df_cfg_node_child_from_string(map, str8_lit("view_rule"), StringMatchFlag_CaseInsensitive);
String8 type = src_cfg->first->string;
String8 view_rule = dst_cfg->first->string;
type = df_cfg_raw_from_escaped_string(scratch.arena, type);
view_rule = df_cfg_raw_from_escaped_string(scratch.arena, view_rule);
DF_Entity *map_entity = df_entity_alloc(df_entity_root(), DF_EntityKind_AutoViewRule);
DF_Entity *src_entity = df_entity_alloc(map_entity, DF_EntityKind_Source);
DF_Entity *dst_entity = df_entity_alloc(map_entity, DF_EntityKind_Dest);
df_entity_equip_name(src_entity, type);
df_entity_equip_name(dst_entity, view_rule);
df_entity_equip_cfg_src(map_entity, src);
}
}
//- rjf: apply breakpoints
DF_CfgVal *bps = df_cfg_val_from_string(table, str8_lit("breakpoint"));
for(DF_CfgNode *bp = bps->first;
bp != &df_g_nil_cfg_node;
bp = bp->next)
{
if(bp->source != src)
{
continue;
}
// rjf: get metadata
Vec4F32 hsva = df_hsva_from_cfg_node(bp);
// rjf: get nodes encoding location info
B32 is_enabled = 1;
DF_CfgNode *line_cfg = &df_g_nil_cfg_node;
DF_CfgNode *addr_cfg = &df_g_nil_cfg_node;
DF_CfgNode *symb_cfg = &df_g_nil_cfg_node;
DF_CfgNode *labl_cfg = &df_g_nil_cfg_node;
for(DF_CfgNode *child = bp->first; child != &df_g_nil_cfg_node; child = child->next)
{
if(child->flags & DF_CfgNodeFlag_Identifier && str8_match(child->string, str8_lit("line"), StringMatchFlag_CaseInsensitive))
{
line_cfg = child;
}
if(child->flags & DF_CfgNodeFlag_Identifier && str8_match(child->string, str8_lit("addr"), StringMatchFlag_CaseInsensitive))
{
addr_cfg = child;
}
if(child->flags & DF_CfgNodeFlag_Identifier && str8_match(child->string, str8_lit("symbol"), StringMatchFlag_CaseInsensitive))
{
symb_cfg = child;
}
else if(child->flags & DF_CfgNodeFlag_Identifier && str8_match(child->string, str8_lit("label"), StringMatchFlag_CaseInsensitive))
{
labl_cfg = child;
}
else if(child->flags & DF_CfgNodeFlag_Identifier && str8_match(child->string, str8_lit("enabled"), StringMatchFlag_CaseInsensitive))
{
U64 is_enabled_u64 = 0;
try_u64_from_str8_c_rules(child->first->string, &is_enabled_u64);
is_enabled = (B32)is_enabled_u64;
}
}
// rjf: extract textual location bp info
DF_Entity *bp_parent_ent = df_entity_root();
TxtPt pt = {0};
if(line_cfg != &df_g_nil_cfg_node)
{
DF_CfgNode *file = line_cfg->first;
DF_CfgNode *line = file->first;
U64 line_num = 0;
if(try_u64_from_str8_c_rules(line->string, &line_num))
{
String8 saved_path = file->string;
String8 saved_path_absolute = path_absolute_dst_from_relative_dst_src(scratch.arena, saved_path, cfg_folder);
bp_parent_ent = df_entity_from_path(saved_path_absolute, DF_EntityFromPathFlag_All);
pt = txt_pt((S64)line_num, 1);
}
}
// rjf: get condition info
DF_CfgNode *cond_cfg = df_cfg_node_child_from_string(bp, str8_lit("condition"), StringMatchFlag_CaseInsensitive);
// rjf: build entity
{
DF_Entity *bp_ent = df_entity_alloc(bp_parent_ent, DF_EntityKind_Breakpoint);
df_entity_equip_disabled(bp_ent, !is_enabled);
df_entity_equip_cfg_src(bp_ent, src);
if(pt.line != 0)
{
df_entity_equip_txt_pt(bp_ent, pt);
}
if(addr_cfg != &df_g_nil_cfg_node)
{
U64 u64 = 0;
try_u64_from_str8_c_rules(addr_cfg->first->string, &u64);
df_entity_equip_vaddr(bp_ent, u64);
}
if(symb_cfg != &df_g_nil_cfg_node)
{
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_EntryPoint);
df_entity_equip_name(symb, symb_raw);
}
if(labl_cfg->string.size != 0)
{
String8 label_raw = df_cfg_raw_from_escaped_string(scratch.arena, labl_cfg->string);
df_entity_equip_name(bp_ent, label_raw);
}
if(!memory_is_zero(&hsva, sizeof(hsva)))
{
df_entity_equip_color_hsva(bp_ent, hsva);
}
if(cond_cfg->first->string.size != 0)
{
String8 cond_raw = df_cfg_raw_from_escaped_string(scratch.arena, cond_cfg->first->string);
DF_Entity *cond = df_entity_alloc(bp_ent, DF_EntityKind_Condition);
df_entity_equip_name(cond, cond_raw);
}
}
}
//- rjf: apply watches
DF_CfgVal *watches = df_cfg_val_from_string(table, str8_lit("watch"));
for(DF_CfgNode *watch = watches->first;
watch != &df_g_nil_cfg_node;
watch = watch->next)
{
if(watch->source != src)
{
continue;
}
Vec4F32 hsva = df_hsva_from_cfg_node(watch);
String8 expr_escaped = df_string_from_cfg_node_key(watch, str8_lit("expression"), StringMatchFlag_CaseInsensitive);
String8 view_rule_escaped = df_string_from_cfg_node_key(watch, str8_lit("view_rule"), StringMatchFlag_CaseInsensitive);
String8 expr = df_cfg_raw_from_escaped_string(scratch.arena, expr_escaped);
String8 view_rule = df_cfg_raw_from_escaped_string(scratch.arena, view_rule_escaped);
DF_Entity *entity = df_entity_alloc(df_entity_root(), DF_EntityKind_Watch);
df_entity_equip_cfg_src(entity, src);
df_entity_equip_name(entity, expr);
if(!memory_is_zero(&hsva, sizeof(hsva)))
{
df_entity_equip_color_hsva(entity, hsva);
}
if(view_rule.size != 0)
{
DF_Entity *view_rule_entity = df_entity_alloc(entity, DF_EntityKind_ViewRule);
df_entity_equip_name(view_rule_entity, view_rule);
}
}
//- rjf: apply watch pins
DF_CfgVal *pins = df_cfg_val_from_string(table, str8_lit("watch_pin"));
for(DF_CfgNode *pin = pins->first;
pin != &df_g_nil_cfg_node;
pin = pin->next)
{
if(pin->source != src)
{
continue;
}
Vec4F32 hsva = df_hsva_from_cfg_node(pin);
String8 string = df_string_from_cfg_node_key(pin, str8_lit("expression"), StringMatchFlag_CaseInsensitive);
String8 string_raw = df_cfg_raw_from_escaped_string(scratch.arena, string);
DF_CfgNode *line_cfg = df_cfg_node_child_from_string(pin, str8_lit("line"), StringMatchFlag_CaseInsensitive);
DF_CfgNode *addr_cfg = df_cfg_node_child_from_string(pin, str8_lit("addr"), StringMatchFlag_CaseInsensitive);
DF_Entity *pin_parent_ent = df_entity_root();
TxtPt pt = {0};
if(line_cfg != &df_g_nil_cfg_node)
{
String8 saved_path = line_cfg->first->string;
String8 line_num_string = line_cfg->first->first->string;
String8 saved_path_absolute = path_absolute_dst_from_relative_dst_src(scratch.arena, saved_path, cfg_folder);
pin_parent_ent = df_entity_from_path(saved_path_absolute, DF_EntityFromPathFlag_All);
U64 line_num = 0;
if(try_u64_from_str8_c_rules(line_num_string, &line_num))
{
if(line_num != 0)
{
pt = txt_pt((S64)line_num, 1);
}
}
}
U64 vaddr = 0;
if(addr_cfg != &df_g_nil_cfg_node)
{
try_u64_from_str8_c_rules(addr_cfg->first->string, &vaddr);
}
DF_Entity *pin_ent = df_entity_alloc(pin_parent_ent, DF_EntityKind_WatchPin);
df_entity_equip_cfg_src(pin_ent, src);
df_entity_equip_name(pin_ent, string_raw);
if(!memory_is_zero(&hsva, sizeof(hsva)))
{
df_entity_equip_color_hsva(pin_ent, hsva);
}
if(pt.line != 0)
{
df_entity_equip_txt_pt(pin_ent, pt);
}
if(vaddr != 0)
{
df_entity_equip_vaddr(pin_ent, vaddr);
}
}
#endif
//- rjf: apply exception code filters
DF_CfgVal *filter_tables = df_cfg_val_from_string(table, str8_lit("exception_code_filters"));
for(DF_CfgNode *table = filter_tables->first;