diff options
Diffstat (limited to 'Source/JavaScriptCore/runtime/JSActivation.h')
-rw-r--r-- | Source/JavaScriptCore/runtime/JSActivation.h | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/Source/JavaScriptCore/runtime/JSActivation.h b/Source/JavaScriptCore/runtime/JSActivation.h index 80c8aa8d0..fd1b2fd7f 100644 --- a/Source/JavaScriptCore/runtime/JSActivation.h +++ b/Source/JavaScriptCore/runtime/JSActivation.h @@ -92,7 +92,8 @@ namespace JSC { NEVER_INLINE PropertySlot::GetValueFunc getArgumentsGetter(); int m_numCapturedArgs; - int m_numCapturedVars : 31; + int m_numCapturedVars : 30; + bool m_isTornOff : 1; bool m_requiresDynamicChecks : 1; int m_argumentsRegister; }; @@ -102,7 +103,7 @@ namespace JSC { inline JSActivation* asActivation(JSValue value) { ASSERT(asObject(value)->inherits(&JSActivation::s_info)); - return static_cast<JSActivation*>(asObject(value)); + return jsCast<JSActivation*>(asObject(value)); } ALWAYS_INLINE JSActivation* Register::activation() const @@ -127,19 +128,13 @@ namespace JSC { OwnArrayPtr<WriteBarrier<Unknown> > registerArray = adoptArrayPtr(new WriteBarrier<Unknown>[registerArraySize]); WriteBarrier<Unknown>* registers = registerArray.get() + registerOffset; - // Copy all arguments that can be captured by name or by the arguments object. - for (int i = 0; i < m_numCapturedArgs; ++i) { - int index = CallFrame::argumentOffset(i); - registers[index].set(globalData, this, m_registers[index].get()); - } - - // Skip 'this' and call frame. - - // Copy all captured vars. - for (int i = 0; i < m_numCapturedVars; ++i) + int from = CallFrame::argumentOffset(m_numCapturedArgs - 1); + int to = m_numCapturedVars; + for (int i = from; i < to; ++i) registers[i].set(globalData, this, m_registers[i].get()); setRegisters(registers, registerArray.release()); + m_isTornOff = true; } } // namespace JSC |