diff --git a/rhino/src/main/java/org/mozilla/javascript/NativeArray.java b/rhino/src/main/java/org/mozilla/javascript/NativeArray.java index 79ce0ed70f..6a306536a7 100644 --- a/rhino/src/main/java/org/mozilla/javascript/NativeArray.java +++ b/rhino/src/main/java/org/mozilla/javascript/NativeArray.java @@ -1947,10 +1947,9 @@ private static Object js_lastIndexOf( */ private static Boolean js_includes( Context cx, Scriptable scope, Scriptable thisObj, Object[] args) { - Object compareTo = args.length > 0 ? args[0] : Undefined.instance; Scriptable o = ScriptRuntime.toObject(cx, scope, thisObj); - long len = ScriptRuntime.toLength(new Object[] {getProperty(thisObj, "length")}, 0); + long len = getLengthProperty(cx, o); if (len == 0) return Boolean.FALSE; long k; @@ -1964,6 +1963,8 @@ private static Boolean js_includes( } if (k > len - 1) return Boolean.FALSE; } + + Object compareTo = args.length > 0 ? args[0] : Undefined.instance; if (o instanceof NativeArray) { NativeArray na = (NativeArray) o; if (na.denseOnly) { diff --git a/rhino/src/main/java/org/mozilla/javascript/ScriptRuntime.java b/rhino/src/main/java/org/mozilla/javascript/ScriptRuntime.java index 4e3a97c7d4..19d7248ce8 100644 --- a/rhino/src/main/java/org/mozilla/javascript/ScriptRuntime.java +++ b/rhino/src/main/java/org/mozilla/javascript/ScriptRuntime.java @@ -436,15 +436,10 @@ public static double toNumber(Object val) { if (val instanceof String) return toNumber((String) val); if (val instanceof CharSequence) return toNumber(val.toString()); if (val instanceof Boolean) return ((Boolean) val).booleanValue() ? 1 : +0.0; - if (val instanceof Symbol) throw typeErrorById("msg.not.a.number"); - if (val instanceof Scriptable) { - val = ((Scriptable) val).getDefaultValue(NumberClass); - if ((val instanceof Scriptable) && !isSymbol(val)) - throw errorWithClassName("msg.primitive.expected", val); - continue; - } - warnAboutNonJSObject(val); - return NaN; + if (isSymbol(val)) throw typeErrorById("msg.not.a.number"); + // Assert: val is an Object + val = toPrimitive(val, NumberClass); + // Assert: val is a primitive } } @@ -713,56 +708,45 @@ public static double toNumber(String s) { /** Convert the value to a BigInt. */ public static BigInteger toBigInt(Object val) { - for (; ; ) { - if (val instanceof BigInteger) { - return (BigInteger) val; - } - if (val instanceof BigDecimal) { - return ((BigDecimal) val).toBigInteger(); - } - if (val instanceof Number) { - if (val instanceof Long) { - return BigInteger.valueOf(((Long) val)); - } else { - double d = ((Number) val).doubleValue(); - if (Double.isNaN(d) || Double.isInfinite(d)) { - throw rangeErrorById( - "msg.cant.convert.to.bigint.isnt.integer", toString(val)); - } - BigDecimal bd = new BigDecimal(d, MathContext.UNLIMITED); - try { - return bd.toBigIntegerExact(); - } catch (ArithmeticException e) { - throw rangeErrorById( - "msg.cant.convert.to.bigint.isnt.integer", toString(val)); - } + val = toPrimitive(val, NumberClass); + if (val instanceof BigInteger) { + return (BigInteger) val; + } + if (val instanceof BigDecimal) { + return ((BigDecimal) val).toBigInteger(); + } + if (val instanceof Number) { + if (val instanceof Long) { + return BigInteger.valueOf(((Long) val)); + } else { + double d = ((Number) val).doubleValue(); + if (Double.isNaN(d) || Double.isInfinite(d)) { + throw rangeErrorById("msg.cant.convert.to.bigint.isnt.integer", toString(val)); } - } - if (val == null || Undefined.isUndefined(val)) { - throw typeErrorById("msg.cant.convert.to.bigint", toString(val)); - } - if (val instanceof String) { - return toBigInt((String) val); - } - if (val instanceof CharSequence) { - return toBigInt(val.toString()); - } - if (val instanceof Boolean) { - return ((Boolean) val).booleanValue() ? BigInteger.ONE : BigInteger.ZERO; - } - if (val instanceof Symbol) { - throw typeErrorById("msg.cant.convert.to.bigint", toString(val)); - } - if (val instanceof Scriptable) { - val = ((Scriptable) val).getDefaultValue(BigIntegerClass); - if ((val instanceof Scriptable) && !isSymbol(val)) { - throw errorWithClassName("msg.primitive.expected", val); + BigDecimal bd = new BigDecimal(d, MathContext.UNLIMITED); + try { + return bd.toBigIntegerExact(); + } catch (ArithmeticException e) { + throw rangeErrorById("msg.cant.convert.to.bigint.isnt.integer", toString(val)); } - continue; } - warnAboutNonJSObject(val); - return BigInteger.ZERO; } + if (val == null || Undefined.isUndefined(val)) { + throw typeErrorById("msg.cant.convert.to.bigint", toString(val)); + } + if (val instanceof String) { + return toBigInt((String) val); + } + if (val instanceof CharSequence) { + return toBigInt(val.toString()); + } + if (val instanceof Boolean) { + return ((Boolean) val).booleanValue() ? BigInteger.ONE : BigInteger.ZERO; + } + if (isSymbol(val)) { + throw typeErrorById("msg.cant.convert.to.bigint", toString(val)); + } + throw errorWithClassName("msg.primitive.expected", val); } /** ToBigInt applied to the String type */ @@ -841,6 +825,7 @@ public static BigInteger toBigInt(String s) { *

See ECMA 7.1.3 (v11.0). */ public static Number toNumeric(Object val) { + val = toPrimitive(val, NumberClass); if (val instanceof Number) { return (Number) val; } @@ -1027,24 +1012,22 @@ public static String toString(Object val) { return val.toString(); } if (val instanceof BigInteger) { - return val.toString(); + return ((BigInteger) val).toString(10); } if (val instanceof Number) { // XXX should we just teach NativeNumber.stringValue() // about Numbers? return numberToString(((Number) val).doubleValue(), 10); } - if (val instanceof Symbol) { - throw typeErrorById("msg.not.a.string"); + if (val instanceof Boolean) { + return val.toString(); } - if (val instanceof Scriptable) { - val = ((Scriptable) val).getDefaultValue(StringClass); - if ((val instanceof Scriptable) && !isSymbol(val)) { - throw errorWithClassName("msg.primitive.expected", val); - } - continue; + if (isSymbol(val)) { + throw typeErrorById("msg.not.a.string"); } - return val.toString(); + // Assert: val is an Object + val = toPrimitive(val, StringClass); + // Assert: val is a primitive } } @@ -3552,13 +3535,11 @@ public static Object toPrimitive(Object input) { } /** - * 1. If input is an Object, then a. Let exoticToPrim be ? GetMethod(input, @@toPrimitive). b. - * If exoticToPrim is not undefined, then i. If preferredType is not present, then 1. Let hint - * be "default". ii. Else if preferredType is string, then 1. Let hint be "string". iii. Else, - * 1. Assert: preferredType is number. 2. Let hint be "number". iv. Let result be ? - * Call(exoticToPrim, input, « hint »). v. If result is not an Object, return result. vi. Throw - * a TypeError exception. c. If preferredType is not present, let preferredType be number. d. - * Return ? OrdinaryToPrimitive(input, preferredType). 2. Return input. + * The abstract operation ToPrimitive takes argument input (an ECMAScript language value) and + * optional argument preferredType (string or number) and returns either a normal completion + * containing an ECMAScript language value or a throw completion. It converts its input argument + * to a non-Object type. If an object is capable of converting to more than one primitive type, + * it may use the optional hint preferredType to favour that type. * * @param input * @param preferredType @@ -3566,11 +3547,36 @@ public static Object toPrimitive(Object input) { * @see */ public static Object toPrimitive(Object input, Class preferredType) { - if (!isObject(input)) { + // 1. If input is an Object, then + // a. Let exoticToPrim be ? GetMethod(input, @@toPrimitive). + // b. If exoticToPrim is not undefined, then + // i. If preferredType is not present, then + // 1. Let hint be "default". + // ii. Else if preferredType is string, then + // 1. Let hint be "string". + // iii. Else, + // 1. Assert: preferredType is number. + // 2. Let hint be "number". + // iv. Let result be ? Call(exoticToPrim, input, « hint »). + // v. If result is not an Object, return result. + // vi. Throw a TypeError exception. + // c. If preferredType is not present, let preferredType be number. + // d. Return ? OrdinaryToPrimitive(input, preferredType). + // 2. Return input. + + // do not return on Scriptable's here; we like to fall back to our + // default impl getDefaultValue() for them + if (!(input instanceof Scriptable) && !isObject(input)) { return input; } + final Scriptable s = (Scriptable) input; - final Object exoticToPrim = ScriptableObject.getProperty(s, SymbolKey.TO_PRIMITIVE); + // to be backward compatible: getProperty(Scriptable obj, Symbol key) + // throws if obj is not a SymbolScriptable + Object exoticToPrim = null; + if (s instanceof SymbolScriptable) { + exoticToPrim = ScriptableObject.getProperty(s, SymbolKey.TO_PRIMITIVE); + } if (exoticToPrim instanceof Function) { final Function func = (Function) exoticToPrim; final Context cx = Context.getCurrentContext(); @@ -3589,10 +3595,12 @@ public static Object toPrimitive(Object input, Class preferredType) { } return result; } - if (!Undefined.isUndefined(exoticToPrim) && exoticToPrim != Scriptable.NOT_FOUND) { + if (exoticToPrim != null + && exoticToPrim != Scriptable.NOT_FOUND + && !Undefined.isUndefined(exoticToPrim)) { throw notFunctionError(exoticToPrim); } - final Class defaultValueHint = preferredType == null ? preferredType : NumberClass; + final Class defaultValueHint = preferredType == null ? NumberClass : preferredType; final Object result = s.getDefaultValue(defaultValueHint); if ((result instanceof Scriptable) && !isSymbol(result)) throw typeErrorById("msg.bad.default.value"); diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/IterableTest.java b/rhino/src/test/java/org/mozilla/javascript/tests/IterableTest.java index ae9886ae4b..157ed273c3 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/IterableTest.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/IterableTest.java @@ -288,6 +288,9 @@ public SymbolFooBoilerplate(final Scriptable scope) { @Override public Object get(Symbol key, Scriptable start) { + if (SymbolKey.TO_PRIMITIVE == key) { + return null; + } throw new UnsupportedOperationException( "Not supported yet."); // To change body of generated methods, choose Tools | // Templates. diff --git a/tests/src/test/java/org/mozilla/javascript/tests/es6/NativeArray2Test.java b/tests/src/test/java/org/mozilla/javascript/tests/es6/NativeArray2Test.java index 080ca0ba98..11c5f8684e 100644 --- a/tests/src/test/java/org/mozilla/javascript/tests/es6/NativeArray2Test.java +++ b/tests/src/test/java/org/mozilla/javascript/tests/es6/NativeArray2Test.java @@ -1,32 +1,11 @@ package org.mozilla.javascript.tests.es6; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import org.junit.After; -import org.junit.Before; import org.junit.Test; -import org.mozilla.javascript.Context; -import org.mozilla.javascript.ScriptableObject; +import org.mozilla.javascript.tests.Utils; /** Test for NativeArray. */ public class NativeArray2Test { - private Context cx; - private ScriptableObject scope; - - @Before - public void setUp() { - cx = Context.enter(); - cx.setLanguageVersion(Context.VERSION_ES6); - scope = cx.initStandardObjects(); - } - - @After - public void tearDown() { - Context.exit(); - } - @Test public void concatLimitSpreadable() { String js = @@ -39,8 +18,9 @@ public void concatLimitSpreadable() { + " '' + e;\n" + "};"; - String result = (String) cx.evaluateString(scope, js, "test", 1, null); - assertTrue(result.endsWith("exceeds supported capacity limit.")); + Utils.assertWithAllOptimizationLevelsES6( + "TypeError: Array length 9,007,199,254,740,992 exceeds supported capacity limit.", + js); } @Test @@ -59,7 +39,6 @@ public void concatLimitSpreadable2() { + " '' + e;\n" + "};"; - String result = (String) cx.evaluateString(scope, js, "test", 1, null); - assertEquals(result, "Error: get failed", result); + Utils.assertWithAllOptimizationLevelsES6("Error: get failed", js); } } diff --git a/tests/testsrc/test262.properties b/tests/testsrc/test262.properties index 386197f42e..2eff3ec3f8 100644 --- a/tests/testsrc/test262.properties +++ b/tests/testsrc/test262.properties @@ -27,7 +27,7 @@ harness 23/115 (20.0%) isConstructor.js {unsupported: [Reflect.construct]} nativeFunctionMatcher.js -built-ins/Array 383/3074 (12.46%) +built-ins/Array 382/3074 (12.43%) fromAsync 94/94 (100.0%) from/calling-from-valid-1-noStrict.js non-strict Spec pretty clearly says this should be undefined from/elements-deleted-after.js Checking to see if length changed, but spec says it should not @@ -135,7 +135,6 @@ built-ins/Array 383/3074 (12.46%) prototype/find/resizable-buffer.js {unsupported: [resizable-arraybuffer]} prototype/find/resizable-buffer-grow-mid-iteration.js {unsupported: [resizable-arraybuffer]} prototype/find/resizable-buffer-shrink-mid-iteration.js {unsupported: [resizable-arraybuffer]} - prototype/flatMap/array-like-objects-poisoned-length.js prototype/flatMap/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/flatMap/proxy-access-count.js prototype/flatMap/target-array-non-extensible.js @@ -383,26 +382,19 @@ built-ins/ArrayIteratorPrototype 1/27 (3.7%) ~built-ins/Atomics -built-ins/BigInt 21/75 (28.0%) +built-ins/BigInt 14/75 (18.67%) asIntN/bigint-tobigint-errors.js - asIntN/bigint-tobigint-toprimitive.js - asIntN/bigint-tobigint-wrapped-values.js asIntN/bits-toindex-errors.js - asIntN/bits-toindex-toprimitive.js asIntN/bits-toindex-wrapped-values.js asIntN/not-a-constructor.js {unsupported: [Reflect.construct]} asUintN/bigint-tobigint-errors.js - asUintN/bigint-tobigint-toprimitive.js - asUintN/bigint-tobigint-wrapped-values.js asUintN/bits-toindex-errors.js - asUintN/bits-toindex-toprimitive.js asUintN/bits-toindex-wrapped-values.js asUintN/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/toLocaleString/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/toString/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/toString/prototype-call.js Check IsInteger in ES2020, not IsSafeInteger, https://github.com/tc39/test262/commit/bf1b79d65a760a5f03df1198557da2d010f8f397#diff-3ecd6a0c50da5c8f8eff723afb6182a889b7315d99545b055559e22d302cc453 prototype/valueOf/not-a-constructor.js {unsupported: [Reflect.construct]} - constructor-coercion.js is-a-constructor.js {unsupported: [Reflect.construct]} wrapper-object-ordinary-toprimitive.js @@ -1071,11 +1063,9 @@ built-ins/Math 51/327 (15.6%) built-ins/NaN 0/6 (0.0%) -built-ins/NativeErrors 31/123 (25.2%) +built-ins/NativeErrors 29/123 (23.58%) AggregateError/errors-iterabletolist-failures.js AggregateError/is-a-constructor.js {unsupported: [Reflect.construct]} - AggregateError/message-tostring-abrupt.js - AggregateError/message-tostring-abrupt-symbol.js AggregateError/newtarget-proto-custom.js {unsupported: [Reflect.construct]} AggregateError/newtarget-proto-fallback.js AggregateError/proto-from-ctor-realm.js {unsupported: [Reflect]} @@ -1126,7 +1116,7 @@ built-ins/Number 24/335 (7.16%) S9.3.1_A3_T1_U180E.js {unsupported: [u180e]} S9.3.1_A3_T2_U180E.js {unsupported: [u180e]} -built-ins/Object 217/3408 (6.37%) +built-ins/Object 216/3408 (6.34%) assign/assignment-to-readonly-property-of-target-must-throw-a-typeerror-exception.js assign/not-a-constructor.js {unsupported: [Reflect.construct]} assign/source-own-prop-desc-missing.js {unsupported: [Proxy]} @@ -1196,7 +1186,6 @@ built-ins/Object 217/3408 (6.37%) freeze/throws-when-false.js freeze/typedarray-backed-by-resizable-buffer.js {unsupported: [resizable-arraybuffer]} fromEntries/not-a-constructor.js {unsupported: [Reflect.construct]} - fromEntries/to-property-key.js fromEntries/uses-keys-not-iterator.js getOwnPropertyDescriptors/not-a-constructor.js {unsupported: [Reflect.construct]} getOwnPropertyDescriptors/observable-operations.js {unsupported: [Proxy]} @@ -2192,7 +2181,7 @@ built-ins/SetIteratorPrototype 0/11 (0.0%) ~built-ins/SharedArrayBuffer -built-ins/String 128/1182 (10.83%) +built-ins/String 116/1182 (9.81%) fromCharCode/not-a-constructor.js {unsupported: [Reflect.construct]} fromCodePoint/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/charAt/not-a-constructor.js {unsupported: [Reflect.construct]} @@ -2204,13 +2193,8 @@ built-ins/String 128/1182 (10.83%) prototype/includes/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/includes/return-abrupt-from-searchstring-regexp-test.js prototype/indexOf/not-a-constructor.js {unsupported: [Reflect.construct]} - prototype/indexOf/position-tointeger-bigint.js prototype/indexOf/position-tointeger-errors.js - prototype/indexOf/position-tointeger-toprimitive.js prototype/indexOf/position-tointeger-wrapped-values.js - prototype/indexOf/searchstring-tostring-bigint.js - prototype/indexOf/searchstring-tostring-errors.js - prototype/indexOf/searchstring-tostring-toprimitive.js prototype/indexOf/searchstring-tostring-wrapped-values.js prototype/isWellFormed/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/isWellFormed/to-string-primitive.js @@ -2233,7 +2217,6 @@ built-ins/String 128/1182 (10.83%) prototype/replaceAll/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/replaceAll/replaceValue-call-each-match-position.js prototype/replaceAll/replaceValue-call-matching-empty.js - prototype/replaceAll/replaceValue-value-tostring.js prototype/replaceAll/searchValue-flags-no-g-throws.js prototype/replaceAll/searchValue-flags-null-undefined-throws.js prototype/replaceAll/searchValue-flags-toString-abrupt.js @@ -2246,7 +2229,6 @@ built-ins/String 128/1182 (10.83%) prototype/replaceAll/searchValue-replacer-RegExp-call.js {unsupported: [class]} prototype/replaceAll/searchValue-replacer-RegExp-call-fn.js {unsupported: [class]} prototype/replaceAll/searchValue-tostring-regexp.js - prototype/replaceAll/this-tostring.js prototype/replace/cstm-replace-get-err.js prototype/replace/cstm-replace-invocation.js prototype/replace/not-a-constructor.js {unsupported: [Reflect.construct]} @@ -2259,7 +2241,6 @@ built-ins/String 128/1182 (10.83%) prototype/slice/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/split/cstm-split-get-err.js prototype/split/cstm-split-invocation.js - prototype/split/limit-touint32-error.js prototype/split/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/split/separator-regexp.js prototype/split/separator-tostring-error.js @@ -2283,16 +2264,12 @@ built-ins/String 128/1182 (10.83%) prototype/toWellFormed/to-string-primitive.js prototype/trimEnd/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/trimEnd/this-value-object-toprimitive-call-err.js - prototype/trimEnd/this-value-object-toprimitive-meth-err.js prototype/trimEnd/this-value-object-toprimitive-meth-priority.js - prototype/trimEnd/this-value-object-toprimitive-returns-object-err.js prototype/trimEnd/this-value-object-tostring-meth-priority.js prototype/trimEnd/this-value-object-valueof-meth-priority.js prototype/trimStart/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/trimStart/this-value-object-toprimitive-call-err.js - prototype/trimStart/this-value-object-toprimitive-meth-err.js prototype/trimStart/this-value-object-toprimitive-meth-priority.js - prototype/trimStart/this-value-object-toprimitive-returns-object-err.js prototype/trimStart/this-value-object-tostring-meth-priority.js prototype/trimStart/this-value-object-valueof-meth-priority.js prototype/trim/not-a-constructor.js {unsupported: [Reflect.construct]} @@ -2960,7 +2937,7 @@ built-ins/TypedArray 1091/1422 (76.72%) resizable-buffer-length-tracking-1.js {unsupported: [resizable-arraybuffer]} resizable-buffer-length-tracking-2.js {unsupported: [resizable-arraybuffer]} -built-ins/TypedArrayConstructors 597/735 (81.22%) +built-ins/TypedArrayConstructors 595/735 (80.95%) BigInt64Array/prototype 4/4 (100.0%) BigInt64Array 8/8 (100.0%) BigUint64Array/prototype 4/4 (100.0%) @@ -3033,8 +3010,6 @@ built-ins/TypedArrayConstructors 597/735 (81.22%) ctors/object-arg/proto-from-ctor-realm.js {unsupported: [Reflect]} ctors/object-arg/returns.js ctors/object-arg/throws-from-property.js - ctors/object-arg/throws-setting-obj-to-primitive.js - ctors/object-arg/throws-setting-obj-to-primitive-typeerror.js ctors/object-arg/throws-setting-property.js ctors/object-arg/throws-setting-symbol-property.js ctors/object-arg/use-custom-proto-if-object.js {unsupported: [Reflect]} @@ -3291,25 +3266,13 @@ built-ins/eval 3/10 (30.0%) built-ins/global 0/29 (0.0%) -built-ins/isFinite 8/17 (47.06%) +built-ins/isFinite 2/17 (11.76%) length.js not-a-constructor.js {unsupported: [Reflect.construct]} - toprimitive-call-abrupt.js - toprimitive-get-abrupt.js - toprimitive-not-callable-throws.js - toprimitive-result-is-object-throws.js - toprimitive-result-is-symbol-throws.js - toprimitive-valid-result.js - -built-ins/isNaN 8/17 (47.06%) + +built-ins/isNaN 2/17 (11.76%) length.js not-a-constructor.js {unsupported: [Reflect.construct]} - toprimitive-call-abrupt.js - toprimitive-get-abrupt.js - toprimitive-not-callable-throws.js - toprimitive-result-is-object-throws.js - toprimitive-result-is-symbol-throws.js - toprimitive-valid-result.js built-ins/parseFloat 3/59 (5.08%) not-a-constructor.js {unsupported: [Reflect.construct]} @@ -4363,25 +4326,15 @@ language/expressions/async-arrow-function 42/60 (70.0%) ~language/expressions/await -language/expressions/bitwise-and 4/30 (13.33%) - bigint-non-primitive.js - bigint-toprimitive.js - bigint-wrapped-values.js +language/expressions/bitwise-and 1/30 (3.33%) order-of-evaluation.js -language/expressions/bitwise-not 1/16 (6.25%) - bigint-non-primitive.js +language/expressions/bitwise-not 0/16 (0.0%) -language/expressions/bitwise-or 4/30 (13.33%) - bigint-non-primitive.js - bigint-toprimitive.js - bigint-wrapped-values.js +language/expressions/bitwise-or 1/30 (3.33%) order-of-evaluation.js -language/expressions/bitwise-xor 4/30 (13.33%) - bigint-non-primitive.js - bigint-toprimitive.js - bigint-wrapped-values.js +language/expressions/bitwise-xor 1/30 (3.33%) order-of-evaluation.js language/expressions/call 60/92 (65.22%) @@ -4595,9 +4548,7 @@ language/expressions/delete 5/67 (7.46%) super-property-method.js {unsupported: [class]} super-property-null-base.js {unsupported: [class]} -language/expressions/division 3/45 (6.67%) - bigint-toprimitive.js - bigint-wrapped-values.js +language/expressions/division 1/45 (2.22%) order-of-evaluation.js language/expressions/does-not-equals 0/38 (0.0%) @@ -4606,9 +4557,7 @@ language/expressions/does-not-equals 0/38 (0.0%) language/expressions/equals 0/47 (0.0%) -language/expressions/exponentiation 3/44 (6.82%) - bigint-toprimitive.js - bigint-wrapped-values.js +language/expressions/exponentiation 1/44 (2.27%) order-of-evaluation.js language/expressions/function 168/264 (63.64%) @@ -5012,10 +4961,7 @@ language/expressions/instanceof 7/43 (16.28%) symbol-hasinstance-not-callable.js symbol-hasinstance-to-boolean.js -language/expressions/left-shift 4/45 (8.89%) - bigint-non-primitive.js - bigint-toprimitive.js - bigint-wrapped-values.js +language/expressions/left-shift 1/45 (2.22%) order-of-evaluation.js language/expressions/less-than 0/45 (0.0%) @@ -5085,14 +5031,10 @@ language/expressions/logical-not 0/19 (0.0%) language/expressions/logical-or 1/18 (5.56%) tco-right.js {unsupported: [tail-call-optimization]} -language/expressions/modulus 3/40 (7.5%) - bigint-toprimitive.js - bigint-wrapped-values.js +language/expressions/modulus 1/40 (2.5%) order-of-evaluation.js -language/expressions/multiplication 3/40 (7.5%) - bigint-toprimitive.js - bigint-wrapped-values.js +language/expressions/multiplication 1/40 (2.5%) order-of-evaluation.js language/expressions/new 41/59 (69.49%) @@ -6028,19 +5970,14 @@ language/expressions/property-accessors 0/21 (0.0%) language/expressions/relational 0/1 (0.0%) -language/expressions/right-shift 4/37 (10.81%) - bigint-non-primitive.js - bigint-toprimitive.js - bigint-wrapped-values.js +language/expressions/right-shift 1/37 (2.7%) order-of-evaluation.js language/expressions/strict-does-not-equals 0/30 (0.0%) language/expressions/strict-equals 0/30 (0.0%) -language/expressions/subtraction 3/38 (7.89%) - bigint-toprimitive.js - bigint-wrapped-values.js +language/expressions/subtraction 1/38 (2.63%) order-of-evaluation.js ~language/expressions/super @@ -6060,13 +5997,11 @@ language/expressions/typeof 2/16 (12.5%) built-in-ordinary-objects-no-call.js proxy.js {unsupported: [Proxy]} -language/expressions/unary-minus 1/14 (7.14%) - bigint-non-primitive.js +language/expressions/unary-minus 0/14 (0.0%) language/expressions/unary-plus 0/17 (0.0%) -language/expressions/unsigned-right-shift 3/45 (6.67%) - bigint-non-primitive.js +language/expressions/unsigned-right-shift 2/45 (4.44%) bigint-toprimitive.js order-of-evaluation.js