mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-19 14:31:30 +00:00
more work on watch view to replace all old uis
This commit is contained in:
@@ -423,8 +423,16 @@ EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(only)
|
||||
}
|
||||
}
|
||||
E_MemberArray new_members_array = e_member_array_from_list(scratch.arena, &new_members);
|
||||
String8 struct_name = e_type_string_from_key(scratch.arena, irtree.type_key);
|
||||
E_TypeKey new_type = e_type_key_cons(.kind = E_TypeKind_Struct, .name = struct_name, .members = new_members_array.v, .count = new_members_array.count);
|
||||
E_TypeKey new_type = {0};
|
||||
if(new_members_array.count == 1 && new_members_array.v[0].off == 0)
|
||||
{
|
||||
new_type = new_members_array.v[0].type_key;
|
||||
}
|
||||
else
|
||||
{
|
||||
String8 struct_name = e_type_string_from_key(scratch.arena, irtree.type_key);
|
||||
new_type = e_type_key_cons(.kind = E_TypeKind_Struct, .name = struct_name, .members = new_members_array.v, .count = new_members_array.count);
|
||||
}
|
||||
expr = e_expr_ref_addr(arena, expr);
|
||||
expr = e_expr_ref_cast(arena, e_type_key_cons_ptr(e_type_state->ctx->primary_module->arch, new_type, 0), expr);
|
||||
expr = e_expr_ref_deref(arena, expr);
|
||||
@@ -462,8 +470,16 @@ EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(omit)
|
||||
}
|
||||
}
|
||||
E_MemberArray new_members_array = e_member_array_from_list(scratch.arena, &new_members);
|
||||
String8 struct_name = e_type_string_from_key(scratch.arena, irtree.type_key);
|
||||
E_TypeKey new_type = e_type_key_cons(.kind = E_TypeKind_Struct, .name = struct_name, .members = new_members_array.v, .count = new_members_array.count);
|
||||
E_TypeKey new_type = {0};
|
||||
if(new_members_array.count == 1 && new_members_array.v[0].off == 0)
|
||||
{
|
||||
new_type = new_members_array.v[0].type_key;
|
||||
}
|
||||
else
|
||||
{
|
||||
String8 struct_name = e_type_string_from_key(scratch.arena, irtree.type_key);
|
||||
new_type = e_type_key_cons(.kind = E_TypeKind_Struct, .name = struct_name, .members = new_members_array.v, .count = new_members_array.count);
|
||||
}
|
||||
expr = e_expr_ref_addr(arena, expr);
|
||||
expr = e_expr_ref_cast(arena, e_type_key_cons_ptr(e_type_state->ctx->primary_module->arch, new_type, 0), expr);
|
||||
expr = e_expr_ref_deref(arena, expr);
|
||||
|
||||
@@ -527,7 +527,7 @@ internal void
|
||||
ev_block_end(EV_BlockList *list, EV_Block *block)
|
||||
{
|
||||
EV_BlockNode *n = CastFromMember(EV_BlockNode, v, block);
|
||||
SLLQueuePush(list->first, list->last, n);
|
||||
DLLPushBack(list->first, list->last, n);
|
||||
list->count += 1;
|
||||
list->total_visual_row_count += dim_1u64(block->visual_idx_range);
|
||||
list->total_semantic_row_count += dim_1u64(block->semantic_idx_range);
|
||||
@@ -563,7 +563,8 @@ ev_append_expr_blocks__rec(Arena *arena, EV_View *view, String8 filter, EV_Key p
|
||||
//- rjf: do view rule children block generation, if we have an applicable view rule
|
||||
if(parent_is_expanded && block_prod_view_rule_info != &ev_nil_view_rule_info)
|
||||
{
|
||||
block_prod_view_rule_info->block_prod(arena, view, filter, parent_key, key, node, string, expr, view_rules, block_prod_view_rule_params, depth+1, list_out);
|
||||
E_Expr *expr_resolved = ev_expr_from_expr_view_rules(arena, expr, view_rules);
|
||||
block_prod_view_rule_info->block_prod(arena, view, filter, parent_key, key, node, string, expr_resolved, view_rules, block_prod_view_rule_params, depth+1, list_out);
|
||||
}
|
||||
|
||||
scratch_end(scratch);
|
||||
@@ -639,7 +640,7 @@ ev_block_list_from_view_expr_keys(Arena *arena, EV_View *view, String8 filter, E
|
||||
}
|
||||
|
||||
//- rjf: push expansions for root
|
||||
ev_append_expr_blocks__rec(arena, view, filter, parent_key, key, expr, expr_resolved, view_rule_list, depth, &blocks);
|
||||
ev_append_expr_blocks__rec(arena, view, filter, parent_key, key, expr, parse.expr, view_rule_list, depth, &blocks);
|
||||
}
|
||||
ProfEnd();
|
||||
return blocks;
|
||||
@@ -1094,19 +1095,37 @@ internal String8
|
||||
ev_expr_string_from_row(Arena *arena, EV_Row *row)
|
||||
{
|
||||
String8 result = row->string;
|
||||
if(result.size == 0) switch(row->expr->kind)
|
||||
E_Expr *notable_expr = row->expr;
|
||||
for(B32 good = 0; !good;)
|
||||
{
|
||||
switch(notable_expr->kind)
|
||||
{
|
||||
default:{good = 1;}break;
|
||||
case E_ExprKind_Address:
|
||||
case E_ExprKind_Deref:
|
||||
case E_ExprKind_Cast:
|
||||
{
|
||||
notable_expr = notable_expr->last;
|
||||
}break;
|
||||
case E_ExprKind_Ref:
|
||||
{
|
||||
notable_expr = notable_expr->ref;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
if(result.size == 0) switch(notable_expr->kind)
|
||||
{
|
||||
default:
|
||||
{
|
||||
result = e_string_from_expr(arena, row->expr);
|
||||
result = e_string_from_expr(arena, notable_expr);
|
||||
}break;
|
||||
case E_ExprKind_ArrayIndex:
|
||||
{
|
||||
result = push_str8f(arena, "[%S]", e_string_from_expr(arena, row->expr->last));
|
||||
result = push_str8f(arena, "[%S]", e_string_from_expr(arena, notable_expr->last));
|
||||
}break;
|
||||
case E_ExprKind_MemberAccess:
|
||||
{
|
||||
result = push_str8f(arena, ".%S", e_string_from_expr(arena, row->expr->last));
|
||||
result = push_str8f(arena, ".%S", e_string_from_expr(arena, notable_expr->last));
|
||||
}break;
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -109,7 +109,7 @@ typedef enum EV_BlockKind
|
||||
EV_BlockKind_EnumMembers, // members of enum
|
||||
EV_BlockKind_Elements, // elements of array
|
||||
EV_BlockKind_Canvas, // escape hatch for arbitrary UI
|
||||
EV_BlockKind_DebugInfoTable, // block of filtered debug info table elements
|
||||
EV_BlockKind_DebugInfoTable, // block of filtered debug info table elements
|
||||
EV_BlockKind_COUNT,
|
||||
}
|
||||
EV_BlockKind;
|
||||
@@ -143,6 +143,7 @@ typedef struct EV_BlockNode EV_BlockNode;
|
||||
struct EV_BlockNode
|
||||
{
|
||||
EV_BlockNode *next;
|
||||
EV_BlockNode *prev;
|
||||
EV_Block v;
|
||||
};
|
||||
|
||||
@@ -172,7 +173,7 @@ struct EV_BlockArray
|
||||
#define EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(name) ev_view_rule_expr_resolution__##name
|
||||
#define EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(name) internal EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_SIG(EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(name))
|
||||
#define EV_VIEW_RULE_BLOCK_PROD_FUNCTION_SIG(name) void name(Arena *arena, \
|
||||
EV_View *view, \
|
||||
EV_View *view, \
|
||||
String8 filter, \
|
||||
EV_Key parent_key, \
|
||||
EV_Key key, \
|
||||
|
||||
Reference in New Issue
Block a user