boil down expr/irtree/type -> lookup_rule mapping more - since lens arguments are now stored in type info, we no longer need other ways of smuggling through expression trees. also fill out new path of pointer eval single-line string generation.

This commit is contained in:
Ryan Fleury
2025-04-10 14:29:56 -07:00
parent 9bfa4f87e3
commit 7c0a37fef3
6 changed files with 202 additions and 32 deletions
+9 -19
View File
@@ -1811,11 +1811,11 @@ E_IRGEN_FUNCTION_DEF(default)
E_Expr *lhs = expr->first;
E_Expr *rhs = lhs->next;
E_IRTreeAndType lhs_irtree = e_irtree_and_type_from_expr(scratch.arena, lhs);
E_LookupRuleExprPair lhs_lookup_rule = e_lookup_rule_expr_pair_from_expr_irtree(lhs, &lhs_irtree);
ProfScope("lookup via rule '%.*s'", str8_varg(lhs_lookup_rule.rule->name))
E_LookupRule *lhs_lookup_rule = e_lookup_rule_from_type_key(lhs_irtree.type_key);
ProfScope("lookup via rule '%.*s'", str8_varg(lhs_lookup_rule->name))
{
E_LookupInfo lookup_info = lhs_lookup_rule.rule->info(arena, &lhs_irtree, lhs_lookup_rule.expr, str8_zero());
E_LookupAccess lookup_access = lhs_lookup_rule.rule->access(arena, expr->kind, lhs, rhs, lhs_lookup_rule.expr, lookup_info.user_data);
E_LookupInfo lookup_info = lhs_lookup_rule->info(arena, &lhs_irtree, &e_expr_nil, str8_zero());
E_LookupAccess lookup_access = lhs_lookup_rule->access(arena, expr->kind, lhs, rhs, &e_expr_nil, lookup_info.user_data);
result = lookup_access.irtree_and_type;
}
scratch_end(scratch);
@@ -3355,27 +3355,17 @@ e_lookup_rule_from_type_key(E_TypeKey type_key)
// rjf: unpack type
E_Type *type = e_type_from_key__cached(type_key);
return rule;
}
internal E_LookupRuleExprPair
e_lookup_rule_expr_pair_from_expr_irtree(E_Expr *expr, E_IRTreeAndType *irtree)
{
E_LookupRuleExprPair result = {&e_lookup_rule__default, &e_expr_nil};
// rjf: first, try set name -> rule mapping
if(result.rule == &e_lookup_rule__default && e_type_kind_from_key(irtree->type_key) == E_TypeKind_Set)
// rjf: sets / lenses -> try to implicitly map to a rule based on name
if(type->kind == E_TypeKind_Set || type->kind == E_TypeKind_Lens)
{
E_Type *type = e_type_from_key__cached(irtree->type_key);
String8 name = type->name;
E_LookupRule *candidate = e_lookup_rule_from_string(name);
E_LookupRule *candidate = e_lookup_rule_from_string(type->name);
if(candidate != &e_lookup_rule__nil)
{
result.rule = candidate;
rule = candidate;
}
}
return result;
return rule;
}
#if 0 // TODO(rjf): @eval
-1
View File
@@ -289,7 +289,6 @@ internal E_Expr *e_expr_irext_cast(Arena *arena, E_Expr *rhs, E_IRTreeAndType *r
//~ rjf: Expression & IR-Tree => Rules
internal E_LookupRule *e_lookup_rule_from_type_key(E_TypeKey type_key);
internal E_LookupRuleExprPair e_lookup_rule_expr_pair_from_expr_irtree(E_Expr *expr, E_IRTreeAndType *irtree);
#if 0 // TODO(rjf): @eval
internal E_LookupRuleExprPair e_lookup_rule_tag_pair_from_expr_irtree(E_Expr *expr, E_IRTreeAndType *irtree);
+4 -4
View File
@@ -492,10 +492,10 @@ e_append_strings_from_expr(Arena *arena, E_Expr *expr, String8List *out)
sep_idx += 1;
}
str8_list_push(arena, out, seps[sep_idx]);
if(sep_idx == 0)
{
sep_idx += 1;
}
}
if(sep_idx == 0)
{
sep_idx += 1;
}
if(child == &e_expr_nil)
{
+4 -3
View File
@@ -1625,7 +1625,6 @@ e_type_lhs_string_from_key(Arena *arena, E_TypeKey key, String8List *out, U32 pr
{
E_Type *type = e_type_from_key__cached(key);
str8_list_push(arena, out, push_str8_copy(arena, type->name));
str8_list_push(arena, out, str8_lit(" "));
}break;
case E_TypeKind_Bitfield:
@@ -1663,7 +1662,6 @@ e_type_lhs_string_from_key(Arena *arena, E_TypeKey key, String8List *out, U32 pr
{
E_Type *type = e_type_from_key__cached(key);
str8_list_push(arena, out, push_str8_copy(arena, type->name));
str8_list_push(arena, out, str8_lit(" "));
}break;
case E_TypeKind_IncompleteStruct: keyword = str8_lit("struct"); goto fwd_udt;
@@ -1676,7 +1674,6 @@ e_type_lhs_string_from_key(Arena *arena, E_TypeKey key, String8List *out, U32 pr
str8_list_push(arena, out, keyword);
str8_list_push(arena, out, str8_lit(" "));
str8_list_push(arena, out, push_str8_copy(arena, type->name));
str8_list_push(arena, out, str8_lit(" "));
}break;
case E_TypeKind_Array:
@@ -1725,6 +1722,10 @@ e_type_lhs_string_from_key(Arena *arena, E_TypeKey key, String8List *out, U32 pr
{
E_TypeKey direct = e_type_direct_from_key(key);
e_type_lhs_string_from_key(arena, direct, out, 1, skip_return);
if(!e_type_kind_is_pointer_or_ref(e_type_kind_from_key(direct)))
{
str8_list_push(arena, out, str8_lit(" "));
}
str8_list_push(arena, out, str8_lit("*"));
E_Type *type = e_type_from_key__cached(key);
if(type->count != 1)