mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
fix cacheline boundary visualization & other various fixes in eval / eval viz
This commit is contained in:
+2
-2
@@ -86,8 +86,8 @@ E_ExprKindTable:
|
||||
{ Address UnaryPrefix 2 "&" "&" "" "" }
|
||||
|
||||
{ Cast Null 1 "cast" "(" ")" "" }
|
||||
{ Sizeof UnaryPrefix 1 "sizeof" "sizeof" "" "" }
|
||||
{ Typeof UnaryPrefix 1 "typeof" "typeof" "" "" }
|
||||
{ Sizeof UnaryPrefix 1 "sizeof" "sizeof" "(" ")"}
|
||||
{ Typeof UnaryPrefix 1 "typeof" "typeof" "(" ")"}
|
||||
{ ByteSwap UnaryPrefix 1 "bswap" "bswap" "(" ")"}
|
||||
|
||||
{ Neg UnaryPrefix 2 "-" "-" "" "" }
|
||||
|
||||
+13
-20
@@ -441,13 +441,9 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
|
||||
{
|
||||
switch(l.mode)
|
||||
{
|
||||
// rjf: null (types) -> just resolve to new type
|
||||
case E_Mode_Null:
|
||||
{
|
||||
}break;
|
||||
|
||||
// rjf: offsets -> read from base offset
|
||||
default:
|
||||
case E_Mode_Null:
|
||||
case E_Mode_Offset:
|
||||
{
|
||||
// rjf: ops to compute the offset
|
||||
@@ -590,20 +586,17 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
|
||||
// rjf: build tree
|
||||
E_IRNode *new_tree = l.root;
|
||||
E_Mode mode = l.mode;
|
||||
if(l.root != &e_irnode_nil)
|
||||
if(l_restype_kind == E_TypeKind_Ptr ||
|
||||
l_restype_kind == E_TypeKind_LRef ||
|
||||
l_restype_kind == E_TypeKind_RRef)
|
||||
{
|
||||
if(l_restype_kind == E_TypeKind_Ptr ||
|
||||
l_restype_kind == E_TypeKind_LRef ||
|
||||
l_restype_kind == E_TypeKind_RRef)
|
||||
{
|
||||
new_tree = e_irtree_resolve_to_value(arena, l.space, l.mode, new_tree, l_restype);
|
||||
mode = E_Mode_Offset;
|
||||
}
|
||||
if(r_value != 0 && !r_is_constant_value)
|
||||
{
|
||||
E_IRNode *const_tree = e_irtree_const_u(arena, r_value);
|
||||
new_tree = e_irtree_binary_op_u(arena, RDI_EvalOp_Add, new_tree, const_tree);
|
||||
}
|
||||
new_tree = e_irtree_resolve_to_value(arena, l.space, l.mode, new_tree, l_restype);
|
||||
mode = E_Mode_Offset;
|
||||
}
|
||||
if(r_value != 0 && !r_is_constant_value)
|
||||
{
|
||||
E_IRNode *const_tree = e_irtree_const_u(arena, r_value);
|
||||
new_tree = e_irtree_binary_op_u(arena, RDI_EvalOp_Add, new_tree, const_tree);
|
||||
}
|
||||
else if(r_is_constant_value)
|
||||
{
|
||||
@@ -815,7 +808,7 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
|
||||
e_msg_list_concat_in_place(&result.msgs, &r_tree.msgs);
|
||||
|
||||
// rjf: fill output
|
||||
result.root = &e_irnode_nil;
|
||||
result.root = e_irtree_const_u(arena, 0);
|
||||
result.type_key = r_tree.type_key;
|
||||
result.mode = E_Mode_Null;
|
||||
result.space = r_tree.space;
|
||||
@@ -1323,7 +1316,7 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
|
||||
//- rjf: types
|
||||
case E_ExprKind_TypeIdent:
|
||||
{
|
||||
result.root = &e_irnode_nil;
|
||||
result.root = e_irtree_const_u(arena, 0);
|
||||
result.type_key = expr->type_key;
|
||||
result.mode = E_Mode_Null;
|
||||
result.space = expr->space;
|
||||
|
||||
@@ -89,8 +89,8 @@ E_OpInfo e_expr_kind_op_info_table[47] =
|
||||
{ E_OpKind_UnaryPrefix, 2, str8_lit_comp("*"), str8_lit_comp(""), str8_lit_comp("") },
|
||||
{ E_OpKind_UnaryPrefix, 2, str8_lit_comp("&"), str8_lit_comp(""), str8_lit_comp("") },
|
||||
{ E_OpKind_Null, 1, str8_lit_comp("("), str8_lit_comp(")"), str8_lit_comp("") },
|
||||
{ E_OpKind_UnaryPrefix, 1, str8_lit_comp("sizeof"), str8_lit_comp(""), str8_lit_comp("") },
|
||||
{ E_OpKind_UnaryPrefix, 1, str8_lit_comp("typeof"), str8_lit_comp(""), str8_lit_comp("") },
|
||||
{ E_OpKind_UnaryPrefix, 1, str8_lit_comp("sizeof"), str8_lit_comp("("), str8_lit_comp(")") },
|
||||
{ E_OpKind_UnaryPrefix, 1, str8_lit_comp("typeof"), str8_lit_comp("("), str8_lit_comp(")") },
|
||||
{ E_OpKind_UnaryPrefix, 1, str8_lit_comp("bswap"), str8_lit_comp("("), str8_lit_comp(")") },
|
||||
{ E_OpKind_UnaryPrefix, 2, str8_lit_comp("-"), str8_lit_comp(""), str8_lit_comp("") },
|
||||
{ E_OpKind_UnaryPrefix, 2, str8_lit_comp("!"), str8_lit_comp(""), str8_lit_comp("") },
|
||||
|
||||
@@ -1078,6 +1078,20 @@ ev_windowed_row_list_from_block_range_list(Arena *arena, EV_View *view, String8
|
||||
// rjf: no expansion operator applied -> push row for block expression; pass through block info
|
||||
if(expand_range_info.row_exprs_count == 0)
|
||||
{
|
||||
E_Member *member = &e_member_nil;
|
||||
if(n->v.block->expr->kind == E_ExprKind_MemberAccess)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
E_IRTreeAndType lhs_irtree = e_irtree_and_type_from_expr(scratch.arena, n->v.block->expr->first);
|
||||
E_TypeKey lhs_type_key = lhs_irtree.type_key;
|
||||
E_Member expr_member = e_type_member_from_key_name__cached(lhs_type_key, n->v.block->expr->last->string);
|
||||
if(expr_member.kind != E_MemberKind_Null)
|
||||
{
|
||||
member = push_array(arena, E_Member, 1);
|
||||
MemoryCopyStruct(member, &expr_member);
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
EV_Row *row = push_array(arena, EV_Row, 1);
|
||||
SLLQueuePush(rows.first, rows.last, row);
|
||||
rows.count += 1;
|
||||
@@ -1088,7 +1102,7 @@ ev_windowed_row_list_from_block_range_list(Arena *arena, EV_View *view, String8
|
||||
row->visual_size_chopped = num_chopped;
|
||||
row->string = n->v.block->string;
|
||||
row->expr = n->v.block->expr;
|
||||
row->member = &e_member_nil;
|
||||
row->member = member;
|
||||
row->view_rules = n->v.block->view_rules;
|
||||
}
|
||||
|
||||
@@ -1129,6 +1143,22 @@ ev_windowed_row_list_from_block_range_list(Arena *arena, EV_View *view, String8
|
||||
row->expr = row_expr__resolved;
|
||||
row->member = expand_range_info.row_members[idx];
|
||||
row->view_rules = row_view_rules;
|
||||
if(row->member == &e_member_nil || row->member == 0)
|
||||
{
|
||||
if(row->expr->kind == E_ExprKind_MemberAccess)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
E_IRTreeAndType lhs_irtree = e_irtree_and_type_from_expr(scratch.arena, row->expr->first);
|
||||
E_TypeKey lhs_type_key = lhs_irtree.type_key;
|
||||
E_Member expr_member = e_type_member_from_key_name__cached(lhs_type_key, row->expr->last->string);
|
||||
if(expr_member.kind != E_MemberKind_Null)
|
||||
{
|
||||
row->member = push_array(arena, E_Member, 1);
|
||||
MemoryCopyStruct(row->member, &expr_member);
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
}
|
||||
if(expand_range_info.row_view_rules[idx].size != 0)
|
||||
{
|
||||
ev_key_set_view_rule(view, row->key, expand_range_info.row_view_rules[idx]);
|
||||
|
||||
@@ -2673,7 +2673,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
{
|
||||
U64 row_offset = row_eval.value.u64;
|
||||
if((row_eval.mode == E_Mode_Offset || row_eval.mode == E_Mode_Null) &&
|
||||
row_offset%64 == 0 && row_depth > 0 && !row_expanded)
|
||||
row_offset%64 == 0 && row_depth > 0)
|
||||
{
|
||||
ui_set_next_fixed_x(0);
|
||||
ui_set_next_fixed_y(0);
|
||||
|
||||
Reference in New Issue
Block a user