mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-19 10:32:23 -07:00
move over all expansion view rules to new eval-system lookup hooks; eliminate most of old hooks
This commit is contained in:
+15
-9
@@ -4,17 +4,17 @@
|
||||
////////////////////////////////
|
||||
//~ rjf: Entity Kinds
|
||||
|
||||
@table(name display_string)
|
||||
@table(name code_name display_string)
|
||||
CTRL_EntityKindTable:
|
||||
{
|
||||
{Root "Root" }
|
||||
{Machine "Machine" }
|
||||
{Process "Process" }
|
||||
{Thread "Thread" }
|
||||
{Module "Module" }
|
||||
{EntryPoint "Entry Point" }
|
||||
{DebugInfoPath "Debug Info Path" }
|
||||
{PendingThreadName "Pending Thread Name" }
|
||||
{Root root "Root" }
|
||||
{Machine machine "Machine" }
|
||||
{Process process "Process" }
|
||||
{Thread thread "Thread" }
|
||||
{Module module "Module" }
|
||||
{EntryPoint entry_point "Entry Point" }
|
||||
{DebugInfoPath debug_info_path "Debug Info Path" }
|
||||
{PendingThreadName pending_thread_name "Pending Thread Name" }
|
||||
}
|
||||
|
||||
@enum CTRL_EntityKind:
|
||||
@@ -24,6 +24,12 @@ CTRL_EntityKindTable:
|
||||
COUNT,
|
||||
}
|
||||
|
||||
@data(String8) ctrl_entity_kind_code_name_table:
|
||||
{
|
||||
`{0}`,
|
||||
@expand(CTRL_EntityKindTable a) `str8_lit_comp("$(a.code_name)")`
|
||||
}
|
||||
|
||||
@data(String8) ctrl_entity_kind_display_string_table:
|
||||
{
|
||||
`{0}`,
|
||||
|
||||
@@ -91,6 +91,21 @@ ctrl_string_from_msg_kind(CTRL_MsgKind kind)
|
||||
return result;
|
||||
}
|
||||
|
||||
internal CTRL_EntityKind
|
||||
ctrl_entity_kind_from_string(String8 string)
|
||||
{
|
||||
CTRL_EntityKind result = CTRL_EntityKind_Null;
|
||||
for EachNonZeroEnumVal(CTRL_EntityKind, k)
|
||||
{
|
||||
if(str8_match(ctrl_entity_kind_code_name_table[k], string, 0))
|
||||
{
|
||||
result = k;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Machine/Handle Pair Type Functions
|
||||
|
||||
|
||||
@@ -951,6 +951,7 @@ internal U64 ctrl_hash_from_handle(CTRL_Handle handle);
|
||||
internal CTRL_EventCause ctrl_event_cause_from_dmn_event_kind(DMN_EventKind event_kind);
|
||||
internal String8 ctrl_string_from_event_kind(CTRL_EventKind kind);
|
||||
internal String8 ctrl_string_from_msg_kind(CTRL_MsgKind kind);
|
||||
internal CTRL_EntityKind ctrl_entity_kind_from_string(String8 string);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Handle Type Functions
|
||||
|
||||
@@ -4,6 +4,19 @@
|
||||
//- GENERATED CODE
|
||||
|
||||
C_LINKAGE_BEGIN
|
||||
String8 ctrl_entity_kind_code_name_table[9] =
|
||||
{
|
||||
{0},
|
||||
str8_lit_comp("root"),
|
||||
str8_lit_comp("machine"),
|
||||
str8_lit_comp("process"),
|
||||
str8_lit_comp("thread"),
|
||||
str8_lit_comp("module"),
|
||||
str8_lit_comp("entry_point"),
|
||||
str8_lit_comp("debug_info_path"),
|
||||
str8_lit_comp("pending_thread_name"),
|
||||
};
|
||||
|
||||
String8 ctrl_entity_kind_display_string_table[9] =
|
||||
{
|
||||
{0},
|
||||
|
||||
@@ -64,6 +64,7 @@ CTRL_ExceptionCodeKind_COUNT,
|
||||
} CTRL_ExceptionCodeKind;
|
||||
|
||||
C_LINKAGE_BEGIN
|
||||
extern String8 ctrl_entity_kind_code_name_table[9];
|
||||
extern String8 ctrl_entity_kind_display_string_table[9];
|
||||
extern U32 ctrl_exception_code_kind_code_table[38];
|
||||
extern String8 ctrl_exception_code_kind_display_string_table[38];
|
||||
|
||||
+88
-22
@@ -90,6 +90,11 @@ e_lookup_rule_map_insert(Arena *arena, E_LookupRuleMap *map, E_LookupRule *rule)
|
||||
E_LookupRuleNode *n = push_array(arena, E_LookupRuleNode, 1);
|
||||
SLLQueuePush(map->slots[slot_idx].first, map->slots[slot_idx].last, n);
|
||||
MemoryCopyStruct(&n->v, rule);
|
||||
if(n->v.info == 0) { n->v.info = E_LOOKUP_INFO_FUNCTION_NAME(default); }
|
||||
if(n->v.access == 0) { n->v.access = E_LOOKUP_ACCESS_FUNCTION_NAME(default); }
|
||||
if(n->v.range == 0) { n->v.range = E_LOOKUP_RANGE_FUNCTION_NAME(default); }
|
||||
if(n->v.id_from_num == 0){ n->v.id_from_num = E_LOOKUP_ID_FROM_NUM_FUNCTION_NAME(default); }
|
||||
if(n->v.num_from_id == 0){ n->v.num_from_id = E_LOOKUP_NUM_FROM_ID_FUNCTION_NAME(default); }
|
||||
n->v.name = push_str8_copy(arena, n->v.name);
|
||||
}
|
||||
|
||||
@@ -155,9 +160,18 @@ E_LOOKUP_INFO_FUNCTION_DEF(default)
|
||||
return lookup_info;
|
||||
}
|
||||
|
||||
E_LOOKUP_FUNCTION_DEF(default)
|
||||
E_LOOKUP_ACCESS_FUNCTION_DEF(default)
|
||||
{
|
||||
E_Lookup lookup = {{&e_irnode_nil}};
|
||||
//
|
||||
// TODO(rjf): need to define what it means to access a set expression
|
||||
// whose type *does not* define its IR generation rules, BUT it does
|
||||
// define specific child expressions. so e.g. `watches`, does not
|
||||
// define `watches[0]`, because it has defined that `watches[0]`
|
||||
// maps to another expression, which is whatever the first watch
|
||||
// expression is (e.g. `basics`). so, in that case, we can just use
|
||||
// the lookup-range rule, grab the Nth expression, and IR-ify *that*.
|
||||
//
|
||||
E_LookupAccess result = {{&e_irnode_nil}};
|
||||
switch(kind)
|
||||
{
|
||||
default:{}break;
|
||||
@@ -180,7 +194,7 @@ E_LOOKUP_FUNCTION_DEF(default)
|
||||
check_type_key = e_type_unwrap(e_type_direct_from_key(e_type_unwrap(l_restype)));
|
||||
check_type_kind = e_type_kind_from_key(check_type_key);
|
||||
}
|
||||
e_msg_list_concat_in_place(&lookup.irtree_and_type.msgs, &l.msgs);
|
||||
e_msg_list_concat_in_place(&result.irtree_and_type.msgs, &l.msgs);
|
||||
|
||||
// rjf: look up member
|
||||
B32 r_found = 0;
|
||||
@@ -234,12 +248,12 @@ E_LOOKUP_FUNCTION_DEF(default)
|
||||
}
|
||||
else if(exprr->kind != E_ExprKind_LeafMember)
|
||||
{
|
||||
e_msgf(arena, &lookup.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprl->location, "Expected member name.");
|
||||
e_msgf(arena, &result.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprl->location, "Expected member name.");
|
||||
break;
|
||||
}
|
||||
else if(!r_found)
|
||||
{
|
||||
e_msgf(arena, &lookup.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprr->location, "Could not find a member named `%S`.", exprr->string);
|
||||
e_msgf(arena, &result.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprr->location, "Could not find a member named `%S`.", exprr->string);
|
||||
break;
|
||||
}
|
||||
else if(check_type_kind != E_TypeKind_Struct &&
|
||||
@@ -247,7 +261,7 @@ E_LOOKUP_FUNCTION_DEF(default)
|
||||
check_type_kind != E_TypeKind_Union &&
|
||||
check_type_kind != E_TypeKind_Enum)
|
||||
{
|
||||
e_msgf(arena, &lookup.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprl->location, "Cannot perform member access on this type.");
|
||||
e_msgf(arena, &result.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprl->location, "Cannot perform member access on this type.");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -275,9 +289,9 @@ E_LOOKUP_FUNCTION_DEF(default)
|
||||
}
|
||||
|
||||
// rjf: fill
|
||||
lookup.irtree_and_type.root = new_tree;
|
||||
lookup.irtree_and_type.type_key = r_type;
|
||||
lookup.irtree_and_type.mode = mode;
|
||||
result.irtree_and_type.root = new_tree;
|
||||
result.irtree_and_type.type_key = r_type;
|
||||
result.irtree_and_type.mode = mode;
|
||||
}
|
||||
}break;
|
||||
|
||||
@@ -302,8 +316,8 @@ E_LOOKUP_FUNCTION_DEF(default)
|
||||
direct_type = e_type_direct_from_key(direct_type);
|
||||
direct_type = e_type_unwrap(direct_type);
|
||||
U64 direct_type_size = e_type_byte_size_from_key(direct_type);
|
||||
e_msg_list_concat_in_place(&lookup.irtree_and_type.msgs, &l.msgs);
|
||||
e_msg_list_concat_in_place(&lookup.irtree_and_type.msgs, &r.msgs);
|
||||
e_msg_list_concat_in_place(&result.irtree_and_type.msgs, &l.msgs);
|
||||
e_msg_list_concat_in_place(&result.irtree_and_type.msgs, &r.msgs);
|
||||
|
||||
// rjf: bad conditions? -> error if applicable, exit
|
||||
if(r.root->op == 0)
|
||||
@@ -312,22 +326,22 @@ E_LOOKUP_FUNCTION_DEF(default)
|
||||
}
|
||||
else if(l_restype_kind != E_TypeKind_Ptr && l_restype_kind != E_TypeKind_Array)
|
||||
{
|
||||
e_msgf(arena, &lookup.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprl->location, "Cannot index into this type.");
|
||||
e_msgf(arena, &result.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprl->location, "Cannot index into this type.");
|
||||
break;
|
||||
}
|
||||
else if(!e_type_kind_is_integer(r_restype_kind))
|
||||
{
|
||||
e_msgf(arena, &lookup.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprr->location, "Cannot index with this type.");
|
||||
e_msgf(arena, &result.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprr->location, "Cannot index with this type.");
|
||||
break;
|
||||
}
|
||||
else if(l_restype_kind == E_TypeKind_Ptr && direct_type_size == 0)
|
||||
{
|
||||
e_msgf(arena, &lookup.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprr->location, "Cannot index into pointers of zero-sized types.");
|
||||
e_msgf(arena, &result.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprr->location, "Cannot index into pointers of zero-sized types.");
|
||||
break;
|
||||
}
|
||||
else if(l_restype_kind == E_TypeKind_Array && direct_type_size == 0)
|
||||
{
|
||||
e_msgf(arena, &lookup.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprr->location, "Cannot index into arrays of zero-sized types.");
|
||||
e_msgf(arena, &result.irtree_and_type.msgs, E_MsgKind_MalformedInput, exprr->location, "Cannot index into arrays of zero-sized types.");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -381,12 +395,64 @@ E_LOOKUP_FUNCTION_DEF(default)
|
||||
}
|
||||
|
||||
// rjf: fill
|
||||
lookup.irtree_and_type.root = new_tree;
|
||||
lookup.irtree_and_type.type_key = direct_type;
|
||||
lookup.irtree_and_type.mode = l.mode;
|
||||
result.irtree_and_type.root = new_tree;
|
||||
result.irtree_and_type.type_key = direct_type;
|
||||
result.irtree_and_type.mode = l.mode;
|
||||
}break;
|
||||
}
|
||||
return lookup;
|
||||
return result;
|
||||
}
|
||||
|
||||
E_LOOKUP_RANGE_FUNCTION_DEF(default)
|
||||
{
|
||||
E_LookupRange result = {0};
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
{
|
||||
E_IRTreeAndType lhs_irtree = e_irtree_and_type_from_expr(scratch.arena, lhs);
|
||||
E_TypeKey lhs_type_key = lhs_irtree.type_key;
|
||||
E_TypeKind lhs_type_kind = e_type_kind_from_key(lhs_type_key);
|
||||
if(lhs_type_kind == E_TypeKind_Struct ||
|
||||
lhs_type_kind == E_TypeKind_Union ||
|
||||
lhs_type_kind == E_TypeKind_Class ||
|
||||
lhs_type_kind == E_TypeKind_Enum)
|
||||
{
|
||||
E_Type *lhs_type = e_type_from_key(scratch.arena, lhs_type_key);
|
||||
Rng1U64 legal_idx_range = r1u64(0, lhs_type->count);
|
||||
Rng1U64 read_range = intersect_1u64(legal_idx_range, idx_range);
|
||||
U64 read_range_count = dim_1u64(read_range);
|
||||
result.exprs_count = read_range_count;
|
||||
result.exprs = push_array(arena, E_Expr *, result.exprs_count);
|
||||
for(U64 idx = 0; idx < result.exprs_count; idx += 1)
|
||||
{
|
||||
U64 member_idx = idx + read_range.min;
|
||||
String8 member_name = (lhs_type->members ? lhs_type->members[member_idx].name :
|
||||
lhs_type->enum_vals ? lhs_type->enum_vals[member_idx].name : str8_lit(""));
|
||||
result.exprs[idx] = e_expr_ref_member_access(arena, lhs, member_name);
|
||||
}
|
||||
}
|
||||
else if(lhs_type_kind == E_TypeKind_Set)
|
||||
{
|
||||
result.exprs_count = dim_1u64(idx_range);
|
||||
result.exprs = push_array(arena, E_Expr *, result.exprs_count);
|
||||
result.exprs_strings = push_array(arena, String8, result.exprs_count);
|
||||
for(U64 idx = 0; idx < result.exprs_count; idx += 1)
|
||||
{
|
||||
result.exprs[idx] = e_expr_ref_array_index(arena, lhs, idx_range.min + idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
|
||||
E_LOOKUP_ID_FROM_NUM_FUNCTION_DEF(default)
|
||||
{
|
||||
return num;
|
||||
}
|
||||
|
||||
E_LOOKUP_NUM_FROM_ID_FUNCTION_DEF(default)
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
@@ -716,9 +782,9 @@ e_irtree_and_type_from_expr__space(Arena *arena, E_Space *current_space, E_Expr
|
||||
}
|
||||
E_Expr *rhs = lhs->next;
|
||||
E_LookupRule *lookup_rule = e_lookup_rule_from_string(lookup_rule_name);
|
||||
E_LookupInfo lookup_info = lookup_rule->lookup_info(arena, lhs);
|
||||
E_Lookup lookup = lookup_rule->lookup(arena, expr->kind, lhs, rhs, lookup_info.user_data);
|
||||
result = lookup.irtree_and_type;
|
||||
E_LookupInfo lookup_info = lookup_rule->info(arena, lhs, str8_zero());
|
||||
E_LookupAccess lookup_access = lookup_rule->access(arena, expr->kind, lhs, rhs, lookup_info.user_data);
|
||||
result = lookup_access.irtree_and_type;
|
||||
scratch_end(scratch);
|
||||
}break;
|
||||
|
||||
|
||||
+44
-14
@@ -66,31 +66,60 @@ struct E_LookupInfo
|
||||
U64 idxed_expr_count;
|
||||
};
|
||||
|
||||
typedef struct E_Lookup E_Lookup;
|
||||
struct E_Lookup
|
||||
typedef struct E_LookupAccess E_LookupAccess;
|
||||
struct E_LookupAccess
|
||||
{
|
||||
E_IRTreeAndType irtree_and_type;
|
||||
};
|
||||
|
||||
#define E_LOOKUP_INFO_FUNCTION_SIG(name) E_LookupInfo name(Arena *arena, E_Expr *lhs)
|
||||
typedef struct E_LookupRange E_LookupRange;
|
||||
struct E_LookupRange
|
||||
{
|
||||
U64 exprs_count;
|
||||
E_Expr **exprs;
|
||||
String8 *exprs_strings;
|
||||
};
|
||||
|
||||
#define E_LOOKUP_INFO_FUNCTION_SIG(name) E_LookupInfo name(Arena *arena, E_Expr *lhs, String8 filter)
|
||||
#define E_LOOKUP_INFO_FUNCTION_NAME(name) e_lookup_info_##name
|
||||
#define E_LOOKUP_INFO_FUNCTION_DEF(name) internal E_LOOKUP_INFO_FUNCTION_SIG(E_LOOKUP_INFO_FUNCTION_NAME(name))
|
||||
typedef E_LOOKUP_INFO_FUNCTION_SIG(E_LookupInfoFunctionType);
|
||||
|
||||
#define E_LOOKUP_FUNCTION_SIG(name) E_Lookup name(Arena *arena, E_ExprKind kind, E_Expr *lhs, E_Expr *rhs, void *user_data)
|
||||
#define E_LOOKUP_FUNCTION_NAME(name) e_lookup_##name
|
||||
#define E_LOOKUP_FUNCTION_DEF(name) internal E_LOOKUP_FUNCTION_SIG(E_LOOKUP_FUNCTION_NAME(name))
|
||||
typedef E_LOOKUP_FUNCTION_SIG(E_LookupFunctionType);
|
||||
#define E_LOOKUP_ACCESS_FUNCTION_SIG(name) E_LookupAccess name(Arena *arena, E_ExprKind kind, E_Expr *lhs, E_Expr *rhs, void *user_data)
|
||||
#define E_LOOKUP_ACCESS_FUNCTION_NAME(name) e_lookup_access_##name
|
||||
#define E_LOOKUP_ACCESS_FUNCTION_DEF(name) internal E_LOOKUP_ACCESS_FUNCTION_SIG(E_LOOKUP_ACCESS_FUNCTION_NAME(name))
|
||||
typedef E_LOOKUP_ACCESS_FUNCTION_SIG(E_LookupAccessFunctionType);
|
||||
|
||||
#define E_LOOKUP_RANGE_FUNCTION_SIG(name) E_LookupRange name(Arena *arena, E_Expr *lhs, Rng1U64 idx_range, void *user_data)
|
||||
#define E_LOOKUP_RANGE_FUNCTION_NAME(name) e_lookup_range_##name
|
||||
#define E_LOOKUP_RANGE_FUNCTION_DEF(name) internal E_LOOKUP_RANGE_FUNCTION_SIG(E_LOOKUP_RANGE_FUNCTION_NAME(name))
|
||||
typedef E_LOOKUP_RANGE_FUNCTION_SIG(E_LookupRangeFunctionType);
|
||||
|
||||
#define E_LOOKUP_ID_FROM_NUM_FUNCTION_SIG(name) U64 name(U64 num, void *user_data)
|
||||
#define E_LOOKUP_ID_FROM_NUM_FUNCTION_NAME(name) e_lookup_id_from_num_##name
|
||||
#define E_LOOKUP_ID_FROM_NUM_FUNCTION_DEF(name) internal E_LOOKUP_ID_FROM_NUM_FUNCTION_SIG(E_LOOKUP_ID_FROM_NUM_FUNCTION_NAME(name))
|
||||
typedef E_LOOKUP_ID_FROM_NUM_FUNCTION_SIG(E_LookupIDFromNumFunctionType);
|
||||
|
||||
#define E_LOOKUP_NUM_FROM_ID_FUNCTION_SIG(name) U64 name(U64 id, void *user_data)
|
||||
#define E_LOOKUP_NUM_FROM_ID_FUNCTION_NAME(name) e_lookup_num_from_id_##name
|
||||
#define E_LOOKUP_NUM_FROM_ID_FUNCTION_DEF(name) internal E_LOOKUP_NUM_FROM_ID_FUNCTION_SIG(E_LOOKUP_NUM_FROM_ID_FUNCTION_NAME(name))
|
||||
typedef E_LOOKUP_NUM_FROM_ID_FUNCTION_SIG(E_LookupNumFromIDFunctionType);
|
||||
|
||||
E_LOOKUP_INFO_FUNCTION_DEF(default);
|
||||
E_LOOKUP_FUNCTION_DEF(default);
|
||||
E_LOOKUP_ACCESS_FUNCTION_DEF(default);
|
||||
E_LOOKUP_RANGE_FUNCTION_DEF(default);
|
||||
E_LOOKUP_ID_FROM_NUM_FUNCTION_DEF(default);
|
||||
E_LOOKUP_NUM_FROM_ID_FUNCTION_DEF(default);
|
||||
|
||||
typedef struct E_LookupRule E_LookupRule;
|
||||
struct E_LookupRule
|
||||
{
|
||||
String8 name;
|
||||
E_LookupInfoFunctionType *lookup_info;
|
||||
E_LookupFunctionType *lookup;
|
||||
E_LookupInfoFunctionType *info;
|
||||
E_LookupAccessFunctionType *access;
|
||||
E_LookupRangeFunctionType *range;
|
||||
E_LookupIDFromNumFunctionType *id_from_num;
|
||||
E_LookupNumFromIDFunctionType *num_from_id;
|
||||
};
|
||||
|
||||
typedef struct E_LookupRuleNode E_LookupRuleNode;
|
||||
@@ -131,7 +160,10 @@ local_persist read_only E_LookupRule e_lookup_rule__default =
|
||||
{
|
||||
str8_lit_comp("default"),
|
||||
E_LOOKUP_INFO_FUNCTION_NAME(default),
|
||||
E_LOOKUP_FUNCTION_NAME(default),
|
||||
E_LOOKUP_ACCESS_FUNCTION_NAME(default),
|
||||
E_LOOKUP_RANGE_FUNCTION_NAME(default),
|
||||
E_LOOKUP_ID_FROM_NUM_FUNCTION_NAME(default),
|
||||
E_LOOKUP_NUM_FROM_ID_FUNCTION_NAME(default),
|
||||
};
|
||||
global read_only E_IRNode e_irnode_nil = {&e_irnode_nil, &e_irnode_nil, &e_irnode_nil};
|
||||
thread_static E_IRCtx *e_ir_ctx = 0;
|
||||
@@ -153,11 +185,9 @@ internal void e_select_ir_ctx(E_IRCtx *ctx);
|
||||
|
||||
internal E_LookupRuleMap e_lookup_rule_map_make(Arena *arena, U64 slots_count);
|
||||
internal void e_lookup_rule_map_insert(Arena *arena, E_LookupRuleMap *map, E_LookupRule *rule);
|
||||
#define e_lookup_rule_map_insert_new(arena, map, name_, lookup_info_, lookup_) e_lookup_rule_map_insert((arena), (map), &(E_LookupRule){.name = (name_), .lookup_info = (lookup_info_), .lookup = (lookup_)})
|
||||
#define e_lookup_rule_map_insert_new(arena, map, name_, ...) e_lookup_rule_map_insert((arena), (map), &(E_LookupRule){.name = (name_), __VA_ARGS__})
|
||||
|
||||
internal E_LookupRule *e_lookup_rule_from_string(String8 string);
|
||||
E_LOOKUP_INFO_FUNCTION_DEF(default);
|
||||
E_LOOKUP_FUNCTION_DEF(default);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: IR-ization Functions
|
||||
|
||||
@@ -1864,6 +1864,43 @@ e_type_key_list_copy(Arena *arena, E_TypeKeyList *src)
|
||||
return dst;
|
||||
}
|
||||
|
||||
internal E_String2TypeKeyMap
|
||||
e_string2typekey_map_make(Arena *arena, U64 slots_count)
|
||||
{
|
||||
E_String2TypeKeyMap map = {0};
|
||||
map.slots_count = slots_count;
|
||||
map.slots = push_array(arena, E_String2TypeKeySlot, map.slots_count);
|
||||
return map;
|
||||
}
|
||||
|
||||
internal void
|
||||
e_string2typekey_map_insert(Arena *arena, E_String2TypeKeyMap *map, String8 string, E_TypeKey key)
|
||||
{
|
||||
E_String2TypeKeyNode *n = push_array(arena, E_String2TypeKeyNode, 1);
|
||||
U64 hash = e_hash_from_string(5381, string);
|
||||
U64 slot_idx = hash%map->slots_count;
|
||||
SLLQueuePush(map->slots[slot_idx].first, map->slots[slot_idx].last, n);
|
||||
n->string = push_str8_copy(arena, string);
|
||||
n->key = key;
|
||||
}
|
||||
|
||||
internal E_TypeKey
|
||||
e_string2typekey_map_lookup(E_String2TypeKeyMap *map, String8 string)
|
||||
{
|
||||
E_TypeKey key = zero_struct;
|
||||
U64 hash = e_hash_from_string(5381, string);
|
||||
U64 slot_idx = hash%map->slots_count;
|
||||
for(E_String2TypeKeyNode *n = map->slots[slot_idx].first; n != 0; n = n->next)
|
||||
{
|
||||
if(str8_match(n->string, string, 0))
|
||||
{
|
||||
key = n->key;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Cache Lookups
|
||||
|
||||
|
||||
@@ -137,6 +137,31 @@ struct E_Type
|
||||
E_EnumVal *enum_vals;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: String -> Type Key Map Data Structure
|
||||
|
||||
typedef struct E_String2TypeKeyNode E_String2TypeKeyNode;
|
||||
struct E_String2TypeKeyNode
|
||||
{
|
||||
E_String2TypeKeyNode *next;
|
||||
String8 string;
|
||||
E_TypeKey key;
|
||||
};
|
||||
|
||||
typedef struct E_String2TypeKeySlot E_String2TypeKeySlot;
|
||||
struct E_String2TypeKeySlot
|
||||
{
|
||||
E_String2TypeKeyNode *first;
|
||||
E_String2TypeKeyNode *last;
|
||||
};
|
||||
|
||||
typedef struct E_String2TypeKeyMap E_String2TypeKeyMap;
|
||||
struct E_String2TypeKeyMap
|
||||
{
|
||||
U64 slots_count;
|
||||
E_String2TypeKeySlot *slots;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Evaluation Context
|
||||
|
||||
@@ -323,6 +348,9 @@ internal String8 e_type_string_from_key(Arena *arena, E_TypeKey key);
|
||||
//- rjf: type key data structures
|
||||
internal void e_type_key_list_push(Arena *arena, E_TypeKeyList *list, E_TypeKey key);
|
||||
internal E_TypeKeyList e_type_key_list_copy(Arena *arena, E_TypeKeyList *src);
|
||||
internal E_String2TypeKeyMap e_string2typekey_map_make(Arena *arena, U64 slots_count);
|
||||
internal void e_string2typekey_map_insert(Arena *arena, E_String2TypeKeyMap *map, String8 string, E_TypeKey key);
|
||||
internal E_TypeKey e_string2typekey_map_lookup(E_String2TypeKeyMap *map, String8 string);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Cache Lookups
|
||||
|
||||
@@ -183,7 +183,7 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(default)
|
||||
{
|
||||
E_Type *type = e_type_from_key(scratch.arena, type_key);
|
||||
E_LookupRule *rule = e_lookup_rule_from_string(type->name);
|
||||
E_LookupInfo lookup_info = rule->lookup_info(arena, expr);
|
||||
E_LookupInfo lookup_info = rule->info(arena, expr, filter);
|
||||
total_row_count = Max(lookup_info.named_expr_count, lookup_info.idxed_expr_count);
|
||||
accel->lookup_rule = rule;
|
||||
accel->lookup_user_data = lookup_info.user_data;
|
||||
@@ -282,15 +282,15 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(default)
|
||||
//- rjf: fill with lookups
|
||||
//
|
||||
else if(accel->lookup_rule != 0)
|
||||
{
|
||||
result.row_exprs_count = needed_row_count;
|
||||
result.row_exprs = push_array(arena, E_Expr *, result.row_exprs_count);
|
||||
result.row_strings = push_array(arena, String8, result.row_exprs_count);
|
||||
{
|
||||
E_LookupRange lookup_range = accel->lookup_rule->range(arena, expr, idx_range, accel->lookup_user_data);
|
||||
result.row_exprs_count = lookup_range.exprs_count;
|
||||
result.row_exprs = lookup_range.exprs;
|
||||
result.row_strings = lookup_range.exprs_strings;
|
||||
result.row_view_rules = push_array(arena, String8, result.row_exprs_count);
|
||||
result.row_members = push_array(arena, E_Member *, result.row_exprs_count);
|
||||
result.row_members = push_array(arena, E_Member *, result.row_exprs_count);
|
||||
for EachIndex(row_expr_idx, result.row_exprs_count)
|
||||
{
|
||||
result.row_exprs[row_expr_idx] = e_expr_ref_array_index(arena, expr, idx_range.min + row_expr_idx);
|
||||
result.row_members[row_expr_idx] = &e_member_nil;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ RD_CmdKind_Null,
|
||||
RD_CmdKind_Null,
|
||||
};
|
||||
|
||||
RD_VocabularyInfo rd_vocabulary_info_table[41] =
|
||||
RD_VocabularyInfo rd_vocabulary_info_table[45] =
|
||||
{
|
||||
{str8_lit_comp("auto_view_rule"), str8_lit_comp("auto_view_rules"), str8_lit_comp("Auto View Rule"), str8_lit_comp("Auto View Rules"), RD_IconKind_Binoculars},
|
||||
{str8_lit_comp("file_path_map"), str8_lit_comp("file_path_maps"), str8_lit_comp("File Path Map"), str8_lit_comp("File Path Maps"), RD_IconKind_FileOutline},
|
||||
@@ -71,9 +71,13 @@ RD_VocabularyInfo rd_vocabulary_info_table[41] =
|
||||
{str8_lit_comp("vtx"), str8_lit_comp("vtxs"), str8_lit_comp("Vertex Buffer"), str8_lit_comp("Vertex Buffers"), RD_IconKind_Null},
|
||||
{str8_lit_comp("vtx_size"), str8_lit_comp("vtx_sizes"), str8_lit_comp("Vertex Buffer Size"), str8_lit_comp("Vertex Buffer Sizes"), RD_IconKind_Null},
|
||||
{str8_lit_comp("label"), str8_lit_comp("labels"), str8_lit_comp("Label"), str8_lit_comp("Labels"), RD_IconKind_Null},
|
||||
{str8_lit_comp("thread"), str8_lit_comp("threads"), str8_lit_comp("Thread"), str8_lit_comp("Threads"), RD_IconKind_Thread},
|
||||
{str8_lit_comp("process"), str8_lit_comp("processes"), str8_lit_comp("Process"), str8_lit_comp("Processes"), RD_IconKind_Threads},
|
||||
{str8_lit_comp("machine"), str8_lit_comp("machines"), str8_lit_comp("Machine"), str8_lit_comp("Machines"), RD_IconKind_Machine},
|
||||
{str8_lit_comp("module"), str8_lit_comp("modules"), str8_lit_comp("Module"), str8_lit_comp("Modules"), RD_IconKind_Module},
|
||||
};
|
||||
|
||||
RD_CfgNameSchemaPair rd_cfg_name_schema_pair_table[6] =
|
||||
RD_NameSchemaInfo rd_name_schema_info_table[10] =
|
||||
{
|
||||
{str8_lit_comp("settings"), str8_lit_comp("x:\n{\n @default(1) 'hover_animations': bool,\n @default(1) 'press_animations': bool,\n @default(0) 'focus_animations': bool,\n @default(1) 'tooltip_animations': bool,\n @default(1) 'menu_animations': bool,\n @default(1) 'scrolling_animations': bool,\n @default(1) 'background_blur': bool,\n @default(1) 'thread_lines': bool,\n @default(1) 'breakpoint_lines': bool,\n @default(1) 'thread_glow': bool,\n @default(1) 'breakpoint_glow': bool,\n @default(0) 'opaque_backgrounds': bool,\n @default(1) 'smooth_main_text': bool,\n @default(0) 'smooth_code_text': bool,\n @default(1) 'hint_main_text': bool,\n @default(1) 'hint_code_text': bool,\n @default(2) 'tab_width': @range[1, 32] u64,\n @can_be_per_window 'main_font_size': @range[6, 72] u64,\n @can_be_per_window 'code_font_size': @range[1, 32] u64,\n}\n"), str8_lit_comp("")},
|
||||
{str8_lit_comp("target"), str8_lit_comp("x:\n{\n 'label': code_string,\n 'executable': path,\n 'arguments': string,\n 'working_directory': path,\n 'entry_point': code_string,\n 'stdout_path': path,\n 'stderr_path': path,\n 'stdin_path': path,\n 'debug_subprocesses': bool,\n}\n"), str8_lit_comp("launch_and_run,launch_and_init,select_cfg,remove_cfg")},
|
||||
@@ -81,6 +85,10 @@ RD_CfgNameSchemaPair rd_cfg_name_schema_pair_table[6] =
|
||||
{str8_lit_comp("watch_pin"), str8_lit_comp("x:\n{\n 'expression': code_string,\n 'view_rule': code_string,\n 'location': location,\n}\n"), str8_lit_comp("remove_cfg")},
|
||||
{str8_lit_comp("file_path_map"), str8_lit_comp("x:{'source':path, 'dest':path}"), str8_lit_comp("remove_cfg")},
|
||||
{str8_lit_comp("auto_view_rule"), str8_lit_comp("x:{'source':code_string, 'dest':code_string}"), str8_lit_comp("remove_cfg")},
|
||||
{str8_lit_comp("machine"), str8_lit_comp("x:{'frozen':bool, 'label':code_string}"), str8_lit_comp("")},
|
||||
{str8_lit_comp("process"), str8_lit_comp("x:{'frozen':bool, 'label':code_string, 'id':u64}"), str8_lit_comp("")},
|
||||
{str8_lit_comp("module"), str8_lit_comp("x:{'label':code_string, 'exe':path, 'dbg':path, 'vaddr_range':vaddr_range}"), str8_lit_comp("")},
|
||||
{str8_lit_comp("thread"), str8_lit_comp("x:{'frozen':bool, 'label':code_string, 'id':u64}"), str8_lit_comp("")},
|
||||
};
|
||||
|
||||
String8 d_entity_kind_display_string_table[27] =
|
||||
@@ -711,116 +719,46 @@ str8_lit_comp("5"),
|
||||
str8_lit_comp("c"),
|
||||
};
|
||||
|
||||
String8 rd_collection_name_table[12] =
|
||||
String8 rd_collection_name_table[2] =
|
||||
{
|
||||
str8_lit_comp("machines"),
|
||||
str8_lit_comp("processes"),
|
||||
str8_lit_comp("threads"),
|
||||
str8_lit_comp("modules"),
|
||||
str8_lit_comp("scheduler_machine"),
|
||||
str8_lit_comp("scheduler_process"),
|
||||
str8_lit_comp("locals"),
|
||||
str8_lit_comp("registers"),
|
||||
str8_lit_comp("globals"),
|
||||
str8_lit_comp("thread_locals"),
|
||||
str8_lit_comp("types"),
|
||||
str8_lit_comp("procedures"),
|
||||
};
|
||||
|
||||
RD_EntityKind rd_collection_entity_kind_table[12] =
|
||||
RD_EntityKind rd_collection_entity_kind_table[2] =
|
||||
{
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
};
|
||||
|
||||
CTRL_EntityKind rd_collection_ctrl_entity_kind_table[12] =
|
||||
CTRL_EntityKind rd_collection_ctrl_entity_kind_table[2] =
|
||||
{
|
||||
CTRL_EntityKind_Machine,
|
||||
CTRL_EntityKind_Process,
|
||||
CTRL_EntityKind_Thread,
|
||||
CTRL_EntityKind_Module,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
};
|
||||
|
||||
EV_ViewRuleExprExpandInfoHookFunctionType * rd_collection_expr_expand_info_hook_function_table[12] =
|
||||
EV_ViewRuleExprExpandInfoHookFunctionType * rd_collection_expr_expand_info_hook_function_table[2] =
|
||||
{
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(machines),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(processes),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(threads),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(modules),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(scheduler_machine),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(scheduler_process),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(locals),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(registers),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(globals),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(thread_locals),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(types),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(procedures),
|
||||
};
|
||||
|
||||
EV_ViewRuleExprExpandRangeInfoHookFunctionType * rd_collection_expr_expand_range_info_hook_function_table[12] =
|
||||
EV_ViewRuleExprExpandRangeInfoHookFunctionType * rd_collection_expr_expand_range_info_hook_function_table[2] =
|
||||
{
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(machines),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(processes),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(threads),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(modules),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(scheduler_machine),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(scheduler_process),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(locals),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(registers),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(globals),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(thread_locals),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(types),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(procedures),
|
||||
};
|
||||
|
||||
EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_id_from_num_hook_function_table[12] =
|
||||
EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_id_from_num_hook_function_table[2] =
|
||||
{
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(machines),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(processes),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(threads),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(modules),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(scheduler_machine),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(scheduler_process),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(identity),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(identity),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(globals),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(thread_locals),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(types),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(procedures),
|
||||
};
|
||||
|
||||
EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_num_from_id_hook_function_table[12] =
|
||||
EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_num_from_id_hook_function_table[2] =
|
||||
{
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(machines),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(processes),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(threads),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(modules),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(scheduler_machine),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(scheduler_process),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(identity),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(identity),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(globals),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(thread_locals),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(types),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(procedures),
|
||||
};
|
||||
|
||||
RD_ViewRuleInfo rd_view_rule_kind_info_table[28] =
|
||||
|
||||
@@ -522,8 +522,8 @@ String8 display_name_plural;
|
||||
RD_IconKind icon_kind;
|
||||
};
|
||||
|
||||
typedef struct RD_CfgNameSchemaPair RD_CfgNameSchemaPair;
|
||||
struct RD_CfgNameSchemaPair
|
||||
typedef struct RD_NameSchemaInfo RD_NameSchemaInfo;
|
||||
struct RD_NameSchemaInfo
|
||||
{
|
||||
String8 name;
|
||||
String8 schema;
|
||||
@@ -651,50 +651,14 @@ RD_ViewRuleUIFunctionType *ui;
|
||||
.params_tree = rd_regs()->params_tree,\
|
||||
.os_event = rd_regs()->os_event,\
|
||||
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(machines);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(processes);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(threads);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(modules);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(scheduler_machine);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(scheduler_process);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(locals);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(registers);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(globals);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(thread_locals);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(types);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(procedures);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(machines);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(processes);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(threads);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(modules);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(scheduler_machine);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(scheduler_process);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(locals);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(registers);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(globals);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(thread_locals);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(types);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(procedures);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(machines);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(processes);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(threads);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(modules);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(scheduler_machine);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(scheduler_process);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(globals);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(thread_locals);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(types);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(procedures);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(machines);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(processes);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(threads);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(modules);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(scheduler_machine);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(scheduler_process);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(globals);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(thread_locals);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(types);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(procedures);
|
||||
RD_VIEW_RULE_UI_FUNCTION_DEF(null);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(text);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(disasm);
|
||||
@@ -733,8 +697,8 @@ C_LINKAGE_BEGIN
|
||||
extern String8 rd_cfg_src_string_table[4];
|
||||
extern RD_CmdKind rd_cfg_src_load_cmd_kind_table[4];
|
||||
extern RD_CmdKind rd_cfg_src_write_cmd_kind_table[4];
|
||||
extern RD_VocabularyInfo rd_vocabulary_info_table[41];
|
||||
extern RD_CfgNameSchemaPair rd_cfg_name_schema_pair_table[6];
|
||||
extern RD_VocabularyInfo rd_vocabulary_info_table[45];
|
||||
extern RD_NameSchemaInfo rd_name_schema_info_table[10];
|
||||
extern String8 d_entity_kind_display_string_table[27];
|
||||
extern String8 d_entity_kind_name_lower_table[27];
|
||||
extern String8 d_entity_kind_name_lower_plural_table[27];
|
||||
@@ -745,13 +709,13 @@ extern RD_StringBindingPair rd_default_binding_table[111];
|
||||
extern String8 rd_binding_version_remap_old_name_table[8];
|
||||
extern String8 rd_binding_version_remap_new_name_table[8];
|
||||
extern String8 rd_icon_kind_text_table[69];
|
||||
extern String8 rd_collection_name_table[12];
|
||||
extern RD_EntityKind rd_collection_entity_kind_table[12];
|
||||
extern CTRL_EntityKind rd_collection_ctrl_entity_kind_table[12];
|
||||
extern EV_ViewRuleExprExpandInfoHookFunctionType * rd_collection_expr_expand_info_hook_function_table[12];
|
||||
extern EV_ViewRuleExprExpandRangeInfoHookFunctionType * rd_collection_expr_expand_range_info_hook_function_table[12];
|
||||
extern EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_id_from_num_hook_function_table[12];
|
||||
extern EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_num_from_id_hook_function_table[12];
|
||||
extern String8 rd_collection_name_table[2];
|
||||
extern RD_EntityKind rd_collection_entity_kind_table[2];
|
||||
extern CTRL_EntityKind rd_collection_ctrl_entity_kind_table[2];
|
||||
extern EV_ViewRuleExprExpandInfoHookFunctionType * rd_collection_expr_expand_info_hook_function_table[2];
|
||||
extern EV_ViewRuleExprExpandRangeInfoHookFunctionType * rd_collection_expr_expand_range_info_hook_function_table[2];
|
||||
extern EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_id_from_num_hook_function_table[2];
|
||||
extern EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_num_from_id_hook_function_table[2];
|
||||
extern RD_ViewRuleInfo rd_view_rule_kind_info_table[28];
|
||||
extern RD_IconKind rd_entity_kind_icon_kind_table[27];
|
||||
extern String8 rd_theme_preset_display_string_table[9];
|
||||
|
||||
+43
-15
@@ -92,6 +92,10 @@ RD_VocabularyMap:
|
||||
{vtx _ "Vertex Buffer" _ Null }
|
||||
{vtx_size _ "Vertex Buffer Size" _ Null }
|
||||
{label _ "Label" _ Null }
|
||||
{thread _ "Thread" _ Thread }
|
||||
{process processes "Process" "Processes" Threads }
|
||||
{machine _ "Machine" _ Machine }
|
||||
{module _ "Module" _ Module }
|
||||
}
|
||||
|
||||
@struct RD_VocabularyInfo:
|
||||
@@ -109,9 +113,9 @@ RD_VocabularyMap:
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Configuration Tree Schemas
|
||||
//~ rjf: Schemas
|
||||
|
||||
@table(name schema cmd_names) RD_CfgSchemaTable:
|
||||
@table(name schema cmd_names) RD_SchemaTable:
|
||||
{
|
||||
//- rjf: settings
|
||||
{
|
||||
@@ -201,18 +205,42 @@ RD_VocabularyMap:
|
||||
```x:{'source':code_string, 'dest':code_string}```,
|
||||
`remove_cfg`,
|
||||
}
|
||||
|
||||
//- rjf: machines
|
||||
{
|
||||
machine,
|
||||
```x:{'frozen':bool, 'label':code_string}```,
|
||||
}
|
||||
|
||||
//- rjf: processes
|
||||
{
|
||||
process,
|
||||
```x:{'frozen':bool, 'label':code_string, 'id':u64}```,
|
||||
}
|
||||
|
||||
//- rjf: modules
|
||||
{
|
||||
module,
|
||||
```x:{'label':code_string, 'exe':path, 'dbg':path, 'vaddr_range':vaddr_range}```,
|
||||
}
|
||||
|
||||
//- rjf: threads
|
||||
{
|
||||
thread,
|
||||
```x:{'frozen':bool, 'label':code_string, 'id':u64}```,
|
||||
}
|
||||
}
|
||||
|
||||
@struct RD_CfgNameSchemaPair:
|
||||
@struct RD_NameSchemaInfo:
|
||||
{
|
||||
`String8 name`;
|
||||
`String8 schema`;
|
||||
`String8 cmd_names`;
|
||||
}
|
||||
|
||||
@data(RD_CfgNameSchemaPair) rd_cfg_name_schema_pair_table:
|
||||
@data(RD_NameSchemaInfo) rd_name_schema_info_table:
|
||||
{
|
||||
@expand(RD_CfgSchemaTable a) `{str8_lit_comp("$(a.name)"), str8_lit_comp("$(a.schema)"), str8_lit_comp("$(a.cmd_names)")}`
|
||||
@expand(RD_SchemaTable a) `{str8_lit_comp("$(a.name)"), str8_lit_comp("$(a.schema)"), str8_lit_comp("$(a.cmd_names)")}`
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
@@ -1002,22 +1030,22 @@ RD_CollectionTable:
|
||||
//{auto_view_rules AutoViewRule Null x}
|
||||
|
||||
//- rjf: control entity groups
|
||||
{machines Nil Machine x}
|
||||
{processes Nil Process x}
|
||||
{threads Nil Thread x}
|
||||
{modules Nil Module x}
|
||||
//{machines Nil Machine x}
|
||||
//{processes Nil Process x}
|
||||
//{threads Nil Thread x}
|
||||
//{modules Nil Module x}
|
||||
|
||||
//- rjf: scheduling control entity hierarchies
|
||||
{scheduler_machine Nil Null x}
|
||||
{scheduler_process Nil Null x}
|
||||
|
||||
//- rjf: debug info / architecture watch tables
|
||||
{locals Nil Null -}
|
||||
{registers Nil Null -}
|
||||
{globals Nil Null x}
|
||||
{thread_locals Nil Null x}
|
||||
{types Nil Null x}
|
||||
{procedures Nil Null x}
|
||||
// {locals Nil Null -}
|
||||
// {registers Nil Null -}
|
||||
// {globals Nil Null x}
|
||||
// {thread_locals Nil Null x}
|
||||
// {types Nil Null x}
|
||||
// {procedures Nil Null x}
|
||||
}
|
||||
|
||||
@gen
|
||||
|
||||
+487
-524
File diff suppressed because it is too large
Load Diff
@@ -745,31 +745,6 @@ struct RD_CtrlEntityMetaEvalCacheSlot
|
||||
RD_CtrlEntityMetaEvalCacheNode *last;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: String -> Type Key Map Helper Data Structure
|
||||
|
||||
typedef struct RD_String2TypeKeyNode RD_String2TypeKeyNode;
|
||||
struct RD_String2TypeKeyNode
|
||||
{
|
||||
RD_String2TypeKeyNode *next;
|
||||
String8 string;
|
||||
E_TypeKey key;
|
||||
};
|
||||
|
||||
typedef struct RD_String2TypeKeySlot RD_String2TypeKeySlot;
|
||||
struct RD_String2TypeKeySlot
|
||||
{
|
||||
RD_String2TypeKeyNode *first;
|
||||
RD_String2TypeKeyNode *last;
|
||||
};
|
||||
|
||||
typedef struct RD_String2TypeKeyMap RD_String2TypeKeyMap;
|
||||
struct RD_String2TypeKeyMap
|
||||
{
|
||||
U64 slots_count;
|
||||
RD_String2TypeKeySlot *slots;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Config -> Eval Blob Cache Types
|
||||
|
||||
@@ -864,8 +839,8 @@ struct RD_State
|
||||
RD_Theme *theme;
|
||||
RD_Theme *theme_target;
|
||||
|
||||
// rjf: config name -> eval type key map (constructed from-scratch each frame)
|
||||
RD_String2TypeKeyMap *cfg_string2typekey_map;
|
||||
// rjf: meta name -> eval type key map (constructed from-scratch each frame)
|
||||
E_String2TypeKeyMap *meta_name2type_map;
|
||||
|
||||
// rjf: config -> eval blob map (lazily constructed from-scratch each frame)
|
||||
RD_Cfg2EvalBlobMap *cfg2evalblob_map;
|
||||
@@ -1328,9 +1303,6 @@ internal void rd_window_frame(void);
|
||||
////////////////////////////////
|
||||
//~ rjf: Eval Visualization
|
||||
|
||||
E_LOOKUP_INFO_FUNCTION_DEF(top_level_cfg);
|
||||
E_LOOKUP_FUNCTION_DEF(top_level_cfg);
|
||||
|
||||
internal EV_ExpandInfo rd_ev_view_rule_expr_expand_info__meta_entities(Arena *arena, EV_View *view, String8 filter, E_Expr *expr, MD_Node *params, RD_EntityKind kind);
|
||||
internal EV_ExpandRangeInfo rd_ev_view_rule_expr_expand_range_info__meta_entities(Arena *arena, EV_View *view, String8 filter, E_Expr *expr, MD_Node *params, Rng1U64 idx_range, void *user_data, RD_EntityKind kind, B32 add_new_at_top);
|
||||
internal U64 rd_ev_view_rule_expr_id_from_num__meta_entities(U64 num, void *user_data, RD_EntityKind kind, B32 add_new_at_top);
|
||||
@@ -1341,11 +1313,6 @@ internal EV_ExpandRangeInfo rd_ev_view_rule_expr_expand_range_info__meta_ctrl_en
|
||||
internal U64 rd_ev_view_rule_expr_id_from_num__meta_ctrl_entities(U64 num, void *user_data, CTRL_EntityKind kind);
|
||||
internal U64 rd_ev_view_rule_expr_num_from_id__meta_ctrl_entities(U64 id, void *user_data, CTRL_EntityKind kind);
|
||||
|
||||
internal EV_ExpandInfo rd_ev_view_rule_expr_expand_info__debug_info_tables(Arena *arena, EV_View *view, String8 filter, E_Expr *expr, MD_Node *params, RDI_SectionKind section);
|
||||
internal EV_ExpandRangeInfo rd_ev_view_rule_expr_expand_range_info__debug_info_tables(Arena *arena, EV_View *view, String8 filter, E_Expr *expr, MD_Node *params, Rng1U64 idx_range, void *user_data, RDI_SectionKind section);
|
||||
internal U64 rd_ev_view_rule_expr_id_from_num__debug_info_tables(U64 num, void *user_data, RDI_SectionKind section);
|
||||
internal U64 rd_ev_view_rule_expr_num_from_id__debug_info_tables(U64 id, void *user_data, RDI_SectionKind section);
|
||||
|
||||
internal F32 rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 default_radix, FNT_Tag font, F32 font_size, F32 max_size, S32 depth, E_Eval eval, E_Member *member, EV_ViewRuleList *view_rules, String8List *out);
|
||||
internal String8 rd_value_string_from_eval(Arena *arena, EV_StringFlags flags, U32 default_radix, FNT_Tag font, F32 font_size, F32 max_size, E_Eval eval, E_Member *member, EV_ViewRuleList *view_rules);
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
// but only with commands that are directly
|
||||
//
|
||||
// [ ] r8 bitmap view rule seems incorrect?
|
||||
// [ ] crash bug, release mode - filter globals view (try with debugging raddbg, typing `dev` in globals view)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: post-0.9.12 TODO notes
|
||||
|
||||
Reference in New Issue
Block a user