new expr resolution eval visualization stage; use to implement array & slice view rules

This commit is contained in:
Ryan Fleury
2024-08-27 11:04:22 -07:00
parent a97c8bd070
commit 5b29f0db47
11 changed files with 348 additions and 161 deletions
+21
View File
@@ -662,6 +662,15 @@ e_expr_ref(Arena *arena, E_Expr *ref)
return expr;
}
internal E_Expr *
e_expr_ref_addr(Arena *arena, E_Expr *rhs)
{
E_Expr *expr = e_push_expr(arena, E_ExprKind_Address, 0);
E_Expr *rhs_ref = e_expr_ref(arena, rhs);
e_expr_push_child(expr, rhs_ref);
return expr;
}
internal E_Expr *
e_expr_ref_member_access(Arena *arena, E_Expr *lhs, String8 member_name)
{
@@ -695,6 +704,18 @@ e_expr_ref_deref(Arena *arena, E_Expr *rhs)
return root;
}
internal E_Expr *
e_expr_ref_cast(Arena *arena, E_TypeKey type_key, E_Expr *rhs)
{
E_Expr *root = e_push_expr(arena, E_ExprKind_Cast, 0);
E_Expr *lhs = e_push_expr(arena, E_ExprKind_TypeIdent, 0);
lhs->type_key = type_key;
E_Expr *rhs_ref = e_expr_ref(arena, rhs);
e_expr_push_child(root, lhs);
e_expr_push_child(root, rhs_ref);
return root;
}
////////////////////////////////
//~ rjf: Expression Tree -> String Conversions