mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-12 04:21:25 -07:00
next checkpoint; eval/type-hooks for registers, locals, files/folders, cfgs
This commit is contained in:
@@ -367,12 +367,12 @@ typedef E_TYPE_IRGEN_FUNCTION_SIG(E_TypeIRGenFunctionType);
|
||||
#define E_TYPE_ACCESS_FUNCTION_DEF(name) internal E_TYPE_ACCESS_FUNCTION_SIG(E_TYPE_ACCESS_FUNCTION_NAME(name))
|
||||
typedef E_TYPE_ACCESS_FUNCTION_SIG(E_TypeAccessFunctionType);
|
||||
|
||||
#define E_TYPE_EXPAND_INFO_FUNCTION_SIG(name) E_TypeExpandInfo name(Arena *arena, E_IRTreeAndType *irtree, String8 filter)
|
||||
#define E_TYPE_EXPAND_INFO_FUNCTION_SIG(name) E_TypeExpandInfo name(Arena *arena, E_Expr *expr, E_IRTreeAndType *irtree, String8 filter)
|
||||
#define E_TYPE_EXPAND_INFO_FUNCTION_NAME(name) e_type_expand_info__##name
|
||||
#define E_TYPE_EXPAND_INFO_FUNCTION_DEF(name) internal E_TYPE_EXPAND_INFO_FUNCTION_SIG(E_TYPE_EXPAND_INFO_FUNCTION_NAME(name))
|
||||
typedef E_TYPE_EXPAND_INFO_FUNCTION_SIG(E_TypeExpandInfoFunctionType);
|
||||
|
||||
#define E_TYPE_EXPAND_RANGE_FUNCTION_SIG(name) void name(Arena *arena, void *user_data, E_Expr *expr, String8 filter, Rng1U64 idx_range, E_Expr **exprs_out, String8 *exprs_strings_out)
|
||||
#define E_TYPE_EXPAND_RANGE_FUNCTION_SIG(name) void name(Arena *arena, void *user_data, E_Expr *expr, E_IRTreeAndType *irtree, String8 filter, Rng1U64 idx_range, E_Expr **exprs_out, String8 *exprs_strings_out)
|
||||
#define E_TYPE_EXPAND_RANGE_FUNCTION_NAME(name) e_type_expand_range__##name
|
||||
#define E_TYPE_EXPAND_RANGE_FUNCTION_DEF(name) internal E_TYPE_EXPAND_RANGE_FUNCTION_SIG(E_TYPE_EXPAND_RANGE_FUNCTION_NAME(name))
|
||||
typedef E_TYPE_EXPAND_RANGE_FUNCTION_SIG(E_TypeExpandRangeFunctionType);
|
||||
|
||||
+34
-7
@@ -248,6 +248,24 @@ e_select_type_ctx(E_TypeCtx *ctx)
|
||||
e_type_state->member_cache_slots = push_array(e_type_state->arena, E_MemberCacheSlot, e_type_state->member_cache_slots_count);
|
||||
e_type_state->type_cache_slots_count = 1024;
|
||||
e_type_state->type_cache_slots = push_array(e_type_state->arena, E_TypeCacheSlot, e_type_state->type_cache_slots_count);
|
||||
e_type_state->file_type_key = e_type_key_cons(.kind = E_TypeKind_Set,
|
||||
.name = str8_lit("file"),
|
||||
.irgen = E_TYPE_IRGEN_FUNCTION_NAME(file),
|
||||
.access = E_TYPE_ACCESS_FUNCTION_NAME(file),
|
||||
.expand =
|
||||
{
|
||||
.info = E_TYPE_EXPAND_INFO_FUNCTION_NAME(file),
|
||||
.range= E_TYPE_EXPAND_RANGE_FUNCTION_NAME(file),
|
||||
});
|
||||
e_type_state->folder_type_key = e_type_key_cons(.kind = E_TypeKind_Set,
|
||||
.name = str8_lit("folder"),
|
||||
.expand =
|
||||
{
|
||||
.info = E_TYPE_EXPAND_INFO_FUNCTION_NAME(folder),
|
||||
.range = E_TYPE_EXPAND_RANGE_FUNCTION_NAME(folder),
|
||||
.id_from_num = E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_NAME(folder),
|
||||
.num_from_id = E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_NAME(folder),
|
||||
});
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
@@ -519,6 +537,20 @@ e_type_key_cons_base(Type *type)
|
||||
return result;
|
||||
}
|
||||
|
||||
internal E_TypeKey
|
||||
e_type_key_file(void)
|
||||
{
|
||||
E_TypeKey key = e_type_state->file_type_key;
|
||||
return key;
|
||||
}
|
||||
|
||||
internal E_TypeKey
|
||||
e_type_key_folder(void)
|
||||
{
|
||||
E_TypeKey key = e_type_state->folder_type_key;
|
||||
return key;
|
||||
}
|
||||
|
||||
//- rjf: basic type key functions
|
||||
|
||||
internal B32
|
||||
@@ -2128,7 +2160,7 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(default)
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
{
|
||||
//- rjf: unpack type of expression
|
||||
E_IRTreeAndType lhs_irtree = e_irtree_and_type_from_expr(scratch.arena, expr);
|
||||
E_IRTreeAndType lhs_irtree = *irtree;
|
||||
E_TypeKey lhs_type_key = lhs_irtree.type_key;
|
||||
E_TypeKind lhs_type_kind = e_type_kind_from_key(lhs_type_key);
|
||||
E_TypeKey direct_type_key = e_type_unwrap(e_type_direct_from_key(lhs_type_key));
|
||||
@@ -2482,12 +2514,7 @@ E_TYPE_ACCESS_FUNCTION_DEF(file)
|
||||
|
||||
E_TYPE_EXPAND_INFO_FUNCTION_DEF(file)
|
||||
{
|
||||
E_FileAccel *accel = push_array(arena, E_FileAccel, 1);
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
|
||||
scratch_end(scratch);
|
||||
}
|
||||
E_FileAccel *accel = (E_FileAccel *)irtree->user_data;
|
||||
E_TypeExpandInfo info = {accel, accel->fields.count};
|
||||
return info;
|
||||
}
|
||||
|
||||
@@ -164,6 +164,10 @@ struct E_TypeState
|
||||
E_ConsTypeSlot *cons_content_slots;
|
||||
E_ConsTypeSlot *cons_key_slots;
|
||||
|
||||
// rjf: build-in constructed type keys
|
||||
E_TypeKey file_type_key;
|
||||
E_TypeKey folder_type_key;
|
||||
|
||||
// rjf: member cache table
|
||||
U64 member_cache_slots_count;
|
||||
E_MemberCacheSlot *member_cache_slots;
|
||||
@@ -235,6 +239,8 @@ internal E_TypeKey e_type_key_cons_(E_ConsTypeParams *params);
|
||||
internal E_TypeKey e_type_key_cons_array(E_TypeKey element_type_key, U64 count, E_TypeFlags flags);
|
||||
internal E_TypeKey e_type_key_cons_ptr(Arch arch, E_TypeKey element_type_key, U64 count, E_TypeFlags flags);
|
||||
internal E_TypeKey e_type_key_cons_base(Type *type);
|
||||
internal E_TypeKey e_type_key_file(void);
|
||||
internal E_TypeKey e_type_key_folder(void);
|
||||
|
||||
//- rjf: basic type key functions
|
||||
internal B32 e_type_key_match(E_TypeKey l, E_TypeKey r);
|
||||
@@ -275,4 +281,28 @@ internal E_MemberArray e_type_data_members_from_key_filter__cached(E_TypeKey key
|
||||
internal E_MemberArray e_type_data_members_from_key__cached(E_TypeKey key);
|
||||
internal E_Member e_type_member_from_key_name__cached(E_TypeKey key, String8 name);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: (Built-In Type Hooks) Default Hooks
|
||||
|
||||
E_TYPE_EXPAND_INFO_FUNCTION_DEF(default);
|
||||
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(default);
|
||||
E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_DEF(identity);
|
||||
E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_DEF(identity);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: (Built-In Type Hooks) `folder` type
|
||||
|
||||
E_TYPE_EXPAND_INFO_FUNCTION_DEF(folder);
|
||||
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(folder);
|
||||
E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_DEF(folder);
|
||||
E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_DEF(folder);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: (Built-In Type Hooks) `file` type
|
||||
|
||||
E_TYPE_IRGEN_FUNCTION_DEF(file);
|
||||
E_TYPE_ACCESS_FUNCTION_DEF(file);
|
||||
E_TYPE_EXPAND_INFO_FUNCTION_DEF(file);
|
||||
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(file);
|
||||
|
||||
#endif // EVAL_TYPES_H
|
||||
|
||||
Reference in New Issue
Block a user