mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 05:48:40 +00:00
plug in text scope tree to code slice visualization
This commit is contained in:
@@ -207,6 +207,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
|
|||||||
code_slice_params.line_pins = push_array(scratch.arena, RD_CfgList, visible_line_count);
|
code_slice_params.line_pins = push_array(scratch.arena, RD_CfgList, visible_line_count);
|
||||||
code_slice_params.line_vaddrs = push_array(scratch.arena, U64, 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.line_infos = push_array(scratch.arena, D_LineList, visible_line_count);
|
||||||
|
code_slice_params.text_info = text_info;
|
||||||
code_slice_params.font = code_font;
|
code_slice_params.font = code_font;
|
||||||
code_slice_params.font_size = code_font_size;
|
code_slice_params.font_size = code_font_size;
|
||||||
code_slice_params.tab_size = code_tab_size;
|
code_slice_params.tab_size = code_tab_size;
|
||||||
|
|||||||
@@ -2113,6 +2113,15 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
result.base = text_container_sig;
|
result.base = text_container_sig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//////////////////////////////
|
||||||
|
//- rjf: cursor -> scope info
|
||||||
|
//
|
||||||
|
TXT_ScopeNode *cursor_scope_node = &txt_scope_node_nil;
|
||||||
|
if(params->text_info != 0)
|
||||||
|
{
|
||||||
|
cursor_scope_node = txt_scope_node_from_info_pt(params->text_info, rd_regs()->cursor);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: produce fancy strings for each line
|
//- rjf: produce fancy strings for each line
|
||||||
//
|
//
|
||||||
@@ -2170,6 +2179,19 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
token_color = mix_4f32(token_color, lookup_color, lookup_color_mix_t);
|
token_color = mix_4f32(token_color, lookup_color, lookup_color_mix_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rjf: scope endpoints enclosing cursor -> highlight
|
||||||
|
for(TXT_ScopeNode *scope_n = cursor_scope_node;
|
||||||
|
scope_n != &txt_scope_node_nil;
|
||||||
|
scope_n = txt_scope_node_from_info_num(params->text_info, scope_n->parent_num))
|
||||||
|
{
|
||||||
|
if(params->text_info->tokens.v[scope_n->token_idx_range.min].range.min == token->range.min ||
|
||||||
|
params->text_info->tokens.v[scope_n->token_idx_range.max].range.min == token->range.min)
|
||||||
|
{
|
||||||
|
token_color = pop_color;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// rjf: push fancy string
|
// rjf: push fancy string
|
||||||
dr_fstrs_push_new(scratch.arena, &fstrs, &fstr_params, token_string, .color = token_color);
|
dr_fstrs_push_new(scratch.arena, &fstrs, &fstr_params, token_string, .color = token_color);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ struct RD_CodeSliceParams
|
|||||||
U64 *line_vaddrs;
|
U64 *line_vaddrs;
|
||||||
D_LineList *line_infos;
|
D_LineList *line_infos;
|
||||||
DI_KeyList relevant_dbgi_keys;
|
DI_KeyList relevant_dbgi_keys;
|
||||||
|
TXT_TextInfo *text_info;
|
||||||
|
|
||||||
// rjf: visual parameters
|
// rjf: visual parameters
|
||||||
FNT_Tag font;
|
FNT_Tag font;
|
||||||
|
|||||||
@@ -2098,7 +2098,7 @@ txt_scope_node_from_info_num(TXT_TextInfo *info, U64 num)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal TXT_ScopeNode *
|
internal TXT_ScopeNode *
|
||||||
txt_scope_node_from_info_data_off(TXT_TextInfo *info, U64 off)
|
txt_scope_node_from_info_off(TXT_TextInfo *info, U64 off)
|
||||||
{
|
{
|
||||||
TXT_ScopeNode *result = &txt_scope_node_nil;
|
TXT_ScopeNode *result = &txt_scope_node_nil;
|
||||||
{
|
{
|
||||||
@@ -2106,7 +2106,7 @@ txt_scope_node_from_info_data_off(TXT_TextInfo *info, U64 off)
|
|||||||
U64 opl = info->scope_pts.count;
|
U64 opl = info->scope_pts.count;
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
U64 mid = (opl - first) / 2;
|
U64 mid = first + (opl - first) / 2;
|
||||||
if(mid >= info->scope_pts.count) { break; }
|
if(mid >= info->scope_pts.count) { break; }
|
||||||
U64 mid_off = info->tokens.v[info->scope_pts.v[mid].token_idx].range.min;
|
U64 mid_off = info->tokens.v[info->scope_pts.v[mid].token_idx].range.min;
|
||||||
if(off == mid_off || (first == mid && opl == mid+1))
|
if(off == mid_off || (first == mid && opl == mid+1))
|
||||||
@@ -2128,10 +2128,10 @@ txt_scope_node_from_info_data_off(TXT_TextInfo *info, U64 off)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal TXT_ScopeNode *
|
internal TXT_ScopeNode *
|
||||||
txt_scope_node_from_info_data_pt(TXT_TextInfo *info, TxtPt pt)
|
txt_scope_node_from_info_pt(TXT_TextInfo *info, TxtPt pt)
|
||||||
{
|
{
|
||||||
U64 off = txt_off_from_info_pt(info, pt);
|
U64 off = txt_off_from_info_pt(info, pt);
|
||||||
TXT_ScopeNode *result = txt_scope_node_from_info_data_off(info, off);
|
TXT_ScopeNode *result = txt_scope_node_from_info_off(info, off);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -322,8 +322,8 @@ internal String8 txt_string_from_info_data_txt_rng(TXT_TextInfo *info, String8 d
|
|||||||
internal String8 txt_string_from_info_data_line_num(TXT_TextInfo *info, String8 data, S64 line_num);
|
internal String8 txt_string_from_info_data_line_num(TXT_TextInfo *info, String8 data, S64 line_num);
|
||||||
internal TXT_LineTokensSlice txt_line_tokens_slice_from_info_data_line_range(Arena *arena, TXT_TextInfo *info, String8 data, Rng1S64 line_range);
|
internal TXT_LineTokensSlice txt_line_tokens_slice_from_info_data_line_range(Arena *arena, TXT_TextInfo *info, String8 data, Rng1S64 line_range);
|
||||||
internal TXT_ScopeNode *txt_scope_node_from_info_num(TXT_TextInfo *info, U64 num);
|
internal TXT_ScopeNode *txt_scope_node_from_info_num(TXT_TextInfo *info, U64 num);
|
||||||
internal TXT_ScopeNode *txt_scope_node_from_info_data_off(TXT_TextInfo *info, U64 off);
|
internal TXT_ScopeNode *txt_scope_node_from_info_off(TXT_TextInfo *info, U64 off);
|
||||||
internal TXT_ScopeNode *txt_scope_node_from_info_data_pt(TXT_TextInfo *info, TxtPt pt);
|
internal TXT_ScopeNode *txt_scope_node_from_info_pt(TXT_TextInfo *info, TxtPt pt);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Parse Threads
|
//~ rjf: Parse Threads
|
||||||
|
|||||||
Reference in New Issue
Block a user