Title: [100224] trunk/Source/_javascript_Core
Revision
100224
Author
[email protected]
Date
2011-11-14 17:39:52 -0800 (Mon, 14 Nov 2011)

Log Message

A little bit of arguments / activation cleanup
https://bugs.webkit.org/show_bug.cgi?id=72339

Reviewed by Gavin Barraclough.
        
Renamed copyRegisters => tearOff to match bytecode and other terminology.
        
Renamed setActivation => didTearOffActivation to indicate that this is a
notification the object may choose to ignore. Moved "Should I ignore?"
code into the arguments object to avoid duplication elsewhere.

* interpreter/Interpreter.cpp:
(JSC::Interpreter::unwindCallFrame):
(JSC::Interpreter::privateExecute):
(JSC::Interpreter::retrieveArguments):
* jit/JITStubs.cpp:
(JSC::DEFINE_STUB_FUNCTION):
* runtime/Arguments.h:
(JSC::Arguments::createAndTearOff):
(JSC::Arguments::didTearOffActivation):
(JSC::Arguments::finishCreationButDontTearOff):
(JSC::Arguments::finishCreation):
(JSC::Arguments::finishCreationAndTearOff):
(JSC::Arguments::tearOff):

* runtime/JSActivation.h:
(JSC::JSActivation::tearOff): Moved Activation's code into its own header
because that's where it belongs.

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (100223 => 100224)


--- trunk/Source/_javascript_Core/ChangeLog	2011-11-15 01:32:34 UTC (rev 100223)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-11-15 01:39:52 UTC (rev 100224)
@@ -1,3 +1,34 @@
+2011-11-14  Geoffrey Garen  <[email protected]>
+
+        A little bit of arguments / activation cleanup
+        https://bugs.webkit.org/show_bug.cgi?id=72339
+
+        Reviewed by Gavin Barraclough.
+        
+        Renamed copyRegisters => tearOff to match bytecode and other terminology.
+        
+        Renamed setActivation => didTearOffActivation to indicate that this is a
+        notification the object may choose to ignore. Moved "Should I ignore?"
+        code into the arguments object to avoid duplication elsewhere.
+
+        * interpreter/Interpreter.cpp:
+        (JSC::Interpreter::unwindCallFrame):
+        (JSC::Interpreter::privateExecute):
+        (JSC::Interpreter::retrieveArguments):
+        * jit/JITStubs.cpp:
+        (JSC::DEFINE_STUB_FUNCTION):
+        * runtime/Arguments.h:
+        (JSC::Arguments::createAndTearOff):
+        (JSC::Arguments::didTearOffActivation):
+        (JSC::Arguments::finishCreationButDontTearOff):
+        (JSC::Arguments::finishCreation):
+        (JSC::Arguments::finishCreationAndTearOff):
+        (JSC::Arguments::tearOff):
+
+        * runtime/JSActivation.h:
+        (JSC::JSActivation::tearOff): Moved Activation's code into its own header
+        because that's where it belongs.
+
 2011-11-14  Gavin Barraclough  <[email protected]>
 
         Should sign the jsc binary

Modified: trunk/Source/_javascript_Core/interpreter/Interpreter.cpp (100223 => 100224)


--- trunk/Source/_javascript_Core/interpreter/Interpreter.cpp	2011-11-15 01:32:34 UTC (rev 100223)
+++ trunk/Source/_javascript_Core/interpreter/Interpreter.cpp	2011-11-15 01:39:52 UTC (rev 100224)
@@ -695,14 +695,12 @@
 
         callFrame->setScopeChain(scopeChain);
         JSActivation* activation = asActivation(scopeChain->object.get());
-        activation->copyRegisters(*scopeChain->globalData);
-        if (JSValue arguments = callFrame->uncheckedR(unmodifiedArgumentsRegister(oldCodeBlock->argumentsRegister())).jsValue()) {
-            if (!oldCodeBlock->isStrictMode())
-                asArguments(arguments)->setActivation(callFrame->globalData(), activation);
-        }
+        activation->tearOff(*scopeChain->globalData);
+        if (JSValue arguments = callFrame->uncheckedR(unmodifiedArgumentsRegister(oldCodeBlock->argumentsRegister())).jsValue())
+            asArguments(arguments)->didTearOffActivation(callFrame->globalData(), activation);
     } else if (oldCodeBlock->usesArguments() && !oldCodeBlock->isStrictMode()) {
         if (JSValue arguments = callFrame->uncheckedR(unmodifiedArgumentsRegister(oldCodeBlock->argumentsRegister())).jsValue())
-            asArguments(arguments)->copyRegisters(callFrame->globalData());
+            asArguments(arguments)->tearOff(callFrame->globalData());
     }
 
     CallFrame* callerFrame = callFrame->callerFrame();
@@ -4453,15 +4451,13 @@
         ASSERT(codeBlock->needsFullScopeChain());
         JSValue activationValue = callFrame->r(activation).jsValue();
         if (activationValue) {
-            asActivation(activationValue)->copyRegisters(*globalData);
+            asActivation(activationValue)->tearOff(*globalData);
 
-            if (JSValue argumentsValue = callFrame->r(unmodifiedArgumentsRegister(arguments)).jsValue()) {
-                if (!codeBlock->isStrictMode())
-                    asArguments(argumentsValue)->setActivation(*globalData, asActivation(activationValue));
-            }
+            if (JSValue argumentsValue = callFrame->r(unmodifiedArgumentsRegister(arguments)).jsValue())
+                asArguments(argumentsValue)->didTearOffActivation(*globalData, asActivation(activationValue));
         } else if (JSValue argumentsValue = callFrame->r(unmodifiedArgumentsRegister(arguments)).jsValue()) {
             if (!codeBlock->isStrictMode())
-                asArguments(argumentsValue)->copyRegisters(*globalData);
+                asArguments(argumentsValue)->tearOff(*globalData);
         }
 
         vPC += OPCODE_LENGTH(op_tear_off_activation);
@@ -4483,7 +4479,7 @@
         ASSERT(!codeBlock->needsFullScopeChain() && codeBlock->ownerExecutable()->usesArguments());
 
         if (JSValue arguments = callFrame->r(unmodifiedArgumentsRegister(src1)).jsValue())
-            asArguments(arguments)->copyRegisters(*globalData);
+            asArguments(arguments)->tearOff(*globalData);
 
         vPC += OPCODE_LENGTH(op_tear_off_arguments);
         NEXT_INSTRUCTION();
@@ -5144,7 +5140,7 @@
         return arguments;
     }
 
-    return Arguments::createAndCopyRegisters(functionCallFrame->globalData(), functionCallFrame);
+    return Arguments::createAndTearOff(functionCallFrame->globalData(), functionCallFrame);
 }
 
 JSValue Interpreter::retrieveCaller(CallFrame* callFrame, JSFunction* function) const

Modified: trunk/Source/_javascript_Core/jit/JITStubs.cpp (100223 => 100224)


--- trunk/Source/_javascript_Core/jit/JITStubs.cpp	2011-11-15 01:32:34 UTC (rev 100223)
+++ trunk/Source/_javascript_Core/jit/JITStubs.cpp	2011-11-15 01:39:52 UTC (rev 100224)
@@ -2394,16 +2394,14 @@
     if (!activationValue) {
         if (JSValue v = stackFrame.args[1].jsValue()) {
             if (!stackFrame.callFrame->codeBlock()->isStrictMode())
-                asArguments(v)->copyRegisters(*stackFrame.globalData);
+                asArguments(v)->tearOff(*stackFrame.globalData);
         }
         return;
     }
     JSActivation* activation = asActivation(stackFrame.args[0].jsValue());
-    activation->copyRegisters(*stackFrame.globalData);
-    if (JSValue v = stackFrame.args[1].jsValue()) {
-        if (!stackFrame.callFrame->codeBlock()->isStrictMode())
-            asArguments(v)->setActivation(*stackFrame.globalData, activation);
-    }
+    activation->tearOff(*stackFrame.globalData);
+    if (JSValue v = stackFrame.args[1].jsValue())
+        asArguments(v)->didTearOffActivation(*stackFrame.globalData, activation);
 }
 
 DEFINE_STUB_FUNCTION(void, op_tear_off_arguments)
@@ -2411,7 +2409,7 @@
     STUB_INIT_STACK_FRAME(stackFrame);
 
     ASSERT(stackFrame.callFrame->codeBlock()->usesArguments() && !stackFrame.callFrame->codeBlock()->needsFullScopeChain());
-    asArguments(stackFrame.args[0].jsValue())->copyRegisters(*stackFrame.globalData);
+    asArguments(stackFrame.args[0].jsValue())->tearOff(*stackFrame.globalData);
 }
 
 DEFINE_STUB_FUNCTION(void, op_profile_will_call)

Modified: trunk/Source/_javascript_Core/runtime/Arguments.h (100223 => 100224)


--- trunk/Source/_javascript_Core/runtime/Arguments.h	2011-11-15 01:32:34 UTC (rev 100223)
+++ trunk/Source/_javascript_Core/runtime/Arguments.h	2011-11-15 01:39:52 UTC (rev 100224)
@@ -70,10 +70,10 @@
             return arguments;
         }
         
-        static Arguments* createAndCopyRegisters(JSGlobalData& globalData, CallFrame* callFrame)
+        static Arguments* createAndTearOff(JSGlobalData& globalData, CallFrame* callFrame)
         {
             Arguments* arguments = new (allocateCell<Arguments>(globalData.heap)) Arguments(callFrame);
-            arguments->finishCreationAndCopyRegisters(callFrame);
+            arguments->finishCreationAndTearOff(callFrame);
             return arguments;
         }
         
@@ -111,11 +111,12 @@
         }
         
         void copyToRegisters(ExecState* exec, Register* buffer, uint32_t maxSize);
-        void copyRegisters(JSGlobalData&);
+        void tearOff(JSGlobalData&);
         bool isTornOff() const { return d->registerArray; }
-        void setActivation(JSGlobalData& globalData, JSActivation* activation)
+        void didTearOffActivation(JSGlobalData& globalData, JSActivation* activation)
         {
-            ASSERT(!d->registerArray);
+            if (isTornOff())
+                return;
             d->activation.set(globalData, this, activation);
             d->registers = &activation->registerAt(0);
         }
@@ -128,9 +129,9 @@
     protected:
         static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesVisitChildren | OverridesGetPropertyNames | JSObject::StructureFlags;
 
-        void finishCreationButDontCopyRegisters(CallFrame*);
+        void finishCreationButDontTearOff(CallFrame*);
         void finishCreation(CallFrame*);
-        void finishCreationAndCopyRegisters(CallFrame*);
+        void finishCreationAndTearOff(CallFrame*);
         void finishCreation(CallFrame*, NoParametersType);
 
     private:
@@ -190,7 +191,7 @@
     {
     }
     
-    inline void Arguments::finishCreationButDontCopyRegisters(CallFrame* callFrame)
+    inline void Arguments::finishCreationButDontTearOff(CallFrame* callFrame)
     {
         Base::finishCreation(callFrame->globalData());
         ASSERT(inherits(&s_info));
@@ -233,12 +234,12 @@
     inline void Arguments::finishCreation(CallFrame* callFrame)
     {
         ASSERT(!callFrame->isInlineCallFrame());
-        finishCreationButDontCopyRegisters(callFrame);
+        finishCreationButDontTearOff(callFrame);
         if (d->isStrictMode)
-            copyRegisters(callFrame->globalData());
+            tearOff(callFrame->globalData());
     }
 
-    inline void Arguments::finishCreationAndCopyRegisters(CallFrame* callFrame)
+    inline void Arguments::finishCreationAndTearOff(CallFrame* callFrame)
     {
         Base::finishCreation(callFrame->globalData());
         ASSERT(inherits(&s_info));
@@ -356,10 +357,10 @@
         d->overrodeCaller = false;
         d->isStrictMode = callFrame->codeBlock()->isStrictMode();
         if (d->isStrictMode)
-            copyRegisters(callFrame->globalData());
+            tearOff(callFrame->globalData());
     }
 
-    inline void Arguments::copyRegisters(JSGlobalData& globalData)
+    inline void Arguments::tearOff(JSGlobalData& globalData)
     {
         ASSERT(!isTornOff());
 
@@ -376,24 +377,6 @@
         d->registerArray = registerArray.release();
     }
 
-    // This JSActivation function is defined here so it can get at Arguments::setRegisters.
-    inline void JSActivation::copyRegisters(JSGlobalData& globalData)
-    {
-        ASSERT(!m_registerArray);
-
-        size_t numLocals = m_numCapturedVars + m_numParametersMinusThis;
-
-        if (!numLocals)
-            return;
-
-        int registerOffset = m_numParametersMinusThis + RegisterFile::CallFrameHeaderSize;
-        size_t registerArraySize = numLocals + RegisterFile::CallFrameHeaderSize;
-
-        OwnArrayPtr<WriteBarrier<Unknown> > registerArray = copyRegisterArray(globalData, m_registers - registerOffset, registerArraySize, m_numParametersMinusThis + 1);
-        WriteBarrier<Unknown>* registers = registerArray.get() + registerOffset;
-        setRegisters(registers, registerArray.release());
-    }
-
 } // namespace JSC
 
 #endif // Arguments_h

Modified: trunk/Source/_javascript_Core/runtime/JSActivation.h (100223 => 100224)


--- trunk/Source/_javascript_Core/runtime/JSActivation.h	2011-11-15 01:32:34 UTC (rev 100223)
+++ trunk/Source/_javascript_Core/runtime/JSActivation.h	2011-11-15 01:39:52 UTC (rev 100224)
@@ -69,7 +69,7 @@
 
         static JSObject* toThisObject(JSCell*, ExecState*);
 
-        void copyRegisters(JSGlobalData&);
+        void tearOff(JSGlobalData&);
         
         static const ClassInfo s_info;
 
@@ -114,6 +114,23 @@
         return false;
     }
 
+    inline void JSActivation::tearOff(JSGlobalData& globalData)
+    {
+        ASSERT(!m_registerArray);
+
+        size_t numLocals = m_numCapturedVars + m_numParametersMinusThis;
+
+        if (!numLocals)
+            return;
+
+        int registerOffset = m_numParametersMinusThis + RegisterFile::CallFrameHeaderSize;
+        size_t registerArraySize = numLocals + RegisterFile::CallFrameHeaderSize;
+
+        OwnArrayPtr<WriteBarrier<Unknown> > registerArray = copyRegisterArray(globalData, m_registers - registerOffset, registerArraySize, m_numParametersMinusThis + 1);
+        WriteBarrier<Unknown>* registers = registerArray.get() + registerOffset;
+        setRegisters(registers, registerArray.release());
+    }
+
 } // namespace JSC
 
 #endif // JSActivation_h
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to