2008-10-05 Maciej Stachowiak <mjs@apple.com>
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Oct 2008 06:05:19 +0000 (06:05 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Oct 2008 06:05:19 +0000 (06:05 +0000)
        Reviewed by Cameron Zwarich.

        - fix releas-only test failures caused by the fix to bug 21375

        * VM/Machine.cpp:
        (JSC::Machine::unwindCallFrame): Update ExecState while unwinding call frames;
        it now matters more to have a still-valid ExecState, since dynamicGlobalObject
        will make use of the ExecState's scope chain.
        * VM/Machine.h:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@37325 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/VM/Machine.cpp
JavaScriptCore/VM/Machine.h

index 5a0c2249c1bc1c191d3255d5ded0d94c090771d0..18d50f7edac73adaa7f7b41fc364bedcc66249b0 100644 (file)
@@ -1,3 +1,15 @@
+2008-10-05  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Cameron Zwarich.
+        
+        - fix releas-only test failures caused by the fix to bug 21375
+
+        * VM/Machine.cpp:
+        (JSC::Machine::unwindCallFrame): Update ExecState while unwinding call frames;
+        it now matters more to have a still-valid ExecState, since dynamicGlobalObject
+        will make use of the ExecState's scope chain.
+        * VM/Machine.h:
+
 2008-10-05  Cameron Zwarich  <zwarich@apple.com>
 
         Reviewed by Oliver Hunt.
index 0db3c9ffb74f9fa60d6768386158c08ddc2b3200..280ecb2e0cfe4f2c4b516a3d7294f3eac1e95809 100644 (file)
@@ -755,7 +755,7 @@ bool Machine::isOpcode(Opcode opcode)
 
 //#endif
 
-NEVER_INLINE bool Machine::unwindCallFrame(ExecState* exec, JSValue* exceptionValue, const Instruction*& vPC, CodeBlock*& codeBlock, Register*& r)
+NEVER_INLINE bool Machine::unwindCallFrame(ExecState*& exec, JSValue* exceptionValue, const Instruction*& vPC, CodeBlock*& codeBlock, Register*& r)
 {
     CodeBlock* oldCodeBlock = codeBlock;
     ScopeChainNode* scopeChain = this->scopeChain(r);
@@ -792,6 +792,7 @@ NEVER_INLINE bool Machine::unwindCallFrame(ExecState* exec, JSValue* exceptionVa
     
     void* returnPC = r[RegisterFile::ReturnPC].v();
     r = r[RegisterFile::CallerRegisters].r();
+    exec = CallFrame::create(r);
     if (isHostCallFrame(r))
         return false;
 
index 8f21b74f8a226e2a235de2c2e2517cb725887312..dcef077e07b5bdfa90a45206be14d49c7a8dbed6 100644 (file)
@@ -262,7 +262,7 @@ namespace JSC {
         NEVER_INLINE bool resolveBaseAndProperty(ExecState* exec, Instruction* vPC, Register* r, JSValue*& exceptionValue);
         NEVER_INLINE ScopeChainNode* createExceptionScope(ExecState* exec, const Instruction* vPC, Register* r);
 
-        NEVER_INLINE bool unwindCallFrame(ExecState*, JSValue*, const Instruction*&, CodeBlock*&, Register*&);
+        NEVER_INLINE bool unwindCallFrame(ExecState*&, JSValue*, const Instruction*&, CodeBlock*&, Register*&);
         NEVER_INLINE Instruction* throwException(ExecState*, JSValue*&, const Instruction*, Register*&, bool);
         NEVER_INLINE bool resolveBaseAndFunc(ExecState* exec, Instruction* vPC, Register* r, JSValue*& exceptionValue);