further progress on eliminating file entities; further entity simplification; set up external identifier resolution map for evaluating 'meta' variables; sketch out generalized entity serialization path

This commit is contained in:
Ryan Fleury
2024-08-13 11:39:25 -07:00
parent 057d4d485e
commit 6d30455e76
17 changed files with 467 additions and 359 deletions
+2 -1
View File
@@ -105,6 +105,8 @@ E_ExprKindTable:
{ LeafU64 "U64" }
{ LeafF64 "F64" }
{ LeafF32 "F32" }
{ LeafIdent "leaf_ident" }
{ LeafExt "leaf_ext" }
{ TypeIdent "type_ident" }
{ Ptr "ptr" }
@@ -112,7 +114,6 @@ E_ExprKindTable:
{ Func "function" }
{ Define "=" }
{ LeafIdent "leaf_ident" }
}
@table(name display_string)
+23 -16
View File
@@ -1081,6 +1081,29 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
result.mode = E_Mode_Value;
}break;
//- rjf: leaf identifiers
case E_ExprKind_LeafIdent:
{
E_Expr *macro_expr = e_expr_from_string(e_ir_ctx->macro_map, expr->string);
if(macro_expr == &e_expr_nil)
{
e_msgf(arena, &result.msgs, E_MsgKind_ResolutionFailure, expr->location, "`%S` could not be found.", expr->string);
}
else
{
e_string2expr_map_inc_poison(e_ir_ctx->macro_map, expr->string);
result = e_irtree_and_type_from_expr(arena, macro_expr);
e_string2expr_map_dec_poison(e_ir_ctx->macro_map, expr->string);
}
}break;
//- rjf: leaf externals
case E_ExprKind_LeafExt:
{
result.root = e_irtree_const_u(arena, expr->u64);
result.mode = E_Mode_Ext;
}break;
//- rjf: types
case E_ExprKind_TypeIdent:
{
@@ -1109,22 +1132,6 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
}
}break;
//- rjf: leaf identifiers
case E_ExprKind_LeafIdent:
{
E_Expr *macro_expr = e_expr_from_string(e_ir_ctx->macro_map, expr->string);
if(macro_expr == &e_expr_nil)
{
e_msgf(arena, &result.msgs, E_MsgKind_ResolutionFailure, expr->location, "`%S` could not be found.", expr->string);
}
else
{
e_string2expr_map_inc_poison(e_ir_ctx->macro_map, expr->string);
result = e_irtree_and_type_from_expr(arena, macro_expr);
e_string2expr_map_dec_poison(e_ir_ctx->macro_map, expr->string);
}
}break;
}
return result;
+19 -1
View File
@@ -1174,6 +1174,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
REGS_AliasCode alias_code = 0;
E_TypeKey type_key = zero_struct;
String8 local_lookup_string = token_string;
U64 ext_num = 0;
//- rjf: form namespaceified fallback versions of this lookup string
String8List namespaceified_token_strings = {0};
@@ -1413,6 +1414,16 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
}
}
//- rjf: try external map
if(mapped_identifier == 0)
{
ext_num = e_num_from_string(e_parse_ctx->ext_map, token_string);
if(ext_num != 0)
{
mapped_identifier = 1;
}
}
//- rjf: try types
if(mapped_identifier == 0)
{
@@ -1434,7 +1445,14 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
{
default:
{
if(identifier_looks_like_type_expr)
if(ext_num != 0)
{
atom = e_push_expr(arena, E_ExprKind_LeafExt, token_string.str);
atom->mode = E_Mode_Ext;
atom->string = token_string;
atom->u64 = ext_num;
}
else if(identifier_looks_like_type_expr)
{
E_TokenArray type_parse_tokens = e_token_array_make_first_opl(it-1, it_opl);
E_Parse type_parse = e_parse_type_from_text_tokens(arena, text, &type_parse_tokens);
+2
View File
@@ -98,6 +98,7 @@ typedef enum E_Mode
E_Mode_Addr,
E_Mode_Reg,
E_Mode_InlineData,
E_Mode_Ext,
}
E_Mode;
@@ -205,6 +206,7 @@ struct E_ParseCtx
E_String2NumMap *reg_alias_map;
E_String2NumMap *locals_map; // (within `rdis[rdis_primary_idx]`)
E_String2NumMap *member_map; // (within `rdis[rdis_primary_idx]`)
E_String2NumMap *ext_map;
};
////////////////////////////////
+6 -4
View File
@@ -4,7 +4,7 @@
//- GENERATED CODE
C_LINKAGE_BEGIN
String8 e_expr_kind_strings[41] =
String8 e_expr_kind_strings[42] =
{
str8_lit_comp("Nil"),
str8_lit_comp("ArrayIndex"),
@@ -41,12 +41,13 @@ str8_lit_comp("LeafStringLiteral"),
str8_lit_comp("LeafU64"),
str8_lit_comp("LeafF64"),
str8_lit_comp("LeafF32"),
str8_lit_comp("LeafIdent"),
str8_lit_comp("LeafExt"),
str8_lit_comp("TypeIdent"),
str8_lit_comp("Ptr"),
str8_lit_comp("Array"),
str8_lit_comp("Func"),
str8_lit_comp("Define"),
str8_lit_comp("LeafIdent"),
};
String8 e_interpretation_code_display_strings[11] =
@@ -64,7 +65,7 @@ str8_lit_comp("Insufficient evaluation machine stack space."),
str8_lit_comp("Malformed bytecode."),
};
String8 e_expr_op_strings[41] =
String8 e_expr_op_strings[42] =
{
str8_lit_comp(""),
str8_lit_comp("[]"),
@@ -101,12 +102,13 @@ str8_lit_comp("string_literal"),
str8_lit_comp("U64"),
str8_lit_comp("F64"),
str8_lit_comp("F32"),
str8_lit_comp("leaf_ident"),
str8_lit_comp("leaf_ext"),
str8_lit_comp("type_ident"),
str8_lit_comp("ptr"),
str8_lit_comp("array"),
str8_lit_comp("function"),
str8_lit_comp("="),
str8_lit_comp("leaf_ident"),
};
U8 e_kind_basic_byte_size_table[54] =
+4 -3
View File
@@ -113,12 +113,13 @@ E_ExprKind_LeafStringLiteral,
E_ExprKind_LeafU64,
E_ExprKind_LeafF64,
E_ExprKind_LeafF32,
E_ExprKind_LeafIdent,
E_ExprKind_LeafExt,
E_ExprKind_TypeIdent,
E_ExprKind_Ptr,
E_ExprKind_Array,
E_ExprKind_Func,
E_ExprKind_Define,
E_ExprKind_LeafIdent,
E_ExprKind_COUNT,
} E_ExprKindEnum;
@@ -139,9 +140,9 @@ E_InterpretationCode_COUNT,
} E_InterpretationCode;
C_LINKAGE_BEGIN
extern String8 e_expr_kind_strings[41];
extern String8 e_expr_kind_strings[42];
extern String8 e_interpretation_code_display_strings[11];
extern String8 e_expr_op_strings[41];
extern String8 e_expr_op_strings[42];
extern U8 e_kind_basic_byte_size_table[54];
extern String8 e_kind_basic_string_table[54];