json_t* constant_pool = json_array();
int maxvar = -1;
for (inst* curr = b.first; curr; curr = curr->next) {
- if (curr->op == CLOSURE_CREATE) {
- // CLOSURE_CREATE opcodes define closures for use later in the
- // codestream. They generate no code.
-
- // FIXME: make the above true :)
- code[pos++] = DUP;
- code[pos++] = POP;
- continue;
- }
const struct opcode_description* op = opcode_describe(curr->op);
+ if (op->length == 0)
+ continue;
code[pos++] = curr->op;
int opflags = op->flags;
assert(!(op->flags & OP_IS_CALL_PSEUDO));
#define BRANCH OP_HAS_BRANCH, 2
#define CFUNC (OP_HAS_SYMBOL | OP_HAS_CFUNC), 2
#define UFUNC (OP_HAS_UFUNC | OP_HAS_VARIABLE_LENGTH_ARGLIST), 2
-#define CLOSURE_DEFINE (OP_HAS_BLOCK | OP_IS_CALL_PSEUDO | OP_HAS_BINDING), 2
+#define CLOSURE_DEFINE (OP_HAS_BLOCK | OP_IS_CALL_PSEUDO | OP_HAS_BINDING), 0
#define CLOSURE_ACCESS (OP_IS_CALL_PSEUDO | OP_HAS_BINDING), 2
#define OP(name, imm, in, out) \