diff --git a/compile.c b/compile.c index e66ba9e4..d1c7f5d7 100644 --- a/compile.c +++ b/compile.c @@ -878,7 +878,7 @@ static Slot CompileIf(Compiler * c, FormOptions opts, Array * form) { BufferPushUInt16(gc, buffer, condition.index); BufferPushUInt32(gc, buffer, 0); /* Compile true path */ - left = CompileValue(c, resOpts, form->data[1]); + left = CompileValue(c, resOpts, form->data[2]); if (opts.isTail && !left.isDud) { BufferPushUInt16(gc, buffer, VM_OP_RET); BufferPushUInt16(gc, buffer, left.index); @@ -899,7 +899,7 @@ static Slot CompileIf(Compiler * c, FormOptions opts, Array * form) { buffer->count = countAfterFirstBranch; /* Compile false path */ if (form->count == 4) { - right = CompileValue(c, resOpts, form->data[1]); + right = CompileValue(c, resOpts, form->data[3]); if (opts.isTail && !right.isDud) { BufferPushUInt16(gc, buffer, VM_OP_RET); BufferPushUInt16(gc, buffer, right.index); diff --git a/interp b/interp new file mode 100755 index 00000000..cc8b537b Binary files /dev/null and b/interp differ diff --git a/value.c b/value.c index 5773849a..e4e2ad92 100644 --- a/value.c +++ b/value.c @@ -6,6 +6,20 @@ #include "value.h" #include "buffer.h" +/* Print the bytecode for a FuncDef */ +static void FuncDefBytecodePrint(FuncDef * def) { + uint32_t count, i; + count = def->byteCodeLen; + printf("(bytecode)["); + if (count) { + for (i = 0; i < count - 1; ++i) { + printf("%04x ", def->byteCode[i]); + } + printf("%04x", def->byteCode[i]); + } + printf("]"); +} + /* Print a value recursively. Used for debugging */ void ValuePrint(Value * x, uint32_t indent) { uint32_t i; @@ -41,7 +55,9 @@ void ValuePrint(Value * x, uint32_t indent) { printf(""); break; case TYPE_FUNCTION: - printf(""); + printf("data.func->def); + printf(">"); break; case TYPE_DICTIONARY: printf(""); @@ -50,7 +66,9 @@ void ValuePrint(Value * x, uint32_t indent) { printf(""); break; case TYPE_FUNCDEF: - printf(""); + printf("data.funcdef); + printf(">"); break; case TYPE_FUNCENV: printf("");