mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 05:48:40 +00: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[] =
|
String8 builtin_view_rule_names[] =
|
||||||
{
|
{
|
||||||
str8_lit_comp("bswap"),
|
str8_lit_comp("bswap"),
|
||||||
str8_lit_comp("array"),
|
|
||||||
};
|
};
|
||||||
for EachElement(idx, builtin_view_rule_names)
|
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);
|
irtree_stripped.type_key = e_type_direct_from_key(irtree_stripped.type_key);
|
||||||
}
|
}
|
||||||
E_IRExt ext = type->irext(arena, expr, &irtree_stripped);
|
E_IRExt ext = type->irext(arena, expr, &irtree_stripped);
|
||||||
result.user_data = ext.user_data;
|
result.user_data = ext.user_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: equip previous task's irtree
|
//- rjf: equip previous task's irtree
|
||||||
|
|||||||
@@ -2319,6 +2319,37 @@ E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_DEF(identity)
|
|||||||
return id;
|
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
|
//~ 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_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) `array` lens
|
||||||
|
|
||||||
|
E_TYPE_EXPAND_INFO_FUNCTION_DEF(array);
|
||||||
|
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(array);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: (Built-In Type Hooks) `slice` lens
|
//~ rjf: (Built-In Type Hooks) `slice` lens
|
||||||
|
|
||||||
E_TYPE_IREXT_FUNCTION_DEF(slice);
|
E_TYPE_IREXT_FUNCTION_DEF(slice);
|
||||||
E_TYPE_ACCESS_FUNCTION_DEF(slice);
|
E_TYPE_ACCESS_FUNCTION_DEF(slice);
|
||||||
E_TYPE_EXPAND_INFO_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
|
//~ 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_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("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("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)}},
|
||||||
{str8_lit("text"), 0, 0, 0, 0, 0, {0}, RD_VIEW_UI_FUNCTION_NAME(text), EV_EXPAND_RULE_INFO_FUNCTION_NAME(text)},
|
{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)},
|
{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