Changeset 100224 in webkit
- Timestamp:
- Nov 14, 2011, 5:39:52 PM (15 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 5 edited
-
ChangeLog (modified) (1 diff)
-
interpreter/Interpreter.cpp (modified) (4 diffs)
-
jit/JITStubs.cpp (modified) (2 diffs)
-
runtime/Arguments.h (modified) (7 diffs)
-
runtime/JSActivation.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r100223 r100224 1 2011-11-14 Geoffrey Garen <ggaren@apple.com> 2 3 A little bit of arguments / activation cleanup 4 https://bugs.webkit.org/show_bug.cgi?id=72339 5 6 Reviewed by Gavin Barraclough. 7 8 Renamed copyRegisters => tearOff to match bytecode and other terminology. 9 10 Renamed setActivation => didTearOffActivation to indicate that this is a 11 notification the object may choose to ignore. Moved "Should I ignore?" 12 code into the arguments object to avoid duplication elsewhere. 13 14 * interpreter/Interpreter.cpp: 15 (JSC::Interpreter::unwindCallFrame): 16 (JSC::Interpreter::privateExecute): 17 (JSC::Interpreter::retrieveArguments): 18 * jit/JITStubs.cpp: 19 (JSC::DEFINE_STUB_FUNCTION): 20 * runtime/Arguments.h: 21 (JSC::Arguments::createAndTearOff): 22 (JSC::Arguments::didTearOffActivation): 23 (JSC::Arguments::finishCreationButDontTearOff): 24 (JSC::Arguments::finishCreation): 25 (JSC::Arguments::finishCreationAndTearOff): 26 (JSC::Arguments::tearOff): 27 28 * runtime/JSActivation.h: 29 (JSC::JSActivation::tearOff): Moved Activation's code into its own header 30 because that's where it belongs. 31 1 32 2011-11-14 Gavin Barraclough <barraclough@apple.com> 2 33 -
trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp
r100165 r100224 696 696 callFrame->setScopeChain(scopeChain); 697 697 JSActivation* activation = asActivation(scopeChain->object.get()); 698 activation->copyRegisters(*scopeChain->globalData); 699 if (JSValue arguments = callFrame->uncheckedR(unmodifiedArgumentsRegister(oldCodeBlock->argumentsRegister())).jsValue()) { 700 if (!oldCodeBlock->isStrictMode()) 701 asArguments(arguments)->setActivation(callFrame->globalData(), activation); 702 } 698 activation->tearOff(*scopeChain->globalData); 699 if (JSValue arguments = callFrame->uncheckedR(unmodifiedArgumentsRegister(oldCodeBlock->argumentsRegister())).jsValue()) 700 asArguments(arguments)->didTearOffActivation(callFrame->globalData(), activation); 703 701 } else if (oldCodeBlock->usesArguments() && !oldCodeBlock->isStrictMode()) { 704 702 if (JSValue arguments = callFrame->uncheckedR(unmodifiedArgumentsRegister(oldCodeBlock->argumentsRegister())).jsValue()) 705 asArguments(arguments)-> copyRegisters(callFrame->globalData());703 asArguments(arguments)->tearOff(callFrame->globalData()); 706 704 } 707 705 … … 4454 4452 JSValue activationValue = callFrame->r(activation).jsValue(); 4455 4453 if (activationValue) { 4456 asActivation(activationValue)->copyRegisters(*globalData); 4457 4458 if (JSValue argumentsValue = callFrame->r(unmodifiedArgumentsRegister(arguments)).jsValue()) { 4459 if (!codeBlock->isStrictMode()) 4460 asArguments(argumentsValue)->setActivation(*globalData, asActivation(activationValue)); 4461 } 4454 asActivation(activationValue)->tearOff(*globalData); 4455 4456 if (JSValue argumentsValue = callFrame->r(unmodifiedArgumentsRegister(arguments)).jsValue()) 4457 asArguments(argumentsValue)->didTearOffActivation(*globalData, asActivation(activationValue)); 4462 4458 } else if (JSValue argumentsValue = callFrame->r(unmodifiedArgumentsRegister(arguments)).jsValue()) { 4463 4459 if (!codeBlock->isStrictMode()) 4464 asArguments(argumentsValue)-> copyRegisters(*globalData);4460 asArguments(argumentsValue)->tearOff(*globalData); 4465 4461 } 4466 4462 … … 4484 4480 4485 4481 if (JSValue arguments = callFrame->r(unmodifiedArgumentsRegister(src1)).jsValue()) 4486 asArguments(arguments)-> copyRegisters(*globalData);4482 asArguments(arguments)->tearOff(*globalData); 4487 4483 4488 4484 vPC += OPCODE_LENGTH(op_tear_off_arguments); … … 5145 5141 } 5146 5142 5147 return Arguments::createAnd CopyRegisters(functionCallFrame->globalData(), functionCallFrame);5143 return Arguments::createAndTearOff(functionCallFrame->globalData(), functionCallFrame); 5148 5144 } 5149 5145 -
trunk/Source/JavaScriptCore/jit/JITStubs.cpp
r100165 r100224 2395 2395 if (JSValue v = stackFrame.args[1].jsValue()) { 2396 2396 if (!stackFrame.callFrame->codeBlock()->isStrictMode()) 2397 asArguments(v)-> copyRegisters(*stackFrame.globalData);2397 asArguments(v)->tearOff(*stackFrame.globalData); 2398 2398 } 2399 2399 return; 2400 2400 } 2401 2401 JSActivation* activation = asActivation(stackFrame.args[0].jsValue()); 2402 activation->copyRegisters(*stackFrame.globalData); 2403 if (JSValue v = stackFrame.args[1].jsValue()) { 2404 if (!stackFrame.callFrame->codeBlock()->isStrictMode()) 2405 asArguments(v)->setActivation(*stackFrame.globalData, activation); 2406 } 2402 activation->tearOff(*stackFrame.globalData); 2403 if (JSValue v = stackFrame.args[1].jsValue()) 2404 asArguments(v)->didTearOffActivation(*stackFrame.globalData, activation); 2407 2405 } 2408 2406 … … 2412 2410 2413 2411 ASSERT(stackFrame.callFrame->codeBlock()->usesArguments() && !stackFrame.callFrame->codeBlock()->needsFullScopeChain()); 2414 asArguments(stackFrame.args[0].jsValue())-> copyRegisters(*stackFrame.globalData);2412 asArguments(stackFrame.args[0].jsValue())->tearOff(*stackFrame.globalData); 2415 2413 } 2416 2414 -
trunk/Source/JavaScriptCore/runtime/Arguments.h
r100165 r100224 71 71 } 72 72 73 static Arguments* createAnd CopyRegisters(JSGlobalData& globalData, CallFrame* callFrame)73 static Arguments* createAndTearOff(JSGlobalData& globalData, CallFrame* callFrame) 74 74 { 75 75 Arguments* arguments = new (allocateCell<Arguments>(globalData.heap)) Arguments(callFrame); 76 arguments->finishCreationAnd CopyRegisters(callFrame);76 arguments->finishCreationAndTearOff(callFrame); 77 77 return arguments; 78 78 } … … 112 112 113 113 void copyToRegisters(ExecState* exec, Register* buffer, uint32_t maxSize); 114 void copyRegisters(JSGlobalData&);114 void tearOff(JSGlobalData&); 115 115 bool isTornOff() const { return d->registerArray; } 116 void setActivation(JSGlobalData& globalData, JSActivation* activation) 117 { 118 ASSERT(!d->registerArray); 116 void didTearOffActivation(JSGlobalData& globalData, JSActivation* activation) 117 { 118 if (isTornOff()) 119 return; 119 120 d->activation.set(globalData, this, activation); 120 121 d->registers = &activation->registerAt(0); … … 129 130 static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesVisitChildren | OverridesGetPropertyNames | JSObject::StructureFlags; 130 131 131 void finishCreationButDont CopyRegisters(CallFrame*);132 void finishCreationButDontTearOff(CallFrame*); 132 133 void finishCreation(CallFrame*); 133 void finishCreationAnd CopyRegisters(CallFrame*);134 void finishCreationAndTearOff(CallFrame*); 134 135 void finishCreation(CallFrame*, NoParametersType); 135 136 … … 191 192 } 192 193 193 inline void Arguments::finishCreationButDont CopyRegisters(CallFrame* callFrame)194 inline void Arguments::finishCreationButDontTearOff(CallFrame* callFrame) 194 195 { 195 196 Base::finishCreation(callFrame->globalData()); … … 234 235 { 235 236 ASSERT(!callFrame->isInlineCallFrame()); 236 finishCreationButDont CopyRegisters(callFrame);237 finishCreationButDontTearOff(callFrame); 237 238 if (d->isStrictMode) 238 copyRegisters(callFrame->globalData());239 } 240 241 inline void Arguments::finishCreationAnd CopyRegisters(CallFrame* callFrame)239 tearOff(callFrame->globalData()); 240 } 241 242 inline void Arguments::finishCreationAndTearOff(CallFrame* callFrame) 242 243 { 243 244 Base::finishCreation(callFrame->globalData()); … … 357 358 d->isStrictMode = callFrame->codeBlock()->isStrictMode(); 358 359 if (d->isStrictMode) 359 copyRegisters(callFrame->globalData());360 } 361 362 inline void Arguments:: copyRegisters(JSGlobalData& globalData)360 tearOff(callFrame->globalData()); 361 } 362 363 inline void Arguments::tearOff(JSGlobalData& globalData) 363 364 { 364 365 ASSERT(!isTornOff()); … … 377 378 } 378 379 379 // This JSActivation function is defined here so it can get at Arguments::setRegisters.380 inline void JSActivation::copyRegisters(JSGlobalData& globalData)381 {382 ASSERT(!m_registerArray);383 384 size_t numLocals = m_numCapturedVars + m_numParametersMinusThis;385 386 if (!numLocals)387 return;388 389 int registerOffset = m_numParametersMinusThis + RegisterFile::CallFrameHeaderSize;390 size_t registerArraySize = numLocals + RegisterFile::CallFrameHeaderSize;391 392 OwnArrayPtr<WriteBarrier<Unknown> > registerArray = copyRegisterArray(globalData, m_registers - registerOffset, registerArraySize, m_numParametersMinusThis + 1);393 WriteBarrier<Unknown>* registers = registerArray.get() + registerOffset;394 setRegisters(registers, registerArray.release());395 }396 397 380 } // namespace JSC 398 381 -
trunk/Source/JavaScriptCore/runtime/JSActivation.h
r99768 r100224 70 70 static JSObject* toThisObject(JSCell*, ExecState*); 71 71 72 void copyRegisters(JSGlobalData&);72 void tearOff(JSGlobalData&); 73 73 74 74 static const ClassInfo s_info; … … 115 115 } 116 116 117 inline void JSActivation::tearOff(JSGlobalData& globalData) 118 { 119 ASSERT(!m_registerArray); 120 121 size_t numLocals = m_numCapturedVars + m_numParametersMinusThis; 122 123 if (!numLocals) 124 return; 125 126 int registerOffset = m_numParametersMinusThis + RegisterFile::CallFrameHeaderSize; 127 size_t registerArraySize = numLocals + RegisterFile::CallFrameHeaderSize; 128 129 OwnArrayPtr<WriteBarrier<Unknown> > registerArray = copyRegisterArray(globalData, m_registers - registerOffset, registerArraySize, m_numParametersMinusThis + 1); 130 WriteBarrier<Unknown>* registers = registerArray.get() + registerOffset; 131 setRegisters(registers, registerArray.release()); 132 } 133 117 134 } // namespace JSC 118 135
Note:
See TracChangeset
for help on using the changeset viewer.