eliminate watch view fill kind; extend rtti & eval type system with 'external' pointers, for e.g. meta-space vaddr u64s pointing into an address space; begin sketching out paths for mutational rows in watch collections, use to add 'add target' fastpath in targets collection evaluations

This commit is contained in:
Ryan Fleury
2024-09-23 10:57:43 -07:00
parent ebaad35813
commit f728614e0b
13 changed files with 873 additions and 819 deletions
+2 -2
View File
@@ -61,7 +61,7 @@ e_autoresolved_eval_from_eval(E_Eval eval)
if(string_idx == 0) { string_idx = gvar->name_string_idx; }
if(string_idx != 0)
{
eval.type_key = e_type_key_cons_ptr(e_type_state->ctx->primary_module->arch, e_type_key_basic(E_TypeKind_Void));
eval.type_key = e_type_key_cons_ptr(e_type_state->ctx->primary_module->arch, e_type_key_basic(E_TypeKind_Void), 0);
}
}
return eval;
@@ -127,7 +127,7 @@ e_dynamically_typed_eval_from_eval(E_Eval eval)
RDI_UDT *udt = rdi_element_from_name_idx(rdi, UDTs, global_var->container_idx);
RDI_TypeNode *type = rdi_element_from_name_idx(rdi, TypeNodes, udt->self_type_idx);
E_TypeKey derived_type_key = e_type_key_ext(e_type_kind_from_rdi(type->kind), udt->self_type_idx, rdi_idx);
E_TypeKey ptr_to_derived_type_key = e_type_key_cons_ptr(arch, derived_type_key);
E_TypeKey ptr_to_derived_type_key = e_type_key_cons_ptr(arch, derived_type_key, 0);
eval.type_key = ptr_to_derived_type_key;
}
}
+2 -2
View File
@@ -711,7 +711,7 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
// rjf: generate
result.root = r_tree.root;
result.type_key = e_type_key_cons_ptr(e_type_state->ctx->primary_module->arch, r_type_unwrapped);
result.type_key = e_type_key_cons_ptr(e_type_state->ctx->primary_module->arch, r_type_unwrapped, 0);
result.mode = E_Mode_Value;
result.space = r_tree.space;
}break;
@@ -1064,7 +1064,7 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
E_TypeKey ptr_type = ptr_tree->type_key;
if(ptr_is_decay)
{
ptr_type = e_type_key_cons_ptr(e_type_state->ctx->primary_module->arch, direct_type);
ptr_type = e_type_key_cons_ptr(e_type_state->ctx->primary_module->arch, direct_type, 0);
}
E_IRNode *new_root = e_irtree_binary_op_u(arena, op, ptr_root, int_root);
result.root = new_root;
+2 -2
View File
@@ -942,7 +942,7 @@ e_type_from_expr(E_Expr *expr)
case E_ExprKind_Ptr:
{
E_TypeKey direct_type_key = e_type_from_expr(expr->first);
result = e_type_key_cons_ptr(e_parse_ctx->primary_module->arch, direct_type_key);
result = e_type_key_cons_ptr(e_parse_ctx->primary_module->arch, direct_type_key, 0);
}break;
case E_ExprKind_Array:
{
@@ -1251,7 +1251,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
else
{
E_Expr *type = e_push_expr(arena, E_ExprKind_TypeIdent, token_string.str);
type->type_key = e_type_key_cons_ptr(e_parse_ctx->primary_module->arch, e_type_key_basic(E_TypeKind_U64));
type->type_key = e_type_key_cons_ptr(e_parse_ctx->primary_module->arch, e_type_key_basic(E_TypeKind_U64), 0);
E_Expr *casted = atom;
E_Expr *cast = e_push_expr(arena, E_ExprKind_Cast, token_string.str);
e_expr_push_child(cast, type);
+10 -3
View File
@@ -329,6 +329,7 @@ internal B32
e_cons_type_params_match(E_ConsTypeParams *l, E_ConsTypeParams *r)
{
B32 result = (l->kind == r->kind &&
l->flags == r->flags &&
str8_match(l->name, r->name, 0) &&
e_type_key_match(l->direct_key, r->direct_key) &&
l->count == r->count);
@@ -430,9 +431,9 @@ e_type_key_cons_array(E_TypeKey element_type_key, U64 count)
}
internal E_TypeKey
e_type_key_cons_ptr(Arch arch, E_TypeKey element_type_key)
e_type_key_cons_ptr(Arch arch, E_TypeKey element_type_key, E_TypeFlags flags)
{
E_TypeKey key = e_type_key_cons(.arch = arch, .kind = E_TypeKind_Ptr, .direct_key = element_type_key);
E_TypeKey key = e_type_key_cons(.arch = arch, .kind = E_TypeKind_Ptr, .flags = flags, .direct_key = element_type_key);
return key;
}
@@ -451,7 +452,12 @@ e_type_key_cons_base(Type *type)
case TypeKind_Ptr:
{
E_TypeKey direct_type = e_type_key_cons_base(type->direct);
result = e_type_key_cons_ptr(arch_from_context(), direct_type);
E_TypeFlags flags = 0;
if(type->is_external)
{
flags |= E_TypeFlag_External;
}
result = e_type_key_cons_ptr(arch_from_context(), direct_type, flags);
}break;
case TypeKind_Array:
{
@@ -591,6 +597,7 @@ e_type_from_key(Arena *arena, E_TypeKey key)
{
type = push_array(arena, E_Type, 1);
type->kind = e_type_kind_from_key(node->key);
type->flags = node->params.flags;
type->name = push_str8_copy(arena, node->params.name);
type->direct_type_key = node->params.direct_key;
type->count = node->params.count;
+3 -1
View File
@@ -68,6 +68,7 @@ enum
{
E_TypeFlag_Const = (1<<0),
E_TypeFlag_Volatile = (1<<1),
E_TypeFlag_External = (1<<2),
};
typedef struct E_Member E_Member;
@@ -140,6 +141,7 @@ struct E_ConsTypeParams
{
Arch arch;
E_TypeKind kind;
E_TypeFlags flags;
String8 name;
E_TypeKey direct_key;
U64 count;
@@ -242,7 +244,7 @@ internal E_TypeKey e_type_key_cons_(E_ConsTypeParams *params);
//- rjf: constructed type construction helpers
internal E_TypeKey e_type_key_cons_array(E_TypeKey element_type_key, U64 count);
internal E_TypeKey e_type_key_cons_ptr(Arch arch, E_TypeKey element_type_key);
internal E_TypeKey e_type_key_cons_ptr(Arch arch, E_TypeKey element_type_key, E_TypeFlags flags);
internal E_TypeKey e_type_key_cons_base(Type *type);
//- rjf: basic type key functions