mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-01 11:48:10 +00:00
deduplicate txti/txt layer lexing
This commit is contained in:
+20
-20
@@ -8056,18 +8056,18 @@ df_rgba_from_theme_color(DF_ThemeColor color)
|
||||
}
|
||||
|
||||
internal DF_ThemeColor
|
||||
df_theme_color_from_txti_token_kind(TXTI_TokenKind kind)
|
||||
df_theme_color_from_txt_token_kind(TXT_TokenKind kind)
|
||||
{
|
||||
DF_ThemeColor color = DF_ThemeColor_CodeDefault;
|
||||
switch(kind)
|
||||
{
|
||||
default:break;
|
||||
case TXTI_TokenKind_Keyword:{color = DF_ThemeColor_CodeKeyword;}break;
|
||||
case TXTI_TokenKind_Numeric:{color = DF_ThemeColor_CodeNumeric;}break;
|
||||
case TXTI_TokenKind_String: {color = DF_ThemeColor_CodeString;}break;
|
||||
case TXTI_TokenKind_Meta: {color = DF_ThemeColor_CodeMeta;}break;
|
||||
case TXTI_TokenKind_Comment:{color = DF_ThemeColor_CodeComment;}break;
|
||||
case TXTI_TokenKind_Symbol: {color = DF_ThemeColor_CodeSymbol;}break;
|
||||
case TXT_TokenKind_Keyword:{color = DF_ThemeColor_CodeKeyword;}break;
|
||||
case TXT_TokenKind_Numeric:{color = DF_ThemeColor_CodeNumeric;}break;
|
||||
case TXT_TokenKind_String: {color = DF_ThemeColor_CodeString;}break;
|
||||
case TXT_TokenKind_Meta: {color = DF_ThemeColor_CodeMeta;}break;
|
||||
case TXT_TokenKind_Comment:{color = DF_ThemeColor_CodeComment;}break;
|
||||
case TXT_TokenKind_Symbol: {color = DF_ThemeColor_CodeSymbol;}break;
|
||||
}
|
||||
return color;
|
||||
}
|
||||
@@ -10063,7 +10063,7 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_
|
||||
{
|
||||
U64 line_slice_idx = mouse_pt.line-params->line_num_range.min;
|
||||
String8 line_text = params->line_text[line_slice_idx];
|
||||
TXTI_TokenArray line_tokens = params->line_tokens[line_slice_idx];
|
||||
TXT_TokenArray line_tokens = params->line_tokens[line_slice_idx];
|
||||
Rng1U64 line_range = params->line_ranges[line_slice_idx];
|
||||
U64 mouse_pt_off = line_range.min + (mouse_pt.column-1);
|
||||
Rng1U64 expr_off_rng = txti_expr_range_from_line_off_range_string_tokens(mouse_pt_off, line_range, line_text, &line_tokens);
|
||||
@@ -10261,7 +10261,7 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_
|
||||
{
|
||||
String8 line_string = params->line_text[line_idx];
|
||||
Rng1U64 line_range = params->line_ranges[line_idx];
|
||||
TXTI_TokenArray *line_tokens = ¶ms->line_tokens[line_idx];
|
||||
TXT_TokenArray *line_tokens = ¶ms->line_tokens[line_idx];
|
||||
ui_set_next_text_padding(-2);
|
||||
UI_Key line_key = ui_key_from_stringf(top_container_box->key, "ln_%I64x", line_num);
|
||||
Vec4F32 line_bg_color = line_bg_colors[line_idx];
|
||||
@@ -10292,9 +10292,9 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_
|
||||
}
|
||||
else
|
||||
{
|
||||
TXTI_Token *line_tokens_first = line_tokens->v;
|
||||
TXTI_Token *line_tokens_opl = line_tokens->v + line_tokens->count;
|
||||
for(TXTI_Token *token = line_tokens_first; token < line_tokens_opl; token += 1)
|
||||
TXT_Token *line_tokens_first = line_tokens->v;
|
||||
TXT_Token *line_tokens_opl = line_tokens->v + line_tokens->count;
|
||||
for(TXT_Token *token = line_tokens_first; token < line_tokens_opl; token += 1)
|
||||
{
|
||||
// rjf: token -> token string
|
||||
String8 token_string = {0};
|
||||
@@ -10314,9 +10314,9 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_
|
||||
// rjf: token -> token color
|
||||
Vec4F32 token_color = df_rgba_from_theme_color(DF_ThemeColor_CodeDefault);
|
||||
{
|
||||
DF_ThemeColor new_color_kind = df_theme_color_from_txti_token_kind(token->kind);
|
||||
DF_ThemeColor new_color_kind = df_theme_color_from_txt_token_kind(token->kind);
|
||||
F32 mix_t = 1.f;
|
||||
if(token->kind == TXTI_TokenKind_Identifier)
|
||||
if(token->kind == TXT_TokenKind_Identifier)
|
||||
{
|
||||
B32 mapped_special = 0;
|
||||
for(DF_EntityNode *n = params->relevant_binaries.first; n != 0; n = n->next)
|
||||
@@ -10808,12 +10808,12 @@ df_fancy_string_list_from_code_string(Arena *arena, F32 alpha, B32 indirection_s
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
D_FancyStringList fancy_strings = {0};
|
||||
TXTI_TokenArray tokens = txti_token_array_from_string__cpp(scratch.arena, 0, string);
|
||||
TXTI_Token *tokens_opl = tokens.v+tokens.count;
|
||||
TXT_TokenArray tokens = txt_token_array_from_string__c_cpp(scratch.arena, 0, string);
|
||||
TXT_Token *tokens_opl = tokens.v+tokens.count;
|
||||
S32 indirection_counter = 0;
|
||||
for(TXTI_Token *token = tokens.v; token < tokens_opl; token += 1)
|
||||
for(TXT_Token *token = tokens.v; token < tokens_opl; token += 1)
|
||||
{
|
||||
DF_ThemeColor token_color = df_theme_color_from_txti_token_kind(token->kind);
|
||||
DF_ThemeColor token_color = df_theme_color_from_txt_token_kind(token->kind);
|
||||
Vec4F32 token_color_rgba = df_rgba_from_theme_color(token_color);
|
||||
token_color_rgba.w *= alpha;
|
||||
String8 token_string = str8_substr(string, token->range);
|
||||
@@ -10833,7 +10833,7 @@ df_fancy_string_list_from_code_string(Arena *arena, F32 alpha, B32 indirection_s
|
||||
};
|
||||
d_fancy_string_list_push(arena, &fancy_strings, &fancy_string);
|
||||
}break;
|
||||
case TXTI_TokenKind_Identifier:
|
||||
case TXT_TokenKind_Identifier:
|
||||
{
|
||||
D_FancyString fancy_string =
|
||||
{
|
||||
@@ -10844,7 +10844,7 @@ df_fancy_string_list_from_code_string(Arena *arena, F32 alpha, B32 indirection_s
|
||||
};
|
||||
d_fancy_string_list_push(arena, &fancy_strings, &fancy_string);
|
||||
}break;
|
||||
case TXTI_TokenKind_Numeric:
|
||||
case TXT_TokenKind_Numeric:
|
||||
{
|
||||
Vec4F32 token_color_rgba_alt = token_color_rgba;
|
||||
token_color_rgba_alt.x *= 0.7f;
|
||||
|
||||
+2
-2
@@ -453,7 +453,7 @@ struct DF_CodeSliceParams
|
||||
Rng1S64 line_num_range;
|
||||
String8 *line_text;
|
||||
Rng1U64 *line_ranges;
|
||||
TXTI_TokenArray *line_tokens;
|
||||
TXT_TokenArray *line_tokens;
|
||||
DF_EntityList *line_bps;
|
||||
DF_EntityList *line_ips;
|
||||
DF_EntityList *line_pins;
|
||||
@@ -1010,7 +1010,7 @@ internal DF_CmdSpecList df_cmd_spec_list_from_event_flags(Arena *arena, OS_Event
|
||||
|
||||
//- rjf: colors
|
||||
internal Vec4F32 df_rgba_from_theme_color(DF_ThemeColor color);
|
||||
internal DF_ThemeColor df_theme_color_from_txti_token_kind(TXTI_TokenKind kind);
|
||||
internal DF_ThemeColor df_theme_color_from_txt_token_kind(TXT_TokenKind kind);
|
||||
|
||||
//- rjf: fonts/sizes
|
||||
internal F_Tag df_font_from_slot(DF_FontSlot slot);
|
||||
|
||||
@@ -715,7 +715,7 @@ DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(text)
|
||||
code_slice_params.line_num_range = r1s64(1, info.lines_count);
|
||||
code_slice_params.line_text = push_array(scratch.arena, String8, info.lines_count);
|
||||
code_slice_params.line_ranges = push_array(scratch.arena, Rng1U64, info.lines_count);
|
||||
code_slice_params.line_tokens = push_array(scratch.arena, TXTI_TokenArray, info.lines_count);
|
||||
code_slice_params.line_tokens = push_array(scratch.arena, TXT_TokenArray, info.lines_count);
|
||||
code_slice_params.line_bps = push_array(scratch.arena, DF_EntityList, info.lines_count);
|
||||
code_slice_params.line_ips = push_array(scratch.arena, DF_EntityList, info.lines_count);
|
||||
code_slice_params.line_pins = push_array(scratch.arena, DF_EntityList, info.lines_count);
|
||||
|
||||
+30
-30
@@ -372,13 +372,13 @@ df_entity_lister_item_array_sort_by_strength__in_place(DF_EntityListerItemArray
|
||||
////////////////////////////////
|
||||
//~ rjf: Disassembly View
|
||||
|
||||
internal TXTI_TokenArray
|
||||
df_txti_token_array_from_dasm_arch_string(Arena *arena, Architecture arch, String8 string)
|
||||
internal TXT_TokenArray
|
||||
df_txt_token_array_from_dasm_arch_string(Arena *arena, Architecture arch, String8 string)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
TXTI_TokenChunkList tokens = {0};
|
||||
TXT_TokenChunkList tokens = {0};
|
||||
{
|
||||
TXTI_TokenKind active_token_kind = TXTI_TokenKind_Null;
|
||||
TXT_TokenKind active_token_kind = TXT_TokenKind_Null;
|
||||
U64 active_token_start_off = 0;
|
||||
U64 off = 0;
|
||||
B32 escaped = 0;
|
||||
@@ -388,8 +388,8 @@ df_txti_token_array_from_dasm_arch_string(Arena *arena, Architecture arch, Strin
|
||||
U8 byte = (off+0 < string.size) ? string.str[off+0] : 0;
|
||||
U8 next_byte = (off+1 < string.size) ? string.str[off+1] : 0;
|
||||
B32 ender_found = 0;
|
||||
advance = (active_token_kind != TXTI_TokenKind_Null ? 1 : 0);
|
||||
if(off == string.size && active_token_kind != TXTI_TokenKind_Null)
|
||||
advance = (active_token_kind != TXT_TokenKind_Null ? 1 : 0);
|
||||
if(off == string.size && active_token_kind != TXT_TokenKind_Null)
|
||||
{
|
||||
ender_found = 1;
|
||||
advance = 1;
|
||||
@@ -397,38 +397,38 @@ df_txti_token_array_from_dasm_arch_string(Arena *arena, Architecture arch, Strin
|
||||
switch(active_token_kind)
|
||||
{
|
||||
default:
|
||||
case TXTI_TokenKind_Null:
|
||||
case TXT_TokenKind_Null:
|
||||
{
|
||||
if(byte == ' ' || byte == '\t' || byte == '\v' || byte == '\f' || byte == '\r' || byte == '\n')
|
||||
{
|
||||
active_token_start_off = off;
|
||||
active_token_kind = TXTI_TokenKind_Whitespace;
|
||||
active_token_kind = TXT_TokenKind_Whitespace;
|
||||
advance = 1;
|
||||
}
|
||||
else if(('a' <= byte && byte <= 'z') || ('A' <= byte && byte <= 'Z') || byte == '_')
|
||||
{
|
||||
active_token_start_off = off;
|
||||
active_token_kind = TXTI_TokenKind_Identifier;
|
||||
active_token_kind = TXT_TokenKind_Identifier;
|
||||
advance = 1;
|
||||
}
|
||||
else if(byte == '\'')
|
||||
{
|
||||
active_token_start_off = off;
|
||||
active_token_kind = TXTI_TokenKind_String;
|
||||
active_token_kind = TXT_TokenKind_String;
|
||||
advance = 1;
|
||||
string_is_char = 1;
|
||||
}
|
||||
else if(byte == '"')
|
||||
{
|
||||
active_token_start_off = off;
|
||||
active_token_kind = TXTI_TokenKind_String;
|
||||
active_token_kind = TXT_TokenKind_String;
|
||||
advance = 1;
|
||||
string_is_char = 0;
|
||||
}
|
||||
else if(('0' <= byte && byte <= '9') || (byte == '.' && '0' <= next_byte && next_byte <= '9'))
|
||||
{
|
||||
active_token_start_off = off;
|
||||
active_token_kind = TXTI_TokenKind_Numeric;
|
||||
active_token_kind = TXT_TokenKind_Numeric;
|
||||
advance = 1;
|
||||
}
|
||||
else if(byte == '~' || byte == '!' || byte == '%' || byte == '^' ||
|
||||
@@ -439,29 +439,29 @@ df_txti_token_array_from_dasm_arch_string(Arena *arena, Architecture arch, Strin
|
||||
byte == '>' || byte == ',' || byte == '.')
|
||||
{
|
||||
active_token_start_off = off;
|
||||
active_token_kind = TXTI_TokenKind_Symbol;
|
||||
active_token_kind = TXT_TokenKind_Symbol;
|
||||
advance = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
active_token_start_off = off;
|
||||
active_token_kind = TXTI_TokenKind_Error;
|
||||
active_token_kind = TXT_TokenKind_Error;
|
||||
advance = 1;
|
||||
}
|
||||
}break;
|
||||
case TXTI_TokenKind_Whitespace:
|
||||
case TXT_TokenKind_Whitespace:
|
||||
if(byte != ' ' && byte != '\t' && byte != '\v' && byte != '\f')
|
||||
{
|
||||
ender_found = 1;
|
||||
advance = 0;
|
||||
}break;
|
||||
case TXTI_TokenKind_Identifier:
|
||||
case TXT_TokenKind_Identifier:
|
||||
if((byte < 'a' || 'z' < byte) && (byte < 'A' || 'Z' < byte) && (byte < '0' || '9' < byte) && byte != '_')
|
||||
{
|
||||
ender_found = 1;
|
||||
advance = 0;
|
||||
}break;
|
||||
case TXTI_TokenKind_String:
|
||||
case TXT_TokenKind_String:
|
||||
{
|
||||
U8 ender_byte = string_is_char ? '\'' : '"';
|
||||
if(!escaped && byte == ender_byte)
|
||||
@@ -488,13 +488,13 @@ df_txti_token_array_from_dasm_arch_string(Arena *arena, Architecture arch, Strin
|
||||
}
|
||||
}
|
||||
}break;
|
||||
case TXTI_TokenKind_Numeric:
|
||||
case TXT_TokenKind_Numeric:
|
||||
if((byte < 'a' || 'z' < byte) && (byte < 'A' || 'Z' < byte) && (byte < '0' || '9' < byte) && byte != '.')
|
||||
{
|
||||
ender_found = 1;
|
||||
advance = 0;
|
||||
}break;
|
||||
case TXTI_TokenKind_Symbol:
|
||||
case TXT_TokenKind_Symbol:
|
||||
if(1)
|
||||
{
|
||||
// NOTE(rjf): avoiding maximum munch rule for now
|
||||
@@ -511,7 +511,7 @@ df_txti_token_array_from_dasm_arch_string(Arena *arena, Architecture arch, Strin
|
||||
ender_found = 1;
|
||||
advance = 0;
|
||||
}break;
|
||||
case TXTI_TokenKind_Error:
|
||||
case TXT_TokenKind_Error:
|
||||
{
|
||||
ender_found = 1;
|
||||
advance = 0;
|
||||
@@ -519,22 +519,22 @@ df_txti_token_array_from_dasm_arch_string(Arena *arena, Architecture arch, Strin
|
||||
}
|
||||
if(ender_found != 0)
|
||||
{
|
||||
TXTI_Token token = {active_token_kind, r1u64(active_token_start_off, off+advance)};
|
||||
if(active_token_kind == TXTI_TokenKind_Identifier)
|
||||
TXT_Token token = {active_token_kind, r1u64(active_token_start_off, off+advance)};
|
||||
if(active_token_kind == TXT_TokenKind_Identifier)
|
||||
{
|
||||
String8 token_string = str8_substr(string, token.range);
|
||||
if(df_info_summary_from_string(arch, token_string).size != 0)
|
||||
{
|
||||
token.kind = TXTI_TokenKind_Keyword;
|
||||
token.kind = TXT_TokenKind_Keyword;
|
||||
}
|
||||
}
|
||||
txti_token_chunk_list_push(arena, &tokens, 1024, &token);
|
||||
active_token_kind = TXTI_TokenKind_Null;
|
||||
txt_token_chunk_list_push(arena, &tokens, 1024, &token);
|
||||
active_token_kind = TXT_TokenKind_Null;
|
||||
active_token_start_off = token.range.max;
|
||||
}
|
||||
}
|
||||
}
|
||||
TXTI_TokenArray result = txti_token_array_from_chunk_list(arena, &tokens);
|
||||
TXT_TokenArray result = txt_token_array_from_chunk_list(arena, &tokens);
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
@@ -5844,8 +5844,8 @@ DF_VIEW_UI_FUNCTION_DEF(Code)
|
||||
ui_spacer(ui_pct(1, 0));
|
||||
ui_labelf("(read only)");
|
||||
ui_labelf("%s",
|
||||
info.line_end_kind == TXTI_LineEndKind_LF ? "lf" :
|
||||
info.line_end_kind == TXTI_LineEndKind_CRLF ? "crlf" :
|
||||
info.line_end_kind == TXT_LineEndKind_LF ? "lf" :
|
||||
info.line_end_kind == TXT_LineEndKind_CRLF ? "crlf" :
|
||||
"bin");
|
||||
}
|
||||
}
|
||||
@@ -6185,7 +6185,7 @@ DF_VIEW_UI_FUNCTION_DEF(Disassembly)
|
||||
code_slice_params.line_num_range = visible_line_num_range;
|
||||
code_slice_params.line_text = push_array(scratch.arena, String8, visible_line_count);
|
||||
code_slice_params.line_ranges = push_array(scratch.arena, Rng1U64, visible_line_count);
|
||||
code_slice_params.line_tokens = push_array(scratch.arena, TXTI_TokenArray, visible_line_count);
|
||||
code_slice_params.line_tokens = push_array(scratch.arena, TXT_TokenArray, visible_line_count);
|
||||
code_slice_params.line_bps = push_array(scratch.arena, DF_EntityList, visible_line_count);
|
||||
code_slice_params.line_ips = push_array(scratch.arena, DF_EntityList, visible_line_count);
|
||||
code_slice_params.line_pins = push_array(scratch.arena, DF_EntityList, visible_line_count);
|
||||
@@ -6230,7 +6230,7 @@ DF_VIEW_UI_FUNCTION_DEF(Disassembly)
|
||||
for(S64 line_num = visible_line_num_range.min; line_num < visible_line_num_range.max; line_num += 1)
|
||||
{
|
||||
U64 idx = line_num-visible_line_num_range.min;
|
||||
TXTI_TokenArray tokens = df_txti_token_array_from_dasm_arch_string(scratch.arena, df_architecture_from_entity(process), code_slice_params.line_text[idx]);
|
||||
TXT_TokenArray tokens = df_txt_token_array_from_dasm_arch_string(scratch.arena, df_architecture_from_entity(process), code_slice_params.line_text[idx]);
|
||||
code_slice_params.line_tokens[idx] = tokens;
|
||||
}
|
||||
|
||||
|
||||
@@ -438,7 +438,7 @@ internal void df_entity_lister_item_array_sort_by_strength__in_place(DF_EntityLi
|
||||
////////////////////////////////
|
||||
//~ rjf: Disassembly View
|
||||
|
||||
internal TXTI_TokenArray df_txti_token_array_from_dasm_arch_string(Arena *arena, Architecture arch, String8 string);
|
||||
internal TXT_TokenArray df_txt_token_array_from_dasm_arch_string(Arena *arena, Architecture arch, String8 string);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Eval/Watch Views
|
||||
|
||||
Reference in New Issue
Block a user