Changeset 156240 in webkit
- Timestamp:
- Sep 21, 2013 9:02:59 PM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 46 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/API/APICallbackFunction.h
r154797 r156240 51 51 arguments.reserveInitialCapacity(argumentCount); 52 52 for (int i = 0; i < argumentCount; i++) 53 arguments.uncheckedAppend(toRef(exec, exec-> argument(i)));53 arguments.uncheckedAppend(toRef(exec, exec->uncheckedArgument(i))); 54 54 55 55 JSValueRef exception = 0; -
trunk/Source/JavaScriptCore/API/JSCallbackConstructor.cpp
r154797 r156240 78 78 arguments.reserveInitialCapacity(argumentCount); 79 79 for (size_t i = 0; i < argumentCount; ++i) 80 arguments.uncheckedAppend(toRef(exec, exec-> argument(i)));80 arguments.uncheckedAppend(toRef(exec, exec->uncheckedArgument(i))); 81 81 82 82 JSValueRef exception = 0; -
trunk/Source/JavaScriptCore/API/JSCallbackObjectFunctions.h
r154797 r156240 408 408 arguments.reserveInitialCapacity(argumentCount); 409 409 for (size_t i = 0; i < argumentCount; ++i) 410 arguments.uncheckedAppend(toRef(exec, exec-> argument(i)));410 arguments.uncheckedAppend(toRef(exec, exec->uncheckedArgument(i))); 411 411 JSValueRef exception = 0; 412 412 JSObject* result; … … 475 475 arguments.reserveInitialCapacity(argumentCount); 476 476 for (size_t i = 0; i < argumentCount; ++i) 477 arguments.uncheckedAppend(toRef(exec, exec-> argument(i)));477 arguments.uncheckedAppend(toRef(exec, exec->uncheckedArgument(i))); 478 478 JSValueRef exception = 0; 479 479 JSValue result; -
trunk/Source/JavaScriptCore/ChangeLog
r156239 r156240 1 2013-09-21 Darin Adler <darin@apple.com> 2 3 Add ExecState::uncheckedArgument and use where possible to shrink a bit 4 https://bugs.webkit.org/show_bug.cgi?id=121750 5 6 Reviewed by Andreas Kling. 7 8 * interpreter/CallFrame.h: 9 (JSC::ExecState::uncheckedArgument): Added. Like argument, but with an 10 assertion rather than a runtime check. 11 12 * API/APICallbackFunction.h: 13 (JSC::APICallbackFunction::call): Use uncheckedArgument because we are 14 already in a loop over arguments, so don't need a range check. 15 * API/JSCallbackConstructor.cpp: 16 (JSC::constructJSCallback): Ditto. 17 * API/JSCallbackObjectFunctions.h: 18 (JSC::JSCallbackObject::construct): Ditto. 19 (JSC::JSCallbackObject::call): Ditto. 20 * jsc.cpp: 21 (functionPrint): Ditto. 22 (functionRun): Ditto. 23 (functionSetSamplingFlags): Ditto. 24 (functionClearSamplingFlags): Ditto. 25 * runtime/ArrayPrototype.cpp: 26 (JSC::arrayProtoFuncConcat): Ditto. 27 (JSC::arrayProtoFuncPush): Use uncheckedArgument because there is already 28 code that explicitly checks argumentCount. 29 (JSC::arrayProtoFuncSplice): Ditto. 30 (JSC::arrayProtoFuncUnShift): Ditto. 31 (JSC::arrayProtoFuncReduce): Ditto. 32 (JSC::arrayProtoFuncReduceRight): Ditto. 33 (JSC::arrayProtoFuncLastIndexOf): Ditto. 34 * runtime/DatePrototype.cpp: 35 (JSC::fillStructuresUsingTimeArgs): Ditto. 36 (JSC::fillStructuresUsingDateArgs): Ditto. 37 * runtime/JSArrayBufferConstructor.cpp: 38 (JSC::constructArrayBuffer): Ditto. 39 * runtime/JSArrayBufferPrototype.cpp: 40 (JSC::arrayBufferProtoFuncSlice): Ditto. 41 * runtime/JSBoundFunction.cpp: 42 (JSC::boundFunctionCall): Ditto. 43 (JSC::boundFunctionConstruct): Ditto. 44 * runtime/JSDataViewPrototype.cpp: 45 (JSC::getData): Ditto. 46 (JSC::setData): Ditto. 47 * runtime/JSGenericTypedArrayViewConstructorInlines.h: 48 (JSC::constructGenericTypedArrayView): Ditto. 49 * runtime/JSGenericTypedArrayViewPrototypeInlines.h: 50 (JSC::genericTypedArrayViewProtoFuncSet): Ditto. 51 (JSC::genericTypedArrayViewProtoFuncSubarray): Ditto. 52 * runtime/JSONObject.cpp: 53 (JSC::JSONProtoFuncParse): Ditto. 54 (JSC::JSONProtoFuncStringify): Ditto. 55 * runtime/JSPromiseConstructor.cpp: 56 (JSC::constructPromise): Ditto. 57 (JSC::JSPromiseConstructorFuncFulfill): Ditto. 58 (JSC::JSPromiseConstructorFuncResolve): Ditto. 59 (JSC::JSPromiseConstructorFuncReject): Ditto. 60 * runtime/MathObject.cpp: 61 (JSC::mathProtoFuncMax): Ditto. 62 (JSC::mathProtoFuncMin): Ditto. 63 64 * runtime/NameConstructor.cpp: 65 (JSC::constructPrivateName): Removed unneeded check of argumentCout 66 that simply repeats what argument already does. 67 * runtime/NativeErrorConstructor.cpp: 68 (JSC::Interpreter::constructWithNativeErrorConstructor): Ditto. 69 (JSC::Interpreter::callNativeErrorConstructor): Ditto. 70 71 * runtime/NumberConstructor.cpp: 72 (JSC::constructWithNumberConstructor): Use uncheckedArgument since 73 there is already code that explicitly checks argument count. 74 (JSC::callNumberConstructor): Ditto. 75 76 * runtime/ObjectConstructor.cpp: 77 (JSC::objectConstructorCreate): Small refactoring to not call argument(0) 78 three times. 79 80 * runtime/SetConstructor.cpp: 81 (JSC::constructSet): Use uncheckedArgument since we are already in a loop 82 over arguments. 83 84 * runtime/StringConstructor.cpp: 85 (JSC::stringFromCharCodeSlowCase): In a loop. 86 (JSC::stringFromCharCode): Already checked count. 87 (JSC::constructWithStringConstructor): Ditto. 88 (JSC::callStringConstructor): Ditto. 89 * runtime/StringPrototype.cpp: 90 (JSC::stringProtoFuncConcat): Already checked count. 91 * runtime/TestRunnerUtils.cpp: 92 (JSC::numberOfDFGCompiles): Ditto. 93 (JSC::setNeverInline): Ditto. 94 1 95 2013-09-21 Filip Pizlo <fpizlo@apple.com> 2 96 -
trunk/Source/JavaScriptCore/interpreter/CallFrame.h
r156239 r156240 230 230 if (argument >= argumentCount()) 231 231 return jsUndefined(); 232 return this[argumentOffset(argument)].jsValue(); 232 return getArgumentUnsafe(argument); 233 } 234 JSValue uncheckedArgument(size_t argument) 235 { 236 ASSERT(argument < argumentCount()); 237 return getArgumentUnsafe(argument); 233 238 } 234 239 void setArgument(size_t argument, JSValue value) -
trunk/Source/JavaScriptCore/jsc.cpp
r156067 r156240 301 301 putchar(' '); 302 302 303 printf("%s", exec-> argument(i).toString(exec)->value(exec).utf8().data());303 printf("%s", exec->uncheckedArgument(i).toString(exec)->value(exec).utf8().data()); 304 304 } 305 305 … … 392 392 JSArray* array = constructEmptyArray(globalObject->globalExec(), 0); 393 393 for (unsigned i = 1; i < exec->argumentCount(); ++i) 394 array->putDirectIndex(globalObject->globalExec(), i - 1, exec-> argument(i));394 array->putDirectIndex(globalObject->globalExec(), i - 1, exec->uncheckedArgument(i)); 395 395 globalObject->putDirect( 396 396 exec->vm(), Identifier(globalObject->globalExec(), "arguments"), array); … … 451 451 { 452 452 for (unsigned i = 0; i < exec->argumentCount(); ++i) { 453 unsigned flag = static_cast<unsigned>(exec-> argument(i).toNumber(exec));453 unsigned flag = static_cast<unsigned>(exec->uncheckedArgument(i).toNumber(exec)); 454 454 if ((flag >= 1) && (flag <= 32)) 455 455 SamplingFlags::setFlag(flag); … … 461 461 { 462 462 for (unsigned i = 0; i < exec->argumentCount(); ++i) { 463 unsigned flag = static_cast<unsigned>(exec-> argument(i).toNumber(exec));463 unsigned flag = static_cast<unsigned>(exec->uncheckedArgument(i).toNumber(exec)); 464 464 if ((flag >= 1) && (flag <= 32)) 465 465 SamplingFlags::clearFlag(flag); -
trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp
r154935 r156240 440 440 if (i == argCount) 441 441 break; 442 curArg = (exec->argument(i));442 curArg = exec->uncheckedArgument(i); 443 443 ++i; 444 444 } … … 482 482 if (isJSArray(thisValue) && exec->argumentCount() == 1) { 483 483 JSArray* array = asArray(thisValue); 484 array->push(exec, exec-> argument(0));484 array->push(exec, exec->uncheckedArgument(0)); 485 485 return JSValue::encode(jsNumber(array->length())); 486 486 } … … 494 494 // Check for integer overflow; where safe we can do a fast put by index. 495 495 if (length + n >= length) 496 thisObj->methodTable()->putByIndex(thisObj, exec, length + n, exec-> argument(n), true);496 thisObj->methodTable()->putByIndex(thisObj, exec, length + n, exec->uncheckedArgument(n), true); 497 497 else { 498 498 PutPropertySlot slot; 499 499 Identifier propertyName(exec, JSValue(static_cast<int64_t>(length) + static_cast<int64_t>(n)).toWTFString(exec)); 500 thisObj->methodTable()->put(thisObj, exec, propertyName, exec-> argument(n), slot);500 thisObj->methodTable()->put(thisObj, exec, propertyName, exec->uncheckedArgument(n), slot); 501 501 } 502 502 if (exec->hadException()) … … 768 768 unsigned deleteCount = length - begin; 769 769 if (exec->argumentCount() > 1) { 770 double deleteDouble = exec-> argument(1).toInteger(exec);770 double deleteDouble = exec->uncheckedArgument(1).toInteger(exec); 771 771 if (deleteDouble < 0) 772 772 deleteCount = 0; … … 801 801 } 802 802 for (unsigned k = 0; k < additionalArgs; ++k) { 803 thisObj->methodTable()->putByIndex(thisObj, exec, k + begin, exec-> argument(k + 2), true);803 thisObj->methodTable()->putByIndex(thisObj, exec, k + begin, exec->uncheckedArgument(k + 2), true); 804 804 if (exec->hadException()) 805 805 return JSValue::encode(jsUndefined()); … … 826 826 } 827 827 for (unsigned k = 0; k < nrArgs; ++k) { 828 thisObj->methodTable()->putByIndex(thisObj, exec, k, exec-> argument(k), true);828 thisObj->methodTable()->putByIndex(thisObj, exec, k, exec->uncheckedArgument(k), true); 829 829 if (exec->hadException()) 830 830 return JSValue::encode(jsUndefined()); … … 1144 1144 1145 1145 if (exec->argumentCount() >= 2) 1146 rv = exec-> argument(1);1146 rv = exec->uncheckedArgument(1); 1147 1147 else if (array && array->canGetIndexQuickly(0)) { 1148 1148 rv = array->getIndexQuickly(0); … … 1221 1221 1222 1222 if (exec->argumentCount() >= 2) 1223 rv = exec-> argument(1);1223 rv = exec->uncheckedArgument(1); 1224 1224 else if (array && array->canGetIndexQuickly(length - 1)) { 1225 1225 rv = array->getIndexQuickly(length - 1); … … 1307 1307 unsigned index = length - 1; 1308 1308 if (exec->argumentCount() >= 2) { 1309 JSValue fromValue = exec-> argument(1);1309 JSValue fromValue = exec->uncheckedArgument(1); 1310 1310 double fromDouble = fromValue.toInteger(exec); 1311 1311 if (fromDouble < 0) { -
trunk/Source/JavaScriptCore/runtime/DatePrototype.cpp
r154373 r156240 374 374 if (maxArgs >= 4 && idx < numArgs) { 375 375 t->setHour(0); 376 double hours = exec-> argument(idx++).toIntegerPreserveNaN(exec);376 double hours = exec->uncheckedArgument(idx++).toIntegerPreserveNaN(exec); 377 377 ok = std::isfinite(hours); 378 378 milliseconds += hours * msPerHour; … … 382 382 if (maxArgs >= 3 && idx < numArgs && ok) { 383 383 t->setMinute(0); 384 double minutes = exec-> argument(idx++).toIntegerPreserveNaN(exec);384 double minutes = exec->uncheckedArgument(idx++).toIntegerPreserveNaN(exec); 385 385 ok = std::isfinite(minutes); 386 386 milliseconds += minutes * msPerMinute; … … 390 390 if (maxArgs >= 2 && idx < numArgs && ok) { 391 391 t->setSecond(0); 392 double seconds = exec-> argument(idx++).toIntegerPreserveNaN(exec);392 double seconds = exec->uncheckedArgument(idx++).toIntegerPreserveNaN(exec); 393 393 ok = std::isfinite(seconds); 394 394 milliseconds += seconds * msPerSecond; … … 400 400 // milliseconds 401 401 if (idx < numArgs) { 402 double millis = exec-> argument(idx).toIntegerPreserveNaN(exec);402 double millis = exec->uncheckedArgument(idx).toIntegerPreserveNaN(exec); 403 403 ok = std::isfinite(millis); 404 404 milliseconds += millis; … … 426 426 // years 427 427 if (maxArgs >= 3 && idx < numArgs) { 428 double years = exec-> argument(idx++).toIntegerPreserveNaN(exec);428 double years = exec->uncheckedArgument(idx++).toIntegerPreserveNaN(exec); 429 429 ok = std::isfinite(years); 430 430 t->setYear(toInt32(years)); … … 432 432 // months 433 433 if (maxArgs >= 2 && idx < numArgs && ok) { 434 double months = exec-> argument(idx++).toIntegerPreserveNaN(exec);434 double months = exec->uncheckedArgument(idx++).toIntegerPreserveNaN(exec); 435 435 ok = std::isfinite(months); 436 436 t->setMonth(toInt32(months)); … … 438 438 // days 439 439 if (idx < numArgs && ok) { 440 double days = exec-> argument(idx++).toIntegerPreserveNaN(exec);440 double days = exec->uncheckedArgument(idx++).toIntegerPreserveNaN(exec); 441 441 ok = std::isfinite(days); 442 442 t->setMonthDay(0); -
trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp
r155177 r156240 78 78 unsigned length; 79 79 if (exec->argumentCount()) { 80 length = exec-> argument(0).toUInt32(exec);80 length = exec->uncheckedArgument(0).toUInt32(exec); 81 81 if (exec->hadException()) 82 82 return JSValue::encode(jsUndefined()); -
trunk/Source/JavaScriptCore/runtime/JSArrayBufferPrototype.cpp
r154127 r156240 53 53 int32_t end; 54 54 if (exec->argumentCount() >= 2) { 55 end = exec-> argument(1).toInt32(exec);55 end = exec->uncheckedArgument(1).toInt32(exec); 56 56 if (exec->hadException()) 57 57 return JSValue::encode(jsUndefined()); -
trunk/Source/JavaScriptCore/runtime/JSBoundFunction.cpp
r154038 r156240 46 46 args.append(boundArgs->getIndexQuickly(i)); 47 47 for (unsigned i = 0; i < exec->argumentCount(); ++i) 48 args.append(exec-> argument(i));48 args.append(exec->uncheckedArgument(i)); 49 49 50 50 JSObject* targetFunction = boundFunction->targetFunction(); … … 66 66 args.append(boundArgs->getIndexQuickly(i)); 67 67 for (unsigned i = 0; i < exec->argumentCount(); ++i) 68 args.append(exec-> argument(i));68 args.append(exec->uncheckedArgument(i)); 69 69 70 70 JSObject* targetFunction = boundFunction->targetFunction(); -
trunk/Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp
r154569 r156240 102 102 return throwVMError(exec, createTypeError(exec, "Need at least one argument (the byteOffset)")); 103 103 104 unsigned byteOffset = exec-> argument(0).toUInt32(exec);104 unsigned byteOffset = exec->uncheckedArgument(0).toUInt32(exec); 105 105 if (exec->hadException()) 106 106 return JSValue::encode(jsUndefined()); … … 109 109 unsigned elementSize = sizeof(typename Adaptor::Type); 110 110 if (elementSize > 1 && exec->argumentCount() >= 2) { 111 littleEndian = exec-> argument(1).toBoolean(exec);111 littleEndian = exec->uncheckedArgument(1).toBoolean(exec); 112 112 if (exec->hadException()) 113 113 return JSValue::encode(jsUndefined()); … … 136 136 return throwVMError(exec, createTypeError(exec, "Need at least two argument (the byteOffset and value)")); 137 137 138 unsigned byteOffset = exec-> argument(0).toUInt32(exec);138 unsigned byteOffset = exec->uncheckedArgument(0).toUInt32(exec); 139 139 if (exec->hadException()) 140 140 return JSValue::encode(jsUndefined()); 141 141 142 typename Adaptor::Type value = toNativeFromValue<Adaptor>(exec, exec-> argument(1));142 typename Adaptor::Type value = toNativeFromValue<Adaptor>(exec, exec->uncheckedArgument(1)); 143 143 if (exec->hadException()) 144 144 return JSValue::encode(jsUndefined()); … … 147 147 unsigned elementSize = sizeof(typename Adaptor::Type); 148 148 if (elementSize > 1 && exec->argumentCount() >= 3) { 149 littleEndian = exec-> argument(2).toBoolean(exec);149 littleEndian = exec->uncheckedArgument(2).toBoolean(exec); 150 150 if (exec->hadException()) 151 151 return JSValue::encode(jsUndefined()); -
trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h
r154403 r156240 91 91 RefPtr<ArrayBuffer> buffer = jsBuffer->impl(); 92 92 93 unsigned offset = (exec->argumentCount() > 1) ? exec-> argument(1).toUInt32(exec) : 0;93 unsigned offset = (exec->argumentCount() > 1) ? exec->uncheckedArgument(1).toUInt32(exec) : 0; 94 94 if (exec->hadException()) 95 95 return JSValue::encode(jsUndefined()); 96 96 unsigned length = 0; 97 97 if (exec->argumentCount() > 2) { 98 length = exec-> argument(2).toUInt32(exec);98 length = exec->uncheckedArgument(2).toUInt32(exec); 99 99 if (exec->hadException()) 100 100 return JSValue::encode(jsUndefined()); … … 114 114 // - An integer. This creates a new typed array of that length and zero-initializes it. 115 115 116 if (JSObject* object = jsDynamicCast<JSObject*>(exec-> argument(0))) {116 if (JSObject* object = jsDynamicCast<JSObject*>(exec->uncheckedArgument(0))) { 117 117 unsigned length = 118 118 object->get(exec, exec->vm().propertyNames->length).toUInt32(exec); … … 133 133 134 134 int length; 135 if (exec-> argument(0).isInt32())136 length = exec-> argument(0).asInt32();137 else if (!exec-> argument(0).isNumber())135 if (exec->uncheckedArgument(0).isInt32()) 136 length = exec->uncheckedArgument(0).asInt32(); 137 else if (!exec->uncheckedArgument(0).isNumber()) 138 138 return throwVMError(exec, createTypeError(exec, "Invalid array length argument")); 139 139 else { 140 length = static_cast<int>(exec-> argument(0).asNumber());141 if (length != exec-> argument(0).asNumber())140 length = static_cast<int>(exec->uncheckedArgument(0).asNumber()); 141 if (length != exec->uncheckedArgument(0).asNumber()) 142 142 return throwVMError(exec, createTypeError(exec, "Invalid array length argument (fractional lengths not allowed)")); 143 143 } -
trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeInlines.h
r154127 r156240 45 45 return throwVMError(exec, createTypeError(exec, "Expected at least one argument")); 46 46 47 JSObject* sourceArray = jsDynamicCast<JSObject*>(exec-> argument(0));47 JSObject* sourceArray = jsDynamicCast<JSObject*>(exec->uncheckedArgument(0)); 48 48 if (!sourceArray) 49 49 return throwVMError(exec, createTypeError(exec, "First argument should be an object")); … … 51 51 unsigned offset; 52 52 if (exec->argumentCount() >= 2) { 53 offset = exec-> argument(1).toUInt32(exec);53 offset = exec->uncheckedArgument(1).toUInt32(exec); 54 54 if (exec->hadException()) 55 55 return JSValue::encode(jsUndefined()); … … 77 77 return throwVMError(exec, createTypeError(exec, "Expected at least one argument")); 78 78 79 int32_t begin = exec-> argument(0).toInt32(exec);79 int32_t begin = exec->uncheckedArgument(0).toInt32(exec); 80 80 if (exec->hadException()) 81 81 return JSValue::encode(jsUndefined()); … … 83 83 int32_t end; 84 84 if (exec->argumentCount() >= 2) { 85 end = exec-> argument(1).toInt32(exec);85 end = exec->uncheckedArgument(1).toInt32(exec); 86 86 if (exec->hadException()) 87 87 return JSValue::encode(jsUndefined()); -
trunk/Source/JavaScriptCore/runtime/JSONObject.cpp
r155143 r156240 778 778 if (!exec->argumentCount()) 779 779 return throwVMError(exec, createError(exec, ASCIILiteral("JSON.parse requires at least one parameter"))); 780 String source = exec-> argument(0).toString(exec)->value(exec);780 String source = exec->uncheckedArgument(0).toString(exec)->value(exec); 781 781 if (exec->hadException()) 782 782 return JSValue::encode(jsNull()); … … 799 799 return JSValue::encode(unfiltered); 800 800 801 JSValue function = exec-> argument(1);801 JSValue function = exec->uncheckedArgument(1); 802 802 CallData callData; 803 803 CallType callType = getCallData(function, callData); … … 813 813 return throwVMError(exec, createError(exec, ASCIILiteral("No input to stringify"))); 814 814 LocalScope scope(exec->vm()); 815 Local<Unknown> value(exec->vm(), exec-> argument(0));815 Local<Unknown> value(exec->vm(), exec->uncheckedArgument(0)); 816 816 Local<Unknown> replacer(exec->vm(), exec->argument(1)); 817 817 Local<Unknown> space(exec->vm(), exec->argument(2)); -
trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp
r155143 r156240 95 95 return throwVMError(exec, createTypeError(exec, "Expected at least one argument")); 96 96 97 JSValue function = exec-> argument(0);97 JSValue function = exec->uncheckedArgument(0); 98 98 99 99 CallData callData; … … 152 152 153 153 JSPromise* promise = JSPromise::createWithResolver(exec->vm(), globalObject); 154 promise->resolver()->fulfill(exec, exec-> argument(0));154 promise->resolver()->fulfill(exec, exec->uncheckedArgument(0)); 155 155 156 156 return JSValue::encode(promise); … … 165 165 166 166 JSPromise* promise = JSPromise::createWithResolver(exec->vm(), globalObject); 167 promise->resolver()->resolve(exec, exec-> argument(0));167 promise->resolver()->resolve(exec, exec->uncheckedArgument(0)); 168 168 169 169 return JSValue::encode(promise); … … 178 178 179 179 JSPromise* promise = JSPromise::createWithResolver(exec->vm(), globalObject); 180 promise->resolver()->reject(exec, exec-> argument(0));180 promise->resolver()->reject(exec, exec->uncheckedArgument(0)); 181 181 182 182 return JSValue::encode(promise); -
trunk/Source/JavaScriptCore/runtime/MathObject.cpp
r155143 r156240 160 160 double result = -std::numeric_limits<double>::infinity(); 161 161 for (unsigned k = 0; k < argsCount; ++k) { 162 double val = exec-> argument(k).toNumber(exec);162 double val = exec->uncheckedArgument(k).toNumber(exec); 163 163 if (std::isnan(val)) { 164 164 result = QNaN; … … 176 176 double result = +std::numeric_limits<double>::infinity(); 177 177 for (unsigned k = 0; k < argsCount; ++k) { 178 double val = exec-> argument(k).toNumber(exec);178 double val = exec->uncheckedArgument(k).toNumber(exec); 179 179 if (std::isnan(val)) { 180 180 result = QNaN; -
trunk/Source/JavaScriptCore/runtime/NameConstructor.cpp
r155143 r156240 51 51 static EncodedJSValue JSC_HOST_CALL constructPrivateName(ExecState* exec) 52 52 { 53 JSValue publicName = exec->argument Count() ? exec->argument(0) : jsUndefined();53 JSValue publicName = exec->argument(0); 54 54 return JSValue::encode(NameInstance::create(exec->vm(), exec->lexicalGlobalObject()->privateNameStructure(), publicName.toString(exec))); 55 55 } -
trunk/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp
r155143 r156240 52 52 EncodedJSValue JSC_HOST_CALL Interpreter::constructWithNativeErrorConstructor(ExecState* exec) 53 53 { 54 JSValue message = exec->argument Count() ? exec->argument(0) : jsUndefined();54 JSValue message = exec->argument(0); 55 55 Structure* errorStructure = static_cast<NativeErrorConstructor*>(exec->callee())->errorStructure(); 56 56 ASSERT(errorStructure); … … 69 69 EncodedJSValue JSC_HOST_CALL Interpreter::callNativeErrorConstructor(ExecState* exec) 70 70 { 71 JSValue message = exec->argument Count() ? exec->argument(0) : jsUndefined();71 JSValue message = exec->argument(0); 72 72 Structure* errorStructure = static_cast<NativeErrorConstructor*>(exec->callee())->errorStructure(); 73 73 Vector<StackFrame> stackTrace; -
trunk/Source/JavaScriptCore/runtime/NumberConstructor.cpp
r155143 r156240 112 112 { 113 113 NumberObject* object = NumberObject::create(exec->vm(), asInternalFunction(exec->callee())->globalObject()->numberObjectStructure()); 114 double n = exec->argumentCount() ? exec-> argument(0).toNumber(exec) : 0;114 double n = exec->argumentCount() ? exec->uncheckedArgument(0).toNumber(exec) : 0; 115 115 object->setInternalValue(exec->vm(), jsNumber(n)); 116 116 return JSValue::encode(object); … … 126 126 static EncodedJSValue JSC_HOST_CALL callNumberConstructor(ExecState* exec) 127 127 { 128 return JSValue::encode(jsNumber(!exec->argumentCount() ? 0 : exec-> argument(0).toNumber(exec)));128 return JSValue::encode(jsNumber(!exec->argumentCount() ? 0 : exec->uncheckedArgument(0).toNumber(exec))); 129 129 } 130 130 -
trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp
r155143 r156240 372 372 EncodedJSValue JSC_HOST_CALL objectConstructorCreate(ExecState* exec) 373 373 { 374 if (!exec->argument(0).isObject() && !exec->argument(0).isNull()) 374 JSValue proto = exec->argument(0); 375 if (!proto.isObject() && !proto.isNull()) 375 376 return throwVMError(exec, createTypeError(exec, ASCIILiteral("Object prototype may only be an Object or null."))); 376 JSValue proto = exec->argument(0);377 377 JSObject* newObject = proto.isObject() 378 378 ? constructEmptyObject(exec, asObject(proto)) -
trunk/Source/JavaScriptCore/runtime/SetConstructor.cpp
r154916 r156240 68 68 size_t count = callFrame->argumentCount(); 69 69 for (size_t i = 0; i < count; i++) { 70 JSValue item = callFrame-> argument(i);70 JSValue item = callFrame->uncheckedArgument(i); 71 71 mapData->set(callFrame, item, item); 72 72 } -
trunk/Source/JavaScriptCore/runtime/StringConstructor.cpp
r155143 r156240 74 74 PassRefPtr<StringImpl> impl = StringImpl::createUninitialized(length, buf); 75 75 for (unsigned i = 0; i < length; ++i) 76 buf[i] = static_cast<UChar>(exec-> argument(i).toUInt32(exec));76 buf[i] = static_cast<UChar>(exec->uncheckedArgument(i).toUInt32(exec)); 77 77 return jsString(exec, impl); 78 78 } … … 81 81 { 82 82 if (LIKELY(exec->argumentCount() == 1)) 83 return JSValue::encode(jsSingleCharacterString(exec, exec-> argument(0).toUInt32(exec)));83 return JSValue::encode(jsSingleCharacterString(exec, exec->uncheckedArgument(0).toUInt32(exec))); 84 84 return JSValue::encode(stringFromCharCodeSlowCase(exec)); 85 85 } … … 96 96 return JSValue::encode(StringObject::create(exec, globalObject->stringObjectStructure())); 97 97 98 return JSValue::encode(StringObject::create(exec, globalObject->stringObjectStructure(), exec-> argument(0).toString(exec)));98 return JSValue::encode(StringObject::create(exec, globalObject->stringObjectStructure(), exec->uncheckedArgument(0).toString(exec))); 99 99 } 100 100 … … 109 109 if (!exec->argumentCount()) 110 110 return JSValue::encode(jsEmptyString(exec)); 111 return JSValue::encode(exec-> argument(0).toString(exec));111 return JSValue::encode(exec->uncheckedArgument(0).toString(exec)); 112 112 } 113 113 -
trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp
r155143 r156240 751 751 { 752 752 JSValue thisValue = exec->hostThisValue(); 753 if (thisValue.isString() && (exec->argumentCount() == 1))754 return JSValue::encode(jsString(exec, asString(thisValue), exec-> argument(0).toString(exec)));753 if (thisValue.isString() && exec->argumentCount() == 1) 754 return JSValue::encode(jsString(exec, asString(thisValue), exec->uncheckedArgument(0).toString(exec))); 755 755 756 756 if (!checkObjectCoercible(thisValue)) -
trunk/Source/JavaScriptCore/runtime/TestRunnerUtils.cpp
r155096 r156240 82 82 if (exec->argumentCount() < 1) 83 83 return jsUndefined(); 84 return numberOfDFGCompiles(exec-> argument(0));84 return numberOfDFGCompiles(exec->uncheckedArgument(0)); 85 85 } 86 86 … … 89 89 if (exec->argumentCount() < 1) 90 90 return jsUndefined(); 91 return setNeverInline(exec-> argument(0));91 return setNeverInline(exec->uncheckedArgument(0)); 92 92 } 93 93 -
trunk/Source/WebCore/ChangeLog
r156236 r156240 1 2013-09-21 Darin Adler <darin@apple.com> 2 3 Add ExecState::uncheckedArgument and use where possible to shrink a bit 4 https://bugs.webkit.org/show_bug.cgi?id=121750 5 6 Reviewed by Andreas Kling. 7 8 * bindings/js/JSHTMLCanvasElementCustom.cpp: 9 (WebCore::JSHTMLCanvasElement::probablySupportsContext): Already checked count. 10 (WebCore::JSHTMLCanvasElement::toDataURL): Ditto. 11 * bindings/js/JSHTMLDocumentCustom.cpp: 12 (WebCore::documentWrite): In a loop. 13 * bindings/js/JSInjectedScriptHostCustom.cpp: 14 (WebCore::JSInjectedScriptHost::inspectedObject): Already checked count. 15 (WebCore::JSInjectedScriptHost::internalConstructorName): Ditto. 16 (WebCore::JSInjectedScriptHost::isHTMLAllCollection): Ditto. 17 (WebCore::JSInjectedScriptHost::type): Ditto. 18 (WebCore::JSInjectedScriptHost::functionDetails): Ditto. 19 (WebCore::JSInjectedScriptHost::getEventListeners): Ditto. 20 (WebCore::JSInjectedScriptHost::inspect): Ditto. 21 (WebCore::JSInjectedScriptHost::databaseId): Ditto. 22 (WebCore::JSInjectedScriptHost::storageId): Ditto. 23 * bindings/js/JSSQLTransactionSyncCustom.cpp: 24 (WebCore::JSSQLTransactionSync::executeSql): Ditto. 25 * bindings/js/JSSVGLengthCustom.cpp: 26 (WebCore::JSSVGLength::convertToSpecifiedUnits): Ditto. 27 * bindings/js/JSSharedWorkerCustom.cpp: 28 (WebCore::JSSharedWorkerConstructor::constructJSSharedWorker): Ditto. 29 30 * bindings/js/JSWebGLRenderingContextCustom.cpp: 31 (WebCore::getObjectParameter): Already checked count. 32 (WebCore::JSWebGLRenderingContext::getAttachedShaders): Removed tortured code 33 to triply do the checking that the toWebGLProgram function already does, including 34 spurious exception checking in code that can't create an exception. Also count is 35 already checked. 36 (WebCore::JSWebGLRenderingContext::getExtension): More of the same. 37 (WebCore::JSWebGLRenderingContext::getFramebufferAttachmentParameter): Ditto. 38 (WebCore::JSWebGLRenderingContext::getParameter): Ditto. 39 (WebCore::JSWebGLRenderingContext::getProgramParameter): Ditto. 40 (WebCore::JSWebGLRenderingContext::getShaderParameter): Ditto. 41 (WebCore::JSWebGLRenderingContext::getUniform): Ditto. 42 (WebCore::dataFunctionf): Ditto. 43 (WebCore::dataFunctioni): Ditto. 44 (WebCore::dataFunctionMatrix): Ditto. 45 46 * bindings/js/JSWorkerGlobalScopeCustom.cpp: 47 (WebCore::JSWorkerGlobalScope::importScripts): In a loop. 48 * bindings/js/JSXMLHttpRequestCustom.cpp: 49 (WebCore::JSXMLHttpRequest::open): Already checked. Also removed some unneeded 50 argument count checks. 51 (WebCore::JSXMLHttpRequest::send): Removed unneeded special case for 0 argument 52 count that does the same thing as the undefined case, since asking for an 53 argument past the count yields undefined. 54 55 * bindings/js/JSXSLTProcessorCustom.cpp: 56 (WebCore::JSXSLTProcessor::setParameter): Already checked. 57 (WebCore::JSXSLTProcessor::getParameter): Already checked. 58 (WebCore::JSXSLTProcessor::removeParameter): Already checked. 59 60 * bindings/js/ScheduledAction.cpp: 61 (WebCore::ScheduledAction::ScheduledAction): In a loop. 62 * bindings/js/ScriptCallStackFactory.cpp: 63 (WebCore::createScriptArguments): Ditto. 64 65 * bindings/scripts/CodeGeneratorJS.pm: 66 (GenerateParametersCheck): Removed some excess argumentCount checks. 67 Used uncheckedArgument in a few places. More needs to be done, especially for 68 overloaded functions. 69 70 * bridge/c/c_instance.cpp: 71 (JSC::Bindings::CInstance::invokeMethod): In a loop. 72 (JSC::Bindings::CInstance::invokeDefaultMethod): Ditto. 73 * bridge/objc/objc_instance.mm: 74 (ObjcInstance::invokeObjcMethod): Ditto. 75 (ObjcInstance::invokeDefaultMethod): Ditto. 76 77 * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: 78 * bindings/scripts/test/JS/JSTestObj.cpp: 79 * bindings/scripts/test/JS/JSTestTypedefs.cpp: 80 Updated. 81 1 82 2013-09-21 Jon Lee <jonlee@apple.com> 2 83 -
trunk/Source/WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp
r155137 r156240 105 105 if (!exec->argumentCount()) 106 106 return jsBoolean(false); 107 const String& contextId = exec-> argument(0).toString(exec)->value(exec);107 const String& contextId = exec->uncheckedArgument(0).toString(exec)->value(exec); 108 108 if (exec->hadException()) 109 109 return jsUndefined(); … … 130 130 double* qualityPtr = 0; 131 131 if (exec->argumentCount() > 1) { 132 JSValue v = exec-> argument(1);132 JSValue v = exec->uncheckedArgument(1); 133 133 if (v.isNumber()) { 134 134 quality = v.toNumber(exec); -
trunk/Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp
r153970 r156240 145 145 else { 146 146 for (size_t i = 1; i < size; ++i) { 147 String subsequentString = exec-> argument(i).toString(exec)->value(exec);147 String subsequentString = exec->uncheckedArgument(i).toString(exec)->value(exec); 148 148 segmentedString.append(SegmentedString(subsequentString)); 149 149 } -
trunk/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp
r155736 r156240 91 91 return jsUndefined(); 92 92 93 InjectedScriptHost::InspectableObject* object = impl()->inspectedObject(exec-> argument(0).toInt32(exec));93 InjectedScriptHost::InspectableObject* object = impl()->inspectedObject(exec->uncheckedArgument(0).toInt32(exec)); 94 94 if (!object) 95 95 return jsUndefined(); … … 108 108 return jsUndefined(); 109 109 110 JSObject* thisObject = jsCast<JSObject*>(exec-> argument(0).toThis(exec, NotStrictMode));110 JSObject* thisObject = jsCast<JSObject*>(exec->uncheckedArgument(0).toThis(exec, NotStrictMode)); 111 111 String result = thisObject->methodTable()->className(thisObject); 112 112 return jsStringWithCache(exec, result); … … 118 118 return jsUndefined(); 119 119 120 JSValue value = exec-> argument(0);120 JSValue value = exec->uncheckedArgument(0); 121 121 return jsBoolean(value.inherits(JSHTMLAllCollection::info())); 122 122 } … … 127 127 return jsUndefined(); 128 128 129 JSValue value = exec-> argument(0);129 JSValue value = exec->uncheckedArgument(0); 130 130 if (value.isString()) 131 131 return jsString(exec, String("string")); … … 159 159 if (exec->argumentCount() < 1) 160 160 return jsUndefined(); 161 JSValue value = exec-> argument(0);161 JSValue value = exec->uncheckedArgument(0); 162 162 if (!value.asCell()->inherits(JSFunction::info())) 163 163 return jsUndefined(); … … 223 223 if (exec->argumentCount() < 1) 224 224 return jsUndefined(); 225 JSValue value = exec-> argument(0);225 JSValue value = exec->uncheckedArgument(0); 226 226 if (!value.isObject() || value.isNull()) 227 227 return jsUndefined(); … … 248 248 { 249 249 if (exec->argumentCount() >= 2) { 250 ScriptValue object(exec->vm(), exec-> argument(0));251 ScriptValue hints(exec->vm(), exec-> argument(1));250 ScriptValue object(exec->vm(), exec->uncheckedArgument(0)); 251 ScriptValue hints(exec->vm(), exec->uncheckedArgument(1)); 252 252 impl()->inspectImpl(object.toInspectorValue(exec), hints.toInspectorValue(exec)); 253 253 } … … 260 260 return jsUndefined(); 261 261 #if ENABLE(SQL_DATABASE) 262 Database* database = toDatabase(exec-> argument(0));262 Database* database = toDatabase(exec->uncheckedArgument(0)); 263 263 if (database) 264 264 return jsStringWithCache(exec, impl()->databaseIdImpl(database)); … … 271 271 if (exec->argumentCount() < 1) 272 272 return jsUndefined(); 273 Storage* storage = toStorage(exec-> argument(0));273 Storage* storage = toStorage(exec->uncheckedArgument(0)); 274 274 if (storage) 275 275 return jsStringWithCache(exec, impl()->storageIdImpl(storage)); -
trunk/Source/WebCore/bindings/js/JSSQLTransactionSyncCustom.cpp
r134440 r156240 50 50 } 51 51 52 String sqlStatement = exec-> argument(0).toString(exec)->value(exec);52 String sqlStatement = exec->uncheckedArgument(0).toString(exec)->value(exec); 53 53 if (exec->hadException()) 54 54 return jsUndefined(); -
trunk/Source/WebCore/bindings/js/JSSVGLengthCustom.cpp
r154797 r156240 84 84 return exec->vm().throwException(exec, createNotEnoughArgumentsError(exec)); 85 85 86 unsigned short unitType = exec-> argument(0).toUInt32(exec);86 unsigned short unitType = exec->uncheckedArgument(0).toUInt32(exec); 87 87 if (exec->hadException()) 88 88 return jsUndefined(); -
trunk/Source/WebCore/bindings/js/JSSharedWorkerCustom.cpp
r155229 r156240 64 64 return throwVMError(exec, createNotEnoughArgumentsError(exec)); 65 65 66 String scriptURL = exec-> argument(0).toString(exec)->value(exec);66 String scriptURL = exec->uncheckedArgument(0).toString(exec)->value(exec); 67 67 String name; 68 68 if (exec->argumentCount() > 1) 69 name = exec-> argument(1).toString(exec)->value(exec);69 name = exec->uncheckedArgument(1).toString(exec)->value(exec); 70 70 71 71 if (exec->hadException()) -
trunk/Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp
r154797 r156240 157 157 ExceptionCode ec = 0; 158 158 WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(obj->impl()); 159 unsigned target = exec-> argument(0).toInt32(exec);160 if (exec->hadException()) 161 return jsUndefined(); 162 unsigned pname = exec-> argument(1).toInt32(exec);159 unsigned target = exec->uncheckedArgument(0).toInt32(exec); 160 if (exec->hadException()) 161 return jsUndefined(); 162 unsigned pname = exec->uncheckedArgument(1).toInt32(exec); 163 163 if (exec->hadException()) 164 164 return jsUndefined(); … … 247 247 ExceptionCode ec = 0; 248 248 WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl()); 249 if (exec->argumentCount() > 0 && !exec->argument(0).isUndefinedOrNull() && !exec->argument(0).inherits(JSWebGLProgram::info())) 250 return throwTypeError(exec); 251 WebGLProgram* program = toWebGLProgram(exec->argument(0)); 252 if (exec->hadException()) 253 return jsNull(); 249 WebGLProgram* program = toWebGLProgram(exec->uncheckedArgument(0)); 250 if (!program) 251 return throwTypeError(exec); 254 252 Vector<RefPtr<WebGLShader> > shaders; 255 253 bool succeed = context->getAttachedShaders(program, shaders, ec); … … 272 270 273 271 WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl()); 274 const String name = exec-> argument(0).toString(exec)->value(exec);272 const String name = exec->uncheckedArgument(0).toString(exec)->value(exec); 275 273 if (exec->hadException()) 276 274 return jsUndefined(); … … 291 289 ExceptionCode ec = 0; 292 290 WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl()); 293 unsigned target = exec-> argument(0).toInt32(exec);294 if (exec->hadException()) 295 return jsUndefined(); 296 unsigned attachment = exec-> argument(1).toInt32(exec);297 if (exec->hadException()) 298 return jsUndefined(); 299 unsigned pname = exec-> argument(2).toInt32(exec);291 unsigned target = exec->uncheckedArgument(0).toInt32(exec); 292 if (exec->hadException()) 293 return jsUndefined(); 294 unsigned attachment = exec->uncheckedArgument(1).toInt32(exec); 295 if (exec->hadException()) 296 return jsUndefined(); 297 unsigned pname = exec->uncheckedArgument(2).toInt32(exec); 300 298 if (exec->hadException()) 301 299 return jsUndefined(); … … 315 313 ExceptionCode ec = 0; 316 314 WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl()); 317 unsigned pname = exec-> argument(0).toInt32(exec);315 unsigned pname = exec->uncheckedArgument(0).toInt32(exec); 318 316 if (exec->hadException()) 319 317 return jsUndefined(); … … 333 331 ExceptionCode ec = 0; 334 332 WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl()); 335 if (exec->argumentCount() > 0 && !exec->argument(0).isUndefinedOrNull() && !exec->argument(0).inherits(JSWebGLProgram::info()))336 return throwTypeError(exec);337 WebGLProgram* program = toWebGLProgram(exec->argument(0));338 unsigned pname = exec-> argument(1).toInt32(exec);333 WebGLProgram* program = toWebGLProgram(exec->uncheckedArgument(0)); 334 if (!program) 335 return throwTypeError(exec); 336 unsigned pname = exec->uncheckedArgument(1).toInt32(exec); 339 337 if (exec->hadException()) 340 338 return jsUndefined(); … … 359 357 ExceptionCode ec = 0; 360 358 WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl()); 361 if ( exec->argumentCount() > 0 && !exec->argument(0).isUndefinedOrNull() && !exec->argument(0).inherits(JSWebGLShader::info()))362 return throwTypeError(exec); 363 WebGLShader* shader = toWebGLShader(exec-> argument(0));364 unsigned pname = exec-> argument(1).toInt32(exec);359 if (!exec->uncheckedArgument(0).isUndefinedOrNull() && !exec->uncheckedArgument(0).inherits(JSWebGLShader::info())) 360 return throwTypeError(exec); 361 WebGLShader* shader = toWebGLShader(exec->uncheckedArgument(0)); 362 unsigned pname = exec->uncheckedArgument(1).toInt32(exec); 365 363 if (exec->hadException()) 366 364 return jsUndefined(); … … 397 395 ExceptionCode ec = 0; 398 396 WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl()); 399 if (exec->argumentCount() > 0 && !exec->argument(0).isUndefinedOrNull() && !exec->argument(0).inherits(JSWebGLProgram::info())) 400 return throwTypeError(exec); 401 WebGLProgram* program = toWebGLProgram(exec->argument(0)); 402 if (exec->argumentCount() > 1 && !exec->argument(1).isUndefinedOrNull() && !exec->argument(1).inherits(JSWebGLUniformLocation::info())) 403 return throwTypeError(exec); 404 WebGLUniformLocation* loc = toWebGLUniformLocation(exec->argument(1)); 405 if (exec->hadException()) 406 return jsUndefined(); 407 WebGLGetInfo info = context->getUniform(program, loc, ec); 397 WebGLProgram* program = toWebGLProgram(exec->uncheckedArgument(0)); 398 if (!program) 399 return throwTypeError(exec); 400 WebGLUniformLocation* location = toWebGLUniformLocation(exec->uncheckedArgument(1)); 401 if (!location) 402 return throwTypeError(exec); 403 WebGLGetInfo info = context->getUniform(program, location, ec); 408 404 if (ec) { 409 405 setDOMException(exec, ec); … … 473 469 474 470 if (functionForUniform(f)) { 475 if (exec->argumentCount() > 0 && !exec->argument(0).isUndefinedOrNull() && !exec->argument(0).inherits(JSWebGLUniformLocation::info())) 471 location = toWebGLUniformLocation(exec->uncheckedArgument(0)); 472 if (!location) 476 473 return throwTypeError(exec); 477 location = toWebGLUniformLocation(exec->argument(0));478 474 } else 479 index = exec-> argument(0).toInt32(exec);475 index = exec->uncheckedArgument(0).toInt32(exec); 480 476 481 477 if (exec->hadException()) 482 478 return jsUndefined(); 483 479 484 RefPtr<Float32Array> webGLArray = toFloat32Array(exec-> argument(1));480 RefPtr<Float32Array> webGLArray = toFloat32Array(exec->uncheckedArgument(1)); 485 481 if (exec->hadException()) 486 482 return jsUndefined(); … … 520 516 521 517 Vector<float, 64> array; 522 if (!toVector(exec, exec-> argument(1), array))518 if (!toVector(exec, exec->uncheckedArgument(1), array)) 523 519 return throwTypeError(exec); 524 520 … … 559 555 return exec->vm().throwException(exec, createNotEnoughArgumentsError(exec)); 560 556 561 if (exec->argumentCount() > 0 && !exec->argument(0).isUndefinedOrNull() && !exec->argument(0).inherits(JSWebGLUniformLocation::info()))562 return throwTypeError(exec);563 WebGLUniformLocation* location = toWebGLUniformLocation(exec->argument(0));557 WebGLUniformLocation* location = toWebGLUniformLocation(exec->uncheckedArgument(0)); 558 if (!location) 559 return throwTypeError(exec); 564 560 565 if (exec->hadException()) 566 return jsUndefined(); 567 568 RefPtr<Int32Array> webGLArray = toInt32Array(exec->argument(1)); 569 if (exec->hadException()) 570 return jsUndefined(); 571 561 RefPtr<Int32Array> webGLArray = toInt32Array(exec->uncheckedArgument(1)); 562 572 563 ExceptionCode ec = 0; 573 564 if (webGLArray) { … … 595 586 596 587 Vector<int, 64> array; 597 if (!toVector(exec, exec-> argument(1), array))588 if (!toVector(exec, exec->uncheckedArgument(1), array)) 598 589 return throwTypeError(exec); 599 590 … … 624 615 return exec->vm().throwException(exec, createNotEnoughArgumentsError(exec)); 625 616 626 if (exec->argumentCount() > 0 && !exec->argument(0).isUndefinedOrNull() && !exec->argument(0).inherits(JSWebGLUniformLocation::info())) 627 return throwTypeError(exec); 628 WebGLUniformLocation* location = toWebGLUniformLocation(exec->argument(0)); 629 617 WebGLUniformLocation* location = toWebGLUniformLocation(exec->uncheckedArgument(0)); 618 if (!location) 619 return throwTypeError(exec); 620 621 bool transpose = exec->uncheckedArgument(1).toBoolean(exec); 630 622 if (exec->hadException()) 631 623 return jsUndefined(); 632 624 633 bool transpose = exec->argument(1).toBoolean(exec); 634 if (exec->hadException()) 635 return jsUndefined(); 636 637 RefPtr<Float32Array> webGLArray = toFloat32Array(exec->argument(2)); 638 if (exec->hadException()) 639 return jsUndefined(); 625 RefPtr<Float32Array> webGLArray = toFloat32Array(exec->uncheckedArgument(2)); 640 626 641 627 ExceptionCode ec = 0; … … 658 644 659 645 Vector<float, 64> array; 660 if (!toVector(exec, exec-> argument(2), array))646 if (!toVector(exec, exec->uncheckedArgument(2), array)) 661 647 return throwTypeError(exec); 662 648 -
trunk/Source/WebCore/bindings/js/JSWorkerGlobalScopeCustom.cpp
r154300 r156240 85 85 Vector<String> urls; 86 86 for (unsigned i = 0; i < exec->argumentCount(); i++) { 87 urls.append(exec-> argument(i).toString(exec)->value(exec));87 urls.append(exec->uncheckedArgument(i).toString(exec)->value(exec)); 88 88 if (exec->hadException()) 89 89 return jsUndefined(); -
trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp
r155081 r156240 89 89 return exec->vm().throwException(exec, createNotEnoughArgumentsError(exec)); 90 90 91 const KURL& url = impl()->scriptExecutionContext()->completeURL(exec-> argument(1).toString(exec)->value(exec));92 String method = exec-> argument(0).toString(exec)->value(exec);91 const KURL& url = impl()->scriptExecutionContext()->completeURL(exec->uncheckedArgument(1).toString(exec)->value(exec)); 92 String method = exec->uncheckedArgument(0).toString(exec)->value(exec); 93 93 94 94 ExceptionCode ec = 0; 95 95 if (exec->argumentCount() >= 3) { 96 bool async = exec->argument(2).toBoolean(exec); 97 98 if (exec->argumentCount() >= 4 && !exec->argument(3).isUndefined()) { 99 String user = valueToStringWithNullCheck(exec, exec->argument(3)); 100 101 if (exec->argumentCount() >= 5 && !exec->argument(4).isUndefined()) { 102 String password = valueToStringWithNullCheck(exec, exec->argument(4)); 96 bool async = exec->uncheckedArgument(2).toBoolean(exec); 97 if (!exec->argument(3).isUndefined()) { 98 String user = valueToStringWithNullCheck(exec, exec->uncheckedArgument(3)); 99 100 if (!exec->argument(4).isUndefined()) { 101 String password = valueToStringWithNullCheck(exec, exec->uncheckedArgument(4)); 103 102 impl()->open(method, url, async, user, password, ec); 104 103 } else … … 150 149 151 150 ExceptionCode ec = 0; 152 if (!exec->argumentCount()) 151 JSValue val = exec->argument(0); 152 if (val.isUndefinedOrNull()) 153 153 impl()->send(ec); 154 else { 155 JSValue val = exec->argument(0); 156 if (val.isUndefinedOrNull()) 157 impl()->send(ec); 158 else if (val.inherits(JSDocument::info())) 159 impl()->send(toDocument(val), ec); 160 else if (val.inherits(JSBlob::info())) 161 impl()->send(toBlob(val), ec); 162 else if (val.inherits(JSDOMFormData::info())) 163 impl()->send(toDOMFormData(val), ec); 164 else if (val.inherits(JSArrayBuffer::info())) 165 impl()->send(toArrayBuffer(val), ec); 166 else if (val.inherits(JSArrayBufferView::info())) { 167 RefPtr<ArrayBufferView> view = toArrayBufferView(val); 168 impl()->send(view.get(), ec); 169 } else 170 impl()->send(val.toString(exec)->value(exec), ec); 171 } 154 else if (val.inherits(JSDocument::info())) 155 impl()->send(toDocument(val), ec); 156 else if (val.inherits(JSBlob::info())) 157 impl()->send(toBlob(val), ec); 158 else if (val.inherits(JSDOMFormData::info())) 159 impl()->send(toDOMFormData(val), ec); 160 else if (val.inherits(JSArrayBuffer::info())) 161 impl()->send(toArrayBuffer(val), ec); 162 else if (val.inherits(JSArrayBufferView::info())) { 163 RefPtr<ArrayBufferView> view = toArrayBufferView(val); 164 impl()->send(view.get(), ec); 165 } else 166 impl()->send(val.toString(exec)->value(exec), ec); 172 167 173 168 SendFunctor functor; -
trunk/Source/WebCore/bindings/js/JSXSLTProcessorCustom.cpp
r127757 r156240 51 51 if (exec->argument(1).isUndefinedOrNull() || exec->argument(2).isUndefinedOrNull()) 52 52 return jsUndefined(); // Throw exception? 53 String namespaceURI = exec-> argument(0).toString(exec)->value(exec);54 String localName = exec-> argument(1).toString(exec)->value(exec);55 String value = exec-> argument(2).toString(exec)->value(exec);53 String namespaceURI = exec->uncheckedArgument(0).toString(exec)->value(exec); 54 String localName = exec->uncheckedArgument(1).toString(exec)->value(exec); 55 String value = exec->uncheckedArgument(2).toString(exec)->value(exec); 56 56 impl()->setParameter(namespaceURI, localName, value); 57 57 return jsUndefined(); … … 62 62 if (exec->argument(1).isUndefinedOrNull()) 63 63 return jsUndefined(); 64 String namespaceURI = exec-> argument(0).toString(exec)->value(exec);65 String localName = exec-> argument(1).toString(exec)->value(exec);64 String namespaceURI = exec->uncheckedArgument(0).toString(exec)->value(exec); 65 String localName = exec->uncheckedArgument(1).toString(exec)->value(exec); 66 66 String value = impl()->getParameter(namespaceURI, localName); 67 67 return jsStringOrUndefined(exec, value); … … 72 72 if (exec->argument(1).isUndefinedOrNull()) 73 73 return jsUndefined(); 74 String namespaceURI = exec-> argument(0).toString(exec)->value(exec);75 String localName = exec-> argument(1).toString(exec)->value(exec);74 String namespaceURI = exec->uncheckedArgument(0).toString(exec)->value(exec); 75 String localName = exec->uncheckedArgument(1).toString(exec)->value(exec); 76 76 impl()->removeParameter(namespaceURI, localName); 77 77 return jsUndefined(); -
trunk/Source/WebCore/bindings/js/ScheduledAction.cpp
r155217 r156240 73 73 // Start at 2 to skip function and interval. 74 74 for (size_t i = 2; i < exec->argumentCount(); ++i) 75 m_args.append(Strong<JSC::Unknown>(exec->vm(), exec-> argument(i)));75 m_args.append(Strong<JSC::Unknown>(exec->vm(), exec->uncheckedArgument(i))); 76 76 } 77 77 -
trunk/Source/WebCore/bindings/js/ScriptCallStackFactory.cpp
r155081 r156240 203 203 size_t argumentCount = exec->argumentCount(); 204 204 for (size_t i = skipArgumentCount; i < argumentCount; ++i) 205 arguments.append(ScriptValue(exec->vm(), exec-> argument(i)));205 arguments.append(ScriptValue(exec->vm(), exec->uncheckedArgument(i))); 206 206 return ScriptArguments::create(exec, arguments); 207 207 } -
trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
r156157 r156240 2845 2845 if ($optional) { 2846 2846 push(@$outputArray, " RefPtr<$argType> $name;\n"); 2847 push(@$outputArray, " if ( exec->argumentCount() > $argsIndex &&!exec->argument($argsIndex).isUndefinedOrNull()) {\n");2848 push(@$outputArray, " if (!exec-> argument($argsIndex).isFunction())\n");2847 push(@$outputArray, " if (!exec->argument($argsIndex).isUndefinedOrNull()) {\n"); 2848 push(@$outputArray, " if (!exec->uncheckedArgument($argsIndex).isFunction())\n"); 2849 2849 push(@$outputArray, " return throwVMTypeError(exec);\n"); 2850 2850 if ($function->isStatic) { 2851 2851 AddToImplIncludes("CallbackFunction.h"); 2852 push(@$outputArray, " $name = createFunctionOnlyCallback<${callbackClassName}>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec-> argument($argsIndex));\n");2852 push(@$outputArray, " $name = createFunctionOnlyCallback<${callbackClassName}>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->uncheckedArgument($argsIndex));\n"); 2853 2853 } else { 2854 push(@$outputArray, " $name = ${callbackClassName}::create(asObject(exec-> argument($argsIndex)), castedThis->globalObject());\n");2854 push(@$outputArray, " $name = ${callbackClassName}::create(asObject(exec->uncheckedArgument($argsIndex)), castedThis->globalObject());\n"); 2855 2855 } 2856 2856 push(@$outputArray, " }\n"); 2857 2857 } else { 2858 push(@$outputArray, " if ( exec->argumentCount() <= $argsIndex ||!exec->argument($argsIndex).isFunction())\n");2858 push(@$outputArray, " if (!exec->argument($argsIndex).isFunction())\n"); 2859 2859 push(@$outputArray, " return throwVMTypeError(exec);\n"); 2860 2860 if ($function->isStatic) { 2861 2861 AddToImplIncludes("CallbackFunction.h"); 2862 push(@$outputArray, " RefPtr<$argType> $name = createFunctionOnlyCallback<${callbackClassName}>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec-> argument($argsIndex));\n");2862 push(@$outputArray, " RefPtr<$argType> $name = createFunctionOnlyCallback<${callbackClassName}>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->uncheckedArgument($argsIndex));\n"); 2863 2863 } else { 2864 push(@$outputArray, " RefPtr<$argType> $name = ${callbackClassName}::create(asObject(exec-> argument($argsIndex)), castedThis->globalObject());\n");2864 push(@$outputArray, " RefPtr<$argType> $name = ${callbackClassName}::create(asObject(exec->uncheckedArgument($argsIndex)), castedThis->globalObject());\n"); 2865 2865 } 2866 2866 } … … 2887 2887 push(@$outputArray, " Vector<$nativeElementType> $name;\n"); 2888 2888 push(@$outputArray, " for (unsigned i = $argsIndex; i < exec->argumentCount(); ++i) {\n"); 2889 push(@$outputArray, " if (!exec-> argument(i).inherits(JS${argType}::info()))\n");2889 push(@$outputArray, " if (!exec->uncheckedArgument(i).inherits(JS${argType}::info()))\n"); 2890 2890 push(@$outputArray, " return throwVMTypeError(exec);\n"); 2891 push(@$outputArray, " $name.append(to$argType(exec-> argument(i)));\n");2891 push(@$outputArray, " $name.append(to$argType(exec->uncheckedArgument(i)));\n"); 2892 2892 push(@$outputArray, " }\n") 2893 2893 } else { -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp
r156009 r156240 150 150 if (exec->argumentCount() < 1) 151 151 return throwVMError(exec, createNotEnoughArgumentsError(exec)); 152 if ( exec->argumentCount() <= 0 ||!exec->argument(0).isFunction())152 if (!exec->argument(0).isFunction()) 153 153 return throwVMTypeError(exec); 154 RefPtr<MediaQueryListListener> listener = JSMediaQueryListListener::create(asObject(exec-> argument(0)), castedThis->globalObject());154 RefPtr<MediaQueryListListener> listener = JSMediaQueryListListener::create(asObject(exec->uncheckedArgument(0)), castedThis->globalObject()); 155 155 impl->method(listener); 156 156 return JSValue::encode(jsUndefined()); -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
r156157 r156240 214 214 if (exec->argumentCount() < 1) 215 215 return throwVMError(exec, createNotEnoughArgumentsError(exec)); 216 if ( exec->argumentCount() <= 0 ||!exec->argument(0).isFunction())217 return throwVMTypeError(exec); 218 RefPtr<TestCallback> testCallback = JSTestCallback::create(asObject(exec-> argument(0)), castedThis->globalObject());216 if (!exec->argument(0).isFunction()) 217 return throwVMTypeError(exec); 218 RefPtr<TestCallback> testCallback = JSTestCallback::create(asObject(exec->uncheckedArgument(0)), castedThis->globalObject()); 219 219 RefPtr<TestObj> object = TestObj::create(testCallback); 220 220 return JSValue::encode(asObject(toJS(exec, castedThis->globalObject(), object.get()))); … … 2376 2376 if (exec->argumentCount() < 1) 2377 2377 return throwVMError(exec, createNotEnoughArgumentsError(exec)); 2378 if ( exec->argumentCount() <= 0 ||!exec->argument(0).isFunction())2379 return throwVMTypeError(exec); 2380 RefPtr<TestCallback> callback = JSTestCallback::create(asObject(exec-> argument(0)), castedThis->globalObject());2378 if (!exec->argument(0).isFunction()) 2379 return throwVMTypeError(exec); 2380 RefPtr<TestCallback> callback = JSTestCallback::create(asObject(exec->uncheckedArgument(0)), castedThis->globalObject()); 2381 2381 impl->methodWithCallbackArg(callback); 2382 2382 return JSValue::encode(jsUndefined()); … … 2396 2396 if (exec->hadException()) 2397 2397 return JSValue::encode(jsUndefined()); 2398 if ( exec->argumentCount() <= 1 ||!exec->argument(1).isFunction())2399 return throwVMTypeError(exec); 2400 RefPtr<TestCallback> callback = JSTestCallback::create(asObject(exec-> argument(1)), castedThis->globalObject());2398 if (!exec->argument(1).isFunction()) 2399 return throwVMTypeError(exec); 2400 RefPtr<TestCallback> callback = JSTestCallback::create(asObject(exec->uncheckedArgument(1)), castedThis->globalObject()); 2401 2401 impl->methodWithNonCallbackArgAndCallbackArg(nonCallback, callback); 2402 2402 return JSValue::encode(jsUndefined()); … … 2412 2412 TestObj* impl = static_cast<TestObj*>(castedThis->impl()); 2413 2413 RefPtr<TestCallback> callback; 2414 if ( exec->argumentCount() > 0 &&!exec->argument(0).isUndefinedOrNull()) {2415 if (!exec-> argument(0).isFunction())2414 if (!exec->argument(0).isUndefinedOrNull()) { 2415 if (!exec->uncheckedArgument(0).isFunction()) 2416 2416 return throwVMTypeError(exec); 2417 callback = JSTestCallback::create(asObject(exec-> argument(0)), castedThis->globalObject());2417 callback = JSTestCallback::create(asObject(exec->uncheckedArgument(0)), castedThis->globalObject()); 2418 2418 } 2419 2419 impl->methodWithCallbackAndOptionalArg(callback); … … 2424 2424 { 2425 2425 RefPtr<TestCallback> callback; 2426 if ( exec->argumentCount() > 0 &&!exec->argument(0).isUndefinedOrNull()) {2427 if (!exec-> argument(0).isFunction())2426 if (!exec->argument(0).isUndefinedOrNull()) { 2427 if (!exec->uncheckedArgument(0).isFunction()) 2428 2428 return throwVMTypeError(exec); 2429 callback = createFunctionOnlyCallback<JSTestCallback>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec-> argument(0));2429 callback = createFunctionOnlyCallback<JSTestCallback>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->uncheckedArgument(0)); 2430 2430 } 2431 2431 TestObj::staticMethodWithCallbackAndOptionalArg(callback); … … 2437 2437 if (exec->argumentCount() < 1) 2438 2438 return throwVMError(exec, createNotEnoughArgumentsError(exec)); 2439 if ( exec->argumentCount() <= 0 ||!exec->argument(0).isFunction())2440 return throwVMTypeError(exec); 2441 RefPtr<TestCallback> callback = createFunctionOnlyCallback<JSTestCallback>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec-> argument(0));2439 if (!exec->argument(0).isFunction()) 2440 return throwVMTypeError(exec); 2441 RefPtr<TestCallback> callback = createFunctionOnlyCallback<JSTestCallback>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->uncheckedArgument(0)); 2442 2442 TestObj::staticMethodWithCallbackArg(callback); 2443 2443 return JSValue::encode(jsUndefined()); … … 2581 2581 if (exec->argumentCount() < 1) 2582 2582 return throwVMError(exec, createNotEnoughArgumentsError(exec)); 2583 if ( exec->argumentCount() <= 0 ||!exec->argument(0).isFunction())2584 return throwVMTypeError(exec); 2585 RefPtr<TestCallback> callback = JSTestCallback::create(asObject(exec-> argument(0)), castedThis->globalObject());2583 if (!exec->argument(0).isFunction()) 2584 return throwVMTypeError(exec); 2585 RefPtr<TestCallback> callback = JSTestCallback::create(asObject(exec->uncheckedArgument(0)), castedThis->globalObject()); 2586 2586 impl->overloadedMethod(callback); 2587 2587 return JSValue::encode(jsUndefined()); … … 3135 3135 Vector<Node*> tail; 3136 3136 for (unsigned i = 1; i < exec->argumentCount(); ++i) { 3137 if (!exec-> argument(i).inherits(JSNode::info()))3137 if (!exec->uncheckedArgument(i).inherits(JSNode::info())) 3138 3138 return throwVMTypeError(exec); 3139 tail.append(toNode(exec-> argument(i)));3139 tail.append(toNode(exec->uncheckedArgument(i))); 3140 3140 } 3141 3141 impl->variadicNodeMethod(head, tail); -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp
r156157 r156240 76 76 if (exec->hadException()) 77 77 return JSValue::encode(jsUndefined()); 78 if ( exec->argumentCount() <= 1 ||!exec->argument(1).isFunction())79 return throwVMTypeError(exec); 80 RefPtr<TestCallback> testCallback = JSTestCallback::create(asObject(exec-> argument(1)), castedThis->globalObject());78 if (!exec->argument(1).isFunction()) 79 return throwVMTypeError(exec); 80 RefPtr<TestCallback> testCallback = JSTestCallback::create(asObject(exec->uncheckedArgument(1)), castedThis->globalObject()); 81 81 RefPtr<TestTypedefs> object = TestTypedefs::create(hello, testCallback); 82 82 return JSValue::encode(asObject(toJS(exec, castedThis->globalObject(), object.get()))); -
trunk/Source/WebCore/bridge/c/c_instance.cpp
r154797 r156240 168 168 unsigned i; 169 169 for (i = 0; i < count; i++) 170 convertValueToNPVariant(exec, exec-> argument(i), &cArgs[i]);170 convertValueToNPVariant(exec, exec->uncheckedArgument(i), &cArgs[i]); 171 171 172 172 // Invoke the 'C' method. … … 204 204 unsigned i; 205 205 for (i = 0; i < count; i++) 206 convertValueToNPVariant(exec, exec-> argument(i), &cArgs[i]);206 convertValueToNPVariant(exec, exec->uncheckedArgument(i), &cArgs[i]); 207 207 208 208 // Invoke the 'C' method. -
trunk/Source/WebCore/bridge/objc/objc_instance.mm
r154797 r156240 261 261 int count = exec->argumentCount(); 262 262 for (int i = 0; i < count; i++) { 263 ObjcValue value = convertValueToObjcValue(exec, exec-> argument(i), ObjcObjectType);263 ObjcValue value = convertValueToObjcValue(exec, exec->uncheckedArgument(i), ObjcObjectType); 264 264 [objcArgs addObject:value.objectValue]; 265 265 } … … 267 267 } else { 268 268 unsigned count = [signature numberOfArguments]; 269 for (unsigned i = 2; i < count ; i++) {269 for (unsigned i = 2; i < count; ++i) { 270 270 const char* type = [signature getArgumentTypeAtIndex:i]; 271 271 ObjcValueType objcValueType = objcValueTypeForType(type); … … 276 276 ASSERT(objcValueType != ObjcInvalidType && objcValueType != ObjcVoidType); 277 277 278 ObjcValue value = convertValueToObjcValue(exec, exec->argument(i -2), objcValueType);278 ObjcValue value = convertValueToObjcValue(exec, exec->argument(i - 2), objcValueType); 279 279 280 280 switch (objcValueType) { … … 375 375 unsigned count = exec->argumentCount(); 376 376 for (unsigned i = 0; i < count; i++) { 377 ObjcValue value = convertValueToObjcValue(exec, exec-> argument(i), ObjcObjectType);377 ObjcValue value = convertValueToObjcValue(exec, exec->uncheckedArgument(i), ObjcObjectType); 378 378 [objcArgs addObject:value.objectValue]; 379 379 } -
trunk/Source/WebKit2/ChangeLog
r156069 r156240 1 2013-09-21 Darin Adler <darin@apple.com> 2 3 Add ExecState::uncheckedArgument and use where possible to shrink a bit 4 https://bugs.webkit.org/show_bug.cgi?id=121750 5 6 Reviewed by Andreas Kling. 7 8 * WebProcess/Plugins/Netscape/JSNPObject.cpp: 9 (WebKit::JSNPObject::callMethod): In a loop. 10 (WebKit::JSNPObject::callObject): Ditto. 11 (WebKit::JSNPObject::callConstructor): Ditto. 12 1 13 2013-09-18 Anders Carlsson <andersca@apple.com> 2 14 -
trunk/Source/WebKit2/WebProcess/Plugins/Netscape/JSNPObject.cpp
r154797 r156240 116 116 // Convert all arguments to NPVariants. 117 117 for (size_t i = 0; i < argumentCount; ++i) 118 m_objectMap->convertJSValueToNPVariant(exec, exec-> argument(i), arguments[i]);118 m_objectMap->convertJSValueToNPVariant(exec, exec->uncheckedArgument(i), arguments[i]); 119 119 120 120 // Calling NPClass::invoke will call into plug-in code, and there's no telling what the plug-in can do. … … 156 156 // Convert all arguments to NPVariants. 157 157 for (size_t i = 0; i < argumentCount; ++i) 158 m_objectMap->convertJSValueToNPVariant(exec, exec-> argument(i), arguments[i]);158 m_objectMap->convertJSValueToNPVariant(exec, exec->uncheckedArgument(i), arguments[i]); 159 159 160 160 // Calling NPClass::invokeDefault will call into plug-in code, and there's no telling what the plug-in can do. … … 196 196 // Convert all arguments to NPVariants. 197 197 for (size_t i = 0; i < argumentCount; ++i) 198 m_objectMap->convertJSValueToNPVariant(exec, exec-> argument(i), arguments[i]);198 m_objectMap->convertJSValueToNPVariant(exec, exec->uncheckedArgument(i), arguments[i]); 199 199 200 200 // Calling NPClass::construct will call into plug-in code, and there's no telling what the plug-in can do.
Note: See TracChangeset
for help on using the changeset viewer.