From 93a64d3ebd238e7e456c87ea9d12f3042df3e59b Mon Sep 17 00:00:00 2001 From: Andrew Kurushin Date: Fri, 21 Jan 2005 23:44:34 +0000 Subject: some opcode fixes: opReturnV svn-id: r16609 --- saga/sthread.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'saga') diff --git a/saga/sthread.cpp b/saga/sthread.cpp index 029841dac5..d4be516628 100644 --- a/saga/sthread.cpp +++ b/saga/sthread.cpp @@ -181,7 +181,6 @@ void Script::runThread(ScriptThread *thread, uint instructionLimit) { ScriptFunctionType scriptFunction; uint16 data; - uint16 scriptRetVal = 0; int debug_print = 0; int n_buf; // int bitstate; @@ -338,21 +337,21 @@ void Script::runThread(ScriptThread *thread, uint instructionLimit) { break; } - if (operandChar == opCcall) // CALL function + if (operandChar == opCcall) {// CALL function thread->push(thread->_returnValue); + } if (thread->_flags & kTFlagAsleep) instructionCount = instructionLimit; // break out of loop! break; - case opEnter: // Enter a function + CASEOP(opEnter) thread->push(thread->_frameIndex); thread->_frameIndex = thread->_stackTopIndex; thread->_stackTopIndex -= (scriptS.readUint16LE() / 2); break; - case opReturn: // Return with value - scriptRetVal = thread->pop(); - // Fall through - case opReturnV: // Return with void + CASEOP(opReturn) + thread->_returnValue = thread->pop(); + CASEOP(opReturnV) thread->_stackTopIndex = thread->_frameIndex; thread->_frameIndex = thread->pop(); if (thread->pushedSize() == 0) { @@ -361,9 +360,15 @@ void Script::runThread(ScriptThread *thread, uint instructionLimit) { return; } else { thread->_instructionOffset = thread->pop(); - /* int n_args = */ thread->pop(); - if (operandChar == opReturn) - thread->push(scriptRetVal); + param1 = thread->pop(); + param1 +=param1; + while (param1--) { + thread->pop(); + } + + if (operandChar == opReturn) { + thread->push(thread->_returnValue); + } } break; -- cgit v1.2.3