mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-29 10:40:02 +00:00
new expr resolution eval visualization stage; use to implement array & slice view rules
This commit is contained in:
+1
-1
@@ -84,7 +84,7 @@ E_ExprKindTable:
|
||||
{ Deref UnaryPrefix 2 "*" "*" "" "" }
|
||||
{ Address UnaryPrefix 2 "&" "&" "" "" }
|
||||
|
||||
{ Cast Null 1 "cast" "" "" "" }
|
||||
{ Cast Null 1 "cast" "(" ")" "" }
|
||||
{ Sizeof UnaryPrefix 1 "sizeof" "sizeof" "" "" }
|
||||
|
||||
{ Neg UnaryPrefix 2 "-" "-" "" "" }
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -217,9 +217,11 @@ internal E_Expr *e_push_expr(Arena *arena, E_ExprKind kind, void *location);
|
||||
internal void e_expr_push_child(E_Expr *parent, E_Expr *child);
|
||||
|
||||
internal E_Expr *e_expr_ref(Arena *arena, E_Expr *ref);
|
||||
internal E_Expr *e_expr_ref_addr(Arena *arena, E_Expr *rhs);
|
||||
internal E_Expr *e_expr_ref_member_access(Arena *arena, E_Expr *lhs, String8 member_name);
|
||||
internal E_Expr *e_expr_ref_array_index(Arena *arena, E_Expr *lhs, U64 index);
|
||||
internal E_Expr *e_expr_ref_deref(Arena *arena, E_Expr *rhs);
|
||||
internal E_Expr *e_expr_ref_cast(Arena *arena, E_TypeKey type_key, E_Expr *rhs);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Expression Tree -> String Conversions
|
||||
|
||||
@@ -85,7 +85,7 @@ E_OpInfo e_expr_kind_op_info_table[44] =
|
||||
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp("."), str8_lit_comp("MemberAccess") },
|
||||
{ E_OpKind_UnaryPrefix, 2, str8_lit_comp("*"), str8_lit_comp(""), str8_lit_comp("Deref") },
|
||||
{ E_OpKind_UnaryPrefix, 2, str8_lit_comp("&"), str8_lit_comp(""), str8_lit_comp("Address") },
|
||||
{ E_OpKind_Null, 1, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("Cast") },
|
||||
{ E_OpKind_Null, 1, str8_lit_comp("("), str8_lit_comp(")"), str8_lit_comp("Cast") },
|
||||
{ E_OpKind_UnaryPrefix, 1, str8_lit_comp("sizeof"), str8_lit_comp(""), str8_lit_comp("Sizeof") },
|
||||
{ E_OpKind_UnaryPrefix, 2, str8_lit_comp("-"), str8_lit_comp(""), str8_lit_comp("Neg") },
|
||||
{ E_OpKind_UnaryPrefix, 2, str8_lit_comp("!"), str8_lit_comp(""), str8_lit_comp("LogNot") },
|
||||
|
||||
Reference in New Issue
Block a user