]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - interpreter/CallFrameClosure.h
JavaScriptCore-1218.33.tar.gz
[apple/javascriptcore.git] / interpreter / CallFrameClosure.h
index 9085327a8273157003aa6d2daa89136b5c89a46f..7ae1e6fdf6f9cb6a16706beeb3c5b88482acadf2 100644 (file)
@@ -32,26 +32,31 @@ struct CallFrameClosure {
     CallFrame* oldCallFrame;
     CallFrame* newCallFrame;
     JSFunction* function;
-    FunctionBodyNode* functionBody;
-    JSGlobalData* globalData;
-    Register* oldEnd;
-    ScopeChainNode* scopeChain;
-    int expectedParams;
-    int providedParams;
+    FunctionExecutable* functionExecutable;
+    VM* vm;
+    JSScope* scope;
+    int parameterCountIncludingThis;
+    int argumentCountIncludingThis;
     
-    void setArgument(int arg, JSValue value)
+    void setThis(JSValue value)
     {
-        if (arg < expectedParams)
-            newCallFrame[arg - RegisterFile::CallFrameHeaderSize - expectedParams] = value;
-        else
-            newCallFrame[arg - RegisterFile::CallFrameHeaderSize - expectedParams - providedParams] = value;
+        newCallFrame->setThisValue(value);
     }
+
+    void setArgument(int argument, JSValue value)
+    {
+        newCallFrame->setArgument(argument, value);
+    }
+
     void resetCallFrame()
     {
-        newCallFrame->setScopeChain(scopeChain);
-        newCallFrame->setCalleeArguments(JSValue());
-        for (int i = providedParams; i < expectedParams; ++i)
-            newCallFrame[i - RegisterFile::CallFrameHeaderSize - expectedParams] = jsUndefined();
+        newCallFrame->setScope(scope);
+        // setArgument() takes an arg index that starts from 0 for the first
+        // argument after the 'this' value. Since both argumentCountIncludingThis
+        // and parameterCountIncludingThis includes the 'this' value, we need to
+        // subtract 1 from them to make i a valid argument index for setArgument().
+        for (int i = argumentCountIncludingThis-1; i < parameterCountIncludingThis-1; ++i)
+            newCallFrame->setArgument(i, jsUndefined());
     }
 };