mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-10 15:58:09 +00:00
eval2: type keys checkpoint
This commit is contained in:
+22
-15
@@ -432,7 +432,14 @@ e2_byte_size_from_type_key(E2_TypeKey k)
|
||||
}break;
|
||||
case E2_TypeKeyKind_Reg:
|
||||
{
|
||||
// TODO(rjf)
|
||||
Arch arch = (Arch)k.u32[0];
|
||||
ARCH_Info *arch_info = arch_info_from_arch(arch);
|
||||
ARCH_RegCode regcode = k.u32[1];
|
||||
if(regcode < arch_info->reg_code_count)
|
||||
{
|
||||
Rng1U16 regrng = arch_info->reg_code_rng_table[regcode];
|
||||
result = (U64)dim_1u16(regrng);
|
||||
}
|
||||
}break;
|
||||
}
|
||||
return result;
|
||||
@@ -485,10 +492,7 @@ e2_shift_from_type_key(E2_TypeKey k)
|
||||
RDI_TypeNode *type_node = rdi_element_from_name_idx(dbgi->rdi, TypeNodes, dbgi_type_idx);
|
||||
result = type_node->bitfield.off;
|
||||
}break;
|
||||
case E2_TypeKeyKind_Cons:
|
||||
{
|
||||
// TODO(rjf)
|
||||
}break;
|
||||
case E2_TypeKeyKind_Cons:{}break;
|
||||
case E2_TypeKeyKind_Reg:{}break;
|
||||
}
|
||||
}
|
||||
@@ -512,10 +516,7 @@ e2_mask_count_from_type_key(E2_TypeKey k)
|
||||
RDI_TypeNode *type_node = rdi_element_from_name_idx(dbgi->rdi, TypeNodes, dbgi_type_idx);
|
||||
result = type_node->bitfield.size;
|
||||
}break;
|
||||
case E2_TypeKeyKind_Cons:
|
||||
{
|
||||
// TODO(rjf)
|
||||
}break;
|
||||
case E2_TypeKeyKind_Cons:{}break;
|
||||
case E2_TypeKeyKind_Reg:{}break;
|
||||
}
|
||||
}
|
||||
@@ -543,7 +544,7 @@ e2_arch_from_type_key(E2_TypeKey k)
|
||||
}break;
|
||||
case E2_TypeKeyKind_Reg:
|
||||
{
|
||||
arch = k.u32[0];
|
||||
arch = (Arch)k.u32[0];
|
||||
}break;
|
||||
}
|
||||
return arch;
|
||||
@@ -608,10 +609,7 @@ e2_type_key_owner(E2_TypeKey k)
|
||||
U32 owner_type_idx = type_node->constructed.owner_type_idx;
|
||||
result = e2_type_key_dbgi(e2_type_kind_from_rdi(type_node->kind), dbgi_num, owner_type_idx);
|
||||
}break;
|
||||
case E2_TypeKeyKind_Cons:
|
||||
{
|
||||
// TODO(rjf)
|
||||
}break;
|
||||
case E2_TypeKeyKind_Cons:{}break;
|
||||
case E2_TypeKeyKind_Reg:{}break;
|
||||
}
|
||||
}
|
||||
@@ -1700,10 +1698,15 @@ e2_parse_from_string(Arena *arena, E2_ParseState *state, E2_ExprMap *expr_map, E
|
||||
}
|
||||
else
|
||||
{
|
||||
E2_Expr *params_expr = e2_expr(arena);
|
||||
for(E2_ExprNode *n = completed_task->first_child->next; n != 0; n = n->next)
|
||||
{
|
||||
e2_expr_push_child(params_expr, n->v);
|
||||
}
|
||||
done = 1;
|
||||
parse.status = E2_ParseStatus_Call;
|
||||
parse.expr = lhs;
|
||||
parse.params_expr = rhs;
|
||||
parse.params_expr = params_expr;
|
||||
state->caller_info_completes_task = 1;
|
||||
}
|
||||
}
|
||||
@@ -2202,6 +2205,10 @@ e2_parse_from_string(Arena *arena, E2_ParseState *state, E2_ExprMap *expr_map, E
|
||||
{
|
||||
e2_msgf(arena, &parse.msgs, t->src_range, "Couldn't index into this type.");
|
||||
}
|
||||
else if(t->child_count >= 1 && t->op_kind == E2_OpKind_Call)
|
||||
{
|
||||
e2_msgf(arena, &parse.msgs, t->src_range, "Couldn't call into this type.");
|
||||
}
|
||||
else if(t->child_count == 1 && t->child_count_target == 2 && t->op_kind != E2_OpKind_Null)
|
||||
{
|
||||
e2_msgf(arena, &parse.msgs, t->src_range, "Expected expression after binary operator `%S`.", e2_op_kind_info_table[t->op_kind].sep);
|
||||
|
||||
+24
-68
@@ -135,69 +135,37 @@ struct E2_TypeKeyList
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Unpacked Type Info
|
||||
//~ rjf: Constructed Type Cache Types
|
||||
|
||||
typedef enum E2_MemberKind
|
||||
{
|
||||
E2_MemberKind_Null,
|
||||
E2_MemberKind_DataField,
|
||||
E2_MemberKind_StaticData,
|
||||
E2_MemberKind_Method,
|
||||
E2_MemberKind_StaticMethod,
|
||||
E2_MemberKind_VirtualMethod,
|
||||
E2_MemberKind_VTablePtr,
|
||||
E2_MemberKind_Base,
|
||||
E2_MemberKind_VirtualBase,
|
||||
E2_MemberKind_NestedType,
|
||||
E2_MemberKind_Padding,
|
||||
E2_MemberKind_COUNT
|
||||
}
|
||||
E2_MemberKind;
|
||||
|
||||
typedef U32 E2_TypeFlags;
|
||||
enum
|
||||
{
|
||||
E2_TypeFlag_Const = (1<<0),
|
||||
E2_TypeFlag_Volatile = (1<<1),
|
||||
E2_TypeFlag_Restrict = (1<<2),
|
||||
};
|
||||
|
||||
typedef struct E2_EnumVal E2_EnumVal;
|
||||
struct E2_EnumVal
|
||||
{
|
||||
String8 name;
|
||||
U64 val;
|
||||
};
|
||||
|
||||
typedef struct E2_Member E2_Member;
|
||||
struct E2_Member
|
||||
{
|
||||
E2_MemberKind kind;
|
||||
E2_TypeKey type_key;
|
||||
String8 name;
|
||||
U64 off;
|
||||
E2_TypeKeyList inheritees;
|
||||
};
|
||||
|
||||
typedef struct E2_Type E2_Type;
|
||||
struct E2_Type
|
||||
typedef struct E2_ConsTypeParams E2_ConsTypeParams;
|
||||
struct E2_ConsTypeParams
|
||||
{
|
||||
Arch arch;
|
||||
E2_TypeKind kind;
|
||||
E2_TypeFlags flags;
|
||||
String8 name;
|
||||
U64 byte_size;
|
||||
E2_TypeKey direct;
|
||||
U64 count;
|
||||
U64 depth;
|
||||
U32 off;
|
||||
Arch arch;
|
||||
E2_TypeKey direct_type_key;
|
||||
E2_TypeKey owner_type_key;
|
||||
E2_TypeKey *param_type_keys;
|
||||
E2_Member *members;
|
||||
E2_EnumVal *enum_vals;
|
||||
struct E2_Expr **args;
|
||||
};
|
||||
|
||||
typedef struct E2_ConsTypeNode E2_ConsTypeNode;
|
||||
struct E2_ConsTypeNode
|
||||
{
|
||||
E2_ConsTypeNode *key_next;
|
||||
E2_ConsTypeNode *content_next;
|
||||
E2_TypeKey key;
|
||||
E2_ConsTypeParams params;
|
||||
U64 byte_size;
|
||||
};
|
||||
|
||||
typedef struct E2_ConsTypeSlot E2_ConsTypeSlot;
|
||||
struct E2_ConsTypeSlot
|
||||
{
|
||||
E2_ConsTypeNode *first;
|
||||
E2_ConsTypeNode *last;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Evaluation Values
|
||||
|
||||
@@ -502,24 +470,12 @@ internal E2_TypeKey e2_type_key_dbgi(E2_TypeKind kind, U32 dbg_info_num, U32 typ
|
||||
internal E2_TypeKey e2_type_key_reg(Arch arch, ARCH_RegCode reg_code);
|
||||
|
||||
//- rjf: constructed type constructor
|
||||
typedef struct E2_ConsTypeParams E2_ConsTypeParams;
|
||||
struct E2_ConsTypeParams
|
||||
{
|
||||
Arch arch;
|
||||
E2_TypeKind kind;
|
||||
E2_TypeFlags flags;
|
||||
String8 name;
|
||||
E2_TypeKey direct_type_key;
|
||||
U64 count;
|
||||
U64 depth;
|
||||
E2_Expr **args;
|
||||
};
|
||||
internal E2_TypeKey e2_type_key_cons_(E2_ConsTypeParams *params);
|
||||
#define e2_type_key_cons(k, ...) e2_type_key_cons_(&(E2_ConsTypeParams){.kind = (k), __VA_ARGS__})
|
||||
|
||||
//- rjf: constructed type constructor helpers
|
||||
#define e2_type_key_cons_array(element_type_key, count_, ...) e2_type_key_cons(E2_TypeKind_Array, .direct_type_key = (element_type_key), .count = (count_), __VA_ARGS__)
|
||||
#define e2_type_key_cons_ptr(arch, ptee_type_key, ...) e2_type_key_cons(E2_TypeKind_Ptr, .direct_type_key = (ptee_type_key), __VA_ARGS__)
|
||||
#define e2_type_key_cons_array(element_type_key, count_, ...) e2_type_key_cons(E2_TypeKind_Array, .direct = (element_type_key), .count = (count_), __VA_ARGS__)
|
||||
#define e2_type_key_cons_ptr(arch, ptee_type_key, ...) e2_type_key_cons(E2_TypeKind_Ptr, .direct = (ptee_type_key), __VA_ARGS__)
|
||||
|
||||
//- rjf: basic type key type functions
|
||||
internal B32 e2_type_key_match(E2_TypeKey a, E2_TypeKey b);
|
||||
|
||||
Reference in New Issue
Block a user