Title: [272471] trunk/Source/_javascript_Core
Revision
272471
Author
[email protected]
Date
2021-02-07 03:13:28 -0800 (Sun, 07 Feb 2021)

Log Message

[JSC] Replace toInteger with toIntegerOrInfinity
https://bugs.webkit.org/show_bug.cgi?id=218642

Reviewed by Alexey Shvayka.

In ECMA262 spec, ToInteger abstract operation is replaced with ToIntegerOrInfinity.
This patch renames toInteger to toIntegerOrInfinity in JSC.

* builtins/ArrayPrototype.js:
(fill):
(includes):
(copyWithin):
(flat):
(at):
* builtins/FunctionPrototype.js:
(bind):
* builtins/GlobalOperations.js:
(globalPrivate.toIntegerOrInfinity):
(globalPrivate.toLength):
(globalPrivate.toInteger): Deleted.
* builtins/RegExpPrototype.js:
(overriddenName.string_appeared_here.replace):
* builtins/StringPrototype.js:
(repeat):
(at):
* builtins/TypedArrayPrototype.js:
(subarray):
(at):
* inspector/JSInjectedScriptHost.cpp:
(Inspector::JSInjectedScriptHost::weakMapEntries):
(Inspector::JSInjectedScriptHost::weakSetEntries):
(Inspector::JSInjectedScriptHost::iteratorEntries):
* runtime/ArrayPrototype.cpp:
(JSC::argumentClampedIndexFromStartOrEnd):
(JSC::JSC_DEFINE_HOST_FUNCTION):
* runtime/IntlSegments.cpp:
(JSC::IntlSegments::containing):
* runtime/JSCJSValue.cpp:
(JSC::JSValue::toIntegerOrInfinity const):
(JSC::JSValue::toLength const):
(JSC::JSValue::toInteger const): Deleted.
* runtime/JSCJSValue.h:
* runtime/JSCJSValueInlines.h:
* runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
(JSC::argumentClampedIndexFromStartOrEnd):
(JSC::genericTypedArrayViewProtoFuncSet):
(JSC::genericTypedArrayViewProtoFuncLastIndexOf):
* runtime/NumberPrototype.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
(JSC::extractToStringRadixArgument):
* runtime/RegExpObjectInlines.h:
(JSC::getRegExpObjectLastIndexAsUnsigned):
* runtime/StringPrototype.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
(JSC::stringIndexOfImpl):
(JSC::stringIncludesImpl):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (272470 => 272471)


--- trunk/Source/_javascript_Core/ChangeLog	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/ChangeLog	2021-02-07 11:13:28 UTC (rev 272471)
@@ -1,3 +1,62 @@
+2021-02-07  Yusuke Suzuki  <[email protected]>
+
+        [JSC] Replace toInteger with toIntegerOrInfinity
+        https://bugs.webkit.org/show_bug.cgi?id=218642
+
+        Reviewed by Alexey Shvayka.
+
+        In ECMA262 spec, ToInteger abstract operation is replaced with ToIntegerOrInfinity.
+        This patch renames toInteger to toIntegerOrInfinity in JSC.
+
+        * builtins/ArrayPrototype.js:
+        (fill):
+        (includes):
+        (copyWithin):
+        (flat):
+        (at):
+        * builtins/FunctionPrototype.js:
+        (bind):
+        * builtins/GlobalOperations.js:
+        (globalPrivate.toIntegerOrInfinity):
+        (globalPrivate.toLength):
+        (globalPrivate.toInteger): Deleted.
+        * builtins/RegExpPrototype.js:
+        (overriddenName.string_appeared_here.replace):
+        * builtins/StringPrototype.js:
+        (repeat):
+        (at):
+        * builtins/TypedArrayPrototype.js:
+        (subarray):
+        (at):
+        * inspector/JSInjectedScriptHost.cpp:
+        (Inspector::JSInjectedScriptHost::weakMapEntries):
+        (Inspector::JSInjectedScriptHost::weakSetEntries):
+        (Inspector::JSInjectedScriptHost::iteratorEntries):
+        * runtime/ArrayPrototype.cpp:
+        (JSC::argumentClampedIndexFromStartOrEnd):
+        (JSC::JSC_DEFINE_HOST_FUNCTION):
+        * runtime/IntlSegments.cpp:
+        (JSC::IntlSegments::containing):
+        * runtime/JSCJSValue.cpp:
+        (JSC::JSValue::toIntegerOrInfinity const):
+        (JSC::JSValue::toLength const):
+        (JSC::JSValue::toInteger const): Deleted.
+        * runtime/JSCJSValue.h:
+        * runtime/JSCJSValueInlines.h:
+        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
+        (JSC::argumentClampedIndexFromStartOrEnd):
+        (JSC::genericTypedArrayViewProtoFuncSet):
+        (JSC::genericTypedArrayViewProtoFuncLastIndexOf):
+        * runtime/NumberPrototype.cpp:
+        (JSC::JSC_DEFINE_HOST_FUNCTION):
+        (JSC::extractToStringRadixArgument):
+        * runtime/RegExpObjectInlines.h:
+        (JSC::getRegExpObjectLastIndexAsUnsigned):
+        * runtime/StringPrototype.cpp:
+        (JSC::JSC_DEFINE_HOST_FUNCTION):
+        (JSC::stringIndexOfImpl):
+        (JSC::stringIncludesImpl):
+
 2021-02-06  Alexey Shvayka  <[email protected]>
 
         REGRESSION (r264574): Unchecked JS exception in validateAndApplyPropertyDescriptor()

Modified: trunk/Source/_javascript_Core/builtins/ArrayPrototype.js (272470 => 272471)


--- trunk/Source/_javascript_Core/builtins/ArrayPrototype.js	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/builtins/ArrayPrototype.js	2021-02-07 11:13:28 UTC (rev 272471)
@@ -205,7 +205,7 @@
     var array = @toObject(this, "Array.prototype.fill requires that |this| not be null or undefined");
     var length = @toLength(array.length);
 
-    var relativeStart = @toInteger(@argument(1));
+    var relativeStart = @toIntegerOrInfinity(@argument(1));
     var k = 0;
     if (relativeStart < 0) {
         k = length + relativeStart;
@@ -219,7 +219,7 @@
     var relativeEnd = length;
     var end = @argument(2);
     if (end !== @undefined)
-        relativeEnd = @toInteger(end);
+        relativeEnd = @toIntegerOrInfinity(end);
     var final = 0;
     if (relativeEnd < 0) {
         final = length + relativeEnd;
@@ -285,7 +285,7 @@
     var fromIndex = 0;
     var from = @argument(1);
     if (from !== @undefined)
-        fromIndex = @toInteger(from);
+        fromIndex = @toIntegerOrInfinity(from);
 
     var index;
     if (fromIndex >= 0)
@@ -576,10 +576,10 @@
     var array = @toObject(this, "Array.prototype.copyWithin requires that |this| not be null or undefined");
     var length = @toLength(array.length);
 
-    var relativeTarget = @toInteger(target);
+    var relativeTarget = @toIntegerOrInfinity(target);
     var to = (relativeTarget < 0) ? maxWithPositives(length + relativeTarget, 0) : minWithMaybeNegativeZeroAndPositive(relativeTarget, length);
 
-    var relativeStart = @toInteger(start);
+    var relativeStart = @toIntegerOrInfinity(start);
     var from = (relativeStart < 0) ? maxWithPositives(length + relativeStart, 0) : minWithMaybeNegativeZeroAndPositive(relativeStart, length);
 
     var relativeEnd;
@@ -587,7 +587,7 @@
     if (end === @undefined)
         relativeEnd = length;
     else
-        relativeEnd = @toInteger(end);
+        relativeEnd = @toIntegerOrInfinity(end);
 
     var finalValue = (relativeEnd < 0) ? maxWithPositives(length + relativeEnd, 0) : minWithMaybeNegativeZeroAndPositive(relativeEnd, length);
 
@@ -641,7 +641,7 @@
     var depthNum = 1;
     var depth = @argument(0);
     if (depth !== @undefined)
-        depthNum = @toInteger(depth);
+        depthNum = @toIntegerOrInfinity(depth);
 
     var result = @arraySpeciesCreate(array, 0);
 
@@ -694,7 +694,7 @@
     var array = @toObject(this, "Array.prototype.at requires that |this| not be null or undefined");
     var length = @toLength(array.length);
 
-    var k = @toInteger(index);
+    var k = @toIntegerOrInfinity(index);
     if (k < 0)
         k += length;
 

Modified: trunk/Source/_javascript_Core/builtins/FunctionPrototype.js (272470 => 272471)


--- trunk/Source/_javascript_Core/builtins/FunctionPrototype.js	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/builtins/FunctionPrototype.js	2021-02-07 11:13:28 UTC (rev 272471)
@@ -77,7 +77,7 @@
     if (@hasOwnLengthProperty(target)) {
         var lengthValue = target.length;
         if (typeof lengthValue === "number") {
-            lengthValue = @toInteger(lengthValue);
+            lengthValue = @toIntegerOrInfinity(lengthValue);
             // Note that we only care about positive lengthValues, however, this comparision
             // against numBoundArgs suffices to prove we're not a negative number.
             if (lengthValue > numBoundArgs)

Modified: trunk/Source/_javascript_Core/builtins/GlobalOperations.js (272470 => 272471)


--- trunk/Source/_javascript_Core/builtins/GlobalOperations.js	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/builtins/GlobalOperations.js	2021-02-07 11:13:28 UTC (rev 272471)
@@ -27,14 +27,14 @@
 // @internal
 
 @globalPrivate
-function toInteger(target)
+function toIntegerOrInfinity(target)
 {
     "use strict";
 
     var numberValue = +target;
 
-    // isNaN(numberValue)
-    if (numberValue !== numberValue)
+    // isNaN(numberValue) or 0
+    if (numberValue !== numberValue || !numberValue)
         return 0;
     return @trunc(numberValue);
 }
@@ -44,7 +44,7 @@
 {
     "use strict";
 
-    var length = @toInteger(target);
+    var length = @toIntegerOrInfinity(target);
     // originally Math.min(Math.max(length, 0), maxSafeInteger));
     return +(length > 0 ? (length < @MAX_SAFE_INTEGER ? length : @MAX_SAFE_INTEGER) : 0);
 }

Modified: trunk/Source/_javascript_Core/builtins/RegExpPrototype.js (272470 => 272471)


--- trunk/Source/_javascript_Core/builtins/RegExpPrototype.js	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/builtins/RegExpPrototype.js	2021-02-07 11:13:28 UTC (rev 272471)
@@ -331,7 +331,7 @@
             nCaptures = 0;
         var matched = @toString(result[0]);
         var matchLength = matched.length;
-        var position = @toInteger(result.index);
+        var position = @toIntegerOrInfinity(result.index);
         position = (position > stringLength) ? stringLength : position;
         position = (position < 0) ? 0 : position;
 

Modified: trunk/Source/_javascript_Core/builtins/StringPrototype.js (272470 => 272471)


--- trunk/Source/_javascript_Core/builtins/StringPrototype.js	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/builtins/StringPrototype.js	2021-02-07 11:13:28 UTC (rev 272471)
@@ -126,7 +126,7 @@
         @throwTypeError("String.prototype.repeat requires that |this| not be null or undefined");
 
     var string = @toString(this);
-    count = @toInteger(count);
+    count = @toIntegerOrInfinity(count);
 
     if (count < 0 || count === @Infinity)
         @throwRangeError("String.prototype.repeat argument must be greater than or equal to 0 and not be Infinity");
@@ -352,7 +352,7 @@
     var string = @toString(this);   
     var length = string.length; 
 
-    var k = @toInteger(index);  
+    var k = @toIntegerOrInfinity(index);  
     if (k < 0)  
         k += length;    
 

Modified: trunk/Source/_javascript_Core/builtins/TypedArrayPrototype.js (272470 => 272471)


--- trunk/Source/_javascript_Core/builtins/TypedArrayPrototype.js	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/builtins/TypedArrayPrototype.js	2021-02-07 11:13:28 UTC (rev 272471)
@@ -222,10 +222,10 @@
     if (!@isTypedArrayView(this))
         @throwTypeError("|this| should be a typed array view");
 
-    var start = @toInteger(begin);
+    var start = @toIntegerOrInfinity(begin);
     var finish;
     if (end !== @undefined)
-        finish = @toInteger(end);
+        finish = @toIntegerOrInfinity(end);
 
     var constructor = @typedArraySpeciesConstructor(this);
 
@@ -364,7 +364,7 @@
 
     var length = @typedArrayLength(this);
 
-    var k = @toInteger(index);
+    var k = @toIntegerOrInfinity(index);
     if (k < 0)
         k += length;
 

Modified: trunk/Source/_javascript_Core/inspector/JSInjectedScriptHost.cpp (272470 => 272471)


--- trunk/Source/_javascript_Core/inspector/JSInjectedScriptHost.cpp	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/inspector/JSInjectedScriptHost.cpp	2021-02-07 11:13:28 UTC (rev 272471)
@@ -470,7 +470,7 @@
         return jsUndefined();
 
     MarkedArgumentBuffer buffer;
-    auto fetchCount = callFrame->argument(1).toInteger(globalObject);
+    auto fetchCount = callFrame->argument(1).toIntegerOrInfinity(globalObject);
     weakMap->takeSnapshot(buffer, fetchCount >= 0 ? static_cast<unsigned>(fetchCount) : 0);
     ASSERT(!buffer.hasOverflowed());
 
@@ -514,7 +514,7 @@
         return jsUndefined();
 
     MarkedArgumentBuffer buffer;
-    auto fetchCount = callFrame->argument(1).toInteger(globalObject);
+    auto fetchCount = callFrame->argument(1).toIntegerOrInfinity(globalObject);
     weakSet->takeSnapshot(buffer, fetchCount >= 0 ? static_cast<unsigned>(fetchCount) : 0);
     ASSERT(!buffer.hasOverflowed());
 
@@ -592,7 +592,7 @@
 
     unsigned numberToFetch = 5;
     JSValue numberToFetchArg = callFrame->argument(1);
-    double fetchDouble = numberToFetchArg.toInteger(globalObject);
+    double fetchDouble = numberToFetchArg.toIntegerOrInfinity(globalObject);
     RETURN_IF_EXCEPTION(scope, { });
     if (fetchDouble >= 0)
         numberToFetch = static_cast<unsigned>(fetchDouble);

Modified: trunk/Source/_javascript_Core/runtime/ArrayPrototype.cpp (272470 => 272471)


--- trunk/Source/_javascript_Core/runtime/ArrayPrototype.cpp	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/runtime/ArrayPrototype.cpp	2021-02-07 11:13:28 UTC (rev 272471)
@@ -287,7 +287,7 @@
     if (value.isUndefined())
         return undefinedValue;
 
-    double indexDouble = value.toInteger(globalObject);
+    double indexDouble = value.toIntegerOrInfinity(globalObject);
     if (indexDouble < 0) {
         indexDouble += length;
         return indexDouble < 0 ? 0 : static_cast<uint64_t>(indexDouble);
@@ -1167,7 +1167,7 @@
 
     uint64_t actualDeleteCount = length - actualStart;
     if (callFrame->argumentCount() > 1) {
-        double deleteCount = callFrame->uncheckedArgument(1).toInteger(globalObject);
+        double deleteCount = callFrame->uncheckedArgument(1).toIntegerOrInfinity(globalObject);
         RETURN_IF_EXCEPTION(scope, encodedJSValue());
         if (deleteCount < 0)
             actualDeleteCount = 0;
@@ -1427,7 +1427,7 @@
     uint64_t index = length - 1;
     if (callFrame->argumentCount() >= 2) {
         JSValue fromValue = callFrame->uncheckedArgument(1);
-        double fromDouble = fromValue.toInteger(globalObject);
+        double fromDouble = fromValue.toIntegerOrInfinity(globalObject);
         RETURN_IF_EXCEPTION(scope, { });
         if (fromDouble < 0) {
             fromDouble += length;

Modified: trunk/Source/_javascript_Core/runtime/IntlSegments.cpp (272470 => 272471)


--- trunk/Source/_javascript_Core/runtime/IntlSegments.cpp	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/runtime/IntlSegments.cpp	2021-02-07 11:13:28 UTC (rev 272471)
@@ -71,7 +71,7 @@
     VM& vm = globalObject->vm();
     auto scope = DECLARE_THROW_SCOPE(vm);
 
-    double value = indexValue.toInteger(globalObject);
+    double value = indexValue.toIntegerOrInfinity(globalObject);
     RETURN_IF_EXCEPTION(scope, { });
 
     if (value < 0 || value >= m_buffer->size())

Modified: trunk/Source/_javascript_Core/runtime/JSCJSValue.cpp (272470 => 272471)


--- trunk/Source/_javascript_Core/runtime/JSCJSValue.cpp	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/runtime/JSCJSValue.cpp	2021-02-07 11:13:28 UTC (rev 272471)
@@ -35,15 +35,6 @@
 
 namespace JSC {
 
-// ECMA 9.4
-double JSValue::toInteger(JSGlobalObject* globalObject) const
-{
-    if (isInt32())
-        return asInt32();
-    double d = toNumber(globalObject);
-    return std::isnan(d) ? 0.0 : trunc(d);
-}
-
 double JSValue::toIntegerPreserveNaN(JSGlobalObject* globalObject) const
 {
     if (isInt32())
@@ -55,7 +46,7 @@
 {
     // ECMA 7.1.15
     // http://www.ecma-international.org/ecma-262/6.0/#sec-tolength
-    double d = toInteger(globalObject);
+    double d = toIntegerOrInfinity(globalObject);
     if (d <= 0)
         return 0.0;
     if (std::isinf(d))

Modified: trunk/Source/_javascript_Core/runtime/JSCJSValue.h (272470 => 272471)


--- trunk/Source/_javascript_Core/runtime/JSCJSValue.h	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/runtime/JSCJSValue.h	2021-02-07 11:13:28 UTC (rev 272471)
@@ -290,7 +290,6 @@
     JSObject* toObject(JSGlobalObject*) const;
 
     // Integer conversions.
-    JS_EXPORT_PRIVATE double toInteger(JSGlobalObject*) const;
     JS_EXPORT_PRIVATE double toIntegerPreserveNaN(JSGlobalObject*) const;
     double toIntegerOrInfinity(JSGlobalObject*) const;
     int32_t toInt32(JSGlobalObject*) const;

Modified: trunk/Source/_javascript_Core/runtime/JSCJSValueInlines.h (272470 => 272471)


--- trunk/Source/_javascript_Core/runtime/JSCJSValueInlines.h	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/runtime/JSCJSValueInlines.h	2021-02-07 11:13:28 UTC (rev 272471)
@@ -80,8 +80,6 @@
 }
 
 // https://tc39.es/ecma262/#sec-tointegerorinfinity
-// FIXME: We will replace toInteger with toIntegerOrInfinity. The difference is that toIntegerOrInfinity will convert -0 to +0.
-// https://bugs.webkit.org/show_bug.cgi?id=218642
 inline double JSValue::toIntegerOrInfinity(JSGlobalObject* globalObject) const
 {
     if (isInt32())

Modified: trunk/Source/_javascript_Core/runtime/JSGenericTypedArrayViewPrototypeFunctions.h (272470 => 272471)


--- trunk/Source/_javascript_Core/runtime/JSGenericTypedArrayViewPrototypeFunctions.h	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/runtime/JSGenericTypedArrayViewPrototypeFunctions.h	2021-02-07 11:13:28 UTC (rev 272471)
@@ -91,7 +91,7 @@
     if (value.isUndefined())
         return undefinedValue;
 
-    double indexDouble = value.toInteger(globalObject);
+    double indexDouble = value.toIntegerOrInfinity(globalObject);
     if (indexDouble < 0) {
         indexDouble += length;
         return indexDouble < 0 ? 0 : static_cast<unsigned>(indexDouble);
@@ -112,7 +112,7 @@
 
     unsigned offset;
     if (callFrame->argumentCount() >= 2) {
-        double offsetNumber = callFrame->uncheckedArgument(1).toInteger(globalObject);
+        double offsetNumber = callFrame->uncheckedArgument(1).toIntegerOrInfinity(globalObject);
         RETURN_IF_EXCEPTION(scope, encodedJSValue());
         if (UNLIKELY(offsetNumber < 0))
             return throwVMRangeError(globalObject, scope, "Offset should not be negative");
@@ -355,7 +355,7 @@
     int index = length - 1;
     if (callFrame->argumentCount() >= 2) {
         JSValue fromValue = callFrame->uncheckedArgument(1);
-        double fromDouble = fromValue.toInteger(globalObject);
+        double fromDouble = fromValue.toIntegerOrInfinity(globalObject);
         RETURN_IF_EXCEPTION(scope, encodedJSValue());
         if (fromDouble < 0) {
             fromDouble += length;

Modified: trunk/Source/_javascript_Core/runtime/NumberPrototype.cpp (272470 => 272471)


--- trunk/Source/_javascript_Core/runtime/NumberPrototype.cpp	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/runtime/NumberPrototype.cpp	2021-02-07 11:13:28 UTC (rev 272471)
@@ -393,7 +393,7 @@
 
     JSValue arg = callFrame->argument(0);
     // Perform ToInteger on the argument before remaining steps.
-    int decimalPlaces = static_cast<int>(arg.toInteger(globalObject));
+    int decimalPlaces = static_cast<int>(arg.toIntegerOrInfinity(globalObject));
     RETURN_IF_EXCEPTION(scope, { });
 
     // Handle NaN and Infinity.
@@ -428,7 +428,7 @@
     if (!toThisNumber(vm, callFrame->thisValue(), x))
         return throwVMToThisNumberError(globalObject, scope, callFrame->thisValue());
 
-    int decimalPlaces = static_cast<int>(callFrame->argument(0).toInteger(globalObject));
+    int decimalPlaces = static_cast<int>(callFrame->argument(0).toIntegerOrInfinity(globalObject));
     RETURN_IF_EXCEPTION(scope, { });
     if (decimalPlaces < 0 || decimalPlaces > 100)
         return throwVMRangeError(globalObject, scope, "toFixed() argument must be between 0 and 100"_s);
@@ -468,7 +468,7 @@
         return JSValue::encode(jsString(vm, String::number(x)));
 
     // Perform ToInteger on the argument before remaining steps.
-    int significantFigures = static_cast<int>(arg.toInteger(globalObject));
+    int significantFigures = static_cast<int>(arg.toIntegerOrInfinity(globalObject));
     RETURN_IF_EXCEPTION(scope, { });
 
     // Handle NaN and Infinity.
@@ -601,7 +601,7 @@
         if (radix >= 2 && radix <= 36)
             return radix;
     } else {
-        double radixDouble = radixValue.toInteger(globalObject);
+        double radixDouble = radixValue.toIntegerOrInfinity(globalObject);
         RETURN_IF_EXCEPTION(throwScope, 0);
         if (radixDouble >= 2 && radixDouble <= 36)
             return static_cast<int32_t>(radixDouble);   

Modified: trunk/Source/_javascript_Core/runtime/RegExpObjectInlines.h (272470 => 272471)


--- trunk/Source/_javascript_Core/runtime/RegExpObjectInlines.h	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/runtime/RegExpObjectInlines.h	2021-02-07 11:13:28 UTC (rev 272471)
@@ -45,7 +45,7 @@
         if (lastIndex > input.length())
             return UINT_MAX;
     } else {
-        double doubleLastIndex = jsLastIndex.toInteger(globalObject);
+        double doubleLastIndex = jsLastIndex.toIntegerOrInfinity(globalObject);
         RETURN_IF_EXCEPTION(scope, UINT_MAX);
         if (doubleLastIndex > input.length())
             return UINT_MAX;

Modified: trunk/Source/_javascript_Core/runtime/StringPrototype.cpp (272470 => 272471)


--- trunk/Source/_javascript_Core/runtime/StringPrototype.cpp	2021-02-07 06:08:07 UTC (rev 272470)
+++ trunk/Source/_javascript_Core/runtime/StringPrototype.cpp	2021-02-07 11:13:28 UTC (rev 272471)
@@ -994,7 +994,7 @@
             return JSValue::encode(jsSingleCharacterString(vm, view[i]));
         return JSValue::encode(jsEmptyString(vm));
     }
-    double dpos = a0.toInteger(globalObject);
+    double dpos = a0.toIntegerOrInfinity(globalObject);
     RETURN_IF_EXCEPTION(scope, { });
     if (dpos >= 0 && dpos < view.length())
         return JSValue::encode(jsSingleCharacterString(vm, view[static_cast<unsigned>(dpos)]));
@@ -1021,7 +1021,7 @@
             return JSValue::encode(jsNumber(view[i]));
         return JSValue::encode(jsNaN());
     }
-    double dpos = a0.toInteger(globalObject);
+    double dpos = a0.toIntegerOrInfinity(globalObject);
     RETURN_IF_EXCEPTION(scope, { });
     if (dpos >= 0 && dpos < view.length())
         return JSValue::encode(jsNumber(view[static_cast<int>(dpos)]));
@@ -1061,7 +1061,7 @@
 
     RETURN_IF_EXCEPTION(scope, encodedJSValue());
 
-    double doublePosition = argument0.toInteger(globalObject);
+    double doublePosition = argument0.toIntegerOrInfinity(globalObject);
     RETURN_IF_EXCEPTION(scope, encodedJSValue());
     if (doublePosition >= 0 && doublePosition < length)
         return JSValue::encode(jsNumber(codePointAt(string, static_cast<unsigned>(doublePosition), length)));
@@ -1092,7 +1092,7 @@
         if (a1.isUInt32())
             pos = std::min<uint32_t>(a1.asUInt32(), len);
         else {
-            double dpos = a1.toInteger(globalObject);
+            double dpos = a1.toIntegerOrInfinity(globalObject);
             RETURN_IF_EXCEPTION(scope, encodedJSValue());
             if (dpos < 0)
                 dpos = 0;
@@ -1191,9 +1191,9 @@
     RELEASE_ASSERT(length >= 0);
 
     // The arg processing is very much like ArrayProtoFunc::Slice
-    double start = a0.toInteger(globalObject);
+    double start = a0.toIntegerOrInfinity(globalObject);
     RETURN_IF_EXCEPTION(scope, encodedJSValue());
-    double end = a1.isUndefined() ? length : a1.toInteger(globalObject);
+    double end = a1.isUndefined() ? length : a1.toIntegerOrInfinity(globalObject);
     RETURN_IF_EXCEPTION(scope, encodedJSValue());
     RELEASE_AND_RETURN(scope, JSValue::encode(stringSlice(globalObject, vm, string, length, start, end)));
 }
@@ -1393,9 +1393,9 @@
     JSValue a0 = callFrame->argument(0);
     JSValue a1 = callFrame->argument(1);
 
-    double start = a0.toInteger(globalObject);
+    double start = a0.toIntegerOrInfinity(globalObject);
     RETURN_IF_EXCEPTION(scope, encodedJSValue());
-    double length = a1.isUndefined() ? len : a1.toInteger(globalObject);
+    double length = a1.isUndefined() ? len : a1.toIntegerOrInfinity(globalObject);
     RETURN_IF_EXCEPTION(scope, encodedJSValue());
     if (start >= len || length <= 0)
         return JSValue::encode(jsEmptyString(vm));
@@ -1731,7 +1731,7 @@
         start = std::max(0, positionArg.asInt32());
     else {
         unsigned length = stringToSearchIn.length();
-        start = clampAndTruncateToUnsigned(positionArg.toInteger(globalObject), 0, length);
+        start = clampAndTruncateToUnsigned(positionArg.toIntegerOrInfinity(globalObject), 0, length);
         RETURN_IF_EXCEPTION(scope, encodedJSValue());
     }
 
@@ -1766,7 +1766,7 @@
     if (endPositionArg.isInt32())
         end = std::max(0, endPositionArg.asInt32());
     else if (!endPositionArg.isUndefined()) {
-        end = clampAndTruncateToUnsigned(endPositionArg.toInteger(globalObject), 0, length);
+        end = clampAndTruncateToUnsigned(endPositionArg.toIntegerOrInfinity(globalObject), 0, length);
         RETURN_IF_EXCEPTION(scope, encodedJSValue());
     }
 
@@ -1781,7 +1781,7 @@
         start = std::max(0, positionArg.asInt32());
     else {
         unsigned length = stringToSearchIn.length();
-        start = clampAndTruncateToUnsigned(positionArg.toInteger(globalObject), 0, length);
+        start = clampAndTruncateToUnsigned(positionArg.toIntegerOrInfinity(globalObject), 0, length);
         RETURN_IF_EXCEPTION(scope, encodedJSValue());
     }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to