mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-17 17:42:22 -07:00
array view rule
This commit is contained in:
+2
-3
@@ -93,7 +93,6 @@ e_select_ir_ctx(E_IRCtx *ctx)
|
||||
String8 builtin_view_rule_names[] =
|
||||
{
|
||||
str8_lit_comp("bswap"),
|
||||
str8_lit_comp("array"),
|
||||
};
|
||||
for EachElement(idx, builtin_view_rule_names)
|
||||
{
|
||||
@@ -2255,8 +2254,8 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *root_expr)
|
||||
{
|
||||
irtree_stripped.type_key = e_type_direct_from_key(irtree_stripped.type_key);
|
||||
}
|
||||
E_IRExt ext = type->irext(arena, expr, &irtree_stripped);
|
||||
result.user_data = ext.user_data;
|
||||
E_IRExt ext = type->irext(arena, expr, &irtree_stripped);
|
||||
result.user_data = ext.user_data;
|
||||
}
|
||||
|
||||
//- rjf: equip previous task's irtree
|
||||
|
||||
@@ -2319,6 +2319,37 @@ E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_DEF(identity)
|
||||
return id;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: (Built-In Type Hooks) `array` lens
|
||||
|
||||
E_TYPE_EXPAND_INFO_FUNCTION_DEF(array)
|
||||
{
|
||||
E_Type *type = e_type_from_key__cached(irtree->type_key);
|
||||
U64 count = 1;
|
||||
if(type->args != 0 && type->count > 0)
|
||||
{
|
||||
E_Expr *count_expr = type->args[0];
|
||||
E_IRTreeAndType *prev_overridden_irtree = e_ir_state->overridden_irtree;
|
||||
e_ir_state->overridden_irtree = irtree;
|
||||
{
|
||||
E_Value count_value = e_value_from_expr(count_expr);
|
||||
count = count_value.u64;
|
||||
}
|
||||
e_ir_state->overridden_irtree = prev_overridden_irtree;
|
||||
}
|
||||
E_TypeExpandInfo info = {0, count};
|
||||
return info;
|
||||
}
|
||||
|
||||
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(array)
|
||||
{
|
||||
U64 read_range_count = dim_1u64(idx_range);
|
||||
for(U64 idx = 0; idx < read_range_count; idx += 1)
|
||||
{
|
||||
exprs_out[idx] = e_expr_irext_array_index(arena, expr, irtree, idx_range.min + idx);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: (Built-In Type Hooks) `slice` lens
|
||||
|
||||
|
||||
@@ -291,12 +291,19 @@ 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) `array` lens
|
||||
|
||||
E_TYPE_EXPAND_INFO_FUNCTION_DEF(array);
|
||||
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(array);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: (Built-In Type Hooks) `slice` lens
|
||||
|
||||
E_TYPE_IREXT_FUNCTION_DEF(slice);
|
||||
E_TYPE_ACCESS_FUNCTION_DEF(slice);
|
||||
E_TYPE_EXPAND_INFO_FUNCTION_DEF(slice);
|
||||
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(slice);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: (Built-In Type Hooks) `only`, `omit` lenses
|
||||
|
||||
@@ -12345,6 +12345,7 @@ rd_frame(void)
|
||||
{str8_lit("no_string"), 1, 1, 0, 0, 0, {0}},
|
||||
{str8_lit("no_addr"), 1, 1, 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("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("text"), 0, 0, 0, 0, 0, {0}, RD_VIEW_UI_FUNCTION_NAME(text), EV_EXPAND_RULE_INFO_FUNCTION_NAME(text)},
|
||||
{str8_lit("disasm"), 0, 0, 0, 0, 0, {0}, RD_VIEW_UI_FUNCTION_NAME(disasm), EV_EXPAND_RULE_INFO_FUNCTION_NAME(disasm)},
|
||||
|
||||
Reference in New Issue
Block a user