mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-08 23:08:08 +00:00
eval2: leaf bytecode in ir tree
This commit is contained in:
+17
-3
@@ -3196,9 +3196,14 @@ e2_bytecode_from_irnode(Arena *arena, E2_IRNode *irnode)
|
||||
E2_IRNode *ir = t->ir;
|
||||
|
||||
//- rjf: unpack this op
|
||||
U16 ctrlbits = rdi_eval_op_ctrlbits_table[ir->op];
|
||||
U64 child_count = RDI_POPN_FROM_CTRLBITS(ctrlbits);
|
||||
if(ir->op == 0)
|
||||
U16 ctrlbits = 0;
|
||||
U64 child_count = 0;
|
||||
if(0 < ir->op && ir->op < RDI_EvalOp_COUNT)
|
||||
{
|
||||
ctrlbits = rdi_eval_op_ctrlbits_table[ir->op];
|
||||
child_count = RDI_POPN_FROM_CTRLBITS(ctrlbits);
|
||||
}
|
||||
else
|
||||
{
|
||||
child_count = ir->child_count;
|
||||
}
|
||||
@@ -3235,6 +3240,15 @@ e2_bytecode_from_irnode(Arena *arena, E2_IRNode *irnode)
|
||||
{
|
||||
ctrlbits = rdi_eval_op_ctrlbits_table[ir->op];
|
||||
}
|
||||
else switch(ir->op)
|
||||
{
|
||||
default:{}break;
|
||||
case E2_EvalOp_SetCtxID:
|
||||
case E2_EvalOp_LeafBytecode:
|
||||
{
|
||||
ctrlbits = RDI_EVAL_CTRLBITS(8, 0, 0);
|
||||
}break;
|
||||
}
|
||||
U64 decode_byte_count = RDI_DECODEN_FROM_CTRLBITS(ctrlbits);
|
||||
U64 op_size = 1 + decode_byte_count;
|
||||
U8 *op_buffer = push_array(scratch.arena, U8, op_size);
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ E2_ExprParseKind;
|
||||
enum
|
||||
{
|
||||
E2_EvalOp_SetCtxID = RDI_EvalOp_COUNT,
|
||||
E2_EvalOp_LeafMacroArgument,
|
||||
E2_EvalOp_LeafBytecode,
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -44,7 +44,6 @@ entry_point(CmdLine *cmdline)
|
||||
// int & B
|
||||
// (1 + (int)&B)
|
||||
s("int32(*)(int32, int32)"),
|
||||
#if 0
|
||||
s("123(1, 2, 3)"),
|
||||
s("int32 (*) [100]"),
|
||||
s("(3 * 4) + 2"),
|
||||
@@ -85,6 +84,7 @@ entry_point(CmdLine *cmdline)
|
||||
s("123 + "),
|
||||
s("-123"),
|
||||
s("sizeof 123"),
|
||||
#if 0
|
||||
// TODO(rjf): these are ambiguous with regular C type expressions with a naive parse:
|
||||
// s("float32(111)"),
|
||||
// s("float64(111)"),
|
||||
|
||||
Reference in New Issue
Block a user