diff --git a/js2/src/js2engine.cpp b/js2/src/js2engine.cpp index 25b33908a6fa..a601a077d557 100644 --- a/js2/src/js2engine.cpp +++ b/js2/src/js2engine.cpp @@ -471,7 +471,6 @@ namespace MetaData { case eBracketDelete: return -1; // pop base and index, push boolean result - case eStop: case eReturnVoid: case eBranch: return 0; diff --git a/js2/src/js2engine.h b/js2/src/js2engine.h index eeb0efb8d931..fd13a2f5bb49 100644 --- a/js2/src/js2engine.h +++ b/js2/src/js2engine.h @@ -111,7 +111,6 @@ enum JS2Op { eBracketWriteRef, eBracketDelete, - eStop, eReturn, eReturnVoid, ePushFrame, // @@ -280,7 +279,7 @@ public: }; std::stack mTryStack; - std::stack mSubStack; + std::stack finallyStack; void pushHandler(uint8 *pc); void popHandler(); diff --git a/js2/src/js2op_flowcontrol.cpp b/js2/src/js2op_flowcontrol.cpp index 856ab93dbcd0..c4158c035c9a 100644 --- a/js2/src/js2op_flowcontrol.cpp +++ b/js2/src/js2op_flowcontrol.cpp @@ -143,18 +143,18 @@ case eCallFinally: { + int32 finallyOffset = BytecodeContainer::getOffset(pc); + uint8 *tgt = pc + finallyOffset; + pc += sizeof(int32); + finallyStack.push(pc); + pc = tgt; } break; case eReturnFinally: { - } - break; - - case eStop: - { - - return retval; + pc = finallyStack.top(); + finallyStack.pop(); } break; \ No newline at end of file