diff -r bbf9f3809d55 -r e718b56aba78 src/Interpreter.cpp --- a/src/Interpreter.cpp Sun Aug 12 20:51:31 2012 -0700 +++ b/src/Interpreter.cpp Sat Sep 01 16:36:20 2012 -0700 @@ -320,6 +320,10 @@ for (;;) { Opcode op = Opcode(*top.pc); + + if (OpcodeInfo[op].nuses > 0) + assert(top.sp - OpcodeInfo[op].nuses >= top.fp->stackBase()); + switch (op) { case OP_NOP: @@ -737,7 +741,7 @@ case OP_SETARG: { unsigned slot = READ_UINT32(top.pc); - top.fp->arg(slot) = *--top.sp; + top.fp->arg(slot) = top.sp[-1]; break; } @@ -1103,6 +1107,7 @@ } top.pc += OpcodeInfo[op].length; + assert(top.sp >= top.fp->stackBase()); } done: