mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07: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_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.text_info = text_info;
|
||||
code_slice_params.font = code_font;
|
||||
code_slice_params.font_size = code_font_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;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- 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
|
||||
//
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
// 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
|
||||
dr_fstrs_push_new(scratch.arena, &fstrs, &fstr_params, token_string, .color = token_color);
|
||||
}
|
||||
|
||||
@@ -105,6 +105,7 @@ struct RD_CodeSliceParams
|
||||
U64 *line_vaddrs;
|
||||
D_LineList *line_infos;
|
||||
DI_KeyList relevant_dbgi_keys;
|
||||
TXT_TextInfo *text_info;
|
||||
|
||||
// rjf: visual parameters
|
||||
FNT_Tag font;
|
||||
|
||||
@@ -2098,7 +2098,7 @@ 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)
|
||||
txt_scope_node_from_info_off(TXT_TextInfo *info, U64 off)
|
||||
{
|
||||
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;
|
||||
for(;;)
|
||||
{
|
||||
U64 mid = (opl - first) / 2;
|
||||
U64 mid = first + (opl - first) / 2;
|
||||
if(mid >= info->scope_pts.count) { break; }
|
||||
U64 mid_off = info->tokens.v[info->scope_pts.v[mid].token_idx].range.min;
|
||||
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 *
|
||||
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);
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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 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_data_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_off(TXT_TextInfo *info, U64 off);
|
||||
internal TXT_ScopeNode *txt_scope_node_from_info_pt(TXT_TextInfo *info, TxtPt pt);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Parse Threads
|
||||
|
||||
Reference in New Issue
Block a user