2008-10-09 Cameron Zwarich <zwarich@apple.com>
[WebKit-https.git] / JavaScriptCore / kjs / Arguments.h
index ab88097e49b3964641a43eb06605b6f54433e8a6..8f48eaf8b5a4b6f08729b63c9062904c0a187a32 100644 (file)
@@ -32,6 +32,8 @@
 namespace JSC {
 
     struct ArgumentsData : Noncopyable {
 namespace JSC {
 
     struct ArgumentsData : Noncopyable {
+        JSActivation* activation;
+
         unsigned numParameters;
         ptrdiff_t firstParameterIndex;
         unsigned numArguments;
         unsigned numParameters;
         ptrdiff_t firstParameterIndex;
         unsigned numArguments;
@@ -62,7 +64,11 @@ namespace JSC {
 
         void copyRegisters();
         bool isTornOff() const { return d->registerArray; }
 
         void copyRegisters();
         bool isTornOff() const { return d->registerArray; }
-        void setRegisters(Register* registers) { d->registers = registers; }
+        void setActivation(JSActivation* activation)
+        {
+            d->activation = activation;
+            d->registers = &activation->registerAt(0);
+        }
 
     private:
         virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
 
     private:
         virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
@@ -93,6 +99,7 @@ namespace JSC {
         d->firstParameterIndex = firstParameterIndex;
         d->numArguments = numArguments;
 
         d->firstParameterIndex = firstParameterIndex;
         d->numArguments = numArguments;
 
+        d->activation = 0;
         d->registers = callFrame->registers();
 
         Register* extraArguments;
         d->registers = callFrame->registers();
 
         Register* extraArguments;
@@ -149,7 +156,7 @@ namespace JSC {
         Register* registerArray = copyRegisterArray(d()->registers - registerOffset, registerArraySize);
         setRegisters(registerArray + registerOffset, registerArray);
         if (arguments && !arguments->isTornOff())
         Register* registerArray = copyRegisterArray(d()->registers - registerOffset, registerArraySize);
         setRegisters(registerArray + registerOffset, registerArray);
         if (arguments && !arguments->isTornOff())
-            static_cast<Arguments*>(arguments)->setRegisters(registerArray + registerOffset);
+            static_cast<Arguments*>(arguments)->setActivation(this);
     }
 
 } // namespace JSC
     }
 
 } // namespace JSC