mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-03 12:38:11 +00:00
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:
+9
-19
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user