mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 05:48:40 +00:00
interval lens, to generate an expansion of N things, to use w/ tables
This commit is contained in:
@@ -2281,6 +2281,37 @@ E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_DEF(identity)
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ rjf: (Built-In Type Hooks) `sequence` lens
|
||||||
|
|
||||||
|
E_TYPE_EXPAND_INFO_FUNCTION_DEF(sequence)
|
||||||
|
{
|
||||||
|
E_Type *type = e_type_from_key__cached(irtree->type_key);
|
||||||
|
U64 count = 0;
|
||||||
|
{
|
||||||
|
Temp scratch = scratch_begin(&arena, 1);
|
||||||
|
E_OpList count_oplist = e_oplist_from_irtree(scratch.arena, irtree->root);
|
||||||
|
String8 count_bytecode = e_bytecode_from_oplist(scratch.arena, &count_oplist);
|
||||||
|
E_Interpretation count_interpret = e_interpret(count_bytecode);
|
||||||
|
E_Value count_value = count_interpret.value;
|
||||||
|
count = count_value.u64;
|
||||||
|
scratch_end(scratch);
|
||||||
|
}
|
||||||
|
E_TypeExpandInfo info = {0, count};
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(sequence)
|
||||||
|
{
|
||||||
|
U64 read_range_count = dim_1u64(idx_range);
|
||||||
|
for(U64 idx = 0; idx < read_range_count; idx += 1)
|
||||||
|
{
|
||||||
|
E_Expr *expr = e_push_expr(arena, E_ExprKind_LeafU64, 0);
|
||||||
|
expr->value.u64 = idx_range.min + idx;
|
||||||
|
exprs_out[idx] = expr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: (Built-In Type Hooks) `array` lens
|
//~ rjf: (Built-In Type Hooks) `array` lens
|
||||||
|
|
||||||
|
|||||||
@@ -309,6 +309,12 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(default);
|
|||||||
E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_DEF(identity);
|
E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_DEF(identity);
|
||||||
E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_DEF(identity);
|
E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_DEF(identity);
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ rjf: (Built-In Type Hooks) `sequence` lens
|
||||||
|
|
||||||
|
E_TYPE_EXPAND_INFO_FUNCTION_DEF(sequence);
|
||||||
|
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(sequence);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: (Built-In Type Hooks) `array` lens
|
//~ rjf: (Built-In Type Hooks) `array` lens
|
||||||
|
|
||||||
|
|||||||
@@ -84,17 +84,33 @@ ev_type_key_and_mode_is_expandable(E_TypeKey type_key, E_Mode mode)
|
|||||||
{
|
{
|
||||||
B32 result = 0;
|
B32 result = 0;
|
||||||
{
|
{
|
||||||
E_TypeKey expand_type_key = e_default_expansion_type_from_key(type_key);
|
if(e_type_kind_from_key(type_key) == E_TypeKind_Lens)
|
||||||
E_TypeKind expand_type_kind = e_type_kind_from_key(expand_type_key);
|
|
||||||
if(expand_type_kind == E_TypeKind_Struct ||
|
|
||||||
expand_type_kind == E_TypeKind_Union ||
|
|
||||||
expand_type_kind == E_TypeKind_Class ||
|
|
||||||
expand_type_kind == E_TypeKind_Array ||
|
|
||||||
expand_type_kind == E_TypeKind_Set ||
|
|
||||||
e_type_kind_is_pointer_or_ref(expand_type_kind) ||
|
|
||||||
(expand_type_kind == E_TypeKind_Enum && mode == E_Mode_Null))
|
|
||||||
{
|
{
|
||||||
result = 1;
|
for(E_Type *lens_type = e_type_from_key__cached(type_key);
|
||||||
|
lens_type->kind == E_TypeKind_Lens;
|
||||||
|
lens_type = e_type_from_key__cached(lens_type->direct_type_key))
|
||||||
|
{
|
||||||
|
if(lens_type->expand.info != 0)
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
E_TypeKey expand_type_key = e_default_expansion_type_from_key(type_key);
|
||||||
|
E_TypeKind expand_type_kind = e_type_kind_from_key(expand_type_key);
|
||||||
|
if(expand_type_kind == E_TypeKind_Struct ||
|
||||||
|
expand_type_kind == E_TypeKind_Union ||
|
||||||
|
expand_type_kind == E_TypeKind_Class ||
|
||||||
|
expand_type_kind == E_TypeKind_Array ||
|
||||||
|
expand_type_kind == E_TypeKind_Set ||
|
||||||
|
e_type_kind_is_pointer_or_ref(expand_type_kind) ||
|
||||||
|
(expand_type_kind == E_TypeKind_Enum && mode == E_Mode_Null))
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -12365,6 +12365,7 @@ rd_frame(void)
|
|||||||
{str8_lit("digits"), 1, 1, 0, 0, 0, {0}},
|
{str8_lit("digits"), 1, 1, 0, 0, 0, {0}},
|
||||||
{str8_lit("no_string"), 1, 1, 0, 0, 0, {0}},
|
{str8_lit("no_string"), 1, 1, 0, 0, 0, {0}},
|
||||||
{str8_lit("no_addr"), 1, 1, 0, 0, 0, {0}},
|
{str8_lit("no_addr"), 1, 1, 0, 0, 0, {0}},
|
||||||
|
{str8_lit("sequence"), 0, 0, 1, 0, 0, {E_TYPE_EXPAND_INFO_FUNCTION_NAME(sequence), E_TYPE_EXPAND_RANGE_FUNCTION_NAME(sequence)}},
|
||||||
{str8_lit("range1"), 0, 0, 0, 0, 0, {0}},
|
{str8_lit("range1"), 0, 0, 0, 0, 0, {0}},
|
||||||
{str8_lit("array"), 0, 0, 1, 0, 0, {E_TYPE_EXPAND_INFO_FUNCTION_NAME(array), E_TYPE_EXPAND_RANGE_FUNCTION_NAME(array)}},
|
{str8_lit("array"), 0, 0, 1, 0, 0, {E_TYPE_EXPAND_INFO_FUNCTION_NAME(array), E_TYPE_EXPAND_RANGE_FUNCTION_NAME(array)}},
|
||||||
{str8_lit("slice"), 0, 0, 1, E_TYPE_IREXT_FUNCTION_NAME(slice), E_TYPE_ACCESS_FUNCTION_NAME(slice), {E_TYPE_EXPAND_INFO_FUNCTION_NAME(slice), E_TYPE_EXPAND_RANGE_FUNCTION_NAME(slice)}},
|
{str8_lit("slice"), 0, 0, 1, E_TYPE_IREXT_FUNCTION_NAME(slice), E_TYPE_ACCESS_FUNCTION_NAME(slice), {E_TYPE_EXPAND_INFO_FUNCTION_NAME(slice), E_TYPE_EXPAND_RANGE_FUNCTION_NAME(slice)}},
|
||||||
|
|||||||
Reference in New Issue
Block a user