JavaScriptCore:
authorggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Jul 2008 05:10:05 +0000 (05:10 +0000)
committerggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Jul 2008 05:10:05 +0000 (05:10 +0000)
2008-07-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt and Sam Weinig.

        Next step toward putting doubles in registers: Prepare the Register class
        and its clients for registers that don't contain JSValue*s.

        This means a few things:

        1. Register::jsValue() clients, including ArgList clients, must now supply
        an ExecState* when accessing an entry in an ArgList, in case the entry
        will need to create a JSValue* on the fly.

        2. Register clients that definitely don't want to create a JSValue* on
        the fly now use different APIs: getJSValue() for clients that know
        the register contains a JSValue*, and v() for clients who just want a
        void*.

        3. I had to change some headers around in order to resolve dependency
        problems created by using a Register in the ArgList header.

        SunSpider reports no change.

JavaScriptGlue:

2008-07-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt and Sam Weinig.

        Next step toward putting doubles in registers: Prepare the Register class
        and its clients for registers that don't contain JSValue*s.

WebCore:

2008-07-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt and Sam Weinig.

        Next step toward putting doubles in registers: Prepare the Register class
        and its clients for registers that don't contain JSValue*s.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@35291 268f45cc-cd09-0410-ab3c-d52691b4dbfc

84 files changed:
JavaScriptCore/API/JSCallbackConstructor.cpp
JavaScriptCore/API/JSCallbackFunction.cpp
JavaScriptCore/API/JSCallbackObjectFunctions.h
JavaScriptCore/ChangeLog
JavaScriptCore/VM/CodeBlock.cpp
JavaScriptCore/VM/Machine.cpp
JavaScriptCore/VM/Register.h
JavaScriptCore/kjs/ArgList.h
JavaScriptCore/kjs/Arguments.cpp
JavaScriptCore/kjs/ArrayConstructor.cpp
JavaScriptCore/kjs/ArrayPrototype.cpp
JavaScriptCore/kjs/BooleanConstructor.cpp
JavaScriptCore/kjs/DateConstructor.cpp
JavaScriptCore/kjs/DatePrototype.cpp
JavaScriptCore/kjs/DebuggerCallFrame.cpp
JavaScriptCore/kjs/ErrorConstructor.cpp
JavaScriptCore/kjs/ExecState.h
JavaScriptCore/kjs/FunctionConstructor.cpp
JavaScriptCore/kjs/FunctionPrototype.cpp
JavaScriptCore/kjs/JSArray.cpp
JavaScriptCore/kjs/JSArray.h
JavaScriptCore/kjs/JSGlobalData.cpp
JavaScriptCore/kjs/JSGlobalData.h
JavaScriptCore/kjs/JSGlobalObjectFunctions.cpp
JavaScriptCore/kjs/JSNumberCell.h
JavaScriptCore/kjs/MathObject.cpp
JavaScriptCore/kjs/NativeErrorConstructor.cpp
JavaScriptCore/kjs/NumberConstructor.cpp
JavaScriptCore/kjs/NumberPrototype.cpp
JavaScriptCore/kjs/ObjectConstructor.cpp
JavaScriptCore/kjs/ObjectPrototype.cpp
JavaScriptCore/kjs/PropertySlot.h
JavaScriptCore/kjs/RegExpConstructor.cpp
JavaScriptCore/kjs/RegExpObject.cpp
JavaScriptCore/kjs/RegExpPrototype.cpp
JavaScriptCore/kjs/Shell.cpp
JavaScriptCore/kjs/StringConstructor.cpp
JavaScriptCore/kjs/StringPrototype.cpp
JavaScriptGlue/ChangeLog
JavaScriptGlue/UserObjectImp.cpp
WebCore/ChangeLog
WebCore/bindings/js/JSAudioConstructor.cpp
WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
WebCore/bindings/js/JSClipboardCustom.cpp
WebCore/bindings/js/JSConsoleCustom.cpp
WebCore/bindings/js/JSDOMApplicationCacheCustom.cpp
WebCore/bindings/js/JSDOMWindowBase.cpp
WebCore/bindings/js/JSDOMWindowBase.h
WebCore/bindings/js/JSDOMWindowCustom.cpp
WebCore/bindings/js/JSDatabaseCustom.cpp
WebCore/bindings/js/JSDocumentCustom.cpp
WebCore/bindings/js/JSDocumentFragmentCustom.cpp
WebCore/bindings/js/JSElementCustom.cpp
WebCore/bindings/js/JSEventTargetBase.cpp
WebCore/bindings/js/JSHTMLCollectionCustom.cpp
WebCore/bindings/js/JSHTMLDocumentCustom.cpp
WebCore/bindings/js/JSHTMLInputElementBase.cpp
WebCore/bindings/js/JSHTMLOptionElementConstructor.cpp
WebCore/bindings/js/JSHTMLOptionsCollectionCustom.cpp
WebCore/bindings/js/JSHTMLSelectElementCustom.cpp
WebCore/bindings/js/JSImageConstructor.cpp
WebCore/bindings/js/JSJavaScriptCallFrameCustom.cpp
WebCore/bindings/js/JSLocationCustom.cpp
WebCore/bindings/js/JSNodeCustom.cpp
WebCore/bindings/js/JSNodeFilterCustom.cpp
WebCore/bindings/js/JSNodeListCustom.cpp
WebCore/bindings/js/JSQuarantinedObjectWrapper.cpp
WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp
WebCore/bindings/js/JSSQLTransactionCustom.cpp
WebCore/bindings/js/JSSVGLengthCustom.cpp
WebCore/bindings/js/JSSVGMatrixCustom.cpp
WebCore/bindings/js/JSSVGPathSegListCustom.cpp
WebCore/bindings/js/JSSVGPointListCustom.cpp
WebCore/bindings/js/JSSVGTransformListCustom.cpp
WebCore/bindings/js/JSXMLHttpRequestCustom.cpp
WebCore/bindings/js/JSXSLTProcessorCustom.cpp
WebCore/bindings/js/ScheduledAction.cpp
WebCore/bindings/js/ScheduledAction.h
WebCore/bindings/scripts/CodeGeneratorJS.pm
WebCore/bridge/c/c_instance.cpp
WebCore/bridge/jni/jni_instance.cpp
WebCore/bridge/objc/objc_instance.mm
WebCore/page/Console.cpp
WebCore/page/InspectorController.cpp

index cf9166d..ba6ecb0 100644 (file)
@@ -67,7 +67,7 @@ static JSObject* constructJSCallback(ExecState* exec, JSObject* constructor, con
         int argumentCount = static_cast<int>(args.size());
         Vector<JSValueRef, 16> arguments(argumentCount);
         for (int i = 0; i < argumentCount; i++)
-            arguments[i] = toRef(args[i]);
+            arguments[i] = toRef(args.at(exec, i));
             
         JSLock::DropAllLocks dropAllLocks(exec);
         return toJS(callback(ctx, constructorRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot())));
index 61c0d5c..4a88f40 100644 (file)
@@ -61,7 +61,7 @@ JSValue* JSCallbackFunction::call(ExecState* exec, JSObject* functionObject, JSV
     int argumentCount = static_cast<int>(args.size());
     Vector<JSValueRef, 16> arguments(argumentCount);
     for (int i = 0; i < argumentCount; i++)
-        arguments[i] = toRef(args[i]);
+        arguments[i] = toRef(args.at(exec, i));
 
     JSLock::DropAllLocks dropAllLocks(exec);
     return toJS(static_cast<JSCallbackFunction*>(functionObject)->m_callback(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot())));
index 3a30999..ec53185 100644 (file)
@@ -261,7 +261,7 @@ JSObject* JSCallbackObject<Base>::construct(ExecState* exec, JSObject* construct
             int argumentCount = static_cast<int>(args.size());
             Vector<JSValueRef, 16> arguments(argumentCount);
             for (int i = 0; i < argumentCount; i++)
-                arguments[i] = toRef(args[i]);
+                arguments[i] = toRef(args.at(exec, i));
             JSLock::DropAllLocks dropAllLocks(exec);
             return toJS(callAsConstructor(execRef, constructorRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot())));
         }
@@ -321,7 +321,7 @@ JSValue* JSCallbackObject<Base>::call(ExecState* exec, JSObject* functionObject,
             int argumentCount = static_cast<int>(args.size());
             Vector<JSValueRef, 16> arguments(argumentCount);
             for (int i = 0; i < argumentCount; i++)
-                arguments[i] = toRef(args[i]);
+                arguments[i] = toRef(args.at(exec, i));
             JSLock::DropAllLocks dropAllLocks(exec);
             return toJS(callAsFunction(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot())));
         }
index 6777e78..5d35da2 100644 (file)
@@ -1,3 +1,26 @@
+2008-07-22  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt and Sam Weinig.
+
+        Next step toward putting doubles in registers: Prepare the Register class
+        and its clients for registers that don't contain JSValue*s.
+        
+        This means a few things:
+        
+        1. Register::jsValue() clients, including ArgList clients, must now supply
+        an ExecState* when accessing an entry in an ArgList, in case the entry
+        will need to create a JSValue* on the fly.
+        
+        2. Register clients that definitely don't want to create a JSValue* on
+        the fly now use different APIs: getJSValue() for clients that know
+        the register contains a JSValue*, and v() for clients who just want a
+        void*.
+        
+        3. I had to change some headers around in order to resolve dependency
+        problems created by using a Register in the ArgList header.
+        
+        SunSpider reports no change.
+        
 2008-07-22  Gavin Barraclough  <barraclough@apple.com>
 
         Reviewed by Alexey Proskuryakov.
index 0b54b73..29601af 100644 (file)
@@ -48,15 +48,15 @@ static UString escapeQuotes(const UString& str)
     return result;
 }
 
-static UString valueToSourceString(ExecState* exec, const Register& val)
+static UString valueToSourceString(ExecState* exec, JSValue* val)
 {
-    if (val.isString()) {
+    if (val->isString()) {
         UString result("\"");
-        result += escapeQuotes(val.toString(exec)) + "\"";
+        result += escapeQuotes(val->toString(exec)) + "\"";
         return result;
     } 
 
-    return val.toString(exec);
+    return val->toString(exec);
 }
 
 static CString registerName(int r)
@@ -67,7 +67,7 @@ static CString registerName(int r)
     return (UString("tr") + UString::from(r)).UTF8String();
 }
 
-static CString constantName(ExecState* exec, int k, const Register& value)
+static CString constantName(ExecState* exec, int k, JSValue* value)
 {
     return (valueToSourceString(exec, value) + "(@k" + UString::from(k) + ")").UTF8String();
 }
@@ -175,7 +175,7 @@ void CodeBlock::dump(ExecState* exec) const
         printf("\nConstants:\n");
         size_t i = 0;
         do {
-            printf("  k%u = %s\n", static_cast<unsigned>(i), valueToSourceString(exec, registers[i]).ascii());
+            printf("  k%u = %s\n", static_cast<unsigned>(i), valueToSourceString(exec, registers[i].jsValue(exec)).ascii());
             ++i;
         } while (i < registers.size());
     }
@@ -208,7 +208,7 @@ void CodeBlock::dump(ExecState* exec, const Vector<Instruction>::const_iterator&
         case op_load: {
             int r0 = (++it)->u.operand;
             int k0 = (++it)->u.operand;
-            printf("[%4d] load\t\t %s, %s\t\t\n", location, registerName(r0).c_str(), constantName(exec, k0, registers[k0]).c_str());
+            printf("[%4d] load\t\t %s, %s\t\t\n", location, registerName(r0).c_str(), constantName(exec, k0, registers[k0].jsValue(exec)).c_str());
             break;
         }
         case op_new_object: {
@@ -587,7 +587,7 @@ void CodeBlock::dump(ExecState* exec, const Vector<Instruction>::const_iterator&
             int r0 = (++it)->u.operand;
             int errorType = (++it)->u.operand;
             int k0 = (++it)->u.operand;
-            printf("[%4d] new_error\t %s, %d, %s\n", location, registerName(r0).c_str(), errorType, constantName(exec, k0, registers[k0]).c_str());
+            printf("[%4d] new_error\t %s, %d, %s\n", location, registerName(r0).c_str(), errorType, constantName(exec, k0, registers[k0].jsValue(exec)).c_str());
             break;
         }
         case op_jsr: {
index b4fefa4..a1b5450 100644 (file)
@@ -369,7 +369,7 @@ ALWAYS_INLINE void Machine::initializeCallFrame(Register* callFrame, CodeBlock*
     callFrame[RegisterFile::ArgumentCount] = argc; // original argument count (for the sake of the "arguments" object)
     callFrame[RegisterFile::CalledAsConstructor] = calledAsConstructor;
     callFrame[RegisterFile::Callee] = function;
-    callFrame[RegisterFile::OptionalCalleeActivation] = static_cast<intptr_t>(0);
+    callFrame[RegisterFile::OptionalCalleeActivation] = nullJSValue;
 }
 
 ALWAYS_INLINE Register* slideRegisterWindowForCall(ExecState* exec, CodeBlock* newCodeBlock, RegisterFile* registerFile, Register* registerBase, Register* r, int argv, int argc, JSValue*& exceptionValue)
@@ -443,7 +443,7 @@ NEVER_INLINE JSValue* Machine::callEval(ExecState* exec, JSObject* thisObj, Scop
     if (argc < 2)
         return jsUndefined();
 
-    JSValue* program = r[argv + 1].jsValue();
+    JSValue* program = r[argv + 1].jsValue(exec);
 
     if (!program->isString())
         return program;
@@ -518,30 +518,30 @@ void Machine::dumpRegisters(const CodeBlock* codeBlock, RegisterFile* registerFi
         it = registerFile->lastGlobal();
         end = it + registerFile->numGlobals();
         while (it != end) {
-            printf("[global var]               | %10p | %10p \n", it, (*it).jsValue());
+            printf("[global var]               | %10p | %10p \n", it, (*it).v());
             ++it;
         }
         printf("----------------------------------------------------\n");
     }
     
     it = r - codeBlock->numLocals - RegisterFile::CallFrameHeaderSize;
-    printf("[CallerCodeBlock]          | %10p | %10p \n", it, (*it).jsValue()); ++it;
-    printf("[ReturnVPC]                | %10p | %10p \n", it, (*it).jsValue()); ++it;
-    printf("[CallerScopeChain]         | %10p | %10p \n", it, (*it).jsValue()); ++it;
-    printf("[CallerRegisterOffset]     | %10p | %10p \n", it, (*it).jsValue()); ++it;
-    printf("[ReturnValueRegister]      | %10p | %10p \n", it, (*it).jsValue()); ++it;
-    printf("[ArgumentStartRegister]    | %10p | %10p \n", it, (*it).jsValue()); ++it;
-    printf("[ArgumentCount]            | %10p | %10p \n", it, (*it).jsValue()); ++it;
-    printf("[CalledAsConstructor]      | %10p | %10p \n", it, (*it).jsValue()); ++it;
-    printf("[Callee]                   | %10p | %10p \n", it, (*it).jsValue()); ++it;
-    printf("[OptionalCalleeActivation] | %10p | %10p \n", it, (*it).jsValue()); ++it;
+    printf("[CallerCodeBlock]          | %10p | %10p \n", it, (*it).v()); ++it;
+    printf("[ReturnVPC]                | %10p | %10p \n", it, (*it).v()); ++it;
+    printf("[CallerScopeChain]         | %10p | %10p \n", it, (*it).v()); ++it;
+    printf("[CallerRegisterOffset]     | %10p | %10p \n", it, (*it).v()); ++it;
+    printf("[ReturnValueRegister]      | %10p | %10p \n", it, (*it).v()); ++it;
+    printf("[ArgumentStartRegister]    | %10p | %10p \n", it, (*it).v()); ++it;
+    printf("[ArgumentCount]            | %10p | %10p \n", it, (*it).v()); ++it;
+    printf("[CalledAsConstructor]      | %10p | %10p \n", it, (*it).v()); ++it;
+    printf("[Callee]                   | %10p | %10p \n", it, (*it).v()); ++it;
+    printf("[OptionalCalleeActivation] | %10p | %10p \n", it, (*it).v()); ++it;
     printf("----------------------------------------------------\n");
 
-    printf("[this]                     | %10p | %10p \n", it, (*it).jsValue()); ++it;
+    printf("[this]                     | %10p | %10p \n", it, (*it).v()); ++it;
     end = it + max(codeBlock->numParameters - 1, 0); // - 1 to skip "this"
     if (it != end) {
         do {
-            printf("[param]                    | %10p | %10p \n", it, (*it).jsValue());
+            printf("[param]                    | %10p | %10p \n", it, (*it).v());
             ++it;
         } while (it != end);
     }
@@ -551,7 +551,7 @@ void Machine::dumpRegisters(const CodeBlock* codeBlock, RegisterFile* registerFi
         end = it + codeBlock->numVars;
         if (it != end) {
             do {
-                printf("[var]                      | %10p | %10p \n", it, (*it).jsValue());
+                printf("[var]                      | %10p | %10p \n", it, (*it).v());
                 ++it;
             } while (it != end);
         printf("----------------------------------------------------\n");
@@ -561,7 +561,7 @@ void Machine::dumpRegisters(const CodeBlock* codeBlock, RegisterFile* registerFi
     end = it + codeBlock->numTemporaries;
     if (it != end) {
         do {
-            printf("[temp]                     | %10p | %10p \n", it, (*it).jsValue());
+            printf("[temp]                     | %10p | %10p \n", it, (*it).v());
             ++it;
         } while (it != end);
     }
@@ -585,15 +585,15 @@ NEVER_INLINE bool Machine::unwindCallFrame(ExecState* exec, JSValue* exceptionVa
 
     if (Debugger* debugger = exec->dynamicGlobalObject()->debugger()) {
         DebuggerCallFrame debuggerCallFrame(exec->dynamicGlobalObject(), codeBlock, scopeChain, r, exceptionValue);
-        if (callFrame[RegisterFile::Callee].jsValue())
+        if (callFrame[RegisterFile::Callee].jsValue(exec))
             debugger->returnEvent(debuggerCallFrame, codeBlock->ownerNode->sourceId(), codeBlock->ownerNode->lastLine());
         else
             debugger->didExecuteProgram(debuggerCallFrame, codeBlock->ownerNode->sourceId(), codeBlock->ownerNode->lastLine());
     }
 
     if (Profiler* profiler = *Profiler::enabledProfilerReference()) {
-        if (callFrame[RegisterFile::Callee].jsValue())
-            profiler->didExecute(exec, static_cast<JSObject*>(callFrame[RegisterFile::Callee].jsValue()));
+        if (callFrame[RegisterFile::Callee].jsValue(exec))
+            profiler->didExecute(exec, static_cast<JSObject*>(callFrame[RegisterFile::Callee].jsValue(exec)));
         else
             profiler->didExecute(exec, codeBlock->ownerNode->sourceURL(), codeBlock->ownerNode->lineNo());
     }
@@ -602,7 +602,7 @@ NEVER_INLINE bool Machine::unwindCallFrame(ExecState* exec, JSValue* exceptionVa
         scopeChain->deref();
 
     // If this call frame created an activation, tear it off.
-    if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue())) {
+    if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue(exec))) {
         ASSERT(activation->isActivationObject());
         activation->copyRegisters();
     }
@@ -1121,8 +1121,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            as a boolean in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::areBothImmediateNumbers(src1, src2))
             r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) == reinterpret_cast<intptr_t>(src2));
         else {
@@ -1142,8 +1142,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            result as a boolean in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::areBothImmediateNumbers(src1, src2))
             r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) != reinterpret_cast<intptr_t>(src2));
         else {
@@ -1163,8 +1163,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            result as a boolean in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::areBothImmediateNumbers(src1, src2))
             r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) == reinterpret_cast<intptr_t>(src2));
         else
@@ -1181,8 +1181,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            puts the result as a boolean in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::areBothImmediateNumbers(src1, src2))
             r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) != reinterpret_cast<intptr_t>(src2));
         else
@@ -1199,8 +1199,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            a boolean in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         JSValue* result = jsBoolean(jsLess(exec, src1, src2));
         VM_CHECK_EXCEPTION();
         r[dst] = result;
@@ -1216,8 +1216,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            puts the result as a boolean in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         JSValue* result = jsBoolean(jsLessEq(exec, src1, src2));
         VM_CHECK_EXCEPTION();
         r[dst] = result;
@@ -1232,7 +1232,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            back in register srcDst.
         */
         int srcDst = (++vPC)->u.operand;
-        JSValue* v = r[srcDst].jsValue();
+        JSValue* v = r[srcDst].jsValue(exec);
         if (JSImmediate::canDoFastAdditiveOperations(v))
             r[srcDst] = JSImmediate::incImmediateNumber(v);
         else {
@@ -1251,7 +1251,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            back in register srcDst.
         */
         int srcDst = (++vPC)->u.operand;
-        JSValue* v = r[srcDst].jsValue();
+        JSValue* v = r[srcDst].jsValue(exec);
         if (JSImmediate::canDoFastAdditiveOperations(v))
             r[srcDst] = JSImmediate::decImmediateNumber(v);
         else {
@@ -1272,12 +1272,12 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         */
         int dst = (++vPC)->u.operand;
         int srcDst = (++vPC)->u.operand;
-        JSValue* v = r[srcDst].jsValue();
+        JSValue* v = r[srcDst].jsValue(exec);
         if (JSImmediate::canDoFastAdditiveOperations(v)) {
             r[dst] = v;
             r[srcDst] = JSImmediate::incImmediateNumber(v);
         } else {
-            JSValue* number = r[srcDst].jsValue()->toJSNumber(exec);
+            JSValue* number = r[srcDst].jsValue(exec)->toJSNumber(exec);
             VM_CHECK_EXCEPTION();
             r[dst] = number;
             r[srcDst] = jsNumber(exec, number->uncheckedGetNumber() + 1);
@@ -1295,12 +1295,12 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         */
         int dst = (++vPC)->u.operand;
         int srcDst = (++vPC)->u.operand;
-        JSValue* v = r[srcDst].jsValue();
+        JSValue* v = r[srcDst].jsValue(exec);
         if (JSImmediate::canDoFastAdditiveOperations(v)) {
             r[dst] = v;
             r[srcDst] = JSImmediate::decImmediateNumber(v);
         } else {
-            JSValue* number = r[srcDst].jsValue()->toJSNumber(exec);
+            JSValue* number = r[srcDst].jsValue(exec)->toJSNumber(exec);
             VM_CHECK_EXCEPTION();
             r[dst] = number;
             r[srcDst] = jsNumber(exec, number->uncheckedGetNumber() - 1);
@@ -1317,7 +1317,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         */
         int dst = (++vPC)->u.operand;
         int src = (++vPC)->u.operand;
-        JSValue* result = r[src].jsValue()->toJSNumber(exec);
+        JSValue* result = r[src].jsValue(exec)->toJSNumber(exec);
         VM_CHECK_EXCEPTION();
 
         r[dst] = result;
@@ -1333,7 +1333,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         */
         int dst = (++vPC)->u.operand;
         int src = (++vPC)->u.operand;
-        JSValue* result = jsNumber(exec, -r[src].jsValue()->toNumber(exec));
+        JSValue* result = jsNumber(exec, -r[src].jsValue(exec)->toNumber(exec));
         VM_CHECK_EXCEPTION();
         r[dst] = result;
 
@@ -1348,8 +1348,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            numeric add, depending on the types of the operands.)
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::canDoFastAdditiveOperations(src1) && JSImmediate::canDoFastAdditiveOperations(src2))
             r[dst] = JSImmediate::addImmediateNumbers(src1, src2);
         else {
@@ -1367,8 +1367,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            numbers), and puts the product in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         JSValue* result = jsNumber(exec, src1->toNumber(exec) * src2->toNumber(exec));
         VM_CHECK_EXCEPTION();
         r[dst] = result;
@@ -1386,7 +1386,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int dst = (++vPC)->u.operand;
         int dividend = (++vPC)->u.operand;
         int divisor = (++vPC)->u.operand;
-        JSValue* result = jsNumber(exec, r[dividend].jsValue()->toNumber(exec) / r[divisor].jsValue()->toNumber(exec));
+        JSValue* result = jsNumber(exec, r[dividend].jsValue(exec)->toNumber(exec) / r[divisor].jsValue(exec)->toNumber(exec));
         VM_CHECK_EXCEPTION();
         r[dst] = result;
         ++vPC;
@@ -1402,8 +1402,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int dst = (++vPC)->u.operand;
         int dividend = (++vPC)->u.operand;
         int divisor = (++vPC)->u.operand;
-        double d = r[dividend].jsValue()->toNumber(exec);
-        JSValue* result = jsNumber(exec, fmod(d, r[divisor].jsValue()->toNumber(exec)));
+        double d = r[dividend].jsValue(exec)->toNumber(exec);
+        JSValue* result = jsNumber(exec, fmod(d, r[divisor].jsValue(exec)->toNumber(exec)));
         VM_CHECK_EXCEPTION();
         r[dst] = result;
         ++vPC;
@@ -1417,8 +1417,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::canDoFastAdditiveOperations(src1) && JSImmediate::canDoFastAdditiveOperations(src2))
             r[dst] = JSImmediate::subImmediateNumbers(src1, src2);
         else {
@@ -1437,8 +1437,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* val = r[(++vPC)->u.operand].jsValue();
-        JSValue* shift = r[(++vPC)->u.operand].jsValue();
+        JSValue* val = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* shift = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::areBothImmediateNumbers(val, shift))
             r[dst] = jsNumber(exec, JSImmediate::getTruncatedInt32(val) << (JSImmediate::toTruncatedUInt32(shift) & 0x1f));
         else {
@@ -1458,8 +1458,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            uint32), and puts the result in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* val = r[(++vPC)->u.operand].jsValue();
-        JSValue* shift = r[(++vPC)->u.operand].jsValue();
+        JSValue* val = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* shift = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::areBothImmediateNumbers(val, shift))
             r[dst] = JSImmediate::rightShiftImmediateNumbers(val, shift);
         else {
@@ -1479,8 +1479,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            uint32), and puts the result in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* val = r[(++vPC)->u.operand].jsValue();
-        JSValue* shift = r[(++vPC)->u.operand].jsValue();
+        JSValue* val = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* shift = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::areBothImmediateNumbers(val, shift) && !JSImmediate::isNegative(val))
             r[dst] = JSImmediate::rightShiftImmediateNumbers(val, shift);
         else {
@@ -1500,8 +1500,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::areBothImmediateNumbers(src1, src2))
             r[dst] = JSImmediate::andImmediateNumbers(src1, src2);
         else {
@@ -1521,8 +1521,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::areBothImmediateNumbers(src1, src2))
             r[dst] = JSImmediate::xorImmediateNumbers(src1, src2);
         else {
@@ -1542,8 +1542,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            result in register dst.
         */
         int dst = (++vPC)->u.operand;
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         if (JSImmediate::areBothImmediateNumbers(src1, src2))
             r[dst] = JSImmediate::orImmediateNumbers(src1, src2);
         else {
@@ -1563,7 +1563,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         */
         int dst = (++vPC)->u.operand;
         int src = (++vPC)->u.operand;
-        JSValue* result = jsNumber(exec, ~r[src].jsValue()->toInt32(exec));
+        JSValue* result = jsNumber(exec, ~r[src].jsValue(exec)->toInt32(exec));
         VM_CHECK_EXCEPTION();
         r[dst] = result;
 
@@ -1578,7 +1578,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         */
         int dst = (++vPC)->u.operand;
         int src = (++vPC)->u.operand;
-        JSValue* result = jsBoolean(!r[src].jsValue()->toBoolean(exec));
+        JSValue* result = jsBoolean(!r[src].jsValue(exec)->toBoolean(exec));
         VM_CHECK_EXCEPTION();
         r[dst] = result;
 
@@ -1598,13 +1598,13 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int value = (++vPC)->u.operand;
         int base = (++vPC)->u.operand;
 
-        JSValue* baseVal = r[base].jsValue();
+        JSValue* baseVal = r[base].jsValue(exec);
 
         if (isNotObject(exec, true, codeBlock, vPC, baseVal, exceptionValue))
             goto vm_throw;
 
         JSObject* baseObj = static_cast<JSObject*>(baseVal);
-        r[dst] = jsBoolean(baseObj->implementsHasInstance() ? baseObj->hasInstance(exec, r[value].jsValue()) : false);
+        r[dst] = jsBoolean(baseObj->implementsHasInstance() ? baseObj->hasInstance(exec, r[value].jsValue(exec)) : false);
 
         ++vPC;
         NEXT_OPCODE;
@@ -1617,7 +1617,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         */
         int dst = (++vPC)->u.operand;
         int src = (++vPC)->u.operand;
-        r[dst] = jsTypeStringForValue(exec, r[src].jsValue());
+        r[dst] = jsTypeStringForValue(exec, r[src].jsValue(exec));
 
         ++vPC;
         NEXT_OPCODE;
@@ -1635,13 +1635,13 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int property = (++vPC)->u.operand;
         int base = (++vPC)->u.operand;
 
-        JSValue* baseVal = r[base].jsValue();
+        JSValue* baseVal = r[base].jsValue(exec);
         if (isNotObject(exec, false, codeBlock, vPC, baseVal, exceptionValue))
             goto vm_throw;
 
         JSObject* baseObj = static_cast<JSObject*>(baseVal);
 
-        JSValue* propName = r[property].jsValue();
+        JSValue* propName = r[property].jsValue(exec);
 
         uint32_t i;
         if (propName->getUInt32(i))
@@ -1724,7 +1724,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
 
         ASSERT((*iter)->isVariableObject());
         JSVariableObject* scope = static_cast<JSVariableObject*>(*iter);
-        scope->registerAt(index) = r[value].jsValue();
+        scope->registerAt(index) = r[value].jsValue(exec);
         ++vPC;
         NEXT_OPCODE;
     }
@@ -1792,7 +1792,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int property = (++vPC)->u.operand;
 
         Identifier& ident = codeBlock->identifiers[property];
-        JSValue *result = r[base].jsValue()->get(exec, ident);
+        JSValue *result = r[base].jsValue(exec)->get(exec, ident);
         VM_CHECK_EXCEPTION();
         r[dst] = result;
         ++vPC;
@@ -1812,7 +1812,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int value = (++vPC)->u.operand;
 
         Identifier& ident = codeBlock->identifiers[property];
-        r[base].jsValue()->put(exec, ident, r[value].jsValue());
+        r[base].jsValue(exec)->put(exec, ident, r[value].jsValue(exec));
 
         VM_CHECK_EXCEPTION();
         ++vPC;
@@ -1830,7 +1830,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int base = (++vPC)->u.operand;
         int property = (++vPC)->u.operand;
 
-        JSObject* baseObj = r[base].jsValue()->toObject(exec);
+        JSObject* baseObj = r[base].jsValue(exec)->toObject(exec);
 
         Identifier& ident = codeBlock->identifiers[property];
         JSValue* result = jsBoolean(baseObj->deleteProperty(exec, ident));
@@ -1851,8 +1851,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int base = (++vPC)->u.operand;
         int property = (++vPC)->u.operand;
 
-        JSValue* baseValue = r[base].jsValue();
-        JSValue* subscript = r[property].jsValue();
+        JSValue* baseValue = r[base].jsValue(exec);
+        JSValue* subscript = r[property].jsValue(exec);
 
         JSValue* result;
         unsigned i;
@@ -1894,8 +1894,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int property = (++vPC)->u.operand;
         int value = (++vPC)->u.operand;
 
-        JSValue* baseValue = r[base].jsValue();
-        JSValue* subscript = r[property].jsValue();
+        JSValue* baseValue = r[base].jsValue(exec);
+        JSValue* subscript = r[property].jsValue(exec);
 
         unsigned i;
 
@@ -1904,15 +1904,15 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
             if (isJSArray(baseValue)) {
                 JSArray* jsArray = static_cast<JSArray*>(baseValue);
                 if (jsArray->canSetIndex(i))
-                    jsArray->setIndex(i, r[value].jsValue());
+                    jsArray->setIndex(i, r[value].jsValue(exec));
                 else
-                    jsArray->JSArray::put(exec, i, r[value].jsValue());
+                    jsArray->JSArray::put(exec, i, r[value].jsValue(exec));
             } else
-                baseValue->put(exec, i, r[value].jsValue());
+                baseValue->put(exec, i, r[value].jsValue(exec));
         } else {
             Identifier property(exec, subscript->toString(exec));
             if (!exec->hadException()) // Don't put to an object if toString threw an exception.
-                baseValue->put(exec, property, r[value].jsValue());
+                baseValue->put(exec, property, r[value].jsValue(exec));
         }
 
         VM_CHECK_EXCEPTION();
@@ -1931,9 +1931,9 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int base = (++vPC)->u.operand;
         int property = (++vPC)->u.operand;
 
-        JSObject* baseObj = r[base].jsValue()->toObject(exec); // may throw
+        JSObject* baseObj = r[base].jsValue(exec)->toObject(exec); // may throw
 
-        JSValue* subscript = r[property].jsValue();
+        JSValue* subscript = r[property].jsValue(exec);
         JSValue* result;
         uint32_t i;
         if (subscript->getUInt32(i))
@@ -1966,7 +1966,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         unsigned property = (++vPC)->u.operand;
         int value = (++vPC)->u.operand;
 
-        r[base].jsValue()->put(exec, property, r[value].jsValue());
+        r[base].jsValue(exec)->put(exec, property, r[value].jsValue(exec));
 
         ++vPC;
         NEXT_OPCODE;
@@ -2013,7 +2013,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
          */
         int cond = (++vPC)->u.operand;
         int target = (++vPC)->u.operand;
-        if (r[cond].jsValue()->toBoolean(exec)) {
+        if (r[cond].jsValue(exec)->toBoolean(exec)) {
             vPC += target;
             CHECK_FOR_TIMEOUT();
             NEXT_OPCODE;
@@ -2030,7 +2030,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         */
         int cond = (++vPC)->u.operand;
         int target = (++vPC)->u.operand;
-        if (r[cond].jsValue()->toBoolean(exec)) {
+        if (r[cond].jsValue(exec)->toBoolean(exec)) {
             vPC += target;
             NEXT_OPCODE;
         }
@@ -2046,7 +2046,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         */
         int cond = (++vPC)->u.operand;
         int target = (++vPC)->u.operand;
-        if (!r[cond].jsValue()->toBoolean(exec)) {
+        if (!r[cond].jsValue(exec)->toBoolean(exec)) {
             vPC += target;
             NEXT_OPCODE;
         }
@@ -2065,8 +2065,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            Additionally this loop instruction may terminate JS execution is
            the JS timeout is reached.
          */
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         int target = (++vPC)->u.operand;
         
         bool result = jsLess(exec, src1, src2);
@@ -2089,8 +2089,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            target from the current instruction, if and only if the 
            result of the comparison is true.
         */
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         int target = (++vPC)->u.operand;
 
         bool result = jsLess(exec, src1, src2);
@@ -2112,8 +2112,8 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            target from the current instruction, if and only if the 
            result of the comparison is false.
         */
-        JSValue* src1 = r[(++vPC)->u.operand].jsValue();
-        JSValue* src2 = r[(++vPC)->u.operand].jsValue();
+        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
+        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
         int target = (++vPC)->u.operand;
 
         bool result = jsLess(exec, src1, src2);
@@ -2177,11 +2177,11 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int firstArg = (++vPC)->u.operand;
         int argCount = (++vPC)->u.operand;
 
-        JSValue* funcVal = r[func].jsValue();
-        JSValue* baseVal = r[thisVal].jsValue();
+        JSValue* funcVal = r[func].jsValue(exec);
+        JSValue* baseVal = r[thisVal].jsValue(exec);
 
         if (baseVal == scopeChain->globalObject() && funcVal == scopeChain->globalObject()->evalFunction()) {
-            JSObject* thisObject = static_cast<JSObject*>(r[codeBlock->thisRegister].jsValue());
+            JSObject* thisObject = static_cast<JSObject*>(r[codeBlock->thisRegister].jsValue(exec));
             JSValue* result = callEval(exec, thisObject, scopeChain, registerFile, r, firstArg, argCount, exceptionValue);
             if (exceptionValue)
                 goto vm_throw;
@@ -2249,7 +2249,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int firstArg = (++vPC)->u.operand;
         int argCount = (++vPC)->u.operand;
 
-        JSValue* v = r[func].jsValue();
+        JSValue* v = r[func].jsValue(exec);
 
         CallData callData;
         CallType callType = v->getCallData(callData);
@@ -2262,7 +2262,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
             FunctionBodyNode* functionBodyNode = callData.js.functionBody;
             CodeBlock* newCodeBlock = &functionBodyNode->byteCode(callDataScopeChain);
 
-            r[firstArg] = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].jsValue();
+            r[firstArg] = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].jsValue(exec);
 
             Register* callFrame = r + firstArg - RegisterFile::CallFrameHeaderSize;
             initializeCallFrame(callFrame, codeBlock, vPC, scopeChain, r, dst, firstArg, argCount, 0, v);
@@ -2288,7 +2288,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
             if (*enabledProfilerReference)
                 (*enabledProfilerReference)->willExecute(exec, static_cast<JSObject*>(v));
 
-            JSValue* thisValue = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].jsValue();
+            JSValue* thisValue = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].jsValue(exec);
             ArgList args(r + firstArg + 1, argCount - 1);
 
             JSValue* returnValue = callData.native.function(exec, static_cast<JSObject*>(v), thisValue, args);
@@ -2321,21 +2321,21 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int result = (++vPC)->u.operand;
 
         Register* callFrame = r - codeBlock->numLocals - RegisterFile::CallFrameHeaderSize;
-        if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue())) {
+        if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue(exec))) {
             ASSERT(!codeBlock->needsFullScopeChain || scopeChain->object == activation);
             ASSERT(activation->isActivationObject());
             activation->copyRegisters();
         }
 
         if (*enabledProfilerReference)
-            (*enabledProfilerReference)->didExecute(exec, static_cast<JSObject*>(callFrame[RegisterFile::Callee].jsValue()));
+            (*enabledProfilerReference)->didExecute(exec, static_cast<JSObject*>(callFrame[RegisterFile::Callee].jsValue(exec)));
 
         if (codeBlock->needsFullScopeChain)
             scopeChain->deref();
 
-        JSValue* returnValue = r[result].jsValue();
+        JSValue* returnValue = r[result].jsValue(exec);
         if (callFrame[RegisterFile::CalledAsConstructor].i() && !returnValue->isObject()) {
-            JSValue* thisObject = callFrame[RegisterFile::CallFrameHeaderSize].jsValue();
+            JSValue* thisObject = callFrame[RegisterFile::CallFrameHeaderSize].jsValue(exec);
             returnValue = thisObject;
         }
 
@@ -2369,7 +2369,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int firstArg = (++vPC)->u.operand;
         int argCount = (++vPC)->u.operand;
 
-        JSValue* constrVal = r[constr].jsValue();
+        JSValue* constrVal = r[constr].jsValue(exec);
 
         ConstructData constructData;
         ConstructType constructType = constrVal->getConstructData(constructData);
@@ -2440,7 +2440,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
            of the current scope chain.
         */
         int scope = (++vPC)->u.operand;
-        JSValue* v = r[scope].jsValue();
+        JSValue* v = r[scope].jsValue(exec);
         JSObject* o = v->toObject(exec);
         VM_CHECK_EXCEPTION();
 
@@ -2470,7 +2470,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int dst = (++vPC)->u.operand;
         int base = (++vPC)->u.operand;
 
-        r[dst] = JSPropertyNameIterator::create(exec, r[base].jsValue());
+        r[dst] = JSPropertyNameIterator::create(exec, r[base].jsValue(exec));
         ++vPC;
         NEXT_OPCODE;
     }
@@ -2545,7 +2545,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         */
 
         int ex = (++vPC)->u.operand;
-        exceptionValue = r[ex].jsValue();
+        exceptionValue = r[ex].jsValue(exec);
 
         handlerVPC = throwException(exec, exceptionValue, vPC, codeBlock, k, scopeChain, r, true);
         if (!handlerVPC) {
@@ -2577,7 +2577,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int type = (++vPC)->u.operand;
         int message = (++vPC)->u.operand;
 
-        r[dst] = Error::create(exec, (ErrorType)type, k[message].toString(exec), codeBlock->lineNumberForVPC(vPC), codeBlock->ownerNode->sourceId(), codeBlock->ownerNode->sourceURL());
+        r[dst] = Error::create(exec, (ErrorType)type, k[message].jsValue(exec)->toString(exec), codeBlock->lineNumberForVPC(vPC), codeBlock->ownerNode->sourceId(), codeBlock->ownerNode->sourceURL());
 
         ++vPC;
         NEXT_OPCODE;
@@ -2594,7 +2594,7 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
             scopeChain->deref();
         }
         int result = (++vPC)->u.operand;
-        return r[result].jsValue();
+        return r[result].jsValue(exec);
     }
     BEGIN_OPCODE(op_put_getter) {
         /* put_getter base(r) property(id) function(r)
@@ -2611,11 +2611,11 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int property = (++vPC)->u.operand;
         int function = (++vPC)->u.operand;
 
-        ASSERT(r[base].jsValue()->isObject());
-        JSObject* baseObj = static_cast<JSObject*>(r[base].jsValue());
+        ASSERT(r[base].jsValue(exec)->isObject());
+        JSObject* baseObj = static_cast<JSObject*>(r[base].jsValue(exec));
         Identifier& ident = codeBlock->identifiers[property];
-        ASSERT(r[function].jsValue()->isObject());
-        baseObj->defineGetter(exec, ident, static_cast<JSObject*>(r[function].jsValue()));
+        ASSERT(r[function].jsValue(exec)->isObject());
+        baseObj->defineGetter(exec, ident, static_cast<JSObject*>(r[function].jsValue(exec)));
 
         ++vPC;
         NEXT_OPCODE;
@@ -2635,11 +2635,11 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         int property = (++vPC)->u.operand;
         int function = (++vPC)->u.operand;
 
-        ASSERT(r[base].jsValue()->isObject());
-        JSObject* baseObj = static_cast<JSObject*>(r[base].jsValue());
+        ASSERT(r[base].jsValue(exec)->isObject());
+        JSObject* baseObj = static_cast<JSObject*>(r[base].jsValue(exec));
         Identifier& ident = codeBlock->identifiers[property];
-        ASSERT(r[function].jsValue()->isObject());
-        baseObj->defineSetter(exec, ident, static_cast<JSObject*>(r[function].jsValue()));
+        ASSERT(r[function].jsValue(exec)->isObject());
+        baseObj->defineSetter(exec, ident, static_cast<JSObject*>(r[function].jsValue(exec)));
 
         ++vPC;
         NEXT_OPCODE;
@@ -2707,7 +2707,7 @@ JSValue* Machine::retrieveArguments(ExecState* exec, JSFunction* function) const
     if (!callFrame)
         return jsNull();
 
-    JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue());
+    JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue(exec));
     if (!activation) {
         CodeBlock* codeBlock = &function->m_body->generatedByteCode();
         activation = new (exec) JSActivation(function->m_body, callFrame + RegisterFile::CallFrameHeaderSize + codeBlock->numLocals);
@@ -2728,7 +2728,7 @@ JSValue* Machine::retrieveCaller(ExecState* exec, JSFunction* function) const
         return jsNull();
 
     Register* callerCallFrame = callFrame[RegisterFile::CallerRegisters].r() - callerCodeBlock->numLocals - RegisterFile::CallFrameHeaderSize;
-    if (JSValue* caller = callerCallFrame[RegisterFile::Callee].jsValue())
+    if (JSValue* caller = callerCallFrame[RegisterFile::Callee].jsValue(exec))
         return caller;
 
     return jsNull();
@@ -2746,7 +2746,7 @@ Register* Machine::callFrame(ExecState* exec, JSFunction* function) const
             callFrame = exec->m_callFrame;
         }
 
-        if (callFrame[RegisterFile::Callee].jsValue() == function)
+        if (callFrame[RegisterFile::Callee].jsValue(exec) == function)
             return callFrame;
 
         CodeBlock* callerCodeBlock = callFrame[RegisterFile::CallerCodeBlock].codeBlock();
@@ -2761,7 +2761,7 @@ Register* Machine::callFrame(ExecState* exec, JSFunction* function) const
 
 void Machine::getArgumentsData(Register* callFrame, JSFunction*& function, Register*& argv, int& argc)
 {
-    function = static_cast<JSFunction*>(callFrame[RegisterFile::Callee].jsValue());
+    function = static_cast<JSFunction*>(callFrame[RegisterFile::Callee].getJSValue());
     ASSERT(function->inherits(&JSFunction::info));
 
     argv = callFrame[RegisterFile::CallerRegisters].r() + callFrame[RegisterFile::ArgumentStartRegister].i() + 1; //  + 1 to skip "this"
index 16dadd4..0f3e863 100644 (file)
@@ -41,23 +41,20 @@ namespace KJS {
     class JSValue;
     class ScopeChainNode;
     struct Instruction;
+    
+    static JSValue* const nullJSValue = 0;
 
     class Register {
     public:
         Register();
         Register(JSValue*);
 
-        JSValue* jsValue() const;
+        JSValue* jsValue(ExecState*) const;
+        JSValue* getJSValue() const;
 
         bool marked() const;
         void mark();
         
-        bool isString() const;
-        
-        uint32_t toUInt32(ExecState*) const;
-        UString toString(ExecState*) const;
-        
-
     private:
         friend class Machine;
 
@@ -76,6 +73,7 @@ namespace KJS {
         Register* r() const;
         Instruction* vPC() const;
         JSPropertyNameIterator* jsPropertyNameIterator() const;
+        void* v() const;
 
         union {
         private:
@@ -87,6 +85,7 @@ namespace KJS {
             ScopeChainNode* scopeChain;
             JSPropertyNameIterator* jsPropertyNameIterator;
             Register* r;
+            void* v;
             intptr_t i;
         } u;
 
@@ -106,7 +105,7 @@ namespace KJS {
     ALWAYS_INLINE Register::Register()
     {
 #ifndef NDEBUG
-        *this = static_cast<intptr_t>(0);
+        *this = nullJSValue;
 #endif
     }
 
@@ -118,6 +117,33 @@ namespace KJS {
         u.jsValue = v;
     }
     
+    // This function is scaffolding for legacy clients. It will eventually go away.
+    ALWAYS_INLINE JSValue* Register::jsValue(ExecState*) const
+    {
+        // Once registers hold doubles, this function will allocate a JSValue*
+        // if the register doesn't hold one already. 
+        ASSERT(m_type == JSValueType);
+        return u.jsValue;
+    }
+    
+    ALWAYS_INLINE JSValue* Register::getJSValue() const
+    {
+        ASSERT(m_type == JSValueType);
+        return u.jsValue;
+    }
+    
+    ALWAYS_INLINE bool Register::marked() const
+    {
+        return getJSValue()->marked();
+    }
+
+    ALWAYS_INLINE void Register::mark()
+    {
+        getJSValue()->mark();
+    }
+    
+    // Machine functions
+
     ALWAYS_INLINE Register::Register(CodeBlock* codeBlock)
     {
 #ifndef NDEBUG
@@ -166,12 +192,6 @@ namespace KJS {
         u.i = i;
     }
 
-    ALWAYS_INLINE JSValue* Register::jsValue() const
-    {
-        ASSERT(m_type == JSValueType || !i());
-        return u.jsValue;
-    }
-    
     ALWAYS_INLINE CodeBlock* Register::codeBlock() const
     {
         ASSERT(m_type == CodeBlockType);
@@ -208,29 +228,9 @@ namespace KJS {
         return u.jsPropertyNameIterator;
     }
     
-    ALWAYS_INLINE bool Register::marked() const
-    {
-        return jsValue()->marked();
-    }
-
-    ALWAYS_INLINE void Register::mark()
-    {
-        jsValue()->mark();
-    }
-    
-    ALWAYS_INLINE bool Register::isString() const
-    {
-        return jsValue()->isString();
-    }
-
-    ALWAYS_INLINE uint32_t Register::toUInt32(ExecState* exec) const
-    {
-        return jsValue()->toUInt32(exec);
-    }
-
-    ALWAYS_INLINE UString Register::toString(ExecState* exec) const
+    ALWAYS_INLINE void* Register::v() const
     {
-        return jsValue()->toString(exec);
+        return u.v;
     }
 
 } // namespace KJS
index fce1014..5061c3e 100644 (file)
@@ -75,15 +75,13 @@ namespace KJS {
         size_t size() const { return m_size; }
         bool isEmpty() const { return !m_size; }
 
-        JSValue* at(size_t i) const
+        JSValue* at(ExecState* exec, size_t i) const
         {
             if (i < m_size)
-                return m_buffer[i].jsValue();
+                return m_buffer[i].jsValue(exec);
             return jsUndefined();
         }
 
-        JSValue* operator[](int i) const { return at(i); }
-
         void clear()
         {
             m_vector.clear();
@@ -130,7 +128,12 @@ namespace KJS {
 
     private:
         // Prohibits new / delete, which would break GC.
-        void* operator new(size_t);
+        friend class JSGlobalData;
+        
+        void* ArgList::operator new(size_t size)
+        {
+            return fastMalloc(size);
+        }
         void operator delete(void*);
 
         void* operator new[](size_t);
index d99090c..2519c28 100644 (file)
@@ -48,7 +48,7 @@ Arguments::Arguments(ExecState* exec, JSFunction* function, const ArgList& args,
     for (ArgList::const_iterator it = args.begin(); it != end; ++it, ++i) {
         Identifier name = Identifier::from(exec, i);
         if (!m_indexToNameMap.isMapped(name))
-            putDirect(name, (*it).jsValue(), DontEnum);
+            putDirect(name, (*it).jsValue(exec), DontEnum);
     }
 }
 
index af0342a..aac0500 100644 (file)
@@ -44,15 +44,15 @@ ArrayConstructor::ArrayConstructor(ExecState* exec, FunctionPrototype* functionP
 static JSObject* constructArrayWithSizeQuirk(ExecState* exec, const ArgList& args)
 {
     // a single numeric argument denotes the array size (!)
-    if (args.size() == 1 && args[0]->isNumber()) {
-        uint32_t n = args[0]->toUInt32(exec);
-        if (n != args[0]->toNumber(exec))
+    if (args.size() == 1 && args.at(exec, 0)->isNumber()) {
+        uint32_t n = args.at(exec, 0)->toUInt32(exec);
+        if (n != args.at(exec, 0)->toNumber(exec))
             return throwError(exec, RangeError, "Array size is not a small enough positive integer.");
         return new (exec) JSArray(exec->lexicalGlobalObject()->arrayPrototype(), n);
     }
 
     // otherwise the array is constructed with the arguments in it
-    return new (exec) JSArray(exec->lexicalGlobalObject()->arrayPrototype(), args);
+    return new (exec) JSArray(exec, exec->lexicalGlobalObject()->arrayPrototype(), args);
 }
 
 static JSObject* constructWithArrayConstructor(ExecState* exec, JSObject*, const ArgList& args)
index da90dae..15e5712 100644 (file)
@@ -221,7 +221,7 @@ JSValue* arrayProtoFuncJoin(ExecState* exec, JSObject*, JSValue* thisValue, cons
         return jsString(exec, UString(0, 0)); // return an empty string, avoding infinite recursion.
 
     UChar comma = ',';
-    UString separator = args[0]->isUndefined() ? UString(&comma, 1) : args[0]->toString(exec);
+    UString separator = args.at(exec, 0)->isUndefined() ? UString(&comma, 1) : args.at(exec, 0)->toString(exec);
 
     unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec);
     for (unsigned k = 0; k < length; k++) {
@@ -274,7 +274,7 @@ JSValue* arrayProtoFuncConcat(ExecState* exec, JSObject*, JSValue* thisValue, co
         }
         if (it == end)
             break;
-        curArg = (*it).jsValue();
+        curArg = (*it).jsValue(exec);
         ++it;
     }
     arr->setLength(n);
@@ -302,7 +302,7 @@ JSValue* arrayProtoFuncPush(ExecState* exec, JSObject*, JSValue* thisValue, cons
     JSObject* thisObj = thisValue->toThisObject(exec);
     unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec);
     for (unsigned n = 0; n < args.size(); n++)
-        thisObj->put(exec, length + n, args[n]);
+        thisObj->put(exec, length + n, args.at(exec, n));
     length += args.size();
     thisObj->put(exec, exec->propertyNames().length, jsNumber(exec, length));
     return jsNumber(exec, length);
@@ -364,7 +364,7 @@ JSValue* arrayProtoFuncSlice(ExecState* exec, JSObject*, JSValue* thisValue, con
     // We return a new array
     JSArray* resObj = constructEmptyArray(exec);
     JSValue* result = resObj;
-    double begin = args[0]->toInteger(exec);
+    double begin = args.at(exec, 0)->toInteger(exec);
     unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec);
     if (begin >= 0) {
         if (begin > length)
@@ -375,10 +375,10 @@ JSValue* arrayProtoFuncSlice(ExecState* exec, JSObject*, JSValue* thisValue, con
             begin = 0;
     }
     double end;
-    if (args[1]->isUndefined())
+    if (args.at(exec, 1)->isUndefined())
         end = length;
     else {
-        end = args[1]->toInteger(exec);
+        end = args.at(exec, 1)->toInteger(exec);
         if (end < 0) {
             end += length;
             if (end < 0)
@@ -404,7 +404,7 @@ JSValue* arrayProtoFuncSort(ExecState* exec, JSObject*, JSValue* thisValue, cons
 {
     JSObject* thisObj = thisValue->toThisObject(exec);
 
-    JSValue* function = args[0];
+    JSValue* function = args.at(exec, 0);
     CallData callData;
     CallType callType = function->getCallData(callData);
 
@@ -466,7 +466,7 @@ JSValue* arrayProtoFuncSplice(ExecState* exec, JSObject*, JSValue* thisValue, co
     unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec);
     if (!args.size())
         return jsUndefined();
-    int begin = args[0]->toUInt32(exec);
+    int begin = args.at(exec, 0)->toUInt32(exec);
     if (begin < 0)
         begin = std::max<int>(begin + length, 0);
     else
@@ -474,7 +474,7 @@ JSValue* arrayProtoFuncSplice(ExecState* exec, JSObject*, JSValue* thisValue, co
 
     unsigned deleteCount;
     if (args.size() > 1)
-        deleteCount = std::min<int>(std::max<int>(args[1]->toUInt32(exec), 0), length - begin);
+        deleteCount = std::min<int>(std::max<int>(args.at(exec, 1)->toUInt32(exec), 0), length - begin);
     else
         deleteCount = length - begin;
 
@@ -505,7 +505,7 @@ JSValue* arrayProtoFuncSplice(ExecState* exec, JSObject*, JSValue* thisValue, co
         }
     }
     for (unsigned k = 0; k < additionalArgs; ++k)
-        thisObj->put(exec, k + begin, args[k + 2]);
+        thisObj->put(exec, k + begin, args.at(exec, k + 2));
 
     thisObj->put(exec, exec->propertyNames().length, jsNumber(exec, length - deleteCount + additionalArgs));
     return result;
@@ -527,7 +527,7 @@ JSValue* arrayProtoFuncUnShift(ExecState* exec, JSObject*, JSValue* thisValue, c
         }
     }
     for (unsigned k = 0; k < nrArgs; ++k)
-        thisObj->put(exec, k, args[k]);
+        thisObj->put(exec, k, args.at(exec, k));
     JSValue* result = jsNumber(exec, length + nrArgs);
     thisObj->put(exec, exec->propertyNames().length, result);
     return result;
@@ -537,13 +537,13 @@ JSValue* arrayProtoFuncFilter(ExecState* exec, JSObject*, JSValue* thisValue, co
 {
     JSObject* thisObj = thisValue->toThisObject(exec);
 
-    JSValue* function = args[0];
+    JSValue* function = args.at(exec, 0);
     CallData callData;
     CallType callType = function->getCallData(callData);
     if (callType == CallTypeNone)
         return throwError(exec, TypeError);
 
-    JSObject* applyThis = args[1]->isUndefinedOrNull() ? exec->globalThisValue() : args[1]->toObject(exec);
+    JSObject* applyThis = args.at(exec, 1)->isUndefinedOrNull() ? exec->globalThisValue() : args.at(exec, 1)->toObject(exec);
     JSArray* resultArray = constructEmptyArray(exec);
 
     unsigned filterIndex = 0;
@@ -574,13 +574,13 @@ JSValue* arrayProtoFuncMap(ExecState* exec, JSObject*, JSValue* thisValue, const
 {
     JSObject* thisObj = thisValue->toThisObject(exec);
 
-    JSValue* function = args[0];
+    JSValue* function = args.at(exec, 0);
     CallData callData;
     CallType callType = function->getCallData(callData);
     if (callType == CallTypeNone)
         return throwError(exec, TypeError);
 
-    JSObject* applyThis = args[1]->isUndefinedOrNull() ? exec->globalThisValue() : args[1]->toObject(exec);
+    JSObject* applyThis = args.at(exec, 1)->isUndefinedOrNull() ? exec->globalThisValue() : args.at(exec, 1)->toObject(exec);
 
     unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec);
 
@@ -615,13 +615,13 @@ JSValue* arrayProtoFuncEvery(ExecState* exec, JSObject*, JSValue* thisValue, con
 {
     JSObject* thisObj = thisValue->toThisObject(exec);
 
-    JSValue* function = args[0];
+    JSValue* function = args.at(exec, 0);
     CallData callData;
     CallType callType = function->getCallData(callData);
     if (callType == CallTypeNone)
         return throwError(exec, TypeError);
 
-    JSObject* applyThis = args[1]->isUndefinedOrNull() ? exec->globalThisValue() : args[1]->toObject(exec);
+    JSObject* applyThis = args.at(exec, 1)->isUndefinedOrNull() ? exec->globalThisValue() : args.at(exec, 1)->toObject(exec);
 
     JSValue* result = jsBoolean(true);
 
@@ -653,13 +653,13 @@ JSValue* arrayProtoFuncForEach(ExecState* exec, JSObject*, JSValue* thisValue, c
 {
     JSObject* thisObj = thisValue->toThisObject(exec);
 
-    JSValue* function = args[0];
+    JSValue* function = args.at(exec, 0);
     CallData callData;
     CallType callType = function->getCallData(callData);
     if (callType == CallTypeNone)
         return throwError(exec, TypeError);
 
-    JSObject* applyThis = args[1]->isUndefinedOrNull() ? exec->globalThisValue() : args[1]->toObject(exec);
+    JSObject* applyThis = args.at(exec, 1)->isUndefinedOrNull() ? exec->globalThisValue() : args.at(exec, 1)->toObject(exec);
 
     unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec);
     for (unsigned k = 0; k < length && !exec->hadException(); ++k) {
@@ -681,13 +681,13 @@ JSValue* arrayProtoFuncSome(ExecState* exec, JSObject*, JSValue* thisValue, cons
 {
     JSObject* thisObj = thisValue->toThisObject(exec);
 
-    JSValue* function = args[0];
+    JSValue* function = args.at(exec, 0);
     CallData callData;
     CallType callType = function->getCallData(callData);
     if (callType == CallTypeNone)
         return throwError(exec, TypeError);
 
-    JSObject* applyThis = args[1]->isUndefinedOrNull() ? exec->globalThisValue() : args[1]->toObject(exec);
+    JSObject* applyThis = args.at(exec, 1)->isUndefinedOrNull() ? exec->globalThisValue() : args.at(exec, 1)->toObject(exec);
 
     JSValue* result = jsBoolean(false);
 
@@ -720,7 +720,7 @@ JSValue* arrayProtoFuncIndexOf(ExecState* exec, JSObject*, JSValue* thisValue, c
     JSObject* thisObj = thisValue->toThisObject(exec);
 
     unsigned index = 0;
-    double d = args[1]->toInteger(exec);
+    double d = args.at(exec, 1)->toInteger(exec);
     unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec);
     if (d < 0)
         d += length;
@@ -731,7 +731,7 @@ JSValue* arrayProtoFuncIndexOf(ExecState* exec, JSObject*, JSValue* thisValue, c
             index = static_cast<unsigned>(d);
     }
 
-    JSValue* searchElement = args[0];
+    JSValue* searchElement = args.at(exec, 0);
     for (; index < length; ++index) {
         JSValue* e = getProperty(exec, thisObj, index);
         if (!e)
@@ -752,7 +752,7 @@ JSValue* arrayProtoFuncLastIndexOf(ExecState* exec, JSObject*, JSValue* thisValu
 
     unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec);
     int index = length - 1;
-    double d = args[1]->toIntegerPreserveNaN(exec);
+    double d = args.at(exec, 1)->toIntegerPreserveNaN(exec);
 
     if (d < 0) {
         d += length;
@@ -762,7 +762,7 @@ JSValue* arrayProtoFuncLastIndexOf(ExecState* exec, JSObject*, JSValue* thisValu
     if (d < length)
         index = static_cast<int>(d);
 
-    JSValue* searchElement = args[0];
+    JSValue* searchElement = args.at(exec, 0);
     for (; index >= 0; --index) {
         JSValue* e = getProperty(exec, thisObj, index);
         if (!e)
index 115823b..47e8498 100644 (file)
@@ -39,7 +39,7 @@ BooleanConstructor::BooleanConstructor(ExecState* exec, FunctionPrototype* funct
 JSObject* constructBoolean(ExecState* exec, const ArgList& args)
 {
     BooleanObject* obj = new (exec) BooleanObject(exec->lexicalGlobalObject()->booleanPrototype());
-    obj->setInternalValue(jsBoolean(args[0]->toBoolean(exec)));
+    obj->setInternalValue(jsBoolean(args.at(exec, 0)->toBoolean(exec)));
     return obj;
 }
 
@@ -57,7 +57,7 @@ ConstructType BooleanConstructor::getConstructData(ConstructData& constructData)
 // ECMA 15.6.1
 static JSValue* callBooleanConstructor(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsBoolean(args[0]->toBoolean(exec));
+    return jsBoolean(args.at(exec, 0)->toBoolean(exec));
 }
 
 CallType BooleanConstructor::getCallData(CallData& callData)
index 8ff77e3..1c8296f 100644 (file)
@@ -71,35 +71,35 @@ static JSObject* constructDate(ExecState* exec, JSObject*, const ArgList& args)
     if (numArgs == 0) // new Date() ECMA 15.9.3.3
         value = getCurrentUTCTime();
     else if (numArgs == 1) {
-        if (args[0]->isObject(&DateInstance::info))
-            value = static_cast<DateInstance*>(args[0])->internalNumber();
+        if (args.at(exec, 0)->isObject(&DateInstance::info))
+            value = static_cast<DateInstance*>(args.at(exec, 0))->internalNumber();
         else {
-            JSValue* primitive = args[0]->toPrimitive(exec);
+            JSValue* primitive = args.at(exec, 0)->toPrimitive(exec);
             if (primitive->isString())
                 value = parseDate(primitive->getString());
             else
                 value = primitive->toNumber(exec);
         }
     } else {
-        if (isnan(args[0]->toNumber(exec))
-                || isnan(args[1]->toNumber(exec))
-                || (numArgs >= 3 && isnan(args[2]->toNumber(exec)))
-                || (numArgs >= 4 && isnan(args[3]->toNumber(exec)))
-                || (numArgs >= 5 && isnan(args[4]->toNumber(exec)))
-                || (numArgs >= 6 && isnan(args[5]->toNumber(exec)))
-                || (numArgs >= 7 && isnan(args[6]->toNumber(exec))))
+        if (isnan(args.at(exec, 0)->toNumber(exec))
+                || isnan(args.at(exec, 1)->toNumber(exec))
+                || (numArgs >= 3 && isnan(args.at(exec, 2)->toNumber(exec)))
+                || (numArgs >= 4 && isnan(args.at(exec, 3)->toNumber(exec)))
+                || (numArgs >= 5 && isnan(args.at(exec, 4)->toNumber(exec)))
+                || (numArgs >= 6 && isnan(args.at(exec, 5)->toNumber(exec)))
+                || (numArgs >= 7 && isnan(args.at(exec, 6)->toNumber(exec))))
             value = NaN;
         else {
           GregorianDateTime t;
-          int year = args[0]->toInt32(exec);
+          int year = args.at(exec, 0)->toInt32(exec);
           t.year = (year >= 0 && year <= 99) ? year : year - 1900;
-          t.month = args[1]->toInt32(exec);
-          t.monthDay = (numArgs >= 3) ? args[2]->toInt32(exec) : 1;
-          t.hour = args[3]->toInt32(exec);
-          t.minute = args[4]->toInt32(exec);
-          t.second = args[5]->toInt32(exec);
+          t.month = args.at(exec, 1)->toInt32(exec);
+          t.monthDay = (numArgs >= 3) ? args.at(exec, 2)->toInt32(exec) : 1;
+          t.hour = args.at(exec, 3)->toInt32(exec);
+          t.minute = args.at(exec, 4)->toInt32(exec);
+          t.second = args.at(exec, 5)->toInt32(exec);
           t.isDST = -1;
-          double ms = (numArgs >= 7) ? args[6]->toNumber(exec) : 0;
+          double ms = (numArgs >= 7) ? args.at(exec, 6)->toNumber(exec) : 0;
           value = gregorianDateTimeToMS(t, ms, false);
         }
     }
@@ -133,7 +133,7 @@ CallType DateConstructor::getCallData(CallData& callData)
 
 static JSValue* dateParse(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, parseDate(args[0]->toString(exec)));
+    return jsNumber(exec, parseDate(args.at(exec, 0)->toString(exec)));
 }
 
 static JSValue* dateNow(ExecState* exec, JSObject*, JSValue*, const ArgList&)
@@ -144,24 +144,24 @@ static JSValue* dateNow(ExecState* exec, JSObject*, JSValue*, const ArgList&)
 static JSValue* dateUTC(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
     int n = args.size();
-    if (isnan(args[0]->toNumber(exec))
-            || isnan(args[1]->toNumber(exec))
-            || (n >= 3 && isnan(args[2]->toNumber(exec)))
-            || (n >= 4 && isnan(args[3]->toNumber(exec)))
-            || (n >= 5 && isnan(args[4]->toNumber(exec)))
-            || (n >= 6 && isnan(args[5]->toNumber(exec)))
-            || (n >= 7 && isnan(args[6]->toNumber(exec))))
+    if (isnan(args.at(exec, 0)->toNumber(exec))
+            || isnan(args.at(exec, 1)->toNumber(exec))
+            || (n >= 3 && isnan(args.at(exec, 2)->toNumber(exec)))
+            || (n >= 4 && isnan(args.at(exec, 3)->toNumber(exec)))
+            || (n >= 5 && isnan(args.at(exec, 4)->toNumber(exec)))
+            || (n >= 6 && isnan(args.at(exec, 5)->toNumber(exec)))
+            || (n >= 7 && isnan(args.at(exec, 6)->toNumber(exec))))
         return jsNaN(exec);
 
     GregorianDateTime t;
-    int year = args[0]->toInt32(exec);
+    int year = args.at(exec, 0)->toInt32(exec);
     t.year = (year >= 0 && year <= 99) ? year : year - 1900;
-    t.month = args[1]->toInt32(exec);
-    t.monthDay = (n >= 3) ? args[2]->toInt32(exec) : 1;
-    t.hour = args[3]->toInt32(exec);
-    t.minute = args[4]->toInt32(exec);
-    t.second = args[5]->toInt32(exec);
-    double ms = (n >= 7) ? args[6]->toNumber(exec) : 0;
+    t.month = args.at(exec, 1)->toInt32(exec);
+    t.monthDay = (n >= 3) ? args.at(exec, 2)->toInt32(exec) : 1;
+    t.hour = args.at(exec, 3)->toInt32(exec);
+    t.minute = args.at(exec, 4)->toInt32(exec);
+    t.second = args.at(exec, 5)->toInt32(exec);
+    double ms = (n >= 7) ? args.at(exec, 6)->toNumber(exec) : 0;
     return jsNumber(exec, gregorianDateTimeToMS(t, ms, true));
 }
 
index c0966dc..6638bed 100644 (file)
@@ -130,16 +130,16 @@ static UString formatLocaleDate(ExecState* exec, double time, bool includeDate,
     bool useCustomFormat = false;
     UString customFormatString;
 
-    UString arg0String = args[0]->toString(exec);
-    if (arg0String == "custom" && !args[1]->isUndefined()) {
+    UString arg0String = args.at(exec, 0)->toString(exec);
+    if (arg0String == "custom" && !args.at(exec, 1)->isUndefined()) {
         useCustomFormat = true;
-        customFormatString = args[1]->toString(exec);
-    } else if (includeDate && includeTime && !args[1]->isUndefined()) {
+        customFormatString = args.at(exec, 1)->toString(exec);
+    } else if (includeDate && includeTime && !args.at(exec, 1)->isUndefined()) {
         dateStyle = styleFromArgString(arg0String, dateStyle);
-        timeStyle = styleFromArgString(args[1]->toString(exec), timeStyle);
-    } else if (includeDate && !args[0]->isUndefined())
+        timeStyle = styleFromArgString(args.at(exec, 1)->toString(exec), timeStyle);
+    } else if (includeDate && !args.at(exec, 0)->isUndefined())
         dateStyle = styleFromArgString(arg0String, dateStyle);
-    else if (includeTime && !args[0]->isUndefined())
+    else if (includeTime && !args.at(exec, 0)->isUndefined())
         timeStyle = styleFromArgString(arg0String, timeStyle);
 
     CFLocaleRef locale = CFLocaleCopyCurrent();
@@ -229,19 +229,19 @@ static bool fillStructuresUsingTimeArgs(ExecState* exec, const ArgList& args, in
     // hours
     if (maxArgs >= 4 && idx < numArgs) {
         t->hour = 0;
-        milliseconds += args[idx++]->toInt32(exec, ok) * msPerHour;
+        milliseconds += args.at(exec, idx++)->toInt32(exec, ok) * msPerHour;
     }
 
     // minutes
     if (maxArgs >= 3 && idx < numArgs && ok) {
         t->minute = 0;
-        milliseconds += args[idx++]->toInt32(exec, ok) * msPerMinute;
+        milliseconds += args.at(exec, idx++)->toInt32(exec, ok) * msPerMinute;
     }
     
     // seconds
     if (maxArgs >= 2 && idx < numArgs && ok) {
         t->second = 0;
-        milliseconds += args[idx++]->toInt32(exec, ok) * msPerSecond;
+        milliseconds += args.at(exec, idx++)->toInt32(exec, ok) * msPerSecond;
     }
     
     if (!ok)
@@ -249,7 +249,7 @@ static bool fillStructuresUsingTimeArgs(ExecState* exec, const ArgList& args, in
         
     // milliseconds
     if (idx < numArgs) {
-        double millis = args[idx]->toNumber(exec);
+        double millis = args.at(exec, idx)->toNumber(exec);
         ok = isfinite(millis);
         milliseconds += millis;
     } else
@@ -275,16 +275,16 @@ static bool fillStructuresUsingDateArgs(ExecState *exec, const ArgList& args, in
   
     // years
     if (maxArgs >= 3 && idx < numArgs)
-        t->year = args[idx++]->toInt32(exec, ok) - 1900;
+        t->year = args.at(exec, idx++)->toInt32(exec, ok) - 1900;
     
     // months
     if (maxArgs >= 2 && idx < numArgs && ok)   
-        t->month = args[idx++]->toInt32(exec, ok);
+        t->month = args.at(exec, idx++)->toInt32(exec, ok);
     
     // days
     if (idx < numArgs && ok) {   
         t->monthDay = 0;
-        *ms += args[idx]->toInt32(exec, ok) * msPerDay;
+        *ms += args.at(exec, idx)->toInt32(exec, ok) * msPerDay;
     }
     
     return ok;
@@ -832,7 +832,7 @@ JSValue* dateProtoFuncSetTime(ExecState* exec, JSObject*, JSValue* thisValue, co
 
     DateInstance* thisDateObj = static_cast<DateInstance*>(thisValue); 
 
-    double milli = timeClip(args[0]->toNumber(exec));
+    double milli = timeClip(args.at(exec, 0)->toNumber(exec));
     JSValue* result = jsNumber(exec, milli);
     thisDateObj->setInternalValue(result);
     return result;
@@ -1019,7 +1019,7 @@ JSValue* dateProtoFuncSetYear(ExecState* exec, JSObject*, JSValue* thisValue, co
     }
     
     bool ok = true;
-    int32_t year = args[0]->toInt32(exec, ok);
+    int32_t year = args.at(exec, 0)->toInt32(exec, ok);
     if (!ok) {
         JSValue* result = jsNaN(exec);
         thisDateObj->setInternalValue(result);
index 2af5050..27e71fa 100644 (file)
@@ -46,7 +46,7 @@ const UString* DebuggerCallFrame::functionName() const
     if (!m_codeBlock)
         return 0;
 
-    JSFunction* function = static_cast<JSFunction*>(callFrame()[RegisterFile::Callee].jsValue());
+    JSFunction* function = static_cast<JSFunction*>(callFrame()[RegisterFile::Callee].getJSValue());
     if (!function)
         return 0;
     return &function->functionName().ustring();
@@ -54,7 +54,7 @@ const UString* DebuggerCallFrame::functionName() const
 
 DebuggerCallFrame::Type DebuggerCallFrame::type() const
 {
-    if (callFrame()[RegisterFile::Callee].jsValue())
+    if (callFrame()[RegisterFile::Callee].getJSValue())
         return FunctionType;
 
     return ProgramType;
@@ -65,7 +65,7 @@ JSObject* DebuggerCallFrame::thisObject() const
     if (!m_codeBlock)
         return 0;
 
-    return static_cast<JSObject*>(m_registers[m_codeBlock->thisRegister].jsValue());
+    return static_cast<JSObject*>(m_registers[m_codeBlock->thisRegister].getJSValue());
 }
 
 JSValue* DebuggerCallFrame::evaluate(const UString& script, JSValue*& exception) const
index 9679571..ac56830 100644 (file)
@@ -41,8 +41,8 @@ ErrorConstructor::ErrorConstructor(ExecState* exec, FunctionPrototype* functionP
 static ErrorInstance* constructError(ExecState* exec, const ArgList& args)
 {
     ErrorInstance* obj = new (exec) ErrorInstance(exec->lexicalGlobalObject()->errorPrototype());
-    if (!args[0]->isUndefined())
-        obj->putDirect(exec->propertyNames().message, jsString(exec, args[0]->toString(exec)));
+    if (!args.at(exec, 0)->isUndefined())
+        obj->putDirect(exec->propertyNames().message, jsString(exec, args.at(exec, 0)->toString(exec)));
     return obj;
 }
 
index 1106cab..712dfd8 100644 (file)
@@ -32,6 +32,7 @@ namespace KJS  {
     class EvalNode;
     class FunctionBodyNode;
     class JSFunction;
+    class JSValue;
     class GlobalFuncImp;
     class Interpreter;
     class JSGlobalObject;
@@ -76,7 +77,7 @@ namespace KJS  {
 
         IdentifierTable* identifierTable() { return m_globalData->identifierTable; }
         const CommonIdentifiers& propertyNames() const { return *m_globalData->propertyNames; }
-        const ArgList& emptyList() const { return m_globalData->emptyList; }
+        const ArgList& emptyList() const { return *m_globalData->emptyList; }
         Lexer* lexer() { return m_globalData->lexer; }
         Parser* parser() { return m_globalData->parser; }
         Machine* machine() const { return m_globalData->machine; }
index 5f77376..05fa96f 100644 (file)
@@ -73,12 +73,12 @@ JSObject* constructFunction(ExecState* exec, const ArgList& args, const Identifi
     if (argsSize == 0)
         body = "";
     else if (argsSize == 1)
-        body = args[0]->toString(exec);
+        body = args.at(exec, 0)->toString(exec);
     else {
-        p = args[0]->toString(exec);
+        p = args.at(exec, 0)->toString(exec);
         for (int k = 1; k < argsSize - 1; k++)
-            p += "," + args[k]->toString(exec);
-        body = args[argsSize - 1]->toString(exec);
+            p += "," + args.at(exec, k)->toString(exec);
+        body = args.at(exec, argsSize - 1)->toString(exec);
     }
 
     // parse the source code
index 7ab14f7..a39aabc 100644 (file)
@@ -78,8 +78,8 @@ JSValue* functionProtoFuncApply(ExecState* exec, JSObject*, JSValue* thisValue,
     if (callType == CallTypeNone)
         return throwError(exec, TypeError);
 
-    JSValue* thisArg = args[0];
-    JSValue* argArray = args[1];
+    JSValue* thisArg = args.at(exec, 0);
+    JSValue* argArray = args.at(exec, 1);
 
     JSValue* applyThis;
     if (thisArg->isUndefinedOrNull())
@@ -111,7 +111,7 @@ JSValue* functionProtoFuncCall(ExecState* exec, JSObject*, JSValue* thisValue, c
     if (callType == CallTypeNone)
         return throwError(exec, TypeError);
 
-    JSValue* thisArg = args[0];
+    JSValue* thisArg = args.at(exec, 0);
 
     JSObject* callThis;
     if (thisArg->isUndefinedOrNull())
index 17b3c3e..f5bcc21 100644 (file)
@@ -138,7 +138,7 @@ JSArray::JSArray(JSValue* prototype, unsigned initialLength)
     checkConsistency();
 }
 
-JSArray::JSArray(JSObject* prototype, const ArgList& list)
+JSArray::JSArray(ExecState* exec, JSObject* prototype, const ArgList& list)
     : JSObject(prototype)
 {
     unsigned length = list.size();
@@ -155,7 +155,7 @@ JSArray::JSArray(JSObject* prototype, const ArgList& list)
     size_t i = 0;
     ArgList::const_iterator end = list.end();
     for (ArgList::const_iterator it = list.begin(); it != end; ++it, ++i)
-        storage->m_vector[i] = (*it).jsValue();
+        storage->m_vector[i] = (*it).jsValue(exec);
 
     m_storage = storage;
 
@@ -888,12 +888,12 @@ JSArray* constructArray(ExecState* exec, JSValue* singleItemValue)
 {
     ArgList values;
     values.append(singleItemValue);
-    return new (exec) JSArray(exec->lexicalGlobalObject()->arrayPrototype(), values);
+    return new (exec) JSArray(exec, exec->lexicalGlobalObject()->arrayPrototype(), values);
 }
 
 JSArray* constructArray(ExecState* exec, const ArgList& values)
 {
-    return new (exec) JSArray(exec->lexicalGlobalObject()->arrayPrototype(), values);
+    return new (exec) JSArray(exec, exec->lexicalGlobalObject()->arrayPrototype(), values);
 }
 
 } // namespace KJS
index 808df5c..ad9b53f 100644 (file)
@@ -39,7 +39,7 @@ namespace KJS {
     class JSArray : public JSObject {
     public:
         JSArray(JSValue* prototype, unsigned initialLength);
-        JSArray(JSObject* prototype, const ArgList& initialValues);
+        JSArray(ExecState* exec, JSObject* prototype, const ArgList& initialValues);
         virtual ~JSArray();
 
         virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
index cba4481..c534e82 100644 (file)
@@ -55,7 +55,6 @@ extern const HashTable regExpTable;
 extern const HashTable regExpConstructorTable;
 extern const HashTable stringTable;
 
-
 JSGlobalData::JSGlobalData(bool isShared)
     : machine(new Machine)
     , heap(new Heap(this))
@@ -78,6 +77,7 @@ JSGlobalData::JSGlobalData(bool isShared)
 #endif
     , identifierTable(createIdentifierTable())
     , propertyNames(new CommonIdentifiers(this))
+    , emptyList(new ArgList)
     , newParserObjects(0)
     , parserObjectExtraRefCounts(0)
     , lexer(new Lexer(this))
index 8f18284..8e17d10 100644 (file)
@@ -29,7 +29,6 @@
 #ifndef JSGlobalData_h
 #define JSGlobalData_h
 
-#include "ArgList.h"
 #include <wtf/Forward.h>
 #include <wtf/HashCountedSet.h>
 #include <wtf/HashSet.h>
@@ -37,6 +36,7 @@
 
 namespace KJS {
 
+    class ArgList;
     class CommonIdentifiers;
     class Heap;
     class IdentifierTable;
@@ -68,7 +68,7 @@ namespace KJS {
 
         IdentifierTable* identifierTable;
         CommonIdentifiers* propertyNames;
-        const ArgList emptyList; // Lists are supposed to be allocated on the stack to have their elements properly marked, which is not the case here - but this list has nothing to mark.
+        const ArgList* emptyList; // Lists are supposed to be allocated on the stack to have their elements properly marked, which is not the case here - but this list has nothing to mark.
 
         HashSet<ParserRefCounted*>* newParserObjects;
         HashCountedSet<ParserRefCounted*>* parserObjectExtraRefCounts;
index 9d39529..b3caf07 100644 (file)
@@ -50,7 +50,7 @@ namespace KJS {
 
 static JSValue* encode(ExecState* exec, const ArgList& args, const char* doNotEscape)
 {
-    UString str = args[0]->toString(exec);
+    UString str = args.at(exec, 0)->toString(exec);
     CString cstr = str.UTF8String(true);
     if (!cstr.c_str())
         return throwError(exec, URIError, "String contained an illegal UTF-16 sequence.");
@@ -73,7 +73,7 @@ static JSValue* encode(ExecState* exec, const ArgList& args, const char* doNotEs
 static JSValue* decode(ExecState* exec, const ArgList& args, const char* doNotUnescape, bool strict)
 {
     UString result = "";
-    UString str = args[0]->toString(exec);
+    UString str = args.at(exec, 0)->toString(exec);
     int k = 0;
     int len = str.size();
     const UChar* d = str.data();
@@ -274,7 +274,7 @@ JSValue* globalFuncEval(ExecState* exec, JSObject* function, JSValue* thisValue,
     if (!globalObject || globalObject->evalFunction() != function)
         return throwError(exec, EvalError, "The \"this\" value passed to eval must be the global object from which eval originated");
 
-    JSValue* x = args[0];
+    JSValue* x = args.at(exec, 0);
     if (!x->isString())
         return x;
 
@@ -294,22 +294,22 @@ JSValue* globalFuncEval(ExecState* exec, JSObject* function, JSValue* thisValue,
 
 JSValue* globalFuncParseInt(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, parseInt(args[0]->toString(exec), args[1]->toInt32(exec)));
+    return jsNumber(exec, parseInt(args.at(exec, 0)->toString(exec), args.at(exec, 1)->toInt32(exec)));
 }
 
 JSValue* globalFuncParseFloat(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, parseFloat(args[0]->toString(exec)));
+    return jsNumber(exec, parseFloat(args.at(exec, 0)->toString(exec)));
 }
 
 JSValue* globalFuncIsNaN(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsBoolean(isnan(args[0]->toNumber(exec)));
+    return jsBoolean(isnan(args.at(exec, 0)->toNumber(exec)));
 }
 
 JSValue* globalFuncIsFinite(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    double n = args[0]->toNumber(exec);
+    double n = args.at(exec, 0)->toNumber(exec);
     return jsBoolean(!isnan(n) && !isinf(n));
 }
 
@@ -358,7 +358,7 @@ JSValue* globalFuncEscape(ExecState* exec, JSObject*, JSValue*, const ArgList& a
 
     UString result = "";
     UString s;
-    UString str = args[0]->toString(exec);
+    UString str = args.at(exec, 0)->toString(exec);
     const UChar* c = str.data();
     for (int k = 0; k < str.size(); k++, c++) {
         int u = c[0];
@@ -382,7 +382,7 @@ JSValue* globalFuncEscape(ExecState* exec, JSObject*, JSValue*, const ArgList& a
 JSValue* globalFuncUnescape(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
     UString result = "";
-    UString str = args[0]->toString(exec);
+    UString str = args.at(exec, 0)->toString(exec);
     int k = 0;
     int len = str.size();
     while (k < len) {
@@ -410,7 +410,7 @@ JSValue* globalFuncUnescape(ExecState* exec, JSObject*, JSValue*, const ArgList&
 JSValue* globalFuncKJSPrint(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
     CStringBuffer string;
-    args[0]->toString(exec).getCString(string);
+    args.at(exec, 0)->toString(exec).getCString(string);
     puts(string.data());
     return jsUndefined();
 }
index a66bd31..40c6b7c 100644 (file)
@@ -23,8 +23,6 @@
 #ifndef JSNumberCell_h
 #define JSNumberCell_h
 
-#include "CallData.h"
-#include "ConstructData.h"
 #include "ExecState.h"
 #include "JSCell.h"
 #include "JSImmediate.h"
@@ -34,7 +32,6 @@
 
 namespace KJS {
 
-    class ExecState;
     class Identifier;
     class JSCell;
     class JSObject;
index a973977..5329d63 100644 (file)
@@ -130,33 +130,33 @@ JSValue* MathObject::getValueProperty(ExecState* exec, int token) const
 
 JSValue* mathProtoFuncAbs(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    double arg = args[0]->toNumber(exec);
+    double arg = args.at(exec, 0)->toNumber(exec);
     return signbit(arg) ? jsNumber(exec, -arg) : jsNumber(exec, arg);
 }
 
 JSValue* mathProtoFuncACos(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, acos(args[0]->toNumber(exec)));
+    return jsNumber(exec, acos(args.at(exec, 0)->toNumber(exec)));
 }
 
 JSValue* mathProtoFuncASin(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, asin(args[0]->toNumber(exec)));
+    return jsNumber(exec, asin(args.at(exec, 0)->toNumber(exec)));
 }
 
 JSValue* mathProtoFuncATan(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, atan(args[0]->toNumber(exec)));
+    return jsNumber(exec, atan(args.at(exec, 0)->toNumber(exec)));
 }
 
 JSValue* mathProtoFuncATan2(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, atan2(args[0]->toNumber(exec), args[1]->toNumber(exec)));
+    return jsNumber(exec, atan2(args.at(exec, 0)->toNumber(exec), args.at(exec, 1)->toNumber(exec)));
 }
 
 JSValue* mathProtoFuncCeil(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    double arg = args[0]->toNumber(exec);
+    double arg = args.at(exec, 0)->toNumber(exec);
     if (signbit(arg) && arg > -1.0)
         return jsNumber(exec, -0.0);
     return jsNumber(exec, ceil(arg));
@@ -164,17 +164,17 @@ JSValue* mathProtoFuncCeil(ExecState* exec, JSObject*, JSValue*, const ArgList&
 
 JSValue* mathProtoFuncCos(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, cos(args[0]->toNumber(exec)));
+    return jsNumber(exec, cos(args.at(exec, 0)->toNumber(exec)));
 }
 
 JSValue* mathProtoFuncExp(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, exp(args[0]->toNumber(exec)));
+    return jsNumber(exec, exp(args.at(exec, 0)->toNumber(exec)));
 }
 
 JSValue* mathProtoFuncFloor(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    double arg = args[0]->toNumber(exec);
+    double arg = args.at(exec, 0)->toNumber(exec);
     if (signbit(arg) && arg == 0.0)
         return jsNumber(exec, -0.0);
     return jsNumber(exec, floor(arg));
@@ -182,7 +182,7 @@ JSValue* mathProtoFuncFloor(ExecState* exec, JSObject*, JSValue*, const ArgList&
 
 JSValue* mathProtoFuncLog(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, log(args[0]->toNumber(exec)));
+    return jsNumber(exec, log(args.at(exec, 0)->toNumber(exec)));
 }
 
 JSValue* mathProtoFuncMax(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
@@ -190,7 +190,7 @@ JSValue* mathProtoFuncMax(ExecState* exec, JSObject*, JSValue*, const ArgList& a
     unsigned argsCount = args.size();
     double result = -Inf;
     for (unsigned k = 0; k < argsCount; ++k) {
-        double val = args[k]->toNumber(exec);
+        double val = args.at(exec, k)->toNumber(exec);
         if (isnan(val)) {
             result = NaN;
             break;
@@ -206,7 +206,7 @@ JSValue* mathProtoFuncMin(ExecState* exec, JSObject*, JSValue*, const ArgList& a
     unsigned argsCount = args.size();
     double result = +Inf;
     for (unsigned k = 0; k < argsCount; ++k) {
-        double val = args[k]->toNumber(exec);
+        double val = args.at(exec, k)->toNumber(exec);
         if (isnan(val)) {
             result = NaN;
             break;
@@ -221,8 +221,8 @@ JSValue* mathProtoFuncPow(ExecState* exec, JSObject*, JSValue*, const ArgList& a
 {
     // ECMA 15.8.2.1.13
 
-    double arg = args[0]->toNumber(exec);
-    double arg2 = args[1]->toNumber(exec);
+    double arg = args.at(exec, 0)->toNumber(exec);
+    double arg2 = args.at(exec, 1)->toNumber(exec);
 
     if (isnan(arg2))
         return jsNaN(exec);
@@ -246,7 +246,7 @@ JSValue* mathProtoFuncRandom(ExecState* exec, JSObject*, JSValue*, const ArgList
 
 JSValue* mathProtoFuncRound(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    double arg = args[0]->toNumber(exec);
+    double arg = args.at(exec, 0)->toNumber(exec);
     if (signbit(arg) && arg >= -0.5)
          return jsNumber(exec, -0.0);
     return jsNumber(exec, floor(arg + 0.5));
@@ -254,17 +254,17 @@ JSValue* mathProtoFuncRound(ExecState* exec, JSObject*, JSValue*, const ArgList&
 
 JSValue* mathProtoFuncSin(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, sin(args[0]->toNumber(exec)));
+    return jsNumber(exec, sin(args.at(exec, 0)->toNumber(exec)));
 }
 
 JSValue* mathProtoFuncSqrt(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, sqrt(args[0]->toNumber(exec)));
+    return jsNumber(exec, sqrt(args.at(exec, 0)->toNumber(exec)));
 }
 
 JSValue* mathProtoFuncTan(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, tan(args[0]->toNumber(exec)));
+    return jsNumber(exec, tan(args.at(exec, 0)->toNumber(exec)));
 }
 
 } // namespace KJS
index 425e3c4..a0adb12 100644 (file)
@@ -41,8 +41,8 @@ NativeErrorConstructor::NativeErrorConstructor(ExecState* exec, FunctionPrototyp
 ErrorInstance* NativeErrorConstructor::construct(ExecState* exec, const ArgList& args)
 {
     ErrorInstance* object = new (exec) ErrorInstance(m_proto);
-    if (!args[0]->isUndefined())
-        object->putDirect(exec->propertyNames().message, jsString(exec, args[0]->toString(exec)));
+    if (!args.at(exec, 0)->isUndefined())
+        object->putDirect(exec->propertyNames().message, jsString(exec, args.at(exec, 0)->toString(exec)));
     return object;
 }
 
index 2bab645..8ddb55e 100644 (file)
@@ -77,7 +77,7 @@ JSValue* NumberConstructor::getValueProperty(ExecState* exec, int token) const
 static JSObject* constructWithNumberConstructor(ExecState* exec, JSObject*, const ArgList& args)
 {
     NumberObject* obj = new (exec) NumberObject(exec->lexicalGlobalObject()->numberPrototype());
-    double n = args.isEmpty() ? 0 : args[0]->toNumber(exec);
+    double n = args.isEmpty() ? 0 : args.at(exec, 0)->toNumber(exec);
     obj->setInternalValue(jsNumber(exec, n));
     return obj;
 }
@@ -91,7 +91,7 @@ ConstructType NumberConstructor::getConstructData(ConstructData& constructData)
 // ECMA 15.7.2
 static JSValue* callNumberConstructor(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    return jsNumber(exec, args.isEmpty() ? 0 : args[0]->toNumber(exec));
+    return jsNumber(exec, args.isEmpty() ? 0 : args.at(exec, 0)->toNumber(exec));
 }
 
 CallType NumberConstructor::getCallData(CallData& callData)
index 7c15eb3..61385ac 100644 (file)
@@ -139,8 +139,8 @@ JSValue* numberProtoFuncToString(ExecState* exec, JSObject*, JSValue* thisValue,
     if (!v)
         return throwError(exec, TypeError);
 
-    double radixAsDouble = args[0]->toInteger(exec); // nan -> 0
-    if (radixAsDouble == 10 || args[0]->isUndefined())
+    double radixAsDouble = args.at(exec, 0)->toInteger(exec); // nan -> 0
+    if (radixAsDouble == 10 || args.at(exec, 0)->isUndefined())
         return jsString(exec, v->toString(exec));
 
     if (radixAsDouble < 2 || radixAsDouble > 36)
@@ -223,7 +223,7 @@ JSValue* numberProtoFuncToFixed(ExecState* exec, JSObject*, JSValue* thisValue,
     if (!v)
         return throwError(exec, TypeError);
 
-    JSValue* fractionDigits = args[0];
+    JSValue* fractionDigits = args.at(exec, 0);
     double df = fractionDigits->toInteger(exec);
     if (!(df >= 0 && df <= 20))
         return throwError(exec, RangeError, "toFixed() digits argument must be between 0 and 20");
@@ -313,7 +313,7 @@ JSValue* numberProtoFuncToExponential(ExecState* exec, JSObject*, JSValue* thisV
     if (isnan(x) || isinf(x))
         return jsString(exec, UString::from(x));
 
-    JSValue* fractionalDigitsValue = args[0];
+    JSValue* fractionalDigitsValue = args.at(exec, 0);
     double df = fractionalDigitsValue->toInteger(exec);
     if (!(df >= 0 && df <= 20))
         return throwError(exec, RangeError, "toExponential() argument must between 0 and 20");
@@ -378,9 +378,9 @@ JSValue* numberProtoFuncToPrecision(ExecState* exec, JSObject*, JSValue* thisVal
     if (!v)
         return throwError(exec, TypeError);
 
-    double doublePrecision = args[0]->toIntegerPreserveNaN(exec);
+    double doublePrecision = args.at(exec, 0)->toIntegerPreserveNaN(exec);
     double x = v->uncheckedGetNumber();
-    if (args[0]->isUndefined() || isnan(x) || isinf(x))
+    if (args.at(exec, 0)->isUndefined() || isnan(x) || isinf(x))
         return jsString(exec, v->toString(exec));
 
     UString s;
index 2f27076..3714776 100644 (file)
@@ -40,7 +40,7 @@ ObjectConstructor::ObjectConstructor(ExecState* exec, ObjectPrototype* objectPro
 // ECMA 15.2.2
 static ALWAYS_INLINE JSObject* constructObject(ExecState* exec, const ArgList& args)
 {
-    JSValue* arg = args[0];
+    JSValue* arg = args.at(exec, 0);
     if (arg->isUndefinedOrNull())
         return new (exec) JSObject(exec->lexicalGlobalObject()->objectPrototype());
     return arg->toObject(exec);
index ebc8750..872d25a 100644 (file)
@@ -67,17 +67,17 @@ JSValue* objectProtoFuncValueOf(ExecState* exec, JSObject*, JSValue* thisValue,
 
 JSValue* objectProtoFuncHasOwnProperty(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
-    return jsBoolean(thisValue->toThisObject(exec)->hasOwnProperty(exec, Identifier(exec, args[0]->toString(exec))));
+    return jsBoolean(thisValue->toThisObject(exec)->hasOwnProperty(exec, Identifier(exec, args.at(exec, 0)->toString(exec))));
 }
 
 JSValue* objectProtoFuncIsPrototypeOf(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
     JSObject* thisObj = thisValue->toThisObject(exec);
 
-    if (!args[0]->isObject())
+    if (!args.at(exec, 0)->isObject())
         return jsBoolean(false);
 
-    JSValue* v = static_cast<JSObject*>(args[0])->prototype();
+    JSValue* v = static_cast<JSObject*>(args.at(exec, 0))->prototype();
 
     while (true) {
         if (!v->isObject())
@@ -91,34 +91,34 @@ JSValue* objectProtoFuncIsPrototypeOf(ExecState* exec, JSObject*, JSValue* thisV
 JSValue* objectProtoFuncDefineGetter(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
     CallData callData;
-    if (args[1]->getCallData(callData) == CallTypeNone)
+    if (args.at(exec, 1)->getCallData(callData) == CallTypeNone)
         return throwError(exec, SyntaxError, "invalid getter usage");
-    thisValue->toThisObject(exec)->defineGetter(exec, Identifier(exec, args[0]->toString(exec)), static_cast<JSObject*>(args[1]));
+    thisValue->toThisObject(exec)->defineGetter(exec, Identifier(exec, args.at(exec, 0)->toString(exec)), static_cast<JSObject*>(args.at(exec, 1)));
     return jsUndefined();
 }
 
 JSValue* objectProtoFuncDefineSetter(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
     CallData callData;
-    if (args[1]->getCallData(callData) == CallTypeNone)
+    if (args.at(exec, 1)->getCallData(callData) == CallTypeNone)
         return throwError(exec, SyntaxError, "invalid setter usage");
-    thisValue->toThisObject(exec)->defineSetter(exec, Identifier(exec, args[0]->toString(exec)), static_cast<JSObject*>(args[1]));
+    thisValue->toThisObject(exec)->defineSetter(exec, Identifier(exec, args.at(exec, 0)->toString(exec)), static_cast<JSObject*>(args.at(exec, 1)));
     return jsUndefined();
 }
 
 JSValue* objectProtoFuncLookupGetter(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
-    return thisValue->toThisObject(exec)->lookupGetter(exec, Identifier(exec, args[0]->toString(exec)));
+    return thisValue->toThisObject(exec)->lookupGetter(exec, Identifier(exec, args.at(exec, 0)->toString(exec)));
 }
 
 JSValue* objectProtoFuncLookupSetter(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
-    return thisValue->toThisObject(exec)->lookupSetter(exec, Identifier(exec, args[0]->toString(exec)));
+    return thisValue->toThisObject(exec)->lookupSetter(exec, Identifier(exec, args.at(exec, 0)->toString(exec)));
 }
 
 JSValue* objectProtoFuncPropertyIsEnumerable(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
-    return jsBoolean(thisValue->toThisObject(exec)->propertyIsEnumerable(exec, Identifier(exec, args[0]->toString(exec))));
+    return jsBoolean(thisValue->toThisObject(exec)->propertyIsEnumerable(exec, Identifier(exec, args.at(exec, 0)->toString(exec))));
 }
 
 JSValue* objectProtoFuncToLocaleString(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList&)
index 783787c..20569b0 100644 (file)
@@ -56,7 +56,7 @@ namespace KJS {
             if (m_getValue == KJS_VALUE_SLOT_MARKER)
                 return *m_data.valueSlot;
             if (m_getValue == KJS_REGISTER_SLOT_MARKER)
-                return (*m_data.registerSlot).jsValue();
+                return (*m_data.registerSlot).jsValue(exec);
             ASSERT(m_getValue != KJS_NUMERIC_PROPERTY_NAME_SLOT_MARKER);
             return m_getValue(exec, propertyName, *this);
         }
@@ -68,7 +68,7 @@ namespace KJS {
             if (m_getValue == KJS_NUMERIC_PROPERTY_NAME_SLOT_MARKER)
                 return m_data.numericFunc(exec, propertyName, *this);
             if (m_getValue == KJS_REGISTER_SLOT_MARKER)
-                return (*m_data.registerSlot).jsValue();
+                return (*m_data.registerSlot).jsValue(exec);
             return m_getValue(exec, Identifier::from(exec, propertyName), *this);
         }
 
index 362a1a6..178fc75 100644 (file)
@@ -270,8 +270,8 @@ void RegExpConstructor::putValueProperty(ExecState* exec, int token, JSValue* va
 // ECMA 15.10.4
 static JSObject* constructRegExp(ExecState* exec, const ArgList& args)
 {
-    JSValue* arg0 = args[0];
-    JSValue* arg1 = args[1];
+    JSValue* arg0 = args.at(exec, 0);
+    JSValue* arg1 = args.at(exec, 1);
 
     if (arg0->isObject(&RegExpObject::info)) {
         if (!arg1->isUndefined())
index 016adbb..8e079c0 100644 (file)
@@ -95,7 +95,7 @@ bool RegExpObject::match(ExecState* exec, const ArgList& args)
 
     UString input;
     if (!args.isEmpty())
-        input = args[0]->toString(exec);
+        input = args.at(exec, 0)->toString(exec);
     else {
         input = regExpObj->input();
         if (input.isNull()) {
index d491bf7..6eaaf34 100644 (file)
@@ -74,8 +74,8 @@ JSValue* regExpProtoFuncCompile(ExecState* exec, JSObject*, JSValue* thisValue,
         return throwError(exec, TypeError);
 
     RefPtr<RegExp> regExp;
-    JSValue* arg0 = args[0];
-    JSValue* arg1 = args[1];
+    JSValue* arg0 = args.at(exec, 0);
+    JSValue* arg1 = args.at(exec, 1);
     
     if (arg0->isObject(&RegExpObject::info)) {
         if (!arg1->isUndefined())
index e2e1ea4..8f57112 100644 (file)
@@ -191,7 +191,7 @@ JSValue* functionPrint(ExecState* exec, JSObject*, JSValue*, const ArgList& args
         if (i != 0)
             putchar(' ');
         
-        printf("%s", args[i]->toString(exec).UTF8String().c_str());
+        printf("%s", args.at(exec, i)->toString(exec).UTF8String().c_str());
     }
     
     putchar('\n');
@@ -201,7 +201,7 @@ JSValue* functionPrint(ExecState* exec, JSObject*, JSValue*, const ArgList& args
 
 JSValue* functionDebug(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    fprintf(stderr, "--> %s\n", args[0]->toString(exec).UTF8String().c_str());
+    fprintf(stderr, "--> %s\n", args.at(exec, 0)->toString(exec).UTF8String().c_str());
     return jsUndefined();
 }
 
@@ -222,7 +222,7 @@ JSValue* functionVersion(ExecState*, JSObject*, JSValue*, const ArgList&)
 JSValue* functionRun(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
     StopWatch stopWatch;
-    UString fileName = args[0]->toString(exec);
+    UString fileName = args.at(exec, 0)->toString(exec);
     Vector<char> script;
     if (!fillBufferWithContentsOfFile(fileName, script))
         return throwError(exec, GeneralError, "Could not open file.");
@@ -238,7 +238,7 @@ JSValue* functionRun(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 
 JSValue* functionLoad(ExecState* exec, JSObject*, JSValue*, const ArgList& args)
 {
-    UString fileName = args[0]->toString(exec);
+    UString fileName = args.at(exec, 0)->toString(exec);
     Vector<char> script;
     if (!fillBufferWithContentsOfFile(fileName, script))
         return throwError(exec, GeneralError, "Could not open file.");
index 44816fa..250fb86 100644 (file)
@@ -36,7 +36,7 @@ static JSValue* stringFromCharCode(ExecState* exec, JSObject*, JSValue*, const A
         UChar* p = buf;
         ArgList::const_iterator end = args.end();
         for (ArgList::const_iterator it = args.begin(); it != end; ++it)
-            *p++ = static_cast<UChar>((*it).toUInt32(exec));
+            *p++ = static_cast<UChar>((*it).jsValue(exec)->toUInt32(exec));
         s = UString(buf, args.size(), false);
     } else
         s = "";
@@ -63,7 +63,7 @@ static JSObject* constructWithStringConstructor(ExecState* exec, JSObject*, cons
     JSObject* prototype = exec->lexicalGlobalObject()->stringPrototype();
     if (args.isEmpty())
         return new (exec) StringObject(exec, prototype);
-    return new (exec) StringObject(exec, prototype, args[0]->toString(exec));
+    return new (exec) StringObject(exec, prototype, args.at(exec, 0)->toString(exec));
 }
 
 ConstructType StringConstructor::getConstructData(ConstructData& constructData)
@@ -77,7 +77,7 @@ static JSValue* callStringConstructor(ExecState* exec, JSObject*, JSValue*, cons
 {
     if (args.isEmpty())
         return jsString(exec, "");
-    return jsString(exec, args[0]->toString(exec));
+    return jsString(exec, args.at(exec, 0)->toString(exec));
 }
 
 CallType StringConstructor::getCallData(CallData& callData)
index c4d5ef7..3426bff 100644 (file)
@@ -205,9 +205,9 @@ JSValue* stringProtoFuncReplace(ExecState* exec, JSObject*, JSValue* thisValue,
     JSString* sourceVal = thisValue->toThisJSString(exec);
     const UString& source = sourceVal->value();
 
-    JSValue* pattern = args[0];
+    JSValue* pattern = args.at(exec, 0);
 
-    JSValue* replacement = args[1];
+    JSValue* replacement = args.at(exec, 1);
     UString replacementString;
     CallData callData;
     CallType callType = replacement->getCallData(callData);
@@ -319,7 +319,7 @@ JSValue* stringProtoFuncCharAt(ExecState* exec, JSObject*, JSValue* thisValue, c
     int len = s.size();
 
     UString u;
-    JSValue* a0 = args[0];
+    JSValue* a0 = args.at(exec, 0);
     double dpos = a0->toInteger(exec);
     if (dpos >= 0 && dpos < len)
         u = s.substr(static_cast<int>(dpos), 1);
@@ -335,7 +335,7 @@ JSValue* stringProtoFuncCharCodeAt(ExecState* exec, JSObject*, JSValue* thisValu
 
     JSValue* result = 0;
 
-    JSValue* a0 = args[0];
+    JSValue* a0 = args.at(exec, 0);
     double dpos = a0->toInteger(exec);
     if (dpos >= 0 && dpos < len)
         result = jsNumber(exec, s[static_cast<int>(dpos)]);
@@ -350,7 +350,7 @@ JSValue* stringProtoFuncConcat(ExecState* exec, JSObject*, JSValue* thisValue, c
 
     ArgList::const_iterator end = args.end();
     for (ArgList::const_iterator it = args.begin(); it != end; ++it)
-        s += (*it).toString(exec);
+        s += (*it).jsValue(exec)->toString(exec);
     return jsString(exec, s);
 }
 
@@ -359,8 +359,8 @@ JSValue* stringProtoFuncIndexOf(ExecState* exec, JSObject*, JSValue* thisValue,
     UString s = thisValue->toThisString(exec);
     int len = s.size();
 
-    JSValue* a0 = args[0];
-    JSValue* a1 = args[1];
+    JSValue* a0 = args.at(exec, 0);
+    JSValue* a1 = args.at(exec, 1);
     UString u2 = a0->toString(exec);
     double dpos = a1->toInteger(exec);
     if (dpos < 0)
@@ -375,8 +375,8 @@ JSValue* stringProtoFuncLastIndexOf(ExecState* exec, JSObject*, JSValue* thisVal
     UString s = thisValue->toThisString(exec);
     int len = s.size();
 
-    JSValue* a0 = args[0];
-    JSValue* a1 = args[1];
+    JSValue* a0 = args.at(exec, 0);
+    JSValue* a1 = args.at(exec, 1);
 
     UString u2 = a0->toString(exec);
     double dpos = a1->toIntegerPreserveNaN(exec);
@@ -391,7 +391,7 @@ JSValue* stringProtoFuncMatch(ExecState* exec, JSObject*, JSValue* thisValue, co
 {
     UString s = thisValue->toThisString(exec);
 
-    JSValue* a0 = args[0];
+    JSValue* a0 = args.at(exec, 0);
 
     UString u = s;
     RefPtr<RegExp> reg;
@@ -442,7 +442,7 @@ JSValue* stringProtoFuncSearch(ExecState* exec, JSObject*, JSValue* thisValue, c
 {
     UString s = thisValue->toThisString(exec);
 
-    JSValue* a0 = args[0];
+    JSValue* a0 = args.at(exec, 0);
 
     UString u = s;
     RefPtr<RegExp> reg;
@@ -468,8 +468,8 @@ JSValue* stringProtoFuncSlice(ExecState* exec, JSObject*, JSValue* thisValue, co
     UString s = thisValue->toThisString(exec);
     int len = s.size();
 
-    JSValue* a0 = args[0];
-    JSValue* a1 = args[1];
+    JSValue* a0 = args.at(exec, 0);
+    JSValue* a1 = args.at(exec, 1);
 
     // The arg processing is very much like ArrayProtoFunc::Slice
     double start = a0->toInteger(exec);
@@ -491,8 +491,8 @@ JSValue* stringProtoFuncSplit(ExecState* exec, JSObject*, JSValue* thisValue, co
 {
     UString s = thisValue->toThisString(exec);
 
-    JSValue* a0 = args[0];
-    JSValue* a1 = args[1];
+    JSValue* a0 = args.at(exec, 0);
+    JSValue* a1 = args.at(exec, 1);
 
     JSObject* res = constructEmptyArray(exec);
     JSValue* result = res;
@@ -561,8 +561,8 @@ JSValue* stringProtoFuncSubstr(ExecState* exec, JSObject*, JSValue* thisValue, c
     UString s = thisValue->toThisString(exec);
     int len = s.size();
 
-    JSValue* a0 = args[0];
-    JSValue* a1 = args[1];
+    JSValue* a0 = args.at(exec, 0);
+    JSValue* a1 = args.at(exec, 1);
 
     double start = a0->toInteger(exec);
     double length = a1->isUndefined() ? len : a1->toInteger(exec);
@@ -585,8 +585,8 @@ JSValue* stringProtoFuncSubstring(ExecState* exec, JSObject*, JSValue* thisValue
     UString s = thisValue->toThisString(exec);
     int len = s.size();
 
-    JSValue* a0 = args[0];
-    JSValue* a1 = args[1];
+    JSValue* a0 = args.at(exec, 0);
+    JSValue* a1 = args.at(exec, 1);
 
     double start = a0->toNumber(exec);
     double end = a1->toNumber(exec);
@@ -708,7 +708,7 @@ JSValue* stringProtoFuncLocaleCompare(ExecState* exec, JSObject*, JSValue* thisV
       return jsNumber(exec, 0);
 
     UString s = thisValue->toThisString(exec);
-    JSValue* a0 = args[0];
+    JSValue* a0 = args.at(exec, 0);
     return jsNumber(exec, localeCompare(s, a0->toString(exec)));
 }
 
@@ -769,28 +769,28 @@ JSValue* stringProtoFuncSup(ExecState* exec, JSObject*, JSValue* thisValue, cons
 JSValue* stringProtoFuncFontcolor(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
     UString s = thisValue->toThisString(exec);
-    JSValue* a0 = args[0];
+    JSValue* a0 = args.at(exec, 0);
     return jsString(exec, "<font color=\"" + a0->toString(exec) + "\">" + s + "</font>");
 }
 
 JSValue* stringProtoFuncFontsize(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
     UString s = thisValue->toThisString(exec);
-    JSValue* a0 = args[0];
+    JSValue* a0 = args.at(exec, 0);
     return jsString(exec, "<font size=\"" + a0->toString(exec) + "\">" + s + "</font>");
 }
 
 JSValue* stringProtoFuncAnchor(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
     UString s = thisValue->toThisString(exec);
-    JSValue* a0 = args[0];
+    JSValue* a0 = args.at(exec, 0);
     return jsString(exec, "<a name=\"" + a0->toString(exec) + "\">" + s + "</a>");
 }
 
 JSValue* stringProtoFuncLink(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
     UString s = thisValue->toThisString(exec);
-    JSValue* a0 = args[0];
+    JSValue* a0 = args.at(exec, 0);
     return jsString(exec, "<a href=\"" + a0->toString(exec) + "\">" + s + "</a>");
 }
 
index 146d892..7a8009c 100644 (file)
@@ -1,3 +1,10 @@
+2008-07-22  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt and Sam Weinig.
+
+        Next step toward putting doubles in registers: Prepare the Register class
+        and its clients for registers that don't contain JSValue*s.
+        
 2008-07-21  Mark Rowe  <mrowe@apple.com>
 
         Reviewed by Sam Weinig.
index cbfa49e..614d914 100644 (file)
@@ -66,7 +66,7 @@ JSValue *UserObjectImp::callAsFunction(ExecState *exec, JSObject *thisObj, const
         CFMutableArrayRef jsArgs = CFArrayCreateMutable(0, 0, &arrayCallBacks);
         if (jsArgs) {
             for (CFIndex i = 0; i < argCount; i++) {
-                JSUserObject* jsArg = KJSValueToJSObject(args[i], exec);
+                JSUserObject* jsArg = KJSValueToJSObject(args.at(exec, i), exec);
                 CFArrayAppendValue(jsArgs, (void*)jsArg);
                 jsArg->Release();
             }
index 6081e3d..42c52c4 100644 (file)
@@ -1,3 +1,10 @@
+2008-07-22  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt and Sam Weinig.
+
+        Next step toward putting doubles in registers: Prepare the Register class
+        and its clients for registers that don't contain JSValue*s.
+        
 2008-07-22  Sam Weinig  <sam@webkit.org>
 
         Reviewed by Mark Rowe.
index e263bcb..4a5304b 100644 (file)
@@ -53,7 +53,7 @@ static JSObject* constructAudio(ExecState* exec, JSObject* constructor, const Ar
 
     RefPtr<HTMLAudioElement> audio = new HTMLAudioElement(static_cast<JSAudioConstructor*>(constructor)->document());
     if (args.size() > 0) {
-        audio->setSrc(args[0]->toString(exec));
+        audio->setSrc(args.at(exec, 0)->toString(exec));
         audio->scheduleLoad();
     }
     return static_cast<JSObject*>(toJS(exec, audio.release()));
index cf140d4..92ed8e8 100644 (file)
@@ -95,24 +95,24 @@ JSValue* JSCanvasRenderingContext2D::setFillColor(ExecState* exec, const ArgList
     // 5 args = c, m, y, k, a
     switch (args.size()) {
         case 1:
-            if (args[0]->isString())
-                context->setFillColor(static_cast<JSString*>(args[0])->value());
+            if (args.at(exec, 0)->isString())
+                context->setFillColor(static_cast<JSString*>(args.at(exec, 0))->value());
             else
-                context->setFillColor(args[0]->toFloat(exec));
+                context->setFillColor(args.at(exec, 0)->toFloat(exec));
             break;
         case 2:
-            if (args[0]->isString())
-                context->setFillColor(static_cast<JSString*>(args[0])->value(), args[1]->toFloat(exec));
+            if (args.at(exec, 0)->isString())
+                context->setFillColor(static_cast<JSString*>(args.at(exec, 0))->value(), args.at(exec, 1)->toFloat(exec));
             else
-                context->setFillColor(args[0]->toFloat(exec), args[1]->toFloat(exec));
+                context->setFillColor(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec));
             break;
         case 4:
-            context->setFillColor(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                                  args[2]->toFloat(exec), args[3]->toFloat(exec));
+            context->setFillColor(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                                  args.at(exec, 2)->toFloat(exec), args.at(exec, 3)->toFloat(exec));
             break;
         case 5:
-            context->setFillColor(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                                  args[2]->toFloat(exec), args[3]->toFloat(exec), args[4]->toFloat(exec));
+            context->setFillColor(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                                  args.at(exec, 2)->toFloat(exec), args.at(exec, 3)->toFloat(exec), args.at(exec, 4)->toFloat(exec));
             break;
         default:
             return throwError(exec, SyntaxError);
@@ -132,24 +132,24 @@ JSValue* JSCanvasRenderingContext2D::setStrokeColor(ExecState* exec, const ArgLi
     // 5 args = c, m, y, k, a
     switch (args.size()) {
         case 1:
-            if (args[0]->isString())
-                context->setStrokeColor(static_cast<JSString*>(args[0])->value());
+            if (args.at(exec, 0)->isString())
+                context->setStrokeColor(static_cast<JSString*>(args.at(exec, 0))->value());
             else
-                context->setStrokeColor(args[0]->toFloat(exec));
+                context->setStrokeColor(args.at(exec, 0)->toFloat(exec));
             break;
         case 2:
-            if (args[0]->isString())
-                context->setStrokeColor(static_cast<JSString*>(args[0])->value(), args[1]->toFloat(exec));
+            if (args.at(exec, 0)->isString())
+                context->setStrokeColor(static_cast<JSString*>(args.at(exec, 0))->value(), args.at(exec, 1)->toFloat(exec));
             else
-                context->setStrokeColor(args[0]->toFloat(exec), args[1]->toFloat(exec));
+                context->setStrokeColor(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec));
             break;
         case 4:
-            context->setStrokeColor(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                                    args[2]->toFloat(exec), args[3]->toFloat(exec));
+            context->setStrokeColor(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                                    args.at(exec, 2)->toFloat(exec), args.at(exec, 3)->toFloat(exec));
             break;
         case 5:
-            context->setStrokeColor(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                                    args[2]->toFloat(exec), args[3]->toFloat(exec), args[4]->toFloat(exec));
+            context->setStrokeColor(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                                    args.at(exec, 2)->toFloat(exec), args.at(exec, 3)->toFloat(exec), args.at(exec, 4)->toFloat(exec));
             break;
         default:
             return throwError(exec, SyntaxError);
@@ -163,11 +163,11 @@ JSValue* JSCanvasRenderingContext2D::strokeRect(ExecState* exec, const ArgList&
     CanvasRenderingContext2D* context = impl();
     
     if (args.size() <= 4)
-        context->strokeRect(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                            args[2]->toFloat(exec), args[3]->toFloat(exec));
+        context->strokeRect(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                            args.at(exec, 2)->toFloat(exec), args.at(exec, 3)->toFloat(exec));
     else
-        context->strokeRect(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                            args[2]->toFloat(exec), args[3]->toFloat(exec), args[4]->toFloat(exec));
+        context->strokeRect(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                            args.at(exec, 2)->toFloat(exec), args.at(exec, 3)->toFloat(exec), args.at(exec, 4)->toFloat(exec));
 
     return jsUndefined();    
 }
@@ -182,49 +182,49 @@ JSValue* JSCanvasRenderingContext2D::drawImage(ExecState* exec, const ArgList& a
     //     drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh)
     // Composite operation is specified with globalCompositeOperation.
     // The img parameter can be a <img> or <canvas> element.
-    JSValue* value = args[0];
+    JSValue* value = args.at(exec, 0);
     if (!value->isObject())
         return throwError(exec, TypeError);
     JSObject* o = static_cast<JSObject*>(value);
     
     ExceptionCode ec = 0;
     if (o->inherits(&JSHTMLImageElement::s_info)) {
-        HTMLImageElement* imgElt = static_cast<HTMLImageElement*>(static_cast<JSHTMLElement*>(args[0])->impl());
+        HTMLImageElement* imgElt = static_cast<HTMLImageElement*>(static_cast<JSHTMLElement*>(args.at(exec, 0))->impl());
         switch (args.size()) {
             case 3:
-                context->drawImage(imgElt, args[1]->toFloat(exec), args[2]->toFloat(exec));
+                context->drawImage(imgElt, args.at(exec, 1)->toFloat(exec), args.at(exec, 2)->toFloat(exec));
                 break;
             case 5:
-                context->drawImage(imgElt, args[1]->toFloat(exec), args[2]->toFloat(exec),
-                                   args[3]->toFloat(exec), args[4]->toFloat(exec), ec);
+                context->drawImage(imgElt, args.at(exec, 1)->toFloat(exec), args.at(exec, 2)->toFloat(exec),
+                                   args.at(exec, 3)->toFloat(exec), args.at(exec, 4)->toFloat(exec), ec);
                 setDOMException(exec, ec);
                 break;
             case 9:
-                context->drawImage(imgElt, FloatRect(args[1]->toFloat(exec), args[2]->toFloat(exec),
-                                   args[3]->toFloat(exec), args[4]->toFloat(exec)),
-                                   FloatRect(args[5]->toFloat(exec), args[6]->toFloat(exec),
-                                   args[7]->toFloat(exec), args[8]->toFloat(exec)), ec);
+                context->drawImage(imgElt, FloatRect(args.at(exec, 1)->toFloat(exec), args.at(exec, 2)->toFloat(exec),
+                                   args.at(exec, 3)->toFloat(exec), args.at(exec, 4)->toFloat(exec)),
+                                   FloatRect(args.at(exec, 5)->toFloat(exec), args.at(exec, 6)->toFloat(exec),
+                                   args.at(exec, 7)->toFloat(exec), args.at(exec, 8)->toFloat(exec)), ec);
                 setDOMException(exec, ec);
                 break;
             default:
                 return throwError(exec, SyntaxError);
         }
     } else if (o->inherits(&JSHTMLCanvasElement::s_info)) {
-        HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(static_cast<JSHTMLElement*>(args[0])->impl());
+        HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(static_cast<JSHTMLElement*>(args.at(exec, 0))->impl());
         switch (args.size()) {
             case 3:
-                context->drawImage(canvas, args[1]->toFloat(exec), args[2]->toFloat(exec));
+                context->drawImage(canvas, args.at(exec, 1)->toFloat(exec), args.at(exec, 2)->toFloat(exec));
                 break;
             case 5:
-                context->drawImage(canvas, args[1]->toFloat(exec), args[2]->toFloat(exec),
-                                   args[3]->toFloat(exec), args[4]->toFloat(exec), ec);
+                context->drawImage(canvas, args.at(exec, 1)->toFloat(exec), args.at(exec, 2)->toFloat(exec),
+                                   args.at(exec, 3)->toFloat(exec), args.at(exec, 4)->toFloat(exec), ec);
                 setDOMException(exec, ec);
                 break;
             case 9:
-                context->drawImage(canvas, FloatRect(args[1]->toFloat(exec), args[2]->toFloat(exec),
-                                   args[3]->toFloat(exec), args[4]->toFloat(exec)),
-                                   FloatRect(args[5]->toFloat(exec), args[6]->toFloat(exec),
-                                   args[7]->toFloat(exec), args[8]->toFloat(exec)), ec);
+                context->drawImage(canvas, FloatRect(args.at(exec, 1)->toFloat(exec), args.at(exec, 2)->toFloat(exec),
+                                   args.at(exec, 3)->toFloat(exec), args.at(exec, 4)->toFloat(exec)),
+                                   FloatRect(args.at(exec, 5)->toFloat(exec), args.at(exec, 6)->toFloat(exec),
+                                   args.at(exec, 7)->toFloat(exec), args.at(exec, 8)->toFloat(exec)), ec);
                 setDOMException(exec, ec);
                 break;
             default:
@@ -242,19 +242,19 @@ JSValue* JSCanvasRenderingContext2D::drawImageFromRect(ExecState* exec, const Ar
 { 
     CanvasRenderingContext2D* context = impl();
     
-    JSValue* value = args[0];
+    JSValue* value = args.at(exec, 0);
     if (!value->isObject())
         return throwError(exec, TypeError);
     JSObject* o = static_cast<JSObject*>(value);
     
     if (!o->inherits(&JSHTMLImageElement::s_info))
         return throwError(exec, TypeError);
-    context->drawImageFromRect(static_cast<HTMLImageElement*>(static_cast<JSHTMLElement*>(args[0])->impl()),
-                               args[1]->toFloat(exec), args[2]->toFloat(exec),
-                               args[3]->toFloat(exec), args[4]->toFloat(exec),
-                               args[5]->toFloat(exec), args[6]->toFloat(exec),
-                               args[7]->toFloat(exec), args[8]->toFloat(exec),
-                               args[9]->toString(exec));    
+    context->drawImageFromRect(static_cast<HTMLImageElement*>(static_cast<JSHTMLElement*>(args.at(exec, 0))->impl()),
+                               args.at(exec, 1)->toFloat(exec), args.at(exec, 2)->toFloat(exec),
+                               args.at(exec, 3)->toFloat(exec), args.at(exec, 4)->toFloat(exec),
+                               args.at(exec, 5)->toFloat(exec), args.at(exec, 6)->toFloat(exec),
+                               args.at(exec, 7)->toFloat(exec), args.at(exec, 8)->toFloat(exec),
+                               args.at(exec, 9)->toString(exec));    
     return jsUndefined();    
 }
 
@@ -264,38 +264,38 @@ JSValue* JSCanvasRenderingContext2D::setShadow(ExecState* exec, const ArgList& a
 
     switch (args.size()) {
         case 3:
-            context->setShadow(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                               args[2]->toFloat(exec));
+            context->setShadow(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                               args.at(exec, 2)->toFloat(exec));
             break;
         case 4:
-            if (args[3]->isString())
-                context->setShadow(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                                   args[2]->toFloat(exec), static_cast<JSString*>(args[3])->value());
+            if (args.at(exec, 3)->isString())
+                context->setShadow(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                                   args.at(exec, 2)->toFloat(exec), static_cast<JSString*>(args.at(exec, 3))->value());
             else
-                context->setShadow(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                                   args[2]->toFloat(exec), args[3]->toFloat(exec));
+                context->setShadow(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                                   args.at(exec, 2)->toFloat(exec), args.at(exec, 3)->toFloat(exec));
             break;
         case 5:
-            if (args[3]->isString())
-                context->setShadow(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                                   args[2]->toFloat(exec), static_cast<JSString*>(args[3])->value(),
-                                   args[4]->toFloat(exec));
+            if (args.at(exec, 3)->isString())
+                context->setShadow(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                                   args.at(exec, 2)->toFloat(exec), static_cast<JSString*>(args.at(exec, 3))->value(),
+                                   args.at(exec, 4)->toFloat(exec));
             else
-                context->setShadow(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                                   args[2]->toFloat(exec), args[3]->toFloat(exec),
-                                   args[4]->toFloat(exec));
+                context->setShadow(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                                   args.at(exec, 2)->toFloat(exec), args.at(exec, 3)->toFloat(exec),
+                                   args.at(exec, 4)->toFloat(exec));
             break;
         case 7:
-            context->setShadow(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                               args[2]->toFloat(exec), args[3]->toFloat(exec),
-                               args[4]->toFloat(exec), args[5]->toFloat(exec),
-                               args[6]->toFloat(exec));
+            context->setShadow(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                               args.at(exec, 2)->toFloat(exec), args.at(exec, 3)->toFloat(exec),
+                               args.at(exec, 4)->toFloat(exec), args.at(exec, 5)->toFloat(exec),
+                               args.at(exec, 6)->toFloat(exec));
             break;
         case 8:
-            context->setShadow(args[0]->toFloat(exec), args[1]->toFloat(exec),
-                               args[2]->toFloat(exec), args[3]->toFloat(exec),
-                               args[4]->toFloat(exec), args[5]->toFloat(exec),
-                               args[6]->toFloat(exec), args[7]->toFloat(exec));
+            context->setShadow(args.at(exec, 0)->toFloat(exec), args.at(exec, 1)->toFloat(exec),
+                               args.at(exec, 2)->toFloat(exec), args.at(exec, 3)->toFloat(exec),
+                               args.at(exec, 4)->toFloat(exec), args.at(exec, 5)->toFloat(exec),
+                               args.at(exec, 6)->toFloat(exec), args.at(exec, 7)->toFloat(exec));
             break;
         default:
             return throwError(exec, SyntaxError);
@@ -308,7 +308,7 @@ JSValue* JSCanvasRenderingContext2D::createPattern(ExecState* exec, const ArgLis
 { 
     CanvasRenderingContext2D* context = impl();
 
-    JSValue* value = args[0];
+    JSValue* value = args.at(exec, 0);
     if (!value->isObject())
         return throwError(exec, TypeError);
     JSObject* o = static_cast<JSObject*>(value);
@@ -316,16 +316,16 @@ JSValue* JSCanvasRenderingContext2D::createPattern(ExecState* exec, const ArgLis
     if (o->inherits(&JSHTMLImageElement::s_info)) {
         ExceptionCode ec;
         JSValue* pattern = toJS(exec,
-            context->createPattern(static_cast<HTMLImageElement*>(static_cast<JSHTMLElement*>(args[0])->impl()),
-                                   valueToStringWithNullCheck(exec, args[1]), ec).get());
+            context->createPattern(static_cast<HTMLImageElement*>(static_cast<JSHTMLElement*>(args.at(exec, 0))->impl()),
+                                   valueToStringWithNullCheck(exec, args.at(exec, 1)), ec).get());
         setDOMException(exec, ec);
         return pattern;
     }
     if (o->inherits(&JSHTMLCanvasElement::s_info)) {
         ExceptionCode ec;
         JSValue* pattern = toJS(exec,
-            context->createPattern(static_cast<HTMLCanvasElement*>(static_cast<JSHTMLElement*>(args[0])->impl()),
-                valueToStringWithNullCheck(exec, args[1]), ec).get());
+            context->createPattern(static_cast<HTMLCanvasElement*>(static_cast<JSHTMLElement*>(args.at(exec, 0))->impl()),
+                valueToStringWithNullCheck(exec, args.at(exec, 1)), ec).get());
         setDOMException(exec, ec);
         return pattern;
     }
@@ -342,10 +342,10 @@ JSValue* JSCanvasRenderingContext2D::putImageData(ExecState* exec, const ArgList
 
     ExceptionCode ec = 0;
     if (args.size() >= 7)
-        context->putImageData(toImageData(args[0]), args[1]->toFloat(exec), args[2]->toFloat(exec), 
-                              args[3]->toFloat(exec), args[4]->toFloat(exec), args[5]->toFloat(exec), args[6]->toFloat(exec), ec);
+        context->putImageData(toImageData(args.at(exec, 0)), args.at(exec, 1)->toFloat(exec), args.at(exec, 2)->toFloat(exec), 
+                              args.at(exec, 3)->toFloat(exec), args.at(exec, 4)->toFloat(exec), args.at(exec, 5)->toFloat(exec), args.at(exec, 6)->toFloat(exec), ec);
     else
-        context->putImageData(toImageData(args[0]), args[1]->toFloat(exec), args[2]->toFloat(exec), ec);
+        context->putImageData(toImageData(args.at(exec, 0)), args.at(exec, 1)->toFloat(exec), args.at(exec, 2)->toFloat(exec), ec);
 
     setDOMException(exec, ec);
     return jsUndefined();
index 4d02770..f42c980 100644 (file)
@@ -73,7 +73,7 @@ JSValue* JSClipboard::clearData(ExecState* exec, const ArgList& args)
     }
 
     if (args.size() == 1) {
-        clipboard->clearData(args[0]->toString(exec));
+        clipboard->clearData(args.at(exec, 0)->toString(exec));
         return jsUndefined();
     }
 
@@ -90,7 +90,7 @@ JSValue* JSClipboard::getData(ExecState* exec, const ArgList& args)
     Clipboard* clipboard = impl();
 
     bool success;
-    String result = clipboard->getData(args[0]->toString(exec), success);
+    String result = clipboard->getData(args.at(exec, 0)->toString(exec), success);
     if (!success)
         return jsUndefined();
 
@@ -105,7 +105,7 @@ JSValue* JSClipboard::setData(ExecState* exec, const ArgList& args)
     if (args.size() != 2)
         return throwError(exec, SyntaxError, "setData: Invalid number of arguments");
 
-    return jsBoolean(clipboard->setData(args[0]->toString(exec), args[1]->toString(exec)));
+    return jsBoolean(clipboard->setData(args.at(exec, 0)->toString(exec), args.at(exec, 1)->toString(exec)));
 }
 
 JSValue* JSClipboard::setDragImage(ExecState* exec, const ArgList& args)
@@ -119,11 +119,11 @@ JSValue* JSClipboard::setDragImage(ExecState* exec, const ArgList& args)
     if (args.size() != 3)
         return throwError(exec, SyntaxError, "setDragImage: Invalid number of arguments");
 
-    int x = args[1]->toInt32(exec);
-    int y = args[2]->toInt32(exec);
+    int x = args.at(exec, 1)->toInt32(exec);
+    int y = args.at(exec, 2)->toInt32(exec);
 
     // See if they passed us a node
-    Node* node = toNode(args[0]);
+    Node* node = toNode(args.at(exec, 0));
     if (!node)
         return throwError(exec, TypeError);
 
index b15f0e9..8e4efc9 100644 (file)
@@ -67,7 +67,7 @@ JSValue* JSConsole::assertCondition(ExecState* exec, const ArgList& arguments)
     ArgList messageParameters;
     arguments.getSlice(1, messageParameters);
 
-    impl()->assertCondition(arguments[0]->toBoolean(exec), exec, messageParameters);
+    impl()->assertCondition(arguments.at(exec, 0)->toBoolean(exec), exec, messageParameters);
     return jsUndefined();
 }
 
index 7ba8279..b5b000c 100644 (file)
@@ -47,7 +47,7 @@ JSValue* JSDOMApplicationCache::add(ExecState* exec, const ArgList& args)
     Frame* frame = asJSDOMWindow(exec->dynamicGlobalObject())->impl()->frame();
     if (!frame)
         return jsUndefined();
-    const KURL& url = frame->loader()->completeURL(args[0]->toString(exec));
+    const KURL& url = frame->loader()->completeURL(args.at(exec, 0)->toString(exec));
     
     ExceptionCode ec = 0;
     impl()->add(url, ec);
@@ -60,7 +60,7 @@ JSValue* JSDOMApplicationCache::remove(ExecState* exec, const ArgList& args)
     Frame* frame = asJSDOMWindow(exec->dynamicGlobalObject())->impl()->frame();
     if (!frame)
         return jsUndefined();
-    const KURL& url = frame->loader()->completeURL(args[0]->toString(exec));
+    const KURL& url = frame->loader()->completeURL(args.at(exec, 0)->toString(exec));
     
     ExceptionCode ec = 0;
     impl()->remove(url, ec);
@@ -73,10 +73,10 @@ JSValue* JSDOMApplicationCache::addEventListener(ExecState* exec, const ArgList&
     Frame* frame = impl()->frame();
     if (!frame)
         return jsUndefined();
-    RefPtr<JSUnprotectedEventListener> listener = toJSDOMWindow(frame)->findOrCreateJSUnprotectedEventListener(exec, args[1], true);
+    RefPtr<JSUnprotectedEventListener> listener = toJSDOMWindow(frame)->findOrCreateJSUnprotectedEventListener(exec, args.at(exec, 1), true);
     if (!listener)
         return jsUndefined();
-    impl()->addEventListener(args[0]->toString(exec), listener.release(), args[2]->toBoolean(exec));
+    impl()->addEventListener(args.at(exec, 0)->toString(exec), listener.release(), args.at(exec, 2)->toBoolean(exec));
     return jsUndefined();
 }
 
@@ -85,10 +85,10 @@ JSValue* JSDOMApplicationCache::removeEventListener(ExecState* exec, const ArgLi
     Frame* frame = impl()->frame();
     if (!frame)
         return jsUndefined();
-    JSUnprotectedEventListener* listener = toJSDOMWindow(frame)->findJSUnprotectedEventListener(exec, args[1], true);
+    JSUnprotectedEventListener* listener = toJSDOMWindow(frame)->findJSUnprotectedEventListener(exec, args.at(exec, 1), true);
     if (!listener)
         return jsUndefined();
-    impl()->removeEventListener(args[0]->toString(exec), listener, args[2]->toBoolean(exec));
+    impl()->removeEventListener(args.at(exec, 0)->toString(exec), listener, args.at(exec, 2)->toBoolean(exec));
     return jsUndefined();
     
 }
@@ -97,7 +97,7 @@ JSValue* JSDOMApplicationCache::dispatchEvent(KJS::ExecState* exec, const ArgLis
 {
     ExceptionCode ec = 0;
     
-    bool result = impl()->dispatchEvent(toEvent(args[0]), ec);
+    bool result = impl()->dispatchEvent(toEvent(args.at(exec, 0)), ec);
     setDOMException(exec, ec);
     return jsBoolean(result);    
 }
index 666c046..a2febe2 100644 (file)
@@ -917,7 +917,7 @@ JSValue* windowProtoFuncAToB(ExecState* exec, JSObject*, JSValue* thisValue, con
     if (args.size() < 1)
         return throwError(exec, SyntaxError, "Not enough arguments");
 
-    JSValue* v = args[0];
+    JSValue* v = args.at(exec, 0);
     if (v->isNull())
         return jsString(exec);
 
@@ -949,7 +949,7 @@ JSValue* windowProtoFuncBToA(ExecState* exec, JSObject*, JSValue* thisValue, con
     if (args.size() < 1)
         return throwError(exec, SyntaxError, "Not enough arguments");
 
-    JSValue* v = args[0];
+    JSValue* v = args.at(exec, 0);
     if (v->isNull())
         return jsString(exec);
 
@@ -986,8 +986,8 @@ JSValue* windowProtoFuncOpen(ExecState* exec, JSObject*, JSValue* thisValue, con
 
     Page* page = frame->page();
 
-    String urlString = valueToStringWithUndefinedOrNullCheck(exec, args[0]);
-    AtomicString frameName = args[1]->isUndefinedOrNull() ? "_blank" : AtomicString(args[1]->toString(exec));
+    String urlString = valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 0));
+    AtomicString frameName = args.at(exec, 1)->isUndefinedOrNull() ? "_blank" : AtomicString(args.at(exec, 1)->toString(exec));
 
     // Because FrameTree::find() returns true for empty strings, we must check for empty framenames.
     // Otherwise, illegitimate window.open() calls with no name will pass right through the popup blocker.
@@ -1022,7 +1022,7 @@ JSValue* windowProtoFuncOpen(ExecState* exec, JSObject*, JSValue* thisValue, con
     }
 
     // In the case of a named frame or a new window, we'll use the createWindow() helper
-    WindowFeatures windowFeatures(valueToStringWithUndefinedOrNullCheck(exec, args[2]));
+    WindowFeatures windowFeatures(valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 2)));
     FloatRect windowRect(windowFeatures.x, windowFeatures.y, windowFeatures.width, windowFeatures.height);
     DOMWindow::adjustWindowRect(screenAvailableRect(page->mainFrame()->view()), windowRect, windowRect);
 
@@ -1047,8 +1047,8 @@ static JSValue* setTimeoutOrInterval(ExecState* exec, JSValue* thisValue, const
     if (!window->allowsAccessFrom(exec))
         return jsUndefined();
 
-    JSValue* v = args[0];
-    int delay = args[1]->toInt32(exec);
+    JSValue* v = args.at(exec, 0);
+    int delay = args.at(exec, 1)->toInt32(exec);
     if (v->isString())
         return jsNumber(exec, window->installTimeout(static_cast<JSString*>(v)->value(), delay, timeout));
     CallData callData;
@@ -1056,7 +1056,7 @@ static JSValue* setTimeoutOrInterval(ExecState* exec, JSValue* thisValue, const
         return jsUndefined();
     ArgList argsTail;
     args.getSlice(2, argsTail);
-    return jsNumber(exec, window->installTimeout(v, argsTail, delay, timeout));
+    return jsNumber(exec, window->installTimeout(exec, v, argsTail, delay, timeout));
 }
 
 JSValue* windowProtoFuncClearTimeoutOrInterval(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
@@ -1067,7 +1067,7 @@ JSValue* windowProtoFuncClearTimeoutOrInterval(ExecState* exec, JSObject*, JSVal
     if (!window->allowsAccessFrom(exec))
         return jsUndefined();
 
-    window->clearTimeout(args[0]->toInt32(exec));
+    window->clearTimeout(args.at(exec, 0)->toInt32(exec));
     return jsUndefined();
 }
 
@@ -1093,9 +1093,9 @@ JSValue* windowProtoFuncAddEventListener(ExecState* exec, JSObject*, JSValue* th
     if (!frame)
         return jsUndefined();
 
-    if (RefPtr<JSEventListener> listener = window->findOrCreateJSEventListener(exec, args[1])) {
+    if (RefPtr<JSEventListener> listener = window->findOrCreateJSEventListener(exec, args.at(exec, 1))) {
         if (Document* doc = frame->document())
-            doc->addWindowEventListener(AtomicString(args[0]->toString(exec)), listener.release(), args[2]->toBoolean(exec));
+            doc->addWindowEventListener(AtomicString(args.at(exec, 0)->toString(exec)), listener.release(), args.at(exec, 2)->toBoolean(exec));
     }
 
     return jsUndefined();
@@ -1113,9 +1113,9 @@ JSValue* windowProtoFuncRemoveEventListener(ExecState* exec, JSObject*, JSValue*
     if (!frame)
         return jsUndefined();
 
-    if (JSEventListener* listener = window->findJSEventListener(args[1])) {
+    if (JSEventListener* listener = window->findJSEventListener(args.at(exec, 1))) {
         if (Document* doc = frame->document())
-            doc->removeWindowEventListener(AtomicString(args[0]->toString(exec)), listener, args[2]->toBoolean(exec));
+            doc->removeWindowEventListener(AtomicString(args.at(exec, 0)->toString(exec)), listener, args.at(exec, 2)->toBoolean(exec));
     }
 
     return jsUndefined();
@@ -1133,7 +1133,7 @@ JSValue* windowProtoFuncShowModalDialog(ExecState* exec, JSObject*, JSValue* thi
     if (!frame)
         return jsUndefined();
 
-    return showModalDialog(exec, frame, valueToStringWithUndefinedOrNullCheck(exec, args[0]), args[1], valueToStringWithUndefinedOrNullCheck(exec, args[2]));
+    return showModalDialog(exec, frame, valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 0)), args.at(exec, 1), valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 2)));
 }
 
 JSValue* windowProtoFuncNotImplemented(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList&)
@@ -1186,9 +1186,9 @@ int JSDOMWindowBase::installTimeout(const UString& handler, int t, bool singleSh
     return installTimeout(new ScheduledAction(handler), t, singleShot);
 }
 
-int JSDOMWindowBase::installTimeout(JSValue* func, const ArgList& args, int t, bool singleShot)
+int JSDOMWindowBase::installTimeout(ExecState* exec, JSValue* func, const ArgList& args, int t, bool singleShot)
 {
-    return installTimeout(new ScheduledAction(func, args), t, singleShot);
+    return installTimeout(new ScheduledAction(exec, func, args), t, singleShot);
 }
 
 PausedTimeouts* JSDOMWindowBase::pauseTimeouts()
index b6f82be..e464f0f 100644 (file)
@@ -69,7 +69,7 @@ namespace WebCore {
         virtual void put(KJS::ExecState*, const KJS::Identifier& propertyName, KJS::JSValue*);
 
         int installTimeout(const KJS::UString& handler, int t, bool singleShot);
-        int installTimeout(KJS::JSValue* function, const KJS::ArgList& args, int t, bool singleShot);
+        int installTimeout(KJS::ExecState*, KJS::JSValue* function, const KJS::ArgList& args, int t, bool singleShot);
         void clearTimeout(int timerId, bool delAction = true);
         PausedTimeouts* pauseTimeouts();
         void resumeTimeouts(PausedTimeouts*);
index a9c8e18..4912e9d 100644 (file)
@@ -159,12 +159,12 @@ JSValue* JSDOMWindow::postMessage(ExecState* exec, const ArgList& args)
     DOMWindow* window = impl();
 
     DOMWindow* source = asJSDOMWindow(exec->dynamicGlobalObject())->impl();
-    String message = args[0]->toString(exec);
+    String message = args.at(exec, 0)->toString(exec);
 
     if (exec->hadException())
         return jsUndefined();
 
-    String targetOrigin = valueToStringWithUndefinedOrNullCheck(exec, args[1]);
+    String targetOrigin = valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 1));
     if (exec->hadException())
         return jsUndefined();
 
index e7ee07a..f07af27 100644 (file)
@@ -47,15 +47,15 @@ using namespace KJS;
 
 JSValue* JSDatabase::changeVersion(ExecState* exec, const ArgList& args)
 {
-    String oldVersion = args[0]->toString(exec);
-    String newVersion = args[1]->toString(exec);
+    String oldVersion = args.at(exec, 0)->toString(exec);
+    String newVersion = args.at(exec, 1)->toString(exec);
 
     Frame* frame = asJSDOMWindow(exec->dynamicGlobalObject())->impl()->frame();
     if (!frame)
         return jsUndefined();
     
     JSObject *object;
-    if (!(object = args[2]->getObject())) {
+    if (!(object = args.at(exec, 2)->getObject())) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
     }
@@ -63,8 +63,8 @@ JSValue* JSDatabase::changeVersion(ExecState* exec, const ArgList& args)
     RefPtr<SQLTransactionCallback> callback(JSCustomSQLTransactionCallback::create(object, frame));
     
     RefPtr<SQLTransactionErrorCallback> errorCallback;
-    if (!args[3]->isNull()) {
-        if (!(object = args[3]->getObject())) {
+    if (!args.at(exec, 3)->isNull()) {
+        if (!(object = args.at(exec, 3)->getObject())) {
             setDOMException(exec, TYPE_MISMATCH_ERR);
             return jsUndefined();
         }
@@ -73,8 +73,8 @@ JSValue* JSDatabase::changeVersion(ExecState* exec, const ArgList& args)
     }
     
     RefPtr<VoidCallback> successCallback;
-    if (!args[4]->isNull()) {
-        successCallback = toVoidCallback(exec, args[4]);
+    if (!args.at(exec, 4)->isNull()) {
+        successCallback = toVoidCallback(exec, args.at(exec, 4));
         if (!successCallback) {
             setDOMException(exec, TYPE_MISMATCH_ERR);
             return jsUndefined();
@@ -90,7 +90,7 @@ JSValue* JSDatabase::transaction(ExecState* exec, const ArgList& args)
 {
     JSObject* object;
     
-    if (!(object = args[0]->getObject())) {
+    if (!(object = args.at(exec, 0)->getObject())) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
     }        
@@ -102,8 +102,8 @@ JSValue* JSDatabase::transaction(ExecState* exec, const ArgList& args)
     RefPtr<SQLTransactionCallback> callback(JSCustomSQLTransactionCallback::create(object, frame));
     RefPtr<SQLTransactionErrorCallback> errorCallback;
     
-    if (args.size() > 1 && !args[1]->isNull()) {
-        if (!(object = args[1]->getObject())) {
+    if (args.size() > 1 && !args.at(exec, 1)->isNull()) {
+        if (!(object = args.at(exec, 1)->getObject())) {
             setDOMException(exec, TYPE_MISMATCH_ERR);
             return jsUndefined();
         }
@@ -112,8 +112,8 @@ JSValue* JSDatabase::transaction(ExecState* exec, const ArgList& args)
     }
 
     RefPtr<VoidCallback> successCallback;
-    if (args.size() > 2 && !args[2]->isNull()) {
-        successCallback = toVoidCallback(exec, args[2]);
+    if (args.size() > 2 && !args.at(exec, 2)->isNull()) {
+        successCallback = toVoidCallback(exec, args.at(exec, 2));
         if (!successCallback) {
             setDOMException(exec, TYPE_MISMATCH_ERR);
             return jsUndefined();
index 776076c..e837db8 100644 (file)
@@ -80,8 +80,8 @@ JSValue* JSDocument::querySelector(ExecState* exec, const ArgList& args)
 {
     Document* imp = impl();
     ExceptionCode ec = 0;
-    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args[0]);
-    RefPtr<NSResolver> resolver = args[1]->isUndefinedOrNull() ? 0 : toNSResolver(args[1]);
+    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 0));
+    RefPtr<NSResolver> resolver = args.at(exec, 1)->isUndefinedOrNull() ? 0 : toNSResolver(args.at(exec, 1));
 
     RefPtr<Element> element = imp->querySelector(selectors, resolver.get(), ec, exec);
     if (exec->hadException())
@@ -95,8 +95,8 @@ JSValue* JSDocument::querySelectorAll(ExecState* exec, const ArgList& args)
 {
     Document* imp = impl();
     ExceptionCode ec = 0;
-    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args[0]);
-    RefPtr<NSResolver> resolver = args[1]->isUndefinedOrNull() ? 0 : toNSResolver(args[1]);
+    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 0));
+    RefPtr<NSResolver> resolver = args.at(exec, 1)->isUndefinedOrNull() ? 0 : toNSResolver(args.at(exec, 1));
 
     RefPtr<NodeList> nodeList = imp->querySelectorAll(selectors, resolver.get(), ec, exec);
     if (exec->hadException())
index 6de15ee..bb0bdd4 100644 (file)
@@ -42,8 +42,8 @@ JSValue* JSDocumentFragment::querySelector(ExecState* exec, const ArgList& args)
 {
     DocumentFragment* imp = static_cast<DocumentFragment*>(impl());
     ExceptionCode ec = 0;
-    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args[0]);
-    RefPtr<NSResolver> resolver = args[1]->isUndefinedOrNull() ? 0 : toNSResolver(args[1]);
+    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 0));
+    RefPtr<NSResolver> resolver = args.at(exec, 1)->isUndefinedOrNull() ? 0 : toNSResolver(args.at(exec, 1));
 
     RefPtr<Element> element = imp->querySelector(selectors, resolver.get(), ec, exec);
     if (exec->hadException())
@@ -57,8 +57,8 @@ JSValue* JSDocumentFragment::querySelectorAll(ExecState* exec, const ArgList& ar
 {
     DocumentFragment* imp = static_cast<DocumentFragment*>(impl());
     ExceptionCode ec = 0;
-    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args[0]);
-    RefPtr<NSResolver> resolver = args[1]->isUndefinedOrNull() ? 0 : toNSResolver(args[1]);
+    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 0));
+    RefPtr<NSResolver> resolver = args.at(exec, 1)->isUndefinedOrNull() ? 0 : toNSResolver(args.at(exec, 1));
 
     RefPtr<NodeList> nodeList = imp->querySelectorAll(selectors, resolver.get(), ec, exec);
     if (exec->hadException())
index 2a4ae26..25af413 100644 (file)
@@ -64,8 +64,8 @@ static inline bool allowSettingSrcToJavascriptURL(ExecState* exec, Element* elem
 JSValue* JSElement::setAttribute(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    AtomicString name = args[0]->toString(exec);
-    AtomicString value = args[1]->toString(exec);
+    AtomicString name = args.at(exec, 0)->toString(exec);
+    AtomicString value = args.at(exec, 1)->toString(exec);
 
     Element* imp = impl();
     if (!allowSettingSrcToJavascriptURL(exec, imp, name, value))
@@ -79,7 +79,7 @@ JSValue* JSElement::setAttribute(ExecState* exec, const ArgList& args)
 JSValue* JSElement::setAttributeNode(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    Attr* newAttr = toAttr(args[0]);
+    Attr* newAttr = toAttr(args.at(exec, 0));
     if (!newAttr) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -97,9 +97,9 @@ JSValue* JSElement::setAttributeNode(ExecState* exec, const ArgList& args)
 JSValue* JSElement::setAttributeNS(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    AtomicString namespaceURI = valueToStringWithNullCheck(exec, args[0]);
-    AtomicString qualifiedName = args[1]->toString(exec);
-    AtomicString value = args[2]->toString(exec);
+    AtomicString namespaceURI = valueToStringWithNullCheck(exec, args.at(exec, 0));
+    AtomicString qualifiedName = args.at(exec, 1)->toString(exec);
+    AtomicString value = args.at(exec, 2)->toString(exec);
 
     Element* imp = impl();
     if (!allowSettingSrcToJavascriptURL(exec, imp, qualifiedName, value))
@@ -113,7 +113,7 @@ JSValue* JSElement::setAttributeNS(ExecState* exec, const ArgList& args)
 JSValue* JSElement::setAttributeNodeNS(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    Attr* newAttr = toAttr(args[0]);
+    Attr* newAttr = toAttr(args.at(exec, 0));
     if (!newAttr) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -132,8 +132,8 @@ JSValue* JSElement::querySelector(ExecState* exec, const ArgList& args)
 {
     Element* imp = impl();
     ExceptionCode ec = 0;
-    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args[0]);
-    RefPtr<NSResolver> resolver = args[1]->isUndefinedOrNull() ? 0 : toNSResolver(args[1]);
+    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 0));
+    RefPtr<NSResolver> resolver = args.at(exec, 1)->isUndefinedOrNull() ? 0 : toNSResolver(args.at(exec, 1));
 
     RefPtr<Element> element = imp->querySelector(selectors, resolver.get(), ec, exec);
     if (exec->hadException())
@@ -147,8 +147,8 @@ JSValue* JSElement::querySelectorAll(ExecState* exec, const ArgList& args)
 {
     Element* imp = impl();
     ExceptionCode ec = 0;
-    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args[0]);
-    RefPtr<NSResolver> resolver = args[1]->isUndefinedOrNull() ? 0 : toNSResolver(args[1]);
+    const UString& selectors = valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 0));
+    RefPtr<NSResolver> resolver = args.at(exec, 1)->isUndefinedOrNull() ? 0 : toNSResolver(args.at(exec, 1));
 
     RefPtr<NodeList> nodeList = imp->querySelectorAll(selectors, resolver.get(), ec, exec);
     if (exec->hadException())
index da2cdb3..f56626b 100644 (file)
@@ -130,8 +130,8 @@ JSValue* jsEventTargetAddEventListener(ExecState* exec, JSObject*, JSValue* this
     if (!frame)
         return jsUndefined();
 
-    if (RefPtr<JSEventListener> listener = toJSDOMWindow(frame)->findOrCreateJSEventListener(exec, args[1]))
-        eventTarget->addEventListener(args[0]->toString(exec), listener.release(), args[2]->toBoolean(exec));
+    if (RefPtr<JSEventListener> listener = toJSDOMWindow(frame)->findOrCreateJSEventListener(exec, args.at(exec, 1)))
+        eventTarget->addEventListener(args.at(exec, 0)->toString(exec), listener.release(), args.at(exec, 2)->toBoolean(exec));
 
     return jsUndefined();
 }
@@ -147,8 +147,8 @@ JSValue* jsEventTargetRemoveEventListener(ExecState* exec, JSObject*, JSValue* t
     if (!frame)
         return jsUndefined();
 
-    if (JSEventListener* listener = toJSDOMWindow(frame)->findJSEventListener(args[1]))
-        eventTarget->removeEventListener(args[0]->toString(exec), listener, args[2]->toBoolean(exec));
+    if (JSEventListener* listener = toJSDOMWindow(frame)->findJSEventListener(args.at(exec, 1)))
+        eventTarget->removeEventListener(args.at(exec, 0)->toString(exec), listener, args.at(exec, 2)->toBoolean(exec));
 
     return jsUndefined();
 }
@@ -161,7 +161,7 @@ JSValue* jsEventTargetDispatchEvent(ExecState* exec, JSObject*, JSValue* thisVal
         return throwError(exec, TypeError);
 
     DOMExceptionTranslator exception(exec);
-    return jsBoolean(eventTarget->dispatchEvent(toEvent(args[0]), exception));
+    return jsBoolean(eventTarget->dispatchEvent(toEvent(args.at(exec, 0)), exception));
 }
 
 const AtomicString& eventNameForPropertyToken(int token)
index 22d4cdd..f6def9b 100644 (file)
@@ -64,7 +64,7 @@ static JSValue* callHTMLCollection(ExecState* exec, JSObject* function, JSValue*
     if (args.size() == 1) {
         // Support for document.all(<index>) etc.
         bool ok;
-        UString string = args[0]->toString(exec);
+        UString string = args.at(exec, 0)->toString(exec);
         unsigned index = string.toUInt32(&ok, false);
         if (ok)
             return toJS(exec, collection->item(index));
@@ -75,8 +75,8 @@ static JSValue* callHTMLCollection(ExecState* exec, JSObject* function, JSValue*
 
     // The second arg, if set, is the index of the item we want
     bool ok;
-    UString string = args[0]->toString(exec);
-    unsigned index = args[1]->toString(exec).toUInt32(&ok, false);
+    UString string = args.at(exec, 0)->toString(exec);
+    unsigned index = args.at(exec, 1)->toString(exec).toUInt32(&ok, false);
     if (ok) {
         String pstr = string;
         Node* node = collection->namedItem(pstr);
@@ -111,15 +111,15 @@ JSValue* JSHTMLCollection::nameGetter(ExecState* exec, const Identifier& propert
 JSValue* JSHTMLCollection::item(ExecState* exec, const ArgList& args)
 {
     bool ok;
-    uint32_t index = args[0]->toString(exec).toUInt32(&ok, false);
+    uint32_t index = args.at(exec, 0)->toString(exec).toUInt32(&ok, false);
     if (ok)
         return toJS(exec, impl()->item(index));
-    return getNamedItems(exec, impl(), Identifier(exec, args[0]->toString(exec)));
+    return getNamedItems(exec, impl(), Identifier(exec, args.at(exec, 0)->toString(exec)));
 }
 
 JSValue* JSHTMLCollection::namedItem(ExecState* exec, const ArgList& args)
 {
-    return getNamedItems(exec, impl(), Identifier(exec, args[0]->toString(exec)));
+    return getNamedItems(exec, impl(), Identifier(exec, args.at(exec, 0)->toString(exec)));
 }
 
 JSValue* toJS(ExecState* exec, HTMLCollection* collection)
index 4b8783b..f4a5146 100644 (file)
@@ -130,11 +130,11 @@ static String writeHelper(ExecState* exec, const ArgList& args)
 
     unsigned size = args.size();
     if (size == 1)
-        return args[0]->toString(exec);
+        return args.at(exec, 0)->toString(exec);
 
     Vector<UChar> result;
     for (unsigned i = 0; i < size; ++i)
-        append(result, args[i]->toString(exec));
+        append(result, args.at(exec, i)->toString(exec));
     return String::adopt(result);
 }
 
index 1b409c8..f093662 100644 (file)
@@ -53,7 +53,7 @@ KJS_IMPLEMENT_PROTOTYPE("HTMLInputElementBase", JSHTMLInputElementBasePrototype)
 JSValue* jsHTMLInputElementBaseFunctionSetSelectionRange(ExecState* exec, JSObject*, JSValue* thisValue, const ArgList& args)
 {
     HTMLInputElement& input = *static_cast<HTMLInputElement*>(static_cast<JSHTMLInputElementBase*>(thisValue)->impl());
-    input.setSelectionRange(args[0]->toInt32(exec), args[1]->toInt32(exec));
+    input.setSelectionRange(args.at(exec, 0)->toInt32(exec), args.at(exec, 1)->toInt32(exec));
     return jsUndefined();
 }
 
index fa53739..f47fc07 100644 (file)
@@ -48,16 +48,16 @@ static JSObject* constructHTMLOptionElement(ExecState* exec, JSObject* construct
     RefPtr<Text> text;
     if (ec == 0)
         text = document->createTextNode("");
-    if (ec == 0 && !args[0]->isUndefined())
-        text->setData(args[0]->toString(exec), ec);
+    if (ec == 0 && !args.at(exec, 0)->isUndefined())
+        text->setData(args.at(exec, 0)->toString(exec), ec);
     if (ec == 0)
         element->appendChild(text.release(), ec);
-    if (ec == 0 && !args[1]->isUndefined())
-        element->setValue(args[1]->toString(exec));
+    if (ec == 0 && !args.at(exec, 1)->isUndefined())
+        element->setValue(args.at(exec, 1)->toString(exec));
     if (ec == 0)
-        element->setDefaultSelected(args[2]->toBoolean(exec));
+        element->setDefaultSelected(args.at(exec, 2)->toBoolean(exec));
     if (ec == 0)
-        element->setSelected(args[3]->toBoolean(exec));
+        element->setSelected(args.at(exec, 3)->toBoolean(exec));
 
     if (ec) {
         setDOMException(exec, ec);
index 2302ecb..8ae614e 100644 (file)
@@ -70,13 +70,13 @@ void JSHTMLOptionsCollection::indexSetter(ExecState* exec, unsigned index, JSVal
 JSValue* JSHTMLOptionsCollection::add(ExecState* exec, const ArgList& args)
 {
     HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl());
-    HTMLOptionElement* option = toHTMLOptionElement(args[0]);
+    HTMLOptionElement* option = toHTMLOptionElement(args.at(exec, 0));
     ExceptionCode ec = 0;
     if (args.size() < 2)
         imp->add(option, ec);
     else {
         bool ok;
-        int index = args[1]->toInt32(exec, ok);
+        int index = args.at(exec, 1)->toInt32(exec, ok);
         if (exec->hadException())
             return jsUndefined();
         if (!ok)
index 01000db..8df37df 100644 (file)
@@ -37,11 +37,11 @@ JSValue* JSHTMLSelectElement::remove(ExecState* exec, const ArgList& args)
     HTMLSelectElement& select = *static_cast<HTMLSelectElement*>(impl());
 
     // we support both options index and options objects
-    HTMLElement* element = toHTMLElement(args[0]);
+    HTMLElement* element = toHTMLElement(args.at(exec, 0));
     if (element && element->hasTagName(optionTag))
         select.remove(static_cast<HTMLOptionElement*>(element)->index());
     else
-        select.remove(args[0]->toInt32(exec));
+        select.remove(args.at(exec, 0)->toInt32(exec));
 
     return jsUndefined();
 }
index 71c8070..75969be 100644 (file)
@@ -44,11 +44,11 @@ static JSObject* constructImage(ExecState* exec, JSObject* constructor, const Ar
     int height = 0;
     if (args.size() > 0) {
         widthSet = true;
-        width = args[0]->toInt32(exec);
+        width = args.at(exec, 0)->toInt32(exec);
     }
     if (args.size() > 1) {
         heightSet = true;
-        height = args[1]->toInt32(exec);
+        height = args.at(exec, 1)->toInt32(exec);
     }
 
     Document* document = static_cast<JSImageConstructor*>(constructor)->document();
index ffd3f2b..9512006 100644 (file)
@@ -36,7 +36,7 @@ namespace WebCore {
 JSValue* JSJavaScriptCallFrame::evaluate(ExecState* exec, const ArgList& args)
 {
     JSValue* exception = 0;
-    JSValue* result = impl()->evaluate(args[0]->toString(exec), exception);
+    JSValue* result = impl()->evaluate(args.at(exec, 0)->toString(exec), exception);
 
     if (exception)
         exec->setException(exception);
index 87ade05..446356b 100644 (file)
@@ -236,7 +236,7 @@ JSValue* JSLocation::replace(ExecState* exec, const ArgList& args)
     if (!activeFrame->loader()->shouldAllowNavigation(frame))
         return jsUndefined();
 
-    navigateIfAllowed(exec, frame, activeFrame->loader()->completeURL(args[0]->toString(exec)), true);
+    navigateIfAllowed(exec, frame, activeFrame->loader()->completeURL(args.at(exec, 0)->toString(exec)), true);
     return jsUndefined();
 }
 
@@ -270,7 +270,7 @@ JSValue* JSLocation::assign(ExecState* exec, const ArgList& args)
         return jsUndefined();
 
     // We want a new history item if this JS was called via a user gesture
-    navigateIfAllowed(exec, frame, activeFrame->loader()->completeURL(args[0]->toString(exec)), false);
+    navigateIfAllowed(exec, frame, activeFrame->loader()->completeURL(args.at(exec, 0)->toString(exec)), false);
     return jsUndefined();
 }
 
index 515f0b1..79ef82c 100644 (file)
@@ -69,40 +69,40 @@ typedef int ExpectionCode;
 JSValue* JSNode::insertBefore(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    bool ok = impl()->insertBefore(toNode(args[0]), toNode(args[1]), ec, true);
+    bool ok = impl()->insertBefore(toNode(args.at(exec, 0)), toNode(args.at(exec, 1)), ec, true);
     setDOMException(exec, ec);
     if (ok)
-        return args[0];
+        return args.at(exec, 0);
     return jsNull();
 }
 
 JSValue* JSNode::replaceChild(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    bool ok = impl()->replaceChild(toNode(args[0]), toNode(args[1]), ec, true);
+    bool ok = impl()->replaceChild(toNode(args.at(exec, 0)), toNode(args.at(exec, 1)), ec, true);
     setDOMException(exec, ec);
     if (ok)
-        return args[1];
+        return args.at(exec, 1);
     return jsNull();
 }
 
 JSValue* JSNode::removeChild(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    bool ok = impl()->removeChild(toNode(args[0]), ec);
+    bool ok = impl()->removeChild(toNode(args.at(exec, 0)), ec);
     setDOMException(exec, ec);
     if (ok)
-        return args[0];
+        return args.at(exec, 0);
     return jsNull();
 }
 
 JSValue* JSNode::appendChild(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    bool ok = impl()->appendChild(toNode(args[0]), ec, true);
+    bool ok = impl()->appendChild(toNode(args.at(exec, 0)), ec, true);
     setDOMException(exec, ec);
     if (ok)
-        return args[0];
+        return args.at(exec, 0);
     return jsNull();
 }
 
index 4b3740e..4f72620 100644 (file)
@@ -43,7 +43,7 @@ void JSNodeFilter::mark()
 
 JSValue* JSNodeFilter::acceptNode(ExecState* exec, const ArgList& args)
 {
-    return jsNumber(exec, impl()->acceptNode(exec, toNode(args[0])));
+    return jsNumber(exec, impl()->acceptNode(exec, toNode(args.at(exec, 0))));
 }
 
 PassRefPtr<NodeFilter> toNodeFilter(JSValue* value)
index 19f7f37..693410a 100644 (file)
@@ -39,7 +39,7 @@ namespace WebCore {
 static JSValue* callNodeList(ExecState* exec, JSObject* function, JSValue*, const ArgList& args)
 {
     bool ok;
-    unsigned index = args[0]->toString(exec).toUInt32(&ok);
+    unsigned index = args.at(exec, 0)->toString(exec).toUInt32(&ok);
     if (!ok)
         return jsUndefined();
     return toJS(exec, static_cast<JSNodeList*>(function)->impl()->item(index));
index df27dd7..d31d454 100644 (file)
@@ -188,7 +188,7 @@ JSObject* JSQuarantinedObjectWrapper::construct(ExecState* exec, JSObject* const
 
     ArgList preparedArgs;
     for (size_t i = 0; i < args.size(); ++i)
-        preparedArgs.append(wrapper->prepareIncomingValue(exec, args[i]));
+        preparedArgs.append(wrapper->prepareIncomingValue(exec, args.at(exec, i)));
 
     // FIXME: Would be nice to find a way to reuse the result of m_unwrappedObject->getConstructData
     // from when we called it in JSQuarantinedObjectWrapper::getConstructData.
@@ -243,7 +243,7 @@ JSValue* JSQuarantinedObjectWrapper::call(ExecState* exec, JSObject* function, J
 
     ArgList preparedArgs;
     for (size_t i = 0; i < args.size(); ++i)
-        preparedArgs.append(wrapper->prepareIncomingValue(exec, args[i]));
+        preparedArgs.append(wrapper->prepareIncomingValue(exec, args.at(exec, i)));
 
     // FIXME: Would be nice to find a way to reuse the result of m_unwrappedObject->getCallData
     // from when we called it in JSQuarantinedObjectWrapper::getCallData.
index 5df40fc..24d6150 100644 (file)
@@ -40,7 +40,7 @@ namespace WebCore {
 JSValue* JSSQLResultSetRowList::item(ExecState* exec, const ArgList& args)
 {
     bool indexOk;
-    int index = args[0]->toInt32(exec, indexOk);
+    int index = args.at(exec, 0)->toInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
index 39867fe..56e2851 100644 (file)
@@ -42,14 +42,14 @@ namespace WebCore {
     
 JSValue* JSSQLTransaction::executeSql(ExecState* exec, const ArgList& args)
 {
-    String sqlStatement = args[0]->toString(exec);
+    String sqlStatement = args.at(exec, 0)->toString(exec);
     if (exec->hadException())
         return jsUndefined();
 
     // Now assemble the list of SQL arguments
     Vector<SQLValue> sqlValues;
-    if (!args[1]->isUndefinedOrNull()) {
-        JSObject* object = args[1]->getObject();
+    if (!args.at(exec, 1)->isUndefinedOrNull()) {
+        JSObject* object = args.at(exec, 1)->getObject();
         if (!object) {
             setDOMException(exec, TYPE_MISMATCH_ERR);
             return jsUndefined();
@@ -81,8 +81,8 @@ JSValue* JSSQLTransaction::executeSql(ExecState* exec, const ArgList& args)
     }
 
     RefPtr<SQLStatementCallback> callback;
-    if (!args[2]->isUndefinedOrNull()) {
-        JSObject* object = args[2]->getObject();
+    if (!args.at(exec, 2)->isUndefinedOrNull()) {
+        JSObject* object = args.at(exec, 2)->getObject();
         if (!object) {
             setDOMException(exec, TYPE_MISMATCH_ERR);
             return jsUndefined();
@@ -93,8 +93,8 @@ JSValue* JSSQLTransaction::executeSql(ExecState* exec, const ArgList& args)
     }
     
     RefPtr<SQLStatementErrorCallback> errorCallback;
-    if (!args[3]->isUndefinedOrNull()) {
-        JSObject* object = args[3]->getObject();
+    if (!args.at(exec, 3)->isUndefinedOrNull()) {
+        JSObject* object = args.at(exec, 3)->getObject();
         if (!object) {
             setDOMException(exec, TYPE_MISMATCH_ERR);
             return jsUndefined();
index cf95e53..a53de61 100644 (file)
@@ -37,7 +37,7 @@ JSValue* JSSVGLength::convertToSpecifiedUnits(ExecState* exec, const ArgList& ar
     JSSVGPODTypeWrapper<SVGLength>* wrapper = impl();
 
     SVGLength imp(*wrapper);
-    imp.convertToSpecifiedUnits(args[0]->toInt32(exec), context());
+    imp.convertToSpecifiedUnits(args.at(exec, 0)->toInt32(exec), context());
 
     wrapper->commitChange(imp, context());
     return jsUndefined();
index db299ac..3d47a55 100644 (file)
@@ -33,7 +33,7 @@ JSValue* JSSVGMatrix::multiply(ExecState* exec, const ArgList& args)
 {
     AffineTransform imp(*impl());
 
-    AffineTransform secondMatrix = toSVGMatrix(args[0]);    
+    AffineTransform secondMatrix = toSVGMatrix(args.at(exec, 0));    
     return toJS(exec, JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.multiply(secondMatrix)).get(), m_context.get());
 }
 
@@ -52,8 +52,8 @@ JSValue* JSSVGMatrix::translate(ExecState* exec, const ArgList& args)
 {
     AffineTransform imp(*impl());
 
-    float x = args[0]->toFloat(exec);
-    float y = args[1]->toFloat(exec);
+    float x = args.at(exec, 0)->toFloat(exec);
+    float y = args.at(exec, 1)->toFloat(exec);
 
     return toJS(exec, JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.translate(x, y)).get(), m_context.get());
 }
@@ -62,7 +62,7 @@ JSValue* JSSVGMatrix::scale(ExecState* exec, const ArgList& args)
 {
     AffineTransform imp(*impl());
 
-    float scaleFactor = args[0]->toFloat(exec);
+    float scaleFactor = args.at(exec, 0)->toFloat(exec);
     return toJS(exec, JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.scale(scaleFactor)).get(), m_context.get());
 }
 
@@ -70,8 +70,8 @@ JSValue* JSSVGMatrix::scaleNonUniform(ExecState* exec, const ArgList& args)
 {
     AffineTransform imp(*impl());
 
-    float scaleFactorX = args[0]->toFloat(exec);
-    float scaleFactorY = args[1]->toFloat(exec);
+    float scaleFactorX = args.at(exec, 0)->toFloat(exec);
+    float scaleFactorY = args.at(exec, 1)->toFloat(exec);
 
     return toJS(exec, JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.scaleNonUniform(scaleFactorX, scaleFactorY)).get(), m_context.get());
 }
@@ -80,7 +80,7 @@ JSValue* JSSVGMatrix::rotate(ExecState* exec, const ArgList& args)
 {
     AffineTransform imp(*impl());
 
-    float angle = args[0]->toFloat(exec);
+    float angle = args.at(exec, 0)->toFloat(exec);
     return toJS(exec, JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.rotate(angle)).get(), m_context.get());
 }
 
@@ -88,8 +88,8 @@ JSValue* JSSVGMatrix::rotateFromVector(ExecState* exec, const ArgList& args)
 {
     AffineTransform imp(*impl());
  
-    float x = args[0]->toFloat(exec);
-    float y = args[1]->toFloat(exec);
+    float x = args.at(exec, 0)->toFloat(exec);
+    float y = args.at(exec, 1)->toFloat(exec);
 
     KJS::JSValue* result = toJS(exec, JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.rotateFromVector(x, y)).get(), m_context.get());
 
@@ -115,7 +115,7 @@ JSValue* JSSVGMatrix::skewX(ExecState* exec, const ArgList& args)
 {
     AffineTransform imp(*impl());
 
-    float angle = args[0]->toFloat(exec);
+    float angle = args.at(exec, 0)->toFloat(exec);
     return toJS(exec, JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.skewX(angle)).get(), m_context.get());
 }
 
@@ -123,7 +123,7 @@ JSValue* JSSVGMatrix::skewY(ExecState* exec, const ArgList& args)
 {
     AffineTransform imp(*impl());
 
-    float angle = args[0]->toFloat(exec);
+    float angle = args.at(exec, 0)->toFloat(exec);
     return toJS(exec, JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.skewY(angle)).get(), m_context.get());
 }
 
index 55b471e..d939121 100644 (file)
@@ -51,7 +51,7 @@ JSValue* JSSVGPathSegList::clear(ExecState* exec, const ArgList& args)
 JSValue* JSSVGPathSegList::initialize(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    SVGPathSeg* newItem = toSVGPathSeg(args[0]);
+    SVGPathSeg* newItem = toSVGPathSeg(args.at(exec, 0));
 
     SVGPathSegList* imp = static_cast<SVGPathSegList*>(impl());
 
@@ -69,7 +69,7 @@ JSValue* JSSVGPathSegList::getItem(ExecState* exec, const ArgList& args)
     ExceptionCode ec = 0;
 
     bool indexOk;
-    unsigned index = args[0]->toInt32(exec, indexOk);
+    unsigned index = args.at(exec, 0)->toInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -86,10 +86,10 @@ JSValue* JSSVGPathSegList::getItem(ExecState* exec, const ArgList& args)
 JSValue* JSSVGPathSegList::insertItemBefore(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    SVGPathSeg* newItem = toSVGPathSeg(args[0]);
+    SVGPathSeg* newItem = toSVGPathSeg(args.at(exec, 0));
 
     bool indexOk;
-    unsigned index = args[1]->toInt32(exec, indexOk);
+    unsigned index = args.at(exec, 1)->toInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -107,10 +107,10 @@ JSValue* JSSVGPathSegList::insertItemBefore(ExecState* exec, const ArgList& args
 JSValue* JSSVGPathSegList::replaceItem(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    SVGPathSeg* newItem = toSVGPathSeg(args[0]);
+    SVGPathSeg* newItem = toSVGPathSeg(args.at(exec, 0));
     
     bool indexOk;
-    unsigned index = args[1]->toInt32(exec, indexOk);
+    unsigned index = args.at(exec, 1)->toInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -130,7 +130,7 @@ JSValue* JSSVGPathSegList::removeItem(ExecState* exec, const ArgList& args)
     ExceptionCode ec = 0;
     
     bool indexOk;
-    unsigned index = args[0]->toInt32(exec, indexOk);
+    unsigned index = args.at(exec, 0)->toInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -150,7 +150,7 @@ JSValue* JSSVGPathSegList::removeItem(ExecState* exec, const ArgList& args)
 JSValue* JSSVGPathSegList::appendItem(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    SVGPathSeg* newItem = toSVGPathSeg(args[0]);
+    SVGPathSeg* newItem = toSVGPathSeg(args.at(exec, 0));
 
     SVGPathSegList* imp = static_cast<SVGPathSegList*>(impl());
 
index 966dea1..b97f648 100644 (file)
@@ -77,13 +77,13 @@ JSValue* JSSVGPointList::initialize(ExecState* exec, const ArgList& args)
     ExceptionCode ec = 0;
     SVGPointListBase* listImp = impl();
     return finishSetter(exec, ec, context(), impl(),
-        listImp->initialize(PODListItem::copy(toSVGPoint(args[0])), ec));
+        listImp->initialize(PODListItem::copy(toSVGPoint(args.at(exec, 0))), ec));
 }
 
 JSValue* JSSVGPointList::getItem(ExecState* exec, const ArgList& args)
 {
     bool indexOk;
-    unsigned index = args[0]->toUInt32(exec, indexOk);
+    unsigned index = args.at(exec, 0)->toUInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -98,7 +98,7 @@ JSValue* JSSVGPointList::getItem(ExecState* exec, const ArgList& args)
 JSValue* JSSVGPointList::insertItemBefore(ExecState* exec, const ArgList& args)
 {
     bool indexOk;
-    unsigned index = args[1]->toUInt32(exec, indexOk);
+    unsigned index = args.at(exec, 1)->toUInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -107,13 +107,13 @@ JSValue* JSSVGPointList::insertItemBefore(ExecState* exec, const ArgList& args)
     ExceptionCode ec = 0;
     SVGPointListBase* listImp = impl();
     return finishSetter(exec, ec, context(), impl(),
-        listImp->insertItemBefore(PODListItem::copy(toSVGPoint(args[0])), index, ec));
+        listImp->insertItemBefore(PODListItem::copy(toSVGPoint(args.at(exec, 0))), index, ec));
 }
 
 JSValue* JSSVGPointList::replaceItem(ExecState* exec, const ArgList& args)
 {
     bool indexOk;
-    unsigned index = args[1]->toInt32(exec, indexOk);
+    unsigned index = args.at(exec, 1)->toInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -122,13 +122,13 @@ JSValue* JSSVGPointList::replaceItem(ExecState* exec, const ArgList& args)
     ExceptionCode ec = 0;
     SVGPointListBase* listImp = impl();
     return finishSetter(exec, ec, context(), impl(),
-        listImp->replaceItem(PODListItem::copy(toSVGPoint(args[0])), index, ec));
+        listImp->replaceItem(PODListItem::copy(toSVGPoint(args.at(exec, 0))), index, ec));
 }
 
 JSValue* JSSVGPointList::removeItem(ExecState* exec, const ArgList& args)
 {
     bool indexOk;
-    unsigned index = args[0]->toInt32(exec, indexOk);
+    unsigned index = args.at(exec, 0)->toInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -145,7 +145,7 @@ JSValue* JSSVGPointList::appendItem(ExecState* exec, const ArgList& args)
     ExceptionCode ec = 0;
     SVGPointListBase* listImp = impl();
     return finishSetter(exec, ec, context(), impl(),
-        listImp->appendItem(PODListItem::copy(toSVGPoint(args[0])), ec));
+        listImp->appendItem(PODListItem::copy(toSVGPoint(args.at(exec, 0))), ec));
 }
 
 }
index a87c062..21c4fe7 100644 (file)
@@ -77,13 +77,13 @@ JSValue* JSSVGTransformList::initialize(ExecState* exec, const ArgList& args)
     ExceptionCode ec = 0;
     SVGTransformListBase* listImp = impl();
     return finishSetter(exec, ec, context(), impl(),
-        listImp->initialize(PODListItem::copy(toSVGTransform(args[0])), ec));
+        listImp->initialize(PODListItem::copy(toSVGTransform(args.at(exec, 0))), ec));
 }
 
 JSValue* JSSVGTransformList::getItem(ExecState* exec, const ArgList& args)
 {
     bool indexOk;
-    unsigned index = args[0]->toUInt32(exec, indexOk);
+    unsigned index = args.at(exec, 0)->toUInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -98,7 +98,7 @@ JSValue* JSSVGTransformList::getItem(ExecState* exec, const ArgList& args)
 JSValue* JSSVGTransformList::insertItemBefore(ExecState* exec, const ArgList& args)
 {
     bool indexOk;
-    unsigned index = args[1]->toUInt32(exec, indexOk);
+    unsigned index = args.at(exec, 1)->toUInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -107,13 +107,13 @@ JSValue* JSSVGTransformList::insertItemBefore(ExecState* exec, const ArgList& ar
     ExceptionCode ec = 0;
     SVGTransformListBase* listImp = impl();
     return finishSetter(exec, ec, context(), impl(),
-        listImp->insertItemBefore(PODListItem::copy(toSVGTransform(args[0])), index, ec));
+        listImp->insertItemBefore(PODListItem::copy(toSVGTransform(args.at(exec, 0))), index, ec));
 }
 
 JSValue* JSSVGTransformList::replaceItem(ExecState* exec, const ArgList& args)
 {
     bool indexOk;
-    unsigned index = args[1]->toUInt32(exec, indexOk);
+    unsigned index = args.at(exec, 1)->toUInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -122,13 +122,13 @@ JSValue* JSSVGTransformList::replaceItem(ExecState* exec, const ArgList& args)
     ExceptionCode ec = 0;
     SVGTransformListBase* listImp = impl();
     return finishSetter(exec, ec, context(), impl(),
-        listImp->replaceItem(PODListItem::copy(toSVGTransform(args[0])), index, ec));
+        listImp->replaceItem(PODListItem::copy(toSVGTransform(args.at(exec, 0))), index, ec));
 }
 
 JSValue* JSSVGTransformList::removeItem(ExecState* exec, const ArgList& args)
 {
     bool indexOk;
-    unsigned index = args[0]->toUInt32(exec, indexOk);
+    unsigned index = args.at(exec, 0)->toUInt32(exec, indexOk);
     if (!indexOk) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
@@ -145,7 +145,7 @@ JSValue* JSSVGTransformList::appendItem(ExecState* exec, const ArgList& args)
     ExceptionCode ec = 0;
     SVGTransformListBase* listImp = impl();
     return finishSetter(exec, ec, context(), impl(),
-        listImp->appendItem(PODListItem::copy(toSVGTransform(args[0])), ec));
+        listImp->appendItem(PODListItem::copy(toSVGTransform(args.at(exec, 0))), ec));
 }
 
 }
index 5d3a528..9dbd87c 100644 (file)
@@ -193,20 +193,20 @@ JSValue* JSXMLHttpRequest::open(ExecState* exec, const ArgList& args)
     Frame* frame = asJSDOMWindow(exec->dynamicGlobalObject())->impl()->frame();
     if (!frame)
         return jsUndefined();
-    const KURL& url = frame->loader()->completeURL(args[1]->toString(exec));
+    const KURL& url = frame->loader()->completeURL(args.at(exec, 1)->toString(exec));
 
     ExceptionCode ec = 0;
 
-    String method = args[0]->toString(exec);
+    String method = args.at(exec, 0)->toString(exec);
     bool async = true;
     if (args.size() >= 3)
-        async = args[2]->toBoolean(exec);
+        async = args.at(exec, 2)->toBoolean(exec);
 
-    if (args.size() >= 4 && !args[3]->isUndefined()) {
-        String user = valueToStringWithNullCheck(exec, args[3]);
+    if (args.size() >= 4 && !args.at(exec, 3)->isUndefined()) {
+        String user = valueToStringWithNullCheck(exec, args.at(exec, 3));
 
-        if (args.size() >= 5 && !args[4]->isUndefined()) {
-            String password = valueToStringWithNullCheck(exec, args[4]);
+        if (args.size() >= 5 && !args.at(exec, 4)->isUndefined()) {
+            String password = valueToStringWithNullCheck(exec, args.at(exec, 4));
             impl()->open(method, url, async, user, password, ec);
         } else
             impl()->open(method, url, async, user, ec);
@@ -223,7 +223,7 @@ JSValue* JSXMLHttpRequest::setRequestHeader(ExecState* exec, const ArgList& args
         return throwError(exec, SyntaxError, "Not enough arguments");
 
     ExceptionCode ec = 0;
-    impl()->setRequestHeader(args[0]->toString(exec), args[1]->toString(exec), ec);
+    impl()->setRequestHeader(args.at(exec, 0)->toString(exec), args.at(exec, 1)->toString(exec), ec);
     setDOMException(exec, ec);
     return jsUndefined();
 }
@@ -234,7 +234,7 @@ JSValue* JSXMLHttpRequest::send(ExecState* exec, const ArgList& args)
     if (args.isEmpty())
         impl()->send(ec);
     else {
-        JSValue* val = args[0];
+        JSValue* val = args.at(exec, 0);
         if (val->isUndefinedOrNull())
             impl()->send(ec);
         else if (val->isObject(&JSDocument::s_info))
@@ -255,7 +255,7 @@ JSValue* JSXMLHttpRequest::getResponseHeader(ExecState* exec, const ArgList& arg
         return throwError(exec, SyntaxError, "Not enough arguments");
 
     ExceptionCode ec = 0;
-    JSValue* header = jsStringOrNull(exec, impl()->getResponseHeader(args[0]->toString(exec), ec));
+    JSValue* header = jsStringOrNull(exec, impl()->getResponseHeader(args.at(exec, 0)->toString(exec), ec));
     setDOMException(exec, ec);
     return header;
 }
@@ -265,7 +265,7 @@ JSValue* JSXMLHttpRequest::overrideMimeType(ExecState* exec, const ArgList& args
     if (args.size() < 1)
         return throwError(exec, SyntaxError, "Not enough arguments");
 
-    impl()->overrideMimeType(args[0]->toString(exec));
+    impl()->overrideMimeType(args.at(exec, 0)->toString(exec));
     return jsUndefined();
 }
 
@@ -277,10 +277,10 @@ JSValue* JSXMLHttpRequest::addEventListener(ExecState* exec, const ArgList& args
     Frame* frame = document->frame();
     if (!frame)
         return jsUndefined();
-    RefPtr<JSUnprotectedEventListener> listener = toJSDOMWindow(frame)->findOrCreateJSUnprotectedEventListener(exec, args[1], true);
+    RefPtr<JSUnprotectedEventListener> listener = toJSDOMWindow(frame)->findOrCreateJSUnprotectedEventListener(exec, args.at(exec, 1), true);
     if (!listener)
         return jsUndefined();
-    impl()->addEventListener(args[0]->toString(exec), listener.release(), args[2]->toBoolean(exec));
+    impl()->addEventListener(args.at(exec, 0)->toString(exec), listener.release(), args.at(exec, 2)->toBoolean(exec));
     return jsUndefined();
 }
 
@@ -292,17 +292,17 @@ JSValue* JSXMLHttpRequest::removeEventListener(ExecState* exec, const ArgList& a
     Frame* frame = document->frame();
     if (!frame)
         return jsUndefined();
-    JSUnprotectedEventListener* listener = toJSDOMWindow(frame)->findJSUnprotectedEventListener(exec, args[1], true);
+    JSUnprotectedEventListener* listener = toJSDOMWindow(frame)->findJSUnprotectedEventListener(exec, args.at(exec, 1), true);
     if (!listener)
         return jsUndefined();
-    impl()->removeEventListener(args[0]->toString(exec), listener, args[2]->toBoolean(exec));
+    impl()->removeEventListener(args.at(exec, 0)->toString(exec), listener, args.at(exec, 2)->toBoolean(exec));
     return jsUndefined();
 }
 
 JSValue* JSXMLHttpRequest::dispatchEvent(ExecState* exec, const ArgList& args)
 {
     ExceptionCode ec = 0;
-    bool result = impl()->dispatchEvent(toEvent(args[0]), ec);
+    bool result = impl()->dispatchEvent(toEvent(args.at(exec, 0)), ec);
     setDOMException(exec, ec);
     return jsBoolean(result);    
 }
index 9ee7cda..8543ea8 100644 (file)
@@ -48,7 +48,7 @@ namespace WebCore {
 
 JSValue* JSXSLTProcessor::importStylesheet(ExecState* exec, const ArgList& args)
 {
-    JSValue* nodeVal = args[0];
+    JSValue* nodeVal = args.at(exec, 0);
     if (nodeVal->isObject(&JSNode::s_info)) {
         JSNode* node = static_cast<JSNode*>(nodeVal);
         impl()->importStylesheet(node->impl());
@@ -60,8 +60,8 @@ JSValue* JSXSLTProcessor::importStylesheet(ExecState* exec, const ArgList& args)
 
 JSValue* JSXSLTProcessor::transformToFragment(ExecState* exec, const ArgList& args)
 {
-    JSValue* nodeVal = args[0];
-    JSValue* docVal = args[1];
+    JSValue* nodeVal = args.at(exec, 0);
+    JSValue* docVal = args.at(exec, 1);
     if (nodeVal->isObject(&JSNode::s_info) && docVal->isObject(&JSDocument::s_info)) {
         WebCore::Node* node = static_cast<JSNode*>(nodeVal)->impl();
         Document* doc = static_cast<Document*>(static_cast<JSDocument*>(docVal)->impl());
@@ -73,7 +73,7 @@ JSValue* JSXSLTProcessor::transformToFragment(ExecState* exec, const ArgList& ar
 
 JSValue* JSXSLTProcessor::transformToDocument(ExecState* exec, const ArgList& args)
 {
-    JSValue* nodeVal = args[0];
+    JSValue* nodeVal = args.at(exec, 0);
     if (nodeVal->isObject(&JSNode::s_info)) {
         JSNode* node = static_cast<JSNode*>(nodeVal);
         RefPtr<Document> resultDocument = impl()->transformToDocument(node->impl());
@@ -87,31 +87,31 @@ JSValue* JSXSLTProcessor::transformToDocument(ExecState* exec, const ArgList& ar
 
 JSValue* JSXSLTProcessor::setParameter(ExecState* exec, const ArgList& args)
 {
-    if (args[1]->isUndefinedOrNull() || args[2]->isUndefinedOrNull())
+    if (args.at(exec, 1)->isUndefinedOrNull() || args.at(exec, 2)->isUndefinedOrNull())
         return jsUndefined(); // Throw exception?
-    String namespaceURI = args[0]->toString(exec);
-    String localName = args[1]->toString(exec);
-    String value = args[2]->toString(exec);
+    String namespaceURI = args.at(exec, 0)->toString(exec);
+    String localName = args.at(exec, 1)->toString(exec);
+    String value = args.at(exec, 2)->toString(exec);
     impl()->setParameter(namespaceURI, localName, value);
     return jsUndefined();
 }
 
 JSValue* JSXSLTProcessor::getParameter(ExecState* exec, const ArgList& args)
 {
-    if (args[1]->isUndefinedOrNull())
+    if (args.at(exec, 1)->isUndefinedOrNull())
         return jsUndefined();
-    String namespaceURI = args[0]->toString(exec);
-    String localName = args[1]->toString(exec);
+    String namespaceURI = args.at(exec, 0)->toString(exec);
+    String localName = args.at(exec, 1)->toString(exec);
     String value = impl()->getParameter(namespaceURI, localName);
     return jsStringOrUndefined(exec, value);
 }
 
 JSValue* JSXSLTProcessor::removeParameter(ExecState* exec, const ArgList& args)
 {
-    if (args[1]->isUndefinedOrNull())
+    if (args.at(exec, 1)->isUndefinedOrNull())
         return jsUndefined();
-    String namespaceURI = args[0]->toString(exec);
-    String localName = args[1]->toString(exec);
+    String namespaceURI = args.at(exec, 0)->toString(exec);
+    String localName = args.at(exec, 1)->toString(exec);
     impl()->removeParameter(namespaceURI, localName);
     return jsUndefined();
 }
index 4a4104a..b56f2e3 100644 (file)
@@ -37,15 +37,14 @@ using namespace KJS;
 
 namespace WebCore {
 
-ScheduledAction::ScheduledAction(JSValue* function, const ArgList& args)
+ScheduledAction::ScheduledAction(ExecState* exec, JSValue* function, const ArgList& args)
     : m_function(function)
 {
     ArgList::const_iterator end = args.end();
     for (ArgList::const_iterator it = args.begin(); it != end; ++it)
-        m_args.append((*it).jsValue());
+        m_args.append((*it).jsValue(exec));
 }
 
-
 void ScheduledAction::execute(JSDOMWindowShell* windowShell)
 {
     RefPtr<Frame> frame = windowShell->window()->impl()->frame();
index 211f5b7..2384b04 100644 (file)
@@ -34,7 +34,7 @@ namespace WebCore {
     */
     class ScheduledAction {
     public:
-        ScheduledAction(KJS::JSValue* function, const KJS::ArgList&);
+        ScheduledAction(KJS::ExecState* exec, KJS::JSValue* function, const KJS::ArgList&);
         ScheduledAction(const String& code)
             : m_code(code)
         {
index f5dbac2..a3f40d2 100644 (file)
@@ -1287,15 +1287,15 @@ sub GenerateImplementation
                     
                     if ($parameter->type eq "XPathNSResolver") {
                         push(@implContent, "    RefPtr<XPathNSResolver> customResolver;\n");
-                        push(@implContent, "    XPathNSResolver* resolver = toXPathNSResolver(args[$paramIndex]);\n");
+                        push(@implContent, "    XPathNSResolver* resolver = toXPathNSResolver(args.at(exec, $paramIndex));\n");
                         push(@implContent, "    if (!resolver) {\n");
-                        push(@implContent, "        customResolver = JSCustomXPathNSResolver::create(exec, args[$paramIndex]);\n");
+                        push(@implContent, "        customResolver = JSCustomXPathNSResolver::create(exec, args.at(exec, $paramIndex));\n");
                         push(@implContent, "        if (exec->hadException())\n");
                         push(@implContent, "            return jsUndefined();\n");
                         push(@implContent, "        resolver = customResolver.get();\n");
                         push(@implContent, "    }\n");
                     } else {
-                        push(@implContent, "    " . GetNativeTypeFromSignature($parameter) . " $name = " . JSValueToNative($parameter, "args[$paramIndex]") . ";\n");
+                        push(@implContent, "    " . GetNativeTypeFromSignature($parameter) . " $name = " . JSValueToNative($parameter, "args.at(exec, $paramIndex)") . ";\n");
 
                         # If a parameter is "an index" and it's negative it should throw an INDEX_SIZE_ERR exception.
                         # But this needs to be done in the bindings, because the type is unsigned and the fact that it
index 61a98a9..855de32 100644 (file)
@@ -34,6 +34,7 @@
 #include "c_utility.h"
 #include "npruntime_impl.h"
 #include "runtime_root.h"
+#include <kjs/ArgList.h>
 #include <kjs/ExecState.h>
 #include <kjs/JSLock.h>
 #include <kjs/JSNumberCell.h>
@@ -86,7 +87,7 @@ JSValue* CInstance::invokeMethod(ExecState* exec, const MethodList& methodList,
 
     unsigned i;
     for (i = 0; i < count; i++)
-        convertValueToNPVariant(exec, args.at(i), &cArgs[i]);
+        convertValueToNPVariant(exec, args.at(exec, i), &cArgs[i]);
 
     // Invoke the 'C' method.
     NPVariant resultVariant;
@@ -116,7 +117,7 @@ JSValue* CInstance::invokeDefaultMethod(ExecState* exec, const ArgList& args)
 
     unsigned i;
     for (i = 0; i < count; i++)
-        convertValueToNPVariant(exec, args.at(i), &cArgs[i]);
+        convertValueToNPVariant(exec, args.at(exec, i), &cArgs[i]);
 
     // Invoke the 'C' method.
     NPVariant resultVariant;
index c3a32a4..76e5735 100644 (file)
@@ -33,6 +33,7 @@
 #include "jni_utility.h"
 #include "runtime_object.h"
 #include "runtime_root.h"
+#include <kjs/ArgList.h>
 #include <kjs/Error.h>
 #include <kjs/JSLock.h>
 
@@ -140,8 +141,8 @@ JSValue *JavaInstance::invokeMethod (ExecState *exec, const MethodList &methodLi
         
     for (i = 0; i < count; i++) {
         JavaParameter* aParameter = jMethod->parameterAt(i);
-        jArgs[i] = convertValueToJValue (exec, args.at(i), aParameter->getJNIType(), aParameter->type());
-        JS_LOG("arg[%d] = %s\n", i, args.at(i)->toString(exec).ascii());
+        jArgs[i] = convertValueToJValue (exec, args.at(exec, i), aParameter->getJNIType(), aParameter->type());
+        JS_LOG("arg[%d] = %s\n", i, args.at(exec, i)->toString(exec).ascii());
     }
         
     jvalue result;
index a7756b6..ff1947b 100644 (file)
@@ -162,7 +162,7 @@ JSValue* ObjcInstance::invokeMethod(ExecState* exec, const MethodList &methodLis
         NSMutableArray* objcArgs = [NSMutableArray array];
         int count = args.size();
         for (int i = 0; i < count; i++) {
-            ObjcValue value = convertValueToObjcValue(exec, args.at(i), ObjcObjectType);
+            ObjcValue value = convertValueToObjcValue(exec, args.at(exec, i), ObjcObjectType);
             [objcArgs addObject:value.objectValue];
         }
         [invocation setArgument:&objcArgs atIndex:3];
@@ -177,7 +177,7 @@ JSValue* ObjcInstance::invokeMethod(ExecState* exec, const MethodList &methodLis
             // types.
             ASSERT(objcValueType != ObjcInvalidType && objcValueType != ObjcVoidType);
 
-            ObjcValue value = convertValueToObjcValue(exec, args.at(i-2), objcValueType);
+            ObjcValue value = convertValueToObjcValue(exec, args.at(exec, i-2), objcValueType);
 
             switch (objcValueType) {
                 case ObjcObjectType:
@@ -270,7 +270,7 @@ JSValue* ObjcInstance::invokeDefaultMethod(ExecState* exec, const ArgList &args)
     NSMutableArray* objcArgs = [NSMutableArray array];
     unsigned count = args.size();
     for (unsigned i = 0; i < count; i++) {
-        ObjcValue value = convertValueToObjcValue(exec, args.at(i), ObjcObjectType);
+        ObjcValue value = convertValueToObjcValue(exec, args.at(exec, i), ObjcObjectType);
         [objcArgs addObject:value.objectValue];
     }
     [invocation setArgument:&objcArgs atIndex:2];
index 951ab93..bc1db41 100644 (file)
@@ -125,7 +125,7 @@ static void printToStandardOut(MessageSource source, MessageLevel level, const S
     printf(" %s\n", message.utf8().data());
 }
 
-static void printToStandardOut(MessageLevel level, ExecState* exec, const ArgList& arguments, const KURL& url)
+static void printToStandardOut(MessageLevel level, ExecState* exec, const ArgList& args, const KURL& url)
 {
     if (!Interpreter::shouldPrintExceptions())
         return;
@@ -133,8 +133,8 @@ static void printToStandardOut(MessageLevel level, ExecState* exec, const ArgLis
     printSourceURLAndLine(url.prettyURL(), 0);
     printMessageSourceAndLevelPrefix(JSMessageSource, level);
 
-    for (size_t i = 0; i < arguments.size(); ++i) {
-        UString argAsString = arguments[i]->toString(exec);
+    for (size_t i = 0; i < args.size(); ++i) {
+        UString argAsString = args.at(exec, i)->toString(exec);
         printf(" %s", argAsString.UTF8String().c_str());
     }
 
@@ -158,15 +158,15 @@ void Console::addMessage(MessageSource source, MessageLevel level, const String&
     printToStandardOut(source, level, message, sourceURL, lineNumber);
 }
 
-void Console::debug(ExecState* exec, const ArgList& arguments)
+void Console::debug(ExecState* exec, const ArgList& args)
 {
     // In Firebug, console.debug has the same behavior as console.log. So we'll do the same.
-    log(exec, arguments);
+    log(exec, args);
 }
 
-void Console::error(ExecState* exec, const ArgList& arguments)
+void Console::error(ExecState* exec, const ArgList& args)
 {
-    if (arguments.isEmpty())
+    if (args.isEmpty())
         return;
 
     if (!m_frame)
@@ -176,19 +176,19 @@ void Console::error(ExecState* exec, const ArgList& arguments)
     if (!page)
         return;
 
-    String message = arguments[0]->toString(exec);
+    String message = args.at(exec, 0)->toString(exec);
     const KURL& url = m_frame->loader()->url();
     String prettyURL = url.prettyURL();
 
     page->chrome()->client()->addMessageToConsole(message, 0, prettyURL);
-    page->inspectorController()->addMessageToConsole(JSMessageSource, ErrorMessageLevel, exec, arguments, 0, url.string());
+    page->inspectorController()->addMessageToConsole(JSMessageSource, ErrorMessageLevel, exec, args, 0, url.string());
 
-    printToStandardOut(ErrorMessageLevel, exec, arguments, url);
+    printToStandardOut(ErrorMessageLevel, exec, args, url);
 }
 
-void Console::info(ExecState* exec, const ArgList& arguments)
+void Console::info(ExecState* exec, const ArgList& args)
 {
-    if (arguments.isEmpty())
+    if (args.isEmpty())
         return;
 
     if (!m_frame)
@@ -198,19 +198,19 @@ void Console::info(ExecState* exec, const ArgList& arguments)
     if (!page)
         return;
 
-    String message = arguments[0]->toString(exec);
+    String message = args.at(exec, 0)->toString(exec);
     const KURL& url = m_frame->loader()->url();
     String prettyURL = url.prettyURL();
 
     page->chrome()->client()->addMessageToConsole(message, 0, prettyURL);
-    page->inspectorController()->addMessageToConsole(JSMessageSource, LogMessageLevel, exec, arguments, 0, url.string());
+    page->inspectorController()->addMessageToConsole(JSMessageSource, LogMessageLevel, exec, args, 0, url.string());
 
-    printToStandardOut(LogMessageLevel, exec, arguments, url);
+    printToStandardOut(LogMessageLevel, exec, args, url);
 }
 
-void Console::log(ExecState* exec, const ArgList& arguments)
+void Console::log(ExecState* exec, const ArgList& args)
 {
-    if (arguments.isEmpty())
+    if (args.isEmpty())
         return;
 
     if (!m_frame)
@@ -220,17 +220,17 @@ void Console::log(ExecState* exec, const ArgList& arguments)
     if (!page)
         return;
 
-    String message = arguments[0]->toString(exec);
+    String message = args.at(exec, 0)->toString(exec);
     const KURL& url = m_frame->loader()->url();
     String prettyURL = url.prettyURL();
 
     page->chrome()->client()->addMessageToConsole(message, 0, prettyURL);
-    page->inspectorController()->addMessageToConsole(JSMessageSource, LogMessageLevel, exec, arguments, 0, url.string());
+    page->inspectorController()->addMessageToConsole(JSMessageSource, LogMessageLevel, exec, args, 0, url.string());
 
-    printToStandardOut(LogMessageLevel, exec, arguments, url);
+    printToStandardOut(LogMessageLevel, exec, args, url);
 }
 
-void Console::assertCondition(bool condition, ExecState* exec, const ArgList& arguments)
+void Console::assertCondition(bool condition, ExecState* exec, const ArgList& args)
 {
     if (condition)
         return;
@@ -245,24 +245,24 @@ void Console::assertCondition(bool condition, ExecState* exec, const ArgList& ar
     const KURL& url = m_frame->loader()->url();
 
     // FIXME: <https://bugs.webkit.org/show_bug.cgi?id=19135> It would be nice to prefix assertion failures with a message like "Assertion failed: ".
-    // FIXME: <https://bugs.webkit.org/show_bug.cgi?id=19136> We should print a message even when arguments.isEmpty() is true.
+    // FIXME: <https://bugs.webkit.org/show_bug.cgi?id=19136> We should print a message even when args.isEmpty() is true.
 
-    page->inspectorController()->addMessageToConsole(JSMessageSource, ErrorMessageLevel, exec, arguments, 0, url.string());
+    page->inspectorController()->addMessageToConsole(JSMessageSource, ErrorMessageLevel, exec, args, 0, url.string());
 
-    printToStandardOut(ErrorMessageLevel, exec, arguments, url);
+    printToStandardOut(ErrorMessageLevel, exec, args, url);
 }
 
-void Console::profile(ExecState* exec, const ArgList& arguments)
+void Console::profile(ExecState* exec, const ArgList& args)
 {
-    UString title = arguments[0]->toString(exec);
+    UString title = args.at(exec, 0)->toString(exec);
     Profiler::profiler()->startProfiling(exec, title, this);
 }
 
-void Console::profileEnd(ExecState* exec, const ArgList& arguments)
+void Console::profileEnd(ExecState* exec, const ArgList& args)
 {
     UString title;
-    if (arguments.size() >= 1)
-        title = arguments[0]->toString(exec);
+    if (args.size() >= 1)
+        title = args.at(exec, 0)->toString(exec);
 
     Profiler::profiler()->stopProfiling(exec, title);
 }
@@ -273,9 +273,9 @@ void Console::finishedProfiling(PassRefPtr<Profile> prpProfile)
         page->inspectorController()->addProfile(prpProfile);
 }
 
-void Console::warn(ExecState* exec, const ArgList& arguments)
+void Console::warn(ExecState* exec, const ArgList& args)
 {
-    if (arguments.isEmpty())
+    if (args.isEmpty())
         return;
 
     if (!m_frame)
@@ -285,14 +285,14 @@ void Console::warn(ExecState* exec, const ArgList& arguments)
     if (!page)
         return;
 
-    String message = arguments[0]->toString(exec);
+    String message = args.at(exec, 0)->toString(exec);
     const KURL& url = m_frame->loader()->url();
     String prettyURL = url.prettyURL();
 
     page->chrome()->client()->addMessageToConsole(message, 0, prettyURL);
-    page->inspectorController()->addMessageToConsole(JSMessageSource, WarningMessageLevel, exec, arguments, 0, url.string());
+    page->inspectorController()->addMessageToConsole(JSMessageSource, WarningMessageLevel, exec, args, 0, url.string());
 
-    printToStandardOut(WarningMessageLevel, exec, arguments, url);
+    printToStandardOut(WarningMessageLevel, exec, args, url);
 }
 
 void Console::reportException(ExecState* exec, JSValue* exception)
index 6b79995..b450397 100644 (file)
@@ -170,7 +170,7 @@ struct ConsoleMessage {
     {
         JSLock lock(false);
         for (unsigned i = 0; i < args.size(); ++i)
-            wrappedArguments[i] = JSInspectedObjectWrapper::wrap(exec, args[i]);
+            wrappedArguments[i] = JSInspectedObjectWrapper::wrap(exec, args.at(exec, i));
     }
 
     MessageSource source;