allow assembly-style dereferences in eval parser; register/register-alias syntax highlighting

This commit is contained in:
Ryan Fleury
2024-03-29 08:52:37 -07:00
parent 7c7b44e940
commit d9675f2565
6 changed files with 93 additions and 27 deletions
+1 -1
View File
@@ -4179,7 +4179,7 @@ df_eval_from_string(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_
}
//- rjf: try to resolve basic integral values into symbols
if(result.mode == EVAL_EvalMode_Value && parse.expr->kind != EVAL_ExprKind_Cast &&
if((result.mode == EVAL_EvalMode_Value || result.mode == EVAL_EvalMode_Reg) && parse.expr->kind != EVAL_ExprKind_Cast &&
(tg_key_match(result.type_key, tg_key_basic(TG_Kind_S64)) ||
tg_key_match(result.type_key, tg_key_basic(TG_Kind_U64)) ||
tg_key_match(result.type_key, tg_key_basic(TG_Kind_S32)) ||
+24 -4
View File
@@ -10314,13 +10314,13 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_
{
DF_ThemeColor new_color_kind = df_theme_color_from_txt_token_kind(token->kind);
F32 mix_t = 1.f;
if(token->kind == TXT_TokenKind_Identifier)
if(token->kind == TXT_TokenKind_Identifier || token->kind == TXT_TokenKind_Keyword)
{
B32 mapped_special = 0;
for(DF_EntityNode *n = params->relevant_binaries.first; n != 0; n = n->next)
{
DF_Entity *binary = n->entity;
if(!mapped_special)
if(!mapped_special && token->kind == TXT_TokenKind_Identifier)
{
U64 voff = df_voff_from_binary_symbol_name(binary, token_string);
if(voff != 0)
@@ -10330,7 +10330,7 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_
mix_t = selected_thread_module->alive_t;
}
}
if(!mapped_special)
if(!mapped_special && token->kind == TXT_TokenKind_Identifier)
{
U64 type_num = df_type_num_from_binary_name(binary, token_string);
if(type_num != 0)
@@ -10340,7 +10340,7 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_
mix_t = selected_thread_module->alive_t;
}
}
if(!mapped_special)
if(!mapped_special && token->kind == TXT_TokenKind_Identifier)
{
U64 local_num = eval_num_from_string(parse_ctx->locals_map, token_string);
if(local_num != 0)
@@ -10350,6 +10350,26 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_
mix_t = selected_thread_module->alive_t;
}
}
if(!mapped_special)
{
U64 reg_num = eval_num_from_string(parse_ctx->regs_map, token_string);
if(reg_num != 0)
{
mapped_special = 1;
new_color_kind = DF_ThemeColor_CodeRegister;
mix_t = selected_thread_module->alive_t;
}
}
if(!mapped_special)
{
U64 alias_num = eval_num_from_string(parse_ctx->reg_alias_map, token_string);
if(alias_num != 0)
{
mapped_special = 1;
new_color_kind = DF_ThemeColor_CodeRegister;
mix_t = selected_thread_module->alive_t;
}
}
break;
}
}
+2
View File
@@ -265,6 +265,7 @@ DF_ThemeTable:
{CodeFunction "Code (Function)" code_function }
{CodeType "Code (Type)" code_type }
{CodeLocal "Code (Local)" code_local }
{CodeRegister "Code (Register)" code_register }
{CodeKeyword "Code (Keyword)" code_keyword }
{CodeSymbol "Code (Symbol)" code_symbol }
{CodeNumeric "Code (Numeric)" code_numeric }
@@ -349,6 +350,7 @@ DF_ThemePresetColorTable:
(code_function 0x7fcc99ff 0x2a7a45ff 0xdcdcaaff 0x74531fff 0x1c7dd1ff 0xc39d36ff 0xcc5735ff 0x7fcc99ff 0x49b2ffff )
(code_type 0x66b2e5ff 0x2c688fff 0x4ec9b0ff 0x2b91afff 0x1c7dd1ff 0x66b2e5ff 0xd8a51dff 0x66b2e5ff 0x49b2ffff )
(code_local 0xfe9548ff 0xfe9548ff 0xfe9548ff 0xfe9548ff 0xfe9548ff 0xfe9548ff 0xfe9548ff 0xfe9548ff 0xfe9548ff )
(code_register 0xd45d90ff 0xd45d90ff 0xd45d90ff 0xd45d90ff 0xd45d90ff 0xd45d90ff 0xd45d90ff 0xd45d90ff 0xd45d90ff )
(code_keyword 0xf7bf5eff 0xa47729ff 0x569cd6ff 0x0000ffff 0x63980fff 0xc39d36ff 0xac7b0bff 0xd08f20ff 0xff0000ff )
(code_symbol 0x994c32ff 0x6c2d18ff 0xb4b4b4ff 0x000000ff 0x839496ff 0x2e5256ff 0x994c32ff 0x994c32ff 0xffffffff )
(code_numeric 0x4ce54cff 0x2c7d2cff 0xb5cea8ff 0x000000ff 0xcb4b20ff 0x657b83ff 0x6b8e23ff 0x50ff30ff 0x2cff50ff )
+22 -11
View File
@@ -30,7 +30,7 @@ str8_lit_comp("four_coder"),
str8_lit_comp("far_manager"),
};
Vec4F32 df_g_theme_preset_colors__default_dark[53] =
Vec4F32 df_g_theme_preset_colors__default_dark[54] =
{
rgba_from_u32_lit_comp(0xff00ffff),
rgba_from_u32_lit_comp(0xe5e5e5ff),
@@ -41,6 +41,7 @@ rgba_from_u32_lit_comp(0xe5e5e5ff),
rgba_from_u32_lit_comp(0x7fcc99ff),
rgba_from_u32_lit_comp(0x66b2e5ff),
rgba_from_u32_lit_comp(0xfe9548ff),
rgba_from_u32_lit_comp(0xd45d90ff),
rgba_from_u32_lit_comp(0xf7bf5eff),
rgba_from_u32_lit_comp(0x994c32ff),
rgba_from_u32_lit_comp(0x4ce54cff),
@@ -87,7 +88,7 @@ rgba_from_u32_lit_comp(0x0000003f),
rgba_from_u32_lit_comp(0x0000007f),
};
Vec4F32 df_g_theme_preset_colors__default_light[53] =
Vec4F32 df_g_theme_preset_colors__default_light[54] =
{
rgba_from_u32_lit_comp(0xff00ffff),
rgba_from_u32_lit_comp(0x383838ff),
@@ -98,6 +99,7 @@ rgba_from_u32_lit_comp(0x282828ff),
rgba_from_u32_lit_comp(0x2a7a45ff),
rgba_from_u32_lit_comp(0x2c688fff),
rgba_from_u32_lit_comp(0xfe9548ff),
rgba_from_u32_lit_comp(0xd45d90ff),
rgba_from_u32_lit_comp(0xa47729ff),
rgba_from_u32_lit_comp(0x6c2d18ff),
rgba_from_u32_lit_comp(0x2c7d2cff),
@@ -144,7 +146,7 @@ rgba_from_u32_lit_comp(0x0000000d),
rgba_from_u32_lit_comp(0x0000003b),
};
Vec4F32 df_g_theme_preset_colors__vs_dark[53] =
Vec4F32 df_g_theme_preset_colors__vs_dark[54] =
{
rgba_from_u32_lit_comp(0xff00ffff),
rgba_from_u32_lit_comp(0xe5e5e5ff),
@@ -155,6 +157,7 @@ rgba_from_u32_lit_comp(0xd4d4d4ff),
rgba_from_u32_lit_comp(0xdcdcaaff),
rgba_from_u32_lit_comp(0x4ec9b0ff),
rgba_from_u32_lit_comp(0xfe9548ff),
rgba_from_u32_lit_comp(0xd45d90ff),
rgba_from_u32_lit_comp(0x569cd6ff),
rgba_from_u32_lit_comp(0xb4b4b4ff),
rgba_from_u32_lit_comp(0xb5cea8ff),
@@ -201,7 +204,7 @@ rgba_from_u32_lit_comp(0x0000003f),
rgba_from_u32_lit_comp(0x0000007f),
};
Vec4F32 df_g_theme_preset_colors__vs_light[53] =
Vec4F32 df_g_theme_preset_colors__vs_light[54] =
{
rgba_from_u32_lit_comp(0xff00ffff),
rgba_from_u32_lit_comp(0x1e1e1eff),
@@ -212,6 +215,7 @@ rgba_from_u32_lit_comp(0x000000ff),
rgba_from_u32_lit_comp(0x74531fff),
rgba_from_u32_lit_comp(0x2b91afff),
rgba_from_u32_lit_comp(0xfe9548ff),
rgba_from_u32_lit_comp(0xd45d90ff),
rgba_from_u32_lit_comp(0x0000ffff),
rgba_from_u32_lit_comp(0x000000ff),
rgba_from_u32_lit_comp(0x000000ff),
@@ -258,7 +262,7 @@ rgba_from_u32_lit_comp(0x0000000d),
rgba_from_u32_lit_comp(0x0000003b),
};
Vec4F32 df_g_theme_preset_colors__solarized_dark[53] =
Vec4F32 df_g_theme_preset_colors__solarized_dark[54] =
{
rgba_from_u32_lit_comp(0xff00ffff),
rgba_from_u32_lit_comp(0xe5e5e5ff),
@@ -269,6 +273,7 @@ rgba_from_u32_lit_comp(0x839496ff),
rgba_from_u32_lit_comp(0x1c7dd1ff),
rgba_from_u32_lit_comp(0x1c7dd1ff),
rgba_from_u32_lit_comp(0xfe9548ff),
rgba_from_u32_lit_comp(0xd45d90ff),
rgba_from_u32_lit_comp(0x63980fff),
rgba_from_u32_lit_comp(0x839496ff),
rgba_from_u32_lit_comp(0xcb4b20ff),
@@ -315,7 +320,7 @@ rgba_from_u32_lit_comp(0x0000003f),
rgba_from_u32_lit_comp(0x0000007f),
};
Vec4F32 df_g_theme_preset_colors__solarized_light[53] =
Vec4F32 df_g_theme_preset_colors__solarized_light[54] =
{
rgba_from_u32_lit_comp(0xff00ffff),
rgba_from_u32_lit_comp(0x1e1e1eff),
@@ -326,6 +331,7 @@ rgba_from_u32_lit_comp(0x74878cff),
rgba_from_u32_lit_comp(0xc39d36ff),
rgba_from_u32_lit_comp(0x66b2e5ff),
rgba_from_u32_lit_comp(0xfe9548ff),
rgba_from_u32_lit_comp(0xd45d90ff),
rgba_from_u32_lit_comp(0xc39d36ff),
rgba_from_u32_lit_comp(0x2e5256ff),
rgba_from_u32_lit_comp(0x657b83ff),
@@ -372,7 +378,7 @@ rgba_from_u32_lit_comp(0x0000000d),
rgba_from_u32_lit_comp(0x0000003b),
};
Vec4F32 df_g_theme_preset_colors__handmade_hero[53] =
Vec4F32 df_g_theme_preset_colors__handmade_hero[54] =
{
rgba_from_u32_lit_comp(0xff00ffff),
rgba_from_u32_lit_comp(0xa08563ff),
@@ -383,6 +389,7 @@ rgba_from_u32_lit_comp(0xa08563ff),
rgba_from_u32_lit_comp(0xcc5735ff),
rgba_from_u32_lit_comp(0xd8a51dff),
rgba_from_u32_lit_comp(0xfe9548ff),
rgba_from_u32_lit_comp(0xd45d90ff),
rgba_from_u32_lit_comp(0xac7b0bff),
rgba_from_u32_lit_comp(0x994c32ff),
rgba_from_u32_lit_comp(0x6b8e23ff),
@@ -429,7 +436,7 @@ rgba_from_u32_lit_comp(0x0000003f),
rgba_from_u32_lit_comp(0x0000007f),
};
Vec4F32 df_g_theme_preset_colors__four_coder[53] =
Vec4F32 df_g_theme_preset_colors__four_coder[54] =
{
rgba_from_u32_lit_comp(0xff00ffff),
rgba_from_u32_lit_comp(0x90b080ff),
@@ -440,6 +447,7 @@ rgba_from_u32_lit_comp(0x90b080ff),
rgba_from_u32_lit_comp(0x7fcc99ff),
rgba_from_u32_lit_comp(0x66b2e5ff),
rgba_from_u32_lit_comp(0xfe9548ff),
rgba_from_u32_lit_comp(0xd45d90ff),
rgba_from_u32_lit_comp(0xd08f20ff),
rgba_from_u32_lit_comp(0x994c32ff),
rgba_from_u32_lit_comp(0x50ff30ff),
@@ -486,7 +494,7 @@ rgba_from_u32_lit_comp(0x0000003f),
rgba_from_u32_lit_comp(0x0000007f),
};
Vec4F32 df_g_theme_preset_colors__far_manager[53] =
Vec4F32 df_g_theme_preset_colors__far_manager[54] =
{
rgba_from_u32_lit_comp(0xff00ffff),
rgba_from_u32_lit_comp(0x00ffffff),
@@ -497,6 +505,7 @@ rgba_from_u32_lit_comp(0x00ffffff),
rgba_from_u32_lit_comp(0x49b2ffff),
rgba_from_u32_lit_comp(0x49b2ffff),
rgba_from_u32_lit_comp(0xfe9548ff),
rgba_from_u32_lit_comp(0xd45d90ff),
rgba_from_u32_lit_comp(0xff0000ff),
rgba_from_u32_lit_comp(0xffffffff),
rgba_from_u32_lit_comp(0x2cff50ff),
@@ -755,7 +764,7 @@ DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[29] =
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("theme"), str8_lit_comp("Theme"), DF_NameKind_Null, DF_IconKind_Palette, DF_VIEW_SETUP_FUNCTION_NAME(Theme), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Theme), DF_VIEW_CMD_FUNCTION_NAME(Theme), DF_VIEW_UI_FUNCTION_NAME(Theme)},
};
String8 df_g_theme_color_display_string_table[53] =
String8 df_g_theme_color_display_string_table[54] =
{
str8_lit_comp("Null"),
str8_lit_comp("Plain Text"),
@@ -766,6 +775,7 @@ str8_lit_comp("Code (Default)"),
str8_lit_comp("Code (Function)"),
str8_lit_comp("Code (Type)"),
str8_lit_comp("Code (Local)"),
str8_lit_comp("Code (Register)"),
str8_lit_comp("Code (Keyword)"),
str8_lit_comp("Code (Symbol)"),
str8_lit_comp("Code (Numeric)"),
@@ -812,7 +822,7 @@ str8_lit_comp("Inactive Panel Overlay"),
str8_lit_comp("Drop Shadow"),
};
String8 df_g_theme_color_cfg_string_table[53] =
String8 df_g_theme_color_cfg_string_table[54] =
{
str8_lit_comp("null"),
str8_lit_comp("plain_text"),
@@ -823,6 +833,7 @@ str8_lit_comp("code_default"),
str8_lit_comp("code_function"),
str8_lit_comp("code_type"),
str8_lit_comp("code_local"),
str8_lit_comp("code_register"),
str8_lit_comp("code_keyword"),
str8_lit_comp("code_symbol"),
str8_lit_comp("code_numeric"),
+12 -11
View File
@@ -51,6 +51,7 @@ DF_ThemeColor_CodeDefault,
DF_ThemeColor_CodeFunction,
DF_ThemeColor_CodeType,
DF_ThemeColor_CodeLocal,
DF_ThemeColor_CodeRegister,
DF_ThemeColor_CodeKeyword,
DF_ThemeColor_CodeSymbol,
DF_ThemeColor_CodeNumeric,
@@ -250,15 +251,15 @@ DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(geo);
C_LINKAGE_BEGIN
extern String8 df_g_theme_preset_display_string_table[9];
extern String8 df_g_theme_preset_code_string_table[9];
extern Vec4F32 df_g_theme_preset_colors__default_dark[53];
extern Vec4F32 df_g_theme_preset_colors__default_light[53];
extern Vec4F32 df_g_theme_preset_colors__vs_dark[53];
extern Vec4F32 df_g_theme_preset_colors__vs_light[53];
extern Vec4F32 df_g_theme_preset_colors__solarized_dark[53];
extern Vec4F32 df_g_theme_preset_colors__solarized_light[53];
extern Vec4F32 df_g_theme_preset_colors__handmade_hero[53];
extern Vec4F32 df_g_theme_preset_colors__four_coder[53];
extern Vec4F32 df_g_theme_preset_colors__far_manager[53];
extern Vec4F32 df_g_theme_preset_colors__default_dark[54];
extern Vec4F32 df_g_theme_preset_colors__default_light[54];
extern Vec4F32 df_g_theme_preset_colors__vs_dark[54];
extern Vec4F32 df_g_theme_preset_colors__vs_light[54];
extern Vec4F32 df_g_theme_preset_colors__solarized_dark[54];
extern Vec4F32 df_g_theme_preset_colors__solarized_light[54];
extern Vec4F32 df_g_theme_preset_colors__handmade_hero[54];
extern Vec4F32 df_g_theme_preset_colors__four_coder[54];
extern Vec4F32 df_g_theme_preset_colors__far_manager[54];
extern Vec4F32* df_g_theme_preset_colors_table[9];
extern DF_CmdParamSlot df_g_cmd_param_slot_2_view_spec_src_map[7];
extern String8 df_g_cmd_param_slot_2_view_spec_dst_map[7];
@@ -267,8 +268,8 @@ extern DF_StringBindingPair df_g_default_binding_table[97];
extern String8 df_g_binding_version_remap_old_name_table[3];
extern String8 df_g_binding_version_remap_new_name_table[3];
extern DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[29];
extern String8 df_g_theme_color_display_string_table[53];
extern String8 df_g_theme_color_cfg_string_table[53];
extern String8 df_g_theme_color_display_string_table[54];
extern String8 df_g_theme_color_cfg_string_table[54];
read_only global U8 df_g_icon_font_bytes__data[] =
{
0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x80,0x00,0x03,0x00,0x70,0x47,0x53,0x55,0x42,0x20,0x8b,0x25,0x7a,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x54,0x4f,0x53,0x2f,0x32,0x56,0x44,0x49,0xa0,0x00,0x00,0x01,0x50,0x00,0x00,0x00,0x60,0x63,0x6d,0x61,0x70,0x2a,0x09,0xe2,0xc2,0x00,0x00,0x01,0xb0,0x00,0x00,0x05,0xec,0x63,0x76,0x74,0x20,
+32
View File
@@ -775,6 +775,38 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
}
}
//- rjf: descent to assembly-style dereference sub-expression
else if(token.kind == EVAL_TokenKind_Symbol && str8_match(token_string, str8_lit("["), 0))
{
// rjf: skip [
it += 1;
// rjf: parse [] contents
EVAL_TokenArray nested_parse_tokens = eval_token_array_make_first_opl(it, it_opl);
EVAL_ParseResult nested_parse = eval_parse_expr_from_text_tokens__prec(arena, ctx, text, &nested_parse_tokens, eval_g_max_precedence);
eval_error_list_concat_in_place(&result.errors, &nested_parse.errors);
atom = nested_parse.expr;
it = nested_parse.last_token;
// rjf: build cast-to-U64*, and dereference operators
atom = eval_expr(arena, EVAL_ExprKind_Cast, token_string.str, eval_expr_leaf_type(arena, token_string.str, tg_cons_type_make(ctx->type_graph, TG_Kind_Ptr, tg_key_basic(TG_Kind_U64), 0)), atom, 0);
atom = eval_expr(arena, EVAL_ExprKind_Deref, token_string.str, atom, 0, 0);
// rjf: expect ]
EVAL_Token close_paren_maybe = eval_token_at_it(it, tokens);
String8 close_paren_maybe_string = str8_substr(text, close_paren_maybe.range);
if(close_paren_maybe.kind != EVAL_TokenKind_Symbol || !str8_match(close_paren_maybe_string, str8_lit("]"), 0))
{
eval_errorf(arena, &result.errors, EVAL_ErrorKind_MalformedInput, token_string.str, "Missing ].");
}
// rjf: consume )
else
{
it += 1;
}
}
//- rjf: leaf (identifier, literal)
else if(token.kind != EVAL_TokenKind_Symbol)
{