introduce resolution qualifiers to evaluation syntax, to specifically denote resolution to registers, locals, types, etc., or file paths

This commit is contained in:
Ryan Fleury
2024-08-22 15:56:43 -07:00
parent b7cc2e8d93
commit 341f9c6cf7
5 changed files with 50 additions and 20 deletions
+2 -2
View File
@@ -1654,7 +1654,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
U64 num = 1; U64 num = 1;
for(U64 reg_idx = 1; reg_idx < reg_count; reg_idx += 1, num += 1) for(U64 reg_idx = 1; reg_idx < reg_count; reg_idx += 1, num += 1)
{ {
String8 root_expr_string = reg_strings[reg_idx]; String8 root_expr_string = push_str8f(scratch.arena, "reg:%S", reg_strings[reg_idx]);
FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, root_expr_string); FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, root_expr_string);
if(matches.count == matches.needle_part_count) if(matches.count == matches.needle_part_count)
{ {
@@ -1666,7 +1666,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
} }
for(U64 alias_idx = 1; alias_idx < alias_count; alias_idx += 1, num += 1) for(U64 alias_idx = 1; alias_idx < alias_count; alias_idx += 1, num += 1)
{ {
String8 root_expr_string = alias_strings[alias_idx]; String8 root_expr_string = push_str8f(scratch.arena, "reg:%S", alias_strings[alias_idx]);
FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, root_expr_string); FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, root_expr_string);
if(matches.count == matches.needle_part_count) if(matches.count == matches.needle_part_count)
{ {
+1
View File
@@ -120,6 +120,7 @@ E_ExprKindTable:
{ LeafF32 Null 0 "F32" "" "" "" } { LeafF32 Null 0 "F32" "" "" "" }
{ LeafIdent Null 0 "leaf_ident" "" "" "" } { LeafIdent Null 0 "leaf_ident" "" "" "" }
{ LeafID Null 0 "leaf_id" "" "" "" } { LeafID Null 0 "leaf_id" "" "" "" }
{ LeafFilePath Null 0 "leaf_filepath" "" "" "" }
{ TypeIdent Null 0 "type_ident" "" "" "" } { TypeIdent Null 0 "type_ident" "" "" "" }
{ Ptr Null 0 "ptr" "" "" "" } { Ptr Null 0 "ptr" "" "" "" }
+40 -14
View File
@@ -1149,6 +1149,21 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
E_Token token = e_token_at_it(it, tokens); E_Token token = e_token_at_it(it, tokens);
String8 token_string = str8_substr(text, token.range); String8 token_string = str8_substr(text, token.range);
//- rjf: gather resolution qualifier
String8 resolution_qualifier = {0};
if(token.kind == E_TokenKind_Identifier)
{
E_Token next_token = e_token_at_it(it+1, tokens);
String8 next_token_string = str8_substr(text, next_token.range);
if(next_token.kind == E_TokenKind_Symbol && str8_match(next_token_string, str8_lit(":"), 0))
{
it += 2;
resolution_qualifier = token_string;
token = e_token_at_it(it, tokens);
token_string = str8_substr(text, token.range);
}
}
//- rjf: descent to nested expression //- rjf: descent to nested expression
if(token.kind == E_TokenKind_Symbol && str8_match(token_string, str8_lit("("), 0)) if(token.kind == E_TokenKind_Symbol && str8_match(token_string, str8_lit("("), 0))
{ {
@@ -1283,7 +1298,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
} }
//- rjf: try members //- rjf: try members
if(mapped_identifier == 0) if(mapped_identifier == 0 && (resolution_qualifier.size == 0 || str8_match(resolution_qualifier, str8_lit("member"), 0)))
{ {
U64 data_member_num = e_num_from_string(e_parse_ctx->member_map, token_string); U64 data_member_num = e_num_from_string(e_parse_ctx->member_map, token_string);
if(data_member_num != 0) if(data_member_num != 0)
@@ -1294,7 +1309,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
} }
//- rjf: try locals //- rjf: try locals
if(mapped_identifier == 0) if(mapped_identifier == 0 && (resolution_qualifier.size == 0 || str8_match(resolution_qualifier, str8_lit("local"), 0)))
{ {
E_Module *module = e_parse_ctx->primary_module; E_Module *module = e_parse_ctx->primary_module;
RDI_Parsed *rdi = module->rdi; RDI_Parsed *rdi = module->rdi;
@@ -1358,7 +1373,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
} }
//- rjf: try registers //- rjf: try registers
if(mapped_identifier == 0) if(mapped_identifier == 0 && (resolution_qualifier.size == 0 || str8_match(resolution_qualifier, str8_lit("reg"), 0)))
{ {
U64 reg_num = e_num_from_string(e_parse_ctx->regs_map, token_string); U64 reg_num = e_num_from_string(e_parse_ctx->regs_map, token_string);
if(reg_num != 0) if(reg_num != 0)
@@ -1372,7 +1387,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
} }
//- rjf: try register aliases //- rjf: try register aliases
if(mapped_identifier == 0) if(mapped_identifier == 0 && (resolution_qualifier.size == 0 || str8_match(resolution_qualifier, str8_lit("reg"), 0)))
{ {
U64 alias_num = e_num_from_string(e_parse_ctx->reg_alias_map, token_string); U64 alias_num = e_num_from_string(e_parse_ctx->reg_alias_map, token_string);
if(alias_num != 0) if(alias_num != 0)
@@ -1386,7 +1401,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
} }
//- rjf: try global variables //- rjf: try global variables
if(mapped_identifier == 0) if(mapped_identifier == 0 && (resolution_qualifier.size == 0 || str8_match(resolution_qualifier, str8_lit("global"), 0)))
{ {
for(U64 module_idx = 0; module_idx < e_parse_ctx->modules_count; module_idx += 1) for(U64 module_idx = 0; module_idx < e_parse_ctx->modules_count; module_idx += 1)
{ {
@@ -1430,7 +1445,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
} }
//- rjf: try thread variables //- rjf: try thread variables
if(mapped_identifier == 0) if(mapped_identifier == 0 && (resolution_qualifier.size == 0 || str8_match(resolution_qualifier, str8_lit("thread_variable"), 0)))
{ {
for(U64 module_idx = 0; module_idx < e_parse_ctx->modules_count; module_idx += 1) for(U64 module_idx = 0; module_idx < e_parse_ctx->modules_count; module_idx += 1)
{ {
@@ -1470,7 +1485,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
} }
//- rjf: try procedures //- rjf: try procedures
if(mapped_identifier == 0) if(mapped_identifier == 0 && (resolution_qualifier.size == 0 || str8_match(resolution_qualifier, str8_lit("procedure"), 0)))
{ {
for(U64 module_idx = 0; module_idx < e_parse_ctx->modules_count; module_idx += 1) for(U64 module_idx = 0; module_idx < e_parse_ctx->modules_count; module_idx += 1)
{ {
@@ -1512,7 +1527,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
} }
//- rjf: try types //- rjf: try types
if(mapped_identifier == 0) if(mapped_identifier == 0 && (resolution_qualifier.size == 0 || str8_match(resolution_qualifier, str8_lit("type"), 0)))
{ {
type_key = e_leaf_type_from_name(token_string); type_key = e_leaf_type_from_name(token_string);
if(!e_type_key_match(e_type_key_zero(), type_key)) if(!e_type_key_match(e_type_key_zero(), type_key))
@@ -1718,14 +1733,25 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
} }
}break; }break;
// rjf: string => leaf string literal // rjf: string => leaf string literal, or file path
case E_TokenKind_StringLiteral: case E_TokenKind_StringLiteral:
{ {
String8 string_value_escaped = str8_chop(str8_skip(token_string, 1), 1); if(str8_match(resolution_qualifier, str8_lit("file"), 0))
String8 string_value_raw = e_raw_from_escaped_string(arena, string_value_escaped); {
atom = e_push_expr(arena, E_ExprKind_LeafStringLiteral, token_string.str); String8 string_value_escaped = str8_chop(str8_skip(token_string, 1), 1);
atom->string = string_value_raw; String8 string_value_raw = e_raw_from_escaped_string(arena, string_value_escaped);
it += 1; atom = e_push_expr(arena, E_ExprKind_LeafFilePath, token_string.str);
atom->string = string_value_raw;
it += 1;
}
else
{
String8 string_value_escaped = str8_chop(str8_skip(token_string, 1), 1);
String8 string_value_raw = e_raw_from_escaped_string(arena, string_value_escaped);
atom = e_push_expr(arena, E_ExprKind_LeafStringLiteral, token_string.str);
atom->string = string_value_raw;
it += 1;
}
}break; }break;
} }
+4 -2
View File
@@ -14,7 +14,7 @@ str8_lit_comp("CharLiteral"),
str8_lit_comp("Symbol"), str8_lit_comp("Symbol"),
}; };
String8 e_expr_kind_strings[43] = String8 e_expr_kind_strings[44] =
{ {
str8_lit_comp("Nil"), str8_lit_comp("Nil"),
str8_lit_comp("Ref"), str8_lit_comp("Ref"),
@@ -54,6 +54,7 @@ str8_lit_comp("LeafF64"),
str8_lit_comp("LeafF32"), str8_lit_comp("LeafF32"),
str8_lit_comp("LeafIdent"), str8_lit_comp("LeafIdent"),
str8_lit_comp("LeafID"), str8_lit_comp("LeafID"),
str8_lit_comp("LeafFilePath"),
str8_lit_comp("TypeIdent"), str8_lit_comp("TypeIdent"),
str8_lit_comp("Ptr"), str8_lit_comp("Ptr"),
str8_lit_comp("Array"), str8_lit_comp("Array"),
@@ -76,7 +77,7 @@ str8_lit_comp("Insufficient evaluation machine stack space."),
str8_lit_comp("Malformed bytecode."), str8_lit_comp("Malformed bytecode."),
}; };
E_OpInfo e_expr_kind_op_info_table[43] = E_OpInfo e_expr_kind_op_info_table[44] =
{ {
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("Nil") }, { E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("Nil") },
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("Ref") }, { E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("Ref") },
@@ -116,6 +117,7 @@ E_OpInfo e_expr_kind_op_info_table[43] =
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("LeafF32") }, { E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("LeafF32") },
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("LeafIdent") }, { E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("LeafIdent") },
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("LeafID") }, { E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("LeafID") },
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("LeafFilePath") },
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("TypeIdent") }, { E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("TypeIdent") },
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("Ptr") }, { E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("Ptr") },
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("Array") }, { E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("Array") },
+3 -2
View File
@@ -128,6 +128,7 @@ E_ExprKind_LeafF64,
E_ExprKind_LeafF32, E_ExprKind_LeafF32,
E_ExprKind_LeafIdent, E_ExprKind_LeafIdent,
E_ExprKind_LeafID, E_ExprKind_LeafID,
E_ExprKind_LeafFilePath,
E_ExprKind_TypeIdent, E_ExprKind_TypeIdent,
E_ExprKind_Ptr, E_ExprKind_Ptr,
E_ExprKind_Array, E_ExprKind_Array,
@@ -154,9 +155,9 @@ E_InterpretationCode_COUNT,
C_LINKAGE_BEGIN C_LINKAGE_BEGIN
extern String8 e_token_kind_strings[6]; extern String8 e_token_kind_strings[6];
extern String8 e_expr_kind_strings[43]; extern String8 e_expr_kind_strings[44];
extern String8 e_interpretation_code_display_strings[11]; extern String8 e_interpretation_code_display_strings[11];
extern E_OpInfo e_expr_kind_op_info_table[43]; extern E_OpInfo e_expr_kind_op_info_table[44];
extern U8 e_kind_basic_byte_size_table[55]; extern U8 e_kind_basic_byte_size_table[55];
extern String8 e_kind_basic_string_table[55]; extern String8 e_kind_basic_string_table[55];