diff --git a/implementation-contributed/curation_logs/v8.json b/implementation-contributed/curation_logs/v8.json index b7e11fb57a..6aac27be26 100644 --- a/implementation-contributed/curation_logs/v8.json +++ b/implementation-contributed/curation_logs/v8.json @@ -1,5 +1,5 @@ { - "sourceRevisionAtLastExport": "f85a3554", - "targetRevisionAtLastExport": "6bb8f41e0a", + "sourceRevisionAtLastExport": "ddf72e4b", + "targetRevisionAtLastExport": "8d9f7690f8", "curatedFiles": {} } \ No newline at end of file diff --git a/implementation-contributed/v8/intl/bigint/tolocalestring.js b/implementation-contributed/v8/intl/bigint/tolocalestring.js new file mode 100644 index 0000000000..d0b6792ea8 --- /dev/null +++ b/implementation-contributed/v8/intl/bigint/tolocalestring.js @@ -0,0 +1,61 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-intl-bigint + +var locales = [ + "en", // "1,234,567,890,123,456" + "de", // "1.234.567.890.123.456" + "fr", // "1 234 567 890 123 456" + "hi", // "1,23,45,67,89,01,23,456" + "fa", // "۱٬۲۳۴٬۵۶۷٬۸۹۰٬۱۲۳٬۴۵۶" + "th-u-nu-thai", // "๑,๒๓๔,๕๖๗,๘๙๐,๑๒๓,๔๕๖" +]; + +var data = [ + Number.MAX_SAFE_INTEGER, + -Number.MAX_SAFE_INTEGER, + Math.floor(Number.MAX_SAFE_INTEGER / 2), + 0, + /// -0, // this case is broken now. +]; + +for (var locale of locales) { + let nf = new Intl.NumberFormat(locale); + + let percentOption = {style: "percent"}; + let nfPercent = new Intl.NumberFormat(locale, percentOption); + for (var n of data) { + let bigint = BigInt(n); + // Test NumberFormat w/ number output the same as + // BigInt.prototype.toLocaleString() + assertEquals(nf.format(n), bigint.toLocaleString(locale)); + + // Test NumberFormat output the same regardless pass in as number or BigInt + assertEquals(nf.format(n), nf.format(bigint)); + + // Test formatToParts + assertEquals(nf.formatToParts(n), nf.formatToParts(bigint)); + + // Test output with option + // Test NumberFormat w/ number output the same as + // BigInt.prototype.toLocaleString() + assertEquals(nfPercent.format(n), + bigint.toLocaleString(locale, percentOption)); + + // Test NumberFormat output the same regardless pass in as number or BigInt + assertEquals(nfPercent.format(n), nfPercent.format(bigint)); + assertEquals(nfPercent.formatToParts(n), nfPercent.formatToParts(bigint)); + } + + // Test very big BigInt + let veryBigInt = BigInt(Number.MAX_SAFE_INTEGER) * + BigInt(Number.MAX_SAFE_INTEGER) * + BigInt(Number.MAX_SAFE_INTEGER); + assertEquals(nf.format(veryBigInt), veryBigInt.toLocaleString(locale)); + // It should output different than toString + assertFalse(veryBigInt.toLocaleString(locale) == veryBigInt.toString()); + assertTrue(veryBigInt.toLocaleString(locale).length > + veryBigInt.toString().length); +} diff --git a/implementation-contributed/v8/intl/date-format/check-hc-option.js b/implementation-contributed/v8/intl/date-format/check-hc-option.js index 276bfe6a23..7a1e917816 100644 --- a/implementation-contributed/v8/intl/date-format/check-hc-option.js +++ b/implementation-contributed/v8/intl/date-format/check-hc-option.js @@ -26,7 +26,8 @@ let locales = [ ]; invalid_hc.forEach(function(hc) { - let df = new Intl.DateTimeFormat(["en-u-hc-" + hc + "-fo-obar"]); + let df = new Intl.DateTimeFormat( + ["en-u-hc-" + hc + "-fo-obar"], {hour: "2-digit"}); assertEquals("en", df.resolvedOptions().locale); } ); @@ -34,7 +35,8 @@ invalid_hc.forEach(function(hc) { valid_hc.forEach(function(hc) { locales.forEach(function(base) { let l = base + "-u-hc-" + hc; - let df = new Intl.DateTimeFormat([l + "-fo-obar"]); + let df = new Intl.DateTimeFormat( + [l + "-fo-obar"], {hour: "2-digit"}); assertEquals(l, df.resolvedOptions().locale); }); } diff --git a/implementation-contributed/v8/intl/date-format/constructor-date-style-order.js b/implementation-contributed/v8/intl/date-format/constructor-date-style-order.js new file mode 100644 index 0000000000..8e601b48d3 --- /dev/null +++ b/implementation-contributed/v8/intl/date-format/constructor-date-style-order.js @@ -0,0 +1,108 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-intl-datetime-style + +// Throws only once during construction. +// Check for all getters to prevent regression. +// Preserve the order of getter initialization. +let getCount = 0; +let weekday = new Array(); +let year = new Array(); +let month = new Array(); +let day = new Array(); +let hour = new Array(); +let minute = new Array(); +let second = new Array(); +let localeMatcher = new Array(); +let hour12 = new Array(); +let hourCycle = new Array(); +let dateStyle = new Array(); +let timeStyle = new Array(); +let timeZone = new Array(); +let era = new Array(); +let timeZoneName = new Array(); +let formatMatcher = new Array(); + +new Intl.DateTimeFormat(['en-US'], { + get weekday() { + weekday.push(++getCount); + }, + get year() { + year.push(++getCount); + }, + get month() { + month.push(++getCount); + }, + get day() { + day.push(++getCount); + }, + get hour() { + hour.push(++getCount); + }, + get minute() { + minute.push(++getCount); + }, + get second() { + second.push(++getCount); + }, + get localeMatcher() { + localeMatcher.push(++getCount); + }, + get hour12() { + hour12.push(++getCount); + }, + get hourCycle() { + hourCycle.push(++getCount); + }, + get timeZone() { + timeZone.push(++getCount); + }, + get dateStyle() { + dateStyle.push(++getCount); + return "full"; + }, + get timeStyle() { + timeStyle.push(++getCount); + }, + get era() { + era.push(++getCount); + }, + get timeZoneName() { + timeZoneName.push(++getCount); + }, + get formatMatcher() { + formatMatcher.push(++getCount); + } +}); + +assertEquals(1, weekday.length); +assertEquals(1, weekday[0]); +assertEquals(1, year.length); +assertEquals(2, year[0]); +assertEquals(1, month.length); +assertEquals(3, month[0]); +assertEquals(1, day.length); +assertEquals(4, day[0]); +assertEquals(1, hour.length); +assertEquals(5, hour[0]); +assertEquals(1, minute.length); +assertEquals(6, minute[0]); +assertEquals(1, second.length); +assertEquals(7, second[0]); +assertEquals(1, localeMatcher.length); +assertEquals(8, localeMatcher[0]); +assertEquals(1, hour12.length); +assertEquals(9, hour12[0]); +assertEquals(1, hourCycle.length); +assertEquals(10, hourCycle[0]); +assertEquals(1, timeZone.length); +assertEquals(11, timeZone[0]); +assertEquals(1, dateStyle.length); +assertEquals(12, dateStyle[0]); +assertEquals(1, timeStyle.length); +assertEquals(13, timeStyle[0]); +assertEquals(0, era.length); +assertEquals(0, timeZoneName.length); +assertEquals(0, formatMatcher.length); diff --git a/implementation-contributed/v8/intl/date-format/constructor-date-time-style-order.js b/implementation-contributed/v8/intl/date-format/constructor-date-time-style-order.js new file mode 100644 index 0000000000..d4d114662f --- /dev/null +++ b/implementation-contributed/v8/intl/date-format/constructor-date-time-style-order.js @@ -0,0 +1,109 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-intl-datetime-style + +// Throws only once during construction. +// Check for all getters to prevent regression. +// Preserve the order of getter initialization. +let getCount = 0; +let weekday = new Array(); +let year = new Array(); +let month = new Array(); +let day = new Array(); +let hour = new Array(); +let minute = new Array(); +let second = new Array(); +let localeMatcher = new Array(); +let hour12 = new Array(); +let hourCycle = new Array(); +let dateStyle = new Array(); +let timeStyle = new Array(); +let timeZone = new Array(); +let era = new Array(); +let timeZoneName = new Array(); +let formatMatcher = new Array(); + +new Intl.DateTimeFormat(['en-US'], { + get weekday() { + weekday.push(++getCount); + }, + get year() { + year.push(++getCount); + }, + get month() { + month.push(++getCount); + }, + get day() { + day.push(++getCount); + }, + get hour() { + hour.push(++getCount); + }, + get minute() { + minute.push(++getCount); + }, + get second() { + second.push(++getCount); + }, + get localeMatcher() { + localeMatcher.push(++getCount); + }, + get hour12() { + hour12.push(++getCount); + }, + get hourCycle() { + hourCycle.push(++getCount); + }, + get timeZone() { + timeZone.push(++getCount); + }, + get dateStyle() { + dateStyle.push(++getCount); + return "full"; + }, + get timeStyle() { + timeStyle.push(++getCount); + return "full"; + }, + get era() { + era.push(++getCount); + }, + get timeZoneName() { + timeZoneName.push(++getCount); + }, + get formatMatcher() { + formatMatcher.push(++getCount); + } +}); + +assertEquals(1, weekday.length); +assertEquals(1, weekday[0]); +assertEquals(1, year.length); +assertEquals(2, year[0]); +assertEquals(1, month.length); +assertEquals(3, month[0]); +assertEquals(1, day.length); +assertEquals(4, day[0]); +assertEquals(1, hour.length); +assertEquals(5, hour[0]); +assertEquals(1, minute.length); +assertEquals(6, minute[0]); +assertEquals(1, second.length); +assertEquals(7, second[0]); +assertEquals(1, localeMatcher.length); +assertEquals(8, localeMatcher[0]); +assertEquals(1, hour12.length); +assertEquals(9, hour12[0]); +assertEquals(1, hourCycle.length); +assertEquals(10, hourCycle[0]); +assertEquals(1, timeZone.length); +assertEquals(11, timeZone[0]); +assertEquals(1, dateStyle.length); +assertEquals(12, dateStyle[0]); +assertEquals(1, timeStyle.length); +assertEquals(13, timeStyle[0]); +assertEquals(0, era.length); +assertEquals(0, timeZoneName.length); +assertEquals(0, formatMatcher.length); diff --git a/implementation-contributed/v8/intl/date-format/constructor-date-time-style.js b/implementation-contributed/v8/intl/date-format/constructor-date-time-style.js new file mode 100644 index 0000000000..f4bc40b396 --- /dev/null +++ b/implementation-contributed/v8/intl/date-format/constructor-date-time-style.js @@ -0,0 +1,33 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-intl-datetime-style + +var validStyle = ["full", "long", "medium", "short", undefined]; +var invalidStyle = ["narrow", "numeric"]; + +validStyle.forEach(function(dateStyle) { + validStyle.forEach(function(timeStyle) { + assertDoesNotThrow(() => + new Intl.DateTimeFormat("en", {dateStyle, timeStyle})); + }); + + invalidStyle.forEach(function(timeStyle) { + assertThrows(() => + new Intl.DateTimeFormat("en", {dateStyle, timeStyle}), RangeError); + }); +} +); + +invalidStyle.forEach(function(dateStyle) { + validStyle.forEach(function(timeStyle) { + assertThrows(() => + new Intl.DateTimeFormat("en", {dateStyle, timeStyle}), RangeError); + }); + invalidStyle.forEach(function(timeStyle) { + assertThrows(() => + new Intl.DateTimeFormat("en", {dateStyle, timeStyle}), RangeError); + }); +} +); diff --git a/implementation-contributed/v8/intl/date-format/constructor-no-style-order.js b/implementation-contributed/v8/intl/date-format/constructor-no-style-order.js new file mode 100644 index 0000000000..bd4bc4cc37 --- /dev/null +++ b/implementation-contributed/v8/intl/date-format/constructor-no-style-order.js @@ -0,0 +1,114 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-intl-datetime-style + +// Throws only once during construction. +// Check for all getters to prevent regression. +// Preserve the order of getter initialization. +let getCount = 0; +let weekday = new Array(); +let year = new Array(); +let month = new Array(); +let day = new Array(); +let hour = new Array(); +let minute = new Array(); +let second = new Array(); +let localeMatcher = new Array(); +let hour12 = new Array(); +let hourCycle = new Array(); +let dateStyle = new Array(); +let timeStyle = new Array(); +let timeZone = new Array(); +let era = new Array(); +let timeZoneName = new Array(); +let formatMatcher = new Array(); + +new Intl.DateTimeFormat(['en-US'], { + get weekday() { + weekday.push(++getCount); + }, + get year() { + year.push(++getCount); + }, + get month() { + month.push(++getCount); + }, + get day() { + day.push(++getCount); + }, + get hour() { + hour.push(++getCount); + }, + get minute() { + minute.push(++getCount); + }, + get second() { + second.push(++getCount); + }, + get localeMatcher() { + localeMatcher.push(++getCount); + }, + get hour12() { + hour12.push(++getCount); + }, + get hourCycle() { + hourCycle.push(++getCount); + }, + get timeZone() { + timeZone.push(++getCount); + }, + get dateStyle() { + dateStyle.push(++getCount); + }, + get timeStyle() { + timeStyle.push(++getCount); + }, + get era() { + era.push(++getCount); + }, + get timeZoneName() { + timeZoneName.push(++getCount); + }, + get formatMatcher() { + formatMatcher.push(++getCount); + } +}); + +assertEquals(2, weekday.length); +assertEquals(1, weekday[0]); +assertEquals(1, year.length); +assertEquals(2, year[0]); +assertEquals(1, month.length); +assertEquals(3, month[0]); +assertEquals(1, day.length); +assertEquals(4, day[0]); +assertEquals(2, hour.length); +assertEquals(5, hour[0]); +assertEquals(2, minute.length); +assertEquals(6, minute[0]); +assertEquals(2, second.length); +assertEquals(7, second[0]); +assertEquals(1, localeMatcher.length); +assertEquals(8, localeMatcher[0]); +assertEquals(1, hour12.length); +assertEquals(9, hour12[0]); +assertEquals(1, hourCycle.length); +assertEquals(10, hourCycle[0]); +assertEquals(1, timeZone.length); +assertEquals(11, timeZone[0]); +assertEquals(1, dateStyle.length); +assertEquals(12, dateStyle[0]); +assertEquals(1, timeStyle.length); +assertEquals(13, timeStyle[0]); +assertEquals(14, weekday[1]); +assertEquals(1, era.length); +assertEquals(15, era[0]); +assertEquals(16, hour[1]); +assertEquals(17, minute[1]); +assertEquals(18, second[1]); +assertEquals(1, timeZoneName.length); +assertEquals(19, timeZoneName[0]); +assertEquals(1, formatMatcher.length); +assertEquals(20, formatMatcher[0]); diff --git a/implementation-contributed/v8/intl/date-format/constructor-time-style-order.js b/implementation-contributed/v8/intl/date-format/constructor-time-style-order.js new file mode 100644 index 0000000000..d35f21a196 --- /dev/null +++ b/implementation-contributed/v8/intl/date-format/constructor-time-style-order.js @@ -0,0 +1,108 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-intl-datetime-style + +// Throws only once during construction. +// Check for all getters to prevent regression. +// Preserve the order of getter initialization. +let getCount = 0; +let weekday = new Array(); +let year = new Array(); +let month = new Array(); +let day = new Array(); +let hour = new Array(); +let minute = new Array(); +let second = new Array(); +let localeMatcher = new Array(); +let hour12 = new Array(); +let hourCycle = new Array(); +let dateStyle = new Array(); +let timeStyle = new Array(); +let timeZone = new Array(); +let era = new Array(); +let timeZoneName = new Array(); +let formatMatcher = new Array(); + +new Intl.DateTimeFormat(['en-US'], { + get weekday() { + weekday.push(++getCount); + }, + get year() { + year.push(++getCount); + }, + get month() { + month.push(++getCount); + }, + get day() { + day.push(++getCount); + }, + get hour() { + hour.push(++getCount); + }, + get minute() { + minute.push(++getCount); + }, + get second() { + second.push(++getCount); + }, + get localeMatcher() { + localeMatcher.push(++getCount); + }, + get hour12() { + hour12.push(++getCount); + }, + get hourCycle() { + hourCycle.push(++getCount); + }, + get timeZone() { + timeZone.push(++getCount); + }, + get dateStyle() { + dateStyle.push(++getCount); + }, + get timeStyle() { + timeStyle.push(++getCount); + return "full"; + }, + get era() { + era.push(++getCount); + }, + get timeZoneName() { + timeZoneName.push(++getCount); + }, + get formatMatcher() { + formatMatcher.push(++getCount); + } +}); + +assertEquals(1, weekday.length); +assertEquals(1, weekday[0]); +assertEquals(1, year.length); +assertEquals(2, year[0]); +assertEquals(1, month.length); +assertEquals(3, month[0]); +assertEquals(1, day.length); +assertEquals(4, day[0]); +assertEquals(1, hour.length); +assertEquals(5, hour[0]); +assertEquals(1, minute.length); +assertEquals(6, minute[0]); +assertEquals(1, second.length); +assertEquals(7, second[0]); +assertEquals(1, localeMatcher.length); +assertEquals(8, localeMatcher[0]); +assertEquals(1, hour12.length); +assertEquals(9, hour12[0]); +assertEquals(1, hourCycle.length); +assertEquals(10, hourCycle[0]); +assertEquals(1, timeZone.length); +assertEquals(11, timeZone[0]); +assertEquals(1, dateStyle.length); +assertEquals(12, dateStyle[0]); +assertEquals(1, timeStyle.length); +assertEquals(13, timeStyle[0]); +assertEquals(0, era.length); +assertEquals(0, timeZoneName.length); +assertEquals(0, formatMatcher.length); diff --git a/implementation-contributed/v8/intl/date-format/property-override-date-style.js b/implementation-contributed/v8/intl/date-format/property-override-date-style.js new file mode 100644 index 0000000000..67d9bc5361 --- /dev/null +++ b/implementation-contributed/v8/intl/date-format/property-override-date-style.js @@ -0,0 +1,54 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-intl-datetime-style + +// Checks for security holes introduced by Object.property overrides. +// For example: +// Object.defineProperty(Array.prototype, 'locale', { +// set: function(value) { +// throw new Error('blah'); +// }, +// configurable: true, +// enumerable: false +// }); +// +// would throw in case of (JS) x.locale = 'us' or (C++) x->Set('locale', 'us'). +// +// First get supported properties. +// Some of the properties are optional, so we request them. +var properties = []; +var options = Intl.DateTimeFormat( + 'en-US', {dateStyle: 'full'}).resolvedOptions(); +for (var prop in options) { + if (options.hasOwnProperty(prop)) { + properties.push(prop); + } +} + +// In the order of Table 6 of +// ecma402 #sec-intl.datetimeformat.prototype.resolvedoptions +var expectedProperties = [ + 'locale', + 'calendar', + 'numberingSystem', + 'timeZone', + 'hourCycle', + 'hour12', + 'weekday', + 'year', + 'month', + 'day', + 'dateStyle', +]; + +assertEquals(expectedProperties.length, properties.length); + +properties.forEach(function(prop) { + assertFalse(expectedProperties.indexOf(prop) === -1); +}); + +taintProperties(properties); + +var locale = Intl.DateTimeFormat().resolvedOptions().locale; diff --git a/implementation-contributed/v8/intl/date-format/property-override-date-time-style.js b/implementation-contributed/v8/intl/date-format/property-override-date-time-style.js new file mode 100644 index 0000000000..f51d6f31a6 --- /dev/null +++ b/implementation-contributed/v8/intl/date-format/property-override-date-time-style.js @@ -0,0 +1,59 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-intl-datetime-style + +// Checks for security holes introduced by Object.property overrides. +// For example: +// Object.defineProperty(Array.prototype, 'locale', { +// set: function(value) { +// throw new Error('blah'); +// }, +// configurable: true, +// enumerable: false +// }); +// +// would throw in case of (JS) x.locale = 'us' or (C++) x->Set('locale', 'us'). + +// First get supported properties. +// Some of the properties are optional, so we request them. +var properties = []; +var options = Intl.DateTimeFormat( + 'en-US', {dateStyle: 'full', timeStyle: 'full'}).resolvedOptions(); +for (var prop in options) { + if (options.hasOwnProperty(prop)) { + properties.push(prop); + } +} + +// In the order of Table 6 of +// ecma402 #sec-intl.datetimeformat.prototype.resolvedoptions +var expectedProperties = [ + 'locale', + 'calendar', + 'numberingSystem', + 'timeZone', + 'hourCycle', + 'hour12', + 'weekday', + 'year', + 'month', + 'day', + 'hour', + 'minute', + 'second', + 'timeZoneName', + 'dateStyle', + 'timeStyle', +]; + +assertEquals(expectedProperties.length, properties.length); + +properties.forEach(function(prop) { + assertFalse(expectedProperties.indexOf(prop) === -1); +}); + +taintProperties(properties); + +var locale = Intl.DateTimeFormat().resolvedOptions().locale; diff --git a/implementation-contributed/v8/intl/date-format/property-override-time-style.js b/implementation-contributed/v8/intl/date-format/property-override-time-style.js new file mode 100644 index 0000000000..1b93ac633f --- /dev/null +++ b/implementation-contributed/v8/intl/date-format/property-override-time-style.js @@ -0,0 +1,54 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-intl-datetime-style + +// Checks for security holes introduced by Object.property overrides. +// For example: +// Object.defineProperty(Array.prototype, 'locale', { +// set: function(value) { +// throw new Error('blah'); +// }, +// configurable: true, +// enumerable: false +// }); +// +// would throw in case of (JS) x.locale = 'us' or (C++) x->Set('locale', 'us'). + +// First get supported properties. +// Some of the properties are optional, so we request them. +var properties = []; +var options = Intl.DateTimeFormat( + 'en-US', {timeStyle: 'full'}).resolvedOptions(); +for (var prop in options) { + if (options.hasOwnProperty(prop)) { + properties.push(prop); + } +} + +// In the order of Table 6 of +// ecma402 #sec-intl.datetimeformat.prototype.resolvedoptions +var expectedProperties = [ + 'locale', + 'calendar', + 'numberingSystem', + 'timeZone', + 'hourCycle', + 'hour12', + 'hour', + 'minute', + 'second', + 'timeZoneName', + 'timeStyle', +]; + +assertEquals(expectedProperties.length, properties.length); + +properties.forEach(function(prop) { + assertFalse(expectedProperties.indexOf(prop) === -1); +}); + +taintProperties(properties); + +var locale = Intl.DateTimeFormat().resolvedOptions().locale; diff --git a/implementation-contributed/v8/intl/intl.status b/implementation-contributed/v8/intl/intl.status index 83e546db76..4f3387ab22 100644 --- a/implementation-contributed/v8/intl/intl.status +++ b/implementation-contributed/v8/intl/intl.status @@ -46,6 +46,9 @@ # Unable to change locale on Windows: 'default_locale': [SKIP], + + # Unable to change locale and TZ on Windows: + 'regress-7770': [SKIP], }], # system == windows' ['system == android', { @@ -56,5 +59,7 @@ 'relative-time-format/default-locale-fr-CA': [SKIP], 'relative-time-format/default-locale-pt-BR': [SKIP], 'default_locale': [SKIP], + # Unable to change locale and TZ on Android: + 'regress-7770': [SKIP], }], # 'system == android' ] diff --git a/implementation-contributed/v8/intl/list-format/constructor-order.js b/implementation-contributed/v8/intl/list-format/constructor-order.js index 1fc7d99429..97f58436b2 100644 --- a/implementation-contributed/v8/intl/list-format/constructor-order.js +++ b/implementation-contributed/v8/intl/list-format/constructor-order.js @@ -8,13 +8,13 @@ let getCount = 0; new Intl.ListFormat(['en-US'], { - get type() { + get localeMatcher() { assertEquals(0, getCount++); }, - get style() { + get type() { assertEquals(1, getCount++); }, - get localeMatcher() { + get style() { assertEquals(2, getCount++); }, }); diff --git a/implementation-contributed/v8/intl/regress-7770.js b/implementation-contributed/v8/intl/regress-7770.js new file mode 100644 index 0000000000..2e7c2ce22d --- /dev/null +++ b/implementation-contributed/v8/intl/regress-7770.js @@ -0,0 +1,8 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Environment Variables: TZ=Indian/Kerguelen LANG=uk +assertEquals( + "Fri Feb 01 2019 00:00:00 GMT+0500 (за часом на Французьких Південних і Антарктичних територіях)", + new Date(2019, 1,1).toString()); diff --git a/implementation-contributed/v8/intl/regress-8030.js b/implementation-contributed/v8/intl/regress-8030.js index eac6b84f81..cf0e1aa2a9 100644 --- a/implementation-contributed/v8/intl/regress-8030.js +++ b/implementation-contributed/v8/intl/regress-8030.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-intl-relative-time-format - var locales = ["tlh", "id", "en"]; var referenceRelativeTimeFormat = new Intl.RelativeTimeFormat(locales); var referenceFormatted = referenceRelativeTimeFormat.format(3, "day"); diff --git a/implementation-contributed/v8/intl/regress-925216.js b/implementation-contributed/v8/intl/regress-925216.js new file mode 100644 index 0000000000..f9683dfc77 --- /dev/null +++ b/implementation-contributed/v8/intl/regress-925216.js @@ -0,0 +1,10 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +assertTrue(new Intl.DateTimeFormat( + "en", { timeZone: 'UTC', hour: 'numeric'}).resolvedOptions().hour12); +assertFalse(new Intl.DateTimeFormat( + "fr", { timeZone: 'UTC', hour: 'numeric'}).resolvedOptions().hour12); +assertFalse(new Intl.DateTimeFormat( + "de", { timeZone: 'UTC', hour: 'numeric'}).resolvedOptions().hour12); diff --git a/implementation-contributed/v8/intl/relative-time-format/constructor.js b/implementation-contributed/v8/intl/relative-time-format/constructor.js index ba03e1dd70..f1a4057426 100644 --- a/implementation-contributed/v8/intl/relative-time-format/constructor.js +++ b/implementation-contributed/v8/intl/relative-time-format/constructor.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-intl-relative-time-format - // RelativeTimeFormat constructor can't be called as function. assertThrows(() => Intl.RelativeTimeFormat('sr'), TypeError); diff --git a/implementation-contributed/v8/intl/relative-time-format/default-locale-fr-CA.js b/implementation-contributed/v8/intl/relative-time-format/default-locale-fr-CA.js index 32f64ee02d..9f24329b50 100644 --- a/implementation-contributed/v8/intl/relative-time-format/default-locale-fr-CA.js +++ b/implementation-contributed/v8/intl/relative-time-format/default-locale-fr-CA.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-intl-relative-time-format --harmony-locale // Environment Variables: LC_ALL=fr_CA assertEquals( 'fr-CA', diff --git a/implementation-contributed/v8/intl/relative-time-format/default-locale-pt-BR.js b/implementation-contributed/v8/intl/relative-time-format/default-locale-pt-BR.js index 89f7aa14f0..ea66b6a0e5 100644 --- a/implementation-contributed/v8/intl/relative-time-format/default-locale-pt-BR.js +++ b/implementation-contributed/v8/intl/relative-time-format/default-locale-pt-BR.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-intl-relative-time-format --harmony-locale // Environment Variables: LC_ALL=pt_BR assertEquals( 'pt-BR', diff --git a/implementation-contributed/v8/intl/relative-time-format/format-en.js b/implementation-contributed/v8/intl/relative-time-format/format-en.js index 2af755dcbf..a365749f0a 100644 --- a/implementation-contributed/v8/intl/relative-time-format/format-en.js +++ b/implementation-contributed/v8/intl/relative-time-format/format-en.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-intl-relative-time-format - // The following test are not part of the comformance. Just some output in // English to verify the format does return something reasonable for English. // It may be changed when we update the CLDR data. diff --git a/implementation-contributed/v8/intl/relative-time-format/format-to-parts-en.js b/implementation-contributed/v8/intl/relative-time-format/format-to-parts-en.js index 689059f4cd..7c2076b312 100644 --- a/implementation-contributed/v8/intl/relative-time-format/format-to-parts-en.js +++ b/implementation-contributed/v8/intl/relative-time-format/format-to-parts-en.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-intl-relative-time-format - // The following test are not part of the comformance. Just some output in // English to verify the format does return something reasonable for English. // It may be changed when we update the CLDR data. diff --git a/implementation-contributed/v8/intl/relative-time-format/format-to-parts-plural.js b/implementation-contributed/v8/intl/relative-time-format/format-to-parts-plural.js index 7e5e1b79a6..bd70f75421 100644 --- a/implementation-contributed/v8/intl/relative-time-format/format-to-parts-plural.js +++ b/implementation-contributed/v8/intl/relative-time-format/format-to-parts-plural.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-intl-relative-time-format - // Check plural w/ formatToParts // http://tc39.github.io/proposal-intl-relative-time/ diff --git a/implementation-contributed/v8/intl/relative-time-format/format-to-parts.js b/implementation-contributed/v8/intl/relative-time-format/format-to-parts.js index 071c4468c0..ccc9170225 100644 --- a/implementation-contributed/v8/intl/relative-time-format/format-to-parts.js +++ b/implementation-contributed/v8/intl/relative-time-format/format-to-parts.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-intl-relative-time-format - // Make sure that RelativeTimeFormat exposes all required properties. Those not specified // should have undefined value. // http://tc39.github.io/proposal-intl-relative-time/ diff --git a/implementation-contributed/v8/intl/relative-time-format/format.js b/implementation-contributed/v8/intl/relative-time-format/format.js index 769358423d..e458ad728d 100644 --- a/implementation-contributed/v8/intl/relative-time-format/format.js +++ b/implementation-contributed/v8/intl/relative-time-format/format.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-intl-relative-time-format - // Make sure that RelativeTimeFormat exposes all required properties. Those not specified // should have undefined value. // http://tc39.github.io/proposal-intl-relative-time/ diff --git a/implementation-contributed/v8/intl/relative-time-format/resolved-options.js b/implementation-contributed/v8/intl/relative-time-format/resolved-options.js index 391b83ae0a..1caa4f86c9 100644 --- a/implementation-contributed/v8/intl/relative-time-format/resolved-options.js +++ b/implementation-contributed/v8/intl/relative-time-format/resolved-options.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-intl-relative-time-format - let rtf = new Intl.RelativeTimeFormat(); // Test 1.4.5 Intl.RelativeTimeFormat.prototype.resolvedOptions () // The default style is 'long' diff --git a/implementation-contributed/v8/intl/relative-time-format/supported-locale.js b/implementation-contributed/v8/intl/relative-time-format/supported-locale.js index b24cfb27af..5c177b4777 100644 --- a/implementation-contributed/v8/intl/relative-time-format/supported-locale.js +++ b/implementation-contributed/v8/intl/relative-time-format/supported-locale.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-intl-relative-time-format assertEquals(typeof Intl.RelativeTimeFormat.supportedLocalesOf, "function", "Intl.RelativeTimeFormat.supportedLocalesOf should be a function"); diff --git a/implementation-contributed/v8/intl/segmenter/check-lb-option.js b/implementation-contributed/v8/intl/segmenter/check-lb-option.js index b56b76fc95..0e54d18202 100644 --- a/implementation-contributed/v8/intl/segmenter/check-lb-option.js +++ b/implementation-contributed/v8/intl/segmenter/check-lb-option.js @@ -11,9 +11,6 @@ let invalid_lb = [ "keepall", "none", "standard", -]; - -let valid_lb= [ "strict", "normal", "loose", @@ -30,12 +27,3 @@ invalid_lb.forEach(function(lb) { assertEquals("en", df.resolvedOptions().locale); } ); - -valid_lb.forEach(function(lb) { - locales.forEach(function(base) { - let l = base + "-u-lb-" + lb; - let df = new Intl.Segmenter([l + "-fo-obar"]); - assertEquals(l, df.resolvedOptions().locale); - }); -} -); diff --git a/implementation-contributed/v8/intl/segmenter/constructor-order.js b/implementation-contributed/v8/intl/segmenter/constructor-order.js index 09ff8f1fe0..e43fb9f963 100644 --- a/implementation-contributed/v8/intl/segmenter/constructor-order.js +++ b/implementation-contributed/v8/intl/segmenter/constructor-order.js @@ -13,11 +13,8 @@ new Intl.Segmenter(['en-US'], { get localeMatcher() { assertEquals(0, getCount++); }, - get lineBreakStyle() { + get granularity() { assertEquals(1, getCount++); }, - get granularity() { - assertEquals(2, getCount++); - }, }); -assertEquals(3, getCount); +assertEquals(2, getCount); diff --git a/implementation-contributed/v8/intl/segmenter/constructor.js b/implementation-contributed/v8/intl/segmenter/constructor.js new file mode 100644 index 0000000000..6612e1eab6 --- /dev/null +++ b/implementation-contributed/v8/intl/segmenter/constructor.js @@ -0,0 +1,190 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-intl-segmenter + +// Segmenter constructor can't be called as function. +assertThrows(() => Intl.Segmenter(["sr"]), TypeError); + +// Invalid locale string. +assertThrows(() => new Intl.Segmenter(["abcdefghi"]), RangeError); + +assertDoesNotThrow(() => new Intl.Segmenter(["sr"], {}), TypeError); + +assertDoesNotThrow(() => new Intl.Segmenter([], {})); + +assertDoesNotThrow(() => new Intl.Segmenter(["fr", "ar"], {})); + +assertDoesNotThrow(() => new Intl.Segmenter({ 0: "ja", 1: "fr" }, {})); + +assertDoesNotThrow(() => new Intl.Segmenter({ 1: "ja", 2: "fr" }, {})); + +assertDoesNotThrow(() => new Intl.Segmenter(["sr"])); + +assertDoesNotThrow(() => new Intl.Segmenter()); + +assertDoesNotThrow( + () => + new Intl.Segmenter(["sr"], { + lineBreakStyle: "strict", + granularity: "grapheme" + }) +); + +assertDoesNotThrow( + () => new Intl.Segmenter(["sr"], { granularity: "sentence" }) +); + +assertDoesNotThrow(() => new Intl.Segmenter(["sr"], { granularity: "word" })); + +assertDoesNotThrow( + () => new Intl.Segmenter(["sr"], { granularity: "grapheme" }) +); + +assertThrows(() => new Intl.Segmenter(["sr"], { granularity: "line" }), RangeError); + +assertThrows( + () => new Intl.Segmenter(["sr"], { granularity: "standard" }), + RangeError +); + +assertDoesNotThrow( + () => new Intl.Segmenter(["sr"], { lineBreakStyle: "normal" }) +); + +assertDoesNotThrow( + () => new Intl.Segmenter(["sr"], { lineBreakStyle: "strict" }) +); + +assertDoesNotThrow( + () => new Intl.Segmenter(["sr"], { lineBreakStyle: "loose" }) +); + +assertDoesNotThrow( + () => new Intl.Segmenter(["sr"], { lineBreakStyle: "giant" }) +); + +assertDoesNotThrow( + () => + new Intl.Segmenter(["sr"], { + granularity: "sentence", + lineBreakStyle: "normal" + }) +); + +assertDoesNotThrow( + () => + new Intl.Segmenter(["sr"], { + granularity: "sentence", + lineBreakStyle: "strict" + }) +); + +assertDoesNotThrow( + () => + new Intl.Segmenter(["sr"], { + granularity: "sentence", + lineBreakStyle: "loose" + }) +); + +assertDoesNotThrow( + () => + new Intl.Segmenter(["sr"], { + granularity: "word", + lineBreakStyle: "normal" + }) +); + +assertDoesNotThrow( + () => + new Intl.Segmenter(["sr"], { + granularity: "word", + lineBreakStyle: "strict" + }) +); + +assertDoesNotThrow( + () => + new Intl.Segmenter(["sr"], { + granularity: "word", + lineBreakStyle: "loose" + }) +); + +assertDoesNotThrow( + () => + new Intl.Segmenter(["sr"], { + granularity: "grapheme", + lineBreakStyle: "normal" + }) +); + +assertDoesNotThrow( + () => + new Intl.Segmenter(["sr"], { + granularity: "grapheme", + lineBreakStyle: "strict" + }) +); + +assertDoesNotThrow( + () => + new Intl.Segmenter(["sr"], { + granularity: "grapheme", + lineBreakStyle: "loose" + }) +); + +assertThrows( + () => + new Intl.Segmenter(["sr"], { + granularity: "line", + lineBreakStyle: "loose" + }), RangeError +); + +assertThrows( + () => + new Intl.Segmenter(["sr"], { + granularity: "line", + lineBreakStyle: "normal" + }), RangeError +); + +assertThrows( + () => + new Intl.Segmenter(["sr"], { + granularity: "line", + lineBreakStyle: "strict" + }), RangeError +); + +// propagate exception from getter +assertThrows( + () => + new Intl.Segmenter(undefined, { + get localeMatcher() { + throw new TypeError(""); + } + }), + TypeError +); +assertDoesNotThrow( + () => + new Intl.Segmenter(undefined, { + get lineBreakStyle() { + throw new TypeError(""); + } + }) +); +assertThrows( + () => + new Intl.Segmenter(undefined, { + get granularity() { + throw new TypeError(""); + } + }), + TypeError +); diff --git a/implementation-contributed/v8/intl/segmenter/segment-iterator.js b/implementation-contributed/v8/intl/segmenter/segment-iterator.js index 531394f636..696ffab554 100644 --- a/implementation-contributed/v8/intl/segmenter/segment-iterator.js +++ b/implementation-contributed/v8/intl/segmenter/segment-iterator.js @@ -5,7 +5,7 @@ // Flags: --harmony-intl-segmenter const text = "Hello World, Test 123! Foo Bar. How are you?"; -for (const granularity of ["grapheme", "word", "sentence", "line"]) { +for (const granularity of ["grapheme", "word", "sentence"]) { const segmenter = new Intl.Segmenter("en", { granularity }); const iter = segmenter.segment(text); diff --git a/implementation-contributed/v8/intl/segmenter/segment-line-following.js b/implementation-contributed/v8/intl/segmenter/segment-line-following.js deleted file mode 100644 index 77a17a6d49..0000000000 --- a/implementation-contributed/v8/intl/segmenter/segment-line-following.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2018 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --harmony-intl-segmenter - -const seg = new Intl.Segmenter([], {granularity: "line"}) -for (const text of [ - "Hello world!", // English - " Hello world! ", // English with space before/after - " Hello world? Foo bar!", // English - "Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech - "Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese - "Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek - "Решение Индии о покупке российских С-400 расценили как вызов США", // Russian - "הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew, - "ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic - "भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi - "ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil - "'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్‌సైట్లో పెట్టవద్దు'", // Telugu - "台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese - "วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai - "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese - "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean - ]) { - const iter = seg.segment(text); - let prev = 0; - let segments = []; - while (!iter.following()) { - assertTrue(["soft", "hard"].includes(iter.breakType), iter.breakType); - assertTrue(iter.index >= 0); - assertTrue(iter.index <= text.length); - assertTrue(iter.index > prev); - segments.push(text.substring(prev, iter.index)); - prev = iter.index; - } - assertEquals(text, segments.join("")); -} diff --git a/implementation-contributed/v8/intl/segmenter/segment-line-iterable.js b/implementation-contributed/v8/intl/segmenter/segment-line-iterable.js deleted file mode 100644 index 262bb669d5..0000000000 --- a/implementation-contributed/v8/intl/segmenter/segment-line-iterable.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2018 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --harmony-intl-segmenter - -const seg = new Intl.Segmenter([], {granularity: "line"}) -for (const text of [ - "Hello world!", // English - " Hello world! ", // English with space before/after - " Hello world? Foo bar!", // English - "Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech - "Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese - "Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek - "Решение Индии о покупке российских С-400 расценили как вызов США", // Russian - "הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew, - "ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic - "भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi - "ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil - "'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్‌సైట్లో పెట్టవద్దు'", // Telugu - "台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese - "วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai - "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese - "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean - ]) { - let segments = []; - // Create another %SegmentIterator% to compare with result from the one that - // created in the for of loop. - let iter = seg.segment(text); - let prev = 0; - for (const v of seg.segment(text)) { - assertTrue(["soft", "hard"].includes(v.breakType), v.breakType); - assertEquals("string", typeof v.segment); - assertTrue(v.segment.length > 0); - segments.push(v.segment); - - // manually advance the iter. - assertFalse(iter.following()); - assertEquals(iter.breakType, v.breakType); - assertEquals(text.substring(prev, iter.index), v.segment); - prev = iter.index; - } - assertTrue(iter.following()); - assertEquals(text, segments.join('')); -} diff --git a/implementation-contributed/v8/intl/segmenter/segment-line-next.js b/implementation-contributed/v8/intl/segmenter/segment-line-next.js deleted file mode 100644 index 7bbe9a4491..0000000000 --- a/implementation-contributed/v8/intl/segmenter/segment-line-next.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2018 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --harmony-intl-segmenter - -const seg = new Intl.Segmenter([], {granularity: "line"}) -for (const text of [ - "Hello world!", // English - " Hello world! ", // English with space before/after - " Hello world? Foo bar!", // English - "Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech - "Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese - "Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek - "Решение Индии о покупке российских С-400 расценили как вызов США", // Russian - "הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew, - "ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic - "भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi - "ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil - "'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్‌సైట్లో పెట్టవద్దు'", // Telugu - "台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese - "วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai - "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese - "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean - ]) { - const iter = seg.segment(text); - let segments = []; - let oldPos = -1; - for (let result = iter.next(); !result.done; result = iter.next()) { - const v = result.value; - assertTrue(["soft", "hard"].includes(iter.breakType), iter.breakType); - assertEquals("string", typeof v.segment); - assertTrue(v.segment.length > 0); - segments.push(v.segment); - assertEquals("number", typeof v.index); - assertTrue(oldPos < v.index); - oldPos = v.index; - } - assertEquals(text, segments.join('')); -} diff --git a/implementation-contributed/v8/intl/segmenter/segment-line-preceding.js b/implementation-contributed/v8/intl/segmenter/segment-line-preceding.js deleted file mode 100644 index 2e6569cc99..0000000000 --- a/implementation-contributed/v8/intl/segmenter/segment-line-preceding.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2018 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --harmony-intl-segmenter - -const seg = new Intl.Segmenter([], {granularity: "line"}) -for (const text of [ - "Hello world!", // English - " Hello world! ", // English with space before/after - " Hello world? Foo bar!", // English - "Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech - "Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese - "Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek - "Решение Индии о покупке российских С-400 расценили как вызов США", // Russian - "הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew, - "ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic - "भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi - "ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil - "'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్‌సైట్లో పెట్టవద్దు'", // Telugu - "台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese - "วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai - "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese - "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean - ]) { - const iter = seg.segment(text); - let prev = text.length; - let segments = []; - iter.preceding(prev) - assertTrue(["soft", "hard"].includes(iter.breakType), iter.breakType); - assertTrue(iter.index >= 0); - assertTrue(iter.index < prev); - segments.push(text.substring(iter.index, prev)); - prev = iter.index; - while (!iter.preceding()) { - assertTrue(["soft", "hard"].includes(iter.breakType), iter.breakType); - assertTrue(iter.index >= 0); - assertTrue(iter.index <= text.length); - assertTrue(iter.index < prev); - segments.push(text.substring(iter.index, prev)); - prev = iter.index; - } - assertEquals(text, segments.reverse().join("")); -} diff --git a/implementation-contributed/v8/intl/segmenter/segment-line.js b/implementation-contributed/v8/intl/segmenter/segment-line.js deleted file mode 100644 index 8ac522e723..0000000000 --- a/implementation-contributed/v8/intl/segmenter/segment-line.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2018 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --harmony-intl-segmenter - -const seg = new Intl.Segmenter([], {granularity: "line"}) -for (const text of [ - "Hello world!", // English - " Hello world! ", // English with space before/after - " Hello world? Foo bar!", // English - "Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech - "Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese - "Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek - "Решение Индии о покупке российских С-400 расценили как вызов США", // Russian - "הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew, - "ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic - "भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi - "ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil - "'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్‌సైట్లో పెట్టవద్దు'", // Telugu - "台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese - "วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai - "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese - "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean - ]) { - const iter = seg.segment(text); - assertEquals(undefined, iter.breakType); - assertEquals(0, iter.index); -} diff --git a/implementation-contributed/v8/mjsunit/array-sort.js b/implementation-contributed/v8/mjsunit/array-sort.js index 8c2c6fca63..ca0daadf04 100644 --- a/implementation-contributed/v8/mjsunit/array-sort.js +++ b/implementation-contributed/v8/mjsunit/array-sort.js @@ -567,6 +567,27 @@ function TestPrototypeHoles() { } TestPrototypeHoles(); +// The following test ensures that elements on the prototype are also copied +// for JSArrays and not only JSObjects. +function TestArrayPrototypeHasElements() { + let array = [1, 2, 3, 4, 5]; + for (let i = 0; i < array.length; i++) { + delete array[i]; + Object.prototype[i] = 42; + } + + let comparator_called = false; + array.sort(function (a, b) { + if (a === 42 || b === 42) { + comparator_called = true; + } + return a - b; + }); + + assertTrue(comparator_called); +} +TestArrayPrototypeHasElements(); + // The following Tests make sure that there is no crash when the element kind // or the array length changes. Since comparison functions like this are not // consistent, we do not have to make sure that the array is actually sorted diff --git a/implementation-contributed/v8/mjsunit/compiler/regress-924151.js b/implementation-contributed/v8/mjsunit/compiler/regress-924151.js new file mode 100644 index 0000000000..cfaaedfb21 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/compiler/regress-924151.js @@ -0,0 +1,28 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +function g(code) { + try { + if (typeof code === 'function') { + +Symbol(); + } else { + eval(); + } + } catch (e) { + return; + } + dummy(); +} + +function f() { + g(g); +} + +try { g(); } catch(e) {; } + +f(); +%OptimizeFunctionOnNextCall(f); +f(); diff --git a/implementation-contributed/v8/mjsunit/es6/for-each-in-catch.js b/implementation-contributed/v8/mjsunit/es6/for-each-in-catch.js index 674cddd047..b38013eeb3 100644 --- a/implementation-contributed/v8/mjsunit/es6/for-each-in-catch.js +++ b/implementation-contributed/v8/mjsunit/es6/for-each-in-catch.js @@ -5,25 +5,25 @@ function checkIsRedeclarationError(code) { try { eval(` -checkIsRedeclarationError : { - break checkIsRedeclarationError; -${code} -} -`); + checkIsRedeclarationError: { + break checkIsRedeclarationError; + ${code} + } + `); assertUnreachable(); - } catch(e) { - assertInstanceof(e, SyntaxError ); - assertTrue( e.toString().indexOf("has already been declared") >= 0 ); + } catch (e) { + assertInstanceof(e, SyntaxError); + assertTrue(e.toString().includes("has already been declared")); } } function checkIsNotRedeclarationError(code) { - assertDoesNotThrow(()=>eval(` -checkIsNotRedeclarationError_label : { - break checkIsNotRedeclarationError_label; -${code} -} -`)); + assertDoesNotThrow(() => eval(` + checkIsNotRedeclarationError_label: { + break checkIsNotRedeclarationError_label; + ${code} + } + `)); } @@ -52,143 +52,145 @@ let not_var_e = [ 'const {f:e}' ]; -// Check that `for (var ... of ...)` cannot redeclare a simple catch variable -// but `for (var ... in ...)` can. +// Check that both `for (var ... of ...)` and `for (var ... in ...)` +// can redeclare a simple catch variable. for (let binding of var_e) { - checkIsRedeclarationError(` -try { - throw 0; -} catch(e) { - for (${binding} of []); -} -`); - checkIsNotRedeclarationError(` -try { - throw 0; -} catch(e) { - for (${binding} in []); -} -`); -} - -// Check that the above error occurs even for nested catches. -for (let binding of var_e) { - checkIsRedeclarationError(` -try { - throw 0; -} catch(e) { - try { - throw 1; - } catch(f) { try { - throw 2; - } catch({}) { + throw 0; + } catch (e) { for (${binding} of []); } - } -} -`); + `); checkIsNotRedeclarationError(` -try { - throw 0; -} catch(e) { - try { - throw 1; - } catch(f) { try { - throw 2; - } catch({}) { + throw 0; + } catch (e) { for (${binding} in []); } - } -} -`); + `); } -// Check that the above error does not occur if a declaration scope is between -// the catch and the loop. +// Check that the above applies even for nested catches. for (let binding of var_e) { checkIsNotRedeclarationError(` -try { - throw 0; -} catch(e) { - (()=>{for (${binding} of []);})(); -} -`); + try { + throw 0; + } catch (e) { + try { + throw 1; + } catch (f) { + try { + throw 2; + } catch ({}) { + for (${binding} of []); + } + } + } + `); checkIsNotRedeclarationError(` -try { - throw 0; -} catch(e) { - (function(){for (${binding} of []);})(); + try { + throw 0; + } catch (e) { + try { + throw 1; + } catch (f) { + try { + throw 2; + } catch ({}) { + for (${binding} in []); + } + } + } + `); } -`); + +// Check that the above applies if a declaration scope is between the +// catch and the loop. +for (let binding of var_e) { + checkIsNotRedeclarationError(` + try { + throw 0; + } catch (e) { + (()=>{for (${binding} of []);})(); + } + `); + + checkIsNotRedeclarationError(` + try { + throw 0; + } catch (e) { + (function() { + for (${binding} of []); + })(); + } + `); } // Check that there is no error when not declaring a var named e. for (let binding of not_var_e) { checkIsNotRedeclarationError(` -try { - throw 0; -} catch(e) { - for (${binding} of []); -} -`); + try { + throw 0; + } catch (e) { + for (${binding} of []); + } + `); } // Check that there is an error for both for-in and for-of when redeclaring -// a non-simple catch parameter +// a non-simple catch parameter. for (let binding of var_e) { checkIsRedeclarationError(` -try { - throw 0; -} catch({e}) { - for (${binding} of []); -} -`); + try { + throw 0; + } catch ({e}) { + for (${binding} of []); + } + `); checkIsRedeclarationError(` -try { - throw 0; -} catch({e}) { - for (${binding} in []); -} -`); + try { + throw 0; + } catch ({e}) { + for (${binding} in []); + } + `); } // Check that the above error occurs even for nested catches. for (let binding of var_e) { checkIsRedeclarationError(` -try { - throw 0; -} catch({e}) { - try { - throw 1; - } catch(f) { try { - throw 2; - } catch({}) { - for (${binding} of []); + throw 0; + } catch ({e}) { + try { + throw 1; + } catch (f) { + try { + throw 2; + } catch ({}) { + for (${binding} of []); + } + } } - } -} -`); + `); checkIsRedeclarationError(` -try { - throw 0; -} catch({e}) { - try { - throw 1; - } catch(f) { try { - throw 2; - } catch({}) { - for (${binding} in []); + throw 0; + } catch ({e}) { + try { + throw 1; + } catch (f) { + try { + throw 2; + } catch ({}) { + for (${binding} in []); + } + } } - } -} -`); + `); } diff --git a/implementation-contributed/v8/mjsunit/es6/proxies-ownkeys.js b/implementation-contributed/v8/mjsunit/es6/proxies-ownkeys.js index 7cc0a87b68..3b9011acdc 100644 --- a/implementation-contributed/v8/mjsunit/es6/proxies-ownkeys.js +++ b/implementation-contributed/v8/mjsunit/es6/proxies-ownkeys.js @@ -54,9 +54,9 @@ assertEquals(["a", "b", "c"], Reflect.ownKeys(proxy)); keys.length = Math.pow(2, 33); assertThrows("Reflect.ownKeys(proxy)", RangeError); -// Check that we allow duplicated keys. +// Check that we don't allow duplicated keys. keys = ['a', 'a', 'a'] -assertEquals(keys, Reflect.ownKeys(proxy)); +assertThrows("Reflect.ownKeys(proxy)", TypeError); // Non-Name results throw. keys = [1]; @@ -75,9 +75,9 @@ assertThrows("Reflect.ownKeys(proxy)", TypeError); keys = ["nonconf"]; assertEquals(keys, Reflect.ownKeys(proxy)); -// Check that we allow duplicated keys. +// Check that we don't allow duplicated keys. keys = ['nonconf', 'nonconf', 'nonconf'] -assertEquals(keys, Reflect.ownKeys(proxy)); +assertThrows("Reflect.ownKeys(proxy)", TypeError); // Step 19a: The trap result must all keys of a non-extensible target. Object.preventExtensions(target); @@ -89,6 +89,6 @@ assertEquals(keys, Reflect.ownKeys(proxy)); keys = ["nonconf", "target_one", "fantasy"]; assertThrows("Reflect.ownKeys(proxy)", TypeError); -// Check that we allow duplicated keys. +// Check that we don't allow duplicated keys. keys = ['nonconf', 'target_one', 'nonconf', 'nonconf', 'target_one',] -assertEquals(keys, Reflect.ownKeys(proxy)); +assertThrows("Reflect.ownKeys(proxy)", TypeError); diff --git a/implementation-contributed/v8/mjsunit/es6/typedarray-sort.js b/implementation-contributed/v8/mjsunit/es6/typedarray-sort.js index c5c4ff079a..7cd08b1258 100644 --- a/implementation-contributed/v8/mjsunit/es6/typedarray-sort.js +++ b/implementation-contributed/v8/mjsunit/es6/typedarray-sort.js @@ -69,6 +69,31 @@ for (var constructor of typedArrayConstructors) { assertThrows(() => array.sort(), TypeError); } +// Check that TypedArray.p.sort is stable. +for (let constructor of typedArrayConstructors) { + // Sort an array [0..kSize-1] modulo 4. If the sort is stable, the array + // will be partitioned into 4 parts, where each part has only increasing + // elements. + const kSize = 128; + const kModulo = 4; + const kRunSize = kSize / kModulo; + + const template = Array.from({ length: kSize }, (_, i) => i); + const array = new constructor(template); + + const compare = (a, b) => (b % kModulo) - (a % kModulo); + array.sort(compare); + + function assertIncreasing(from) { + for (let i = from + 1; i < from + kRunSize; ++i) { + assertTrue(array[i - 1] < array[i]); + assertEquals(array[i - 1] % kModulo, array[i] % kModulo); + } + } + + for (let i = 0; i < kModulo; ++i) assertIncreasing(i * kRunSize); +} + // The following creates a test for each typed element kind, where the array // to sort consists of some max/min/zero elements. // diff --git a/implementation-contributed/v8/mjsunit/es8/object-entries.js b/implementation-contributed/v8/mjsunit/es8/object-entries.js index 51ce4692e4..f119cfc113 100644 --- a/implementation-contributed/v8/mjsunit/es8/object-entries.js +++ b/implementation-contributed/v8/mjsunit/es8/object-entries.js @@ -144,29 +144,11 @@ function TestOrderWithDuplicates(withWarmup) { }); if (withWarmup) { - for (const key in P) {} + for (const key in O) {}; + try { for (const key in P) {} } catch {}; } - log = []; - assertEquals([ - ["a", 1], - ["a", 1], - ["456", 123], - ["456", 123] - ], Object.entries(P)); - assertEquals([ - "[[OwnPropertyKeys]]", - "[[GetOwnProperty]](\"a\")", - "[[Get]](\"a\")", - "[[GetOwnProperty]](\"a\")", - "[[Get]](\"a\")", - "[[GetOwnProperty]](\"456\")", - "[[Get]](\"456\")", - "[[GetOwnProperty]](\"HIDDEN\")", - "[[GetOwnProperty]](\"HIDDEN\")", - "[[GetOwnProperty]](\"456\")", - "[[Get]](\"456\")" - ], log); + assertThrows(() => Object.entries(P), TypeError); } TestOrderWithDuplicates(); TestOrderWithDuplicates(true); diff --git a/implementation-contributed/v8/mjsunit/es8/object-get-own-property-descriptors.js b/implementation-contributed/v8/mjsunit/es8/object-get-own-property-descriptors.js index f88840dba4..0bd84bd6fe 100644 --- a/implementation-contributed/v8/mjsunit/es8/object-get-own-property-descriptors.js +++ b/implementation-contributed/v8/mjsunit/es8/object-get-own-property-descriptors.js @@ -193,21 +193,7 @@ function TestDuplicateKeys() { defineProperty(target, name, desc) { assertUnreachable(); } }); - var result = Object.getOwnPropertyDescriptors(P); - assertEquals({ - "A": { - "value": "VALUE", - "writable": false, - "enumerable": false, - "configurable": true - } - }, result); - assertTrue(result.hasOwnProperty("A")); - assertEquals([ - "ownKeys()", - "getOwnPropertyDescriptor(A)", - "getOwnPropertyDescriptor(A)" - ], log); + assertThrows(() => Object.getOwnPropertyDescriptors(P), TypeError); } TestDuplicateKeys(); diff --git a/implementation-contributed/v8/mjsunit/es8/object-values.js b/implementation-contributed/v8/mjsunit/es8/object-values.js index 23fcaed1bc..b66e4af7d3 100644 --- a/implementation-contributed/v8/mjsunit/es8/object-values.js +++ b/implementation-contributed/v8/mjsunit/es8/object-values.js @@ -121,20 +121,7 @@ function TestOrderWithDuplicates() { } }); - assertEquals([1, 1, 123, 123], Object.values(P)); - assertEquals([ - "[[OwnPropertyKeys]]", - "[[GetOwnProperty]](\"a\")", - "[[Get]](\"a\")", - "[[GetOwnProperty]](\"a\")", - "[[Get]](\"a\")", - "[[GetOwnProperty]](\"456\")", - "[[Get]](\"456\")", - "[[GetOwnProperty]](\"HIDDEN\")", - "[[GetOwnProperty]](\"HIDDEN\")", - "[[GetOwnProperty]](\"456\")", - "[[Get]](\"456\")", - ], log); + assertThrows(() => Object.values(P), TypeError); } TestOrderWithDuplicates(); diff --git a/implementation-contributed/v8/mjsunit/for-of-in-catch-duplicate-decl.js b/implementation-contributed/v8/mjsunit/for-of-in-catch-duplicate-decl.js new file mode 100644 index 0000000000..e1fdd43c94 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/for-of-in-catch-duplicate-decl.js @@ -0,0 +1,5 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +assertDoesNotThrow("try { } catch (e) { var e; for (var e of []) {} }") diff --git a/implementation-contributed/v8/mjsunit/harmony/array-flat-species.js b/implementation-contributed/v8/mjsunit/harmony/array-flat-species.js index d04f8a0875..7181c10bea 100644 --- a/implementation-contributed/v8/mjsunit/harmony/array-flat-species.js +++ b/implementation-contributed/v8/mjsunit/harmony/array-flat-species.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-array-flat - { class MyArray extends Array { static get [Symbol.species]() { diff --git a/implementation-contributed/v8/mjsunit/harmony/array-flat.js b/implementation-contributed/v8/mjsunit/harmony/array-flat.js index 86571e8dce..9a291dc3b0 100644 --- a/implementation-contributed/v8/mjsunit/harmony/array-flat.js +++ b/implementation-contributed/v8/mjsunit/harmony/array-flat.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-array-flat - assertEquals(Array.prototype.flat.length, 0); assertEquals(Array.prototype.flat.name, 'flat'); diff --git a/implementation-contributed/v8/mjsunit/harmony/array-flatMap-species.js b/implementation-contributed/v8/mjsunit/harmony/array-flatMap-species.js index d4159b4801..48f9bea2d0 100644 --- a/implementation-contributed/v8/mjsunit/harmony/array-flatMap-species.js +++ b/implementation-contributed/v8/mjsunit/harmony/array-flatMap-species.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-array-flat - { class MyArray extends Array { static get [Symbol.species]() { diff --git a/implementation-contributed/v8/mjsunit/harmony/array-flatMap.js b/implementation-contributed/v8/mjsunit/harmony/array-flatMap.js index 9f0426fe7f..65a4025603 100644 --- a/implementation-contributed/v8/mjsunit/harmony/array-flatMap.js +++ b/implementation-contributed/v8/mjsunit/harmony/array-flatMap.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --harmony-array-flat --allow-natives-syntax +// Flags: --allow-natives-syntax assertEquals(Array.prototype.flatMap.length, 1); assertEquals(Array.prototype.flatMap.name, 'flatMap'); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/basics.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/basics.js index 88fb020101..c1ec4070f4 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/basics.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/basics.js @@ -4,151 +4,88 @@ // Flags: --harmony-weak-refs -(function TestConstructWeakFactory() { - let wf = new WeakFactory(() => {}); - assertEquals(wf.toString(), "[object WeakFactory]"); - assertNotSame(wf.__proto__, Object.prototype); - assertSame(wf.__proto__.__proto__, Object.prototype); +(function TestConstructFinalizationGroup() { + let fg = new FinalizationGroup(() => {}); + assertEquals(fg.toString(), "[object FinalizationGroup]"); + assertNotSame(fg.__proto__, Object.prototype); + assertSame(fg.__proto__.__proto__, Object.prototype); })(); -(function TestWeakFactoryConstructorCallAsFunction() { +(function TestFinalizationGroupConstructorCallAsFunction() { let caught = false; let message = ""; try { - let f = WeakFactory(() => {}); + let f = FinalizationGroup(() => {}); } catch (e) { message = e.message; caught = true; } finally { assertTrue(caught); - assertEquals(message, "Constructor WeakFactory requires 'new'"); + assertEquals(message, "Constructor FinalizationGroup requires 'new'"); } })(); -(function TestConstructWeakFactoryCleanupNotCallable() { - let message = "WeakFactory: cleanup must be callable"; - assertThrows(() => { let wf = new WeakFactory(); }, TypeError, message); - assertThrows(() => { let wf = new WeakFactory(1); }, TypeError, message); - assertThrows(() => { let wf = new WeakFactory(null); }, TypeError, message); +(function TestConstructFinalizationGroupCleanupNotCallable() { + let message = "FinalizationGroup: cleanup must be callable"; + assertThrows(() => { let fg = new FinalizationGroup(); }, TypeError, message); + assertThrows(() => { let fg = new FinalizationGroup(1); }, TypeError, message); + assertThrows(() => { let fg = new FinalizationGroup(null); }, TypeError, message); })(); -(function TestConstructWeakFactoryWithCallableProxyAsCleanup() { +(function TestConstructFinalizationGroupWithCallableProxyAsCleanup() { let handler = {}; let obj = () => {}; let proxy = new Proxy(obj, handler); - let wf = new WeakFactory(proxy); + let fg = new FinalizationGroup(proxy); })(); -(function TestConstructWeakFactoryWithNonCallableProxyAsCleanup() { - let message = "WeakFactory: cleanup must be callable"; +(function TestConstructFinalizationGroupWithNonCallableProxyAsCleanup() { + let message = "FinalizationGroup: cleanup must be callable"; let handler = {}; let obj = {}; let proxy = new Proxy(obj, handler); - assertThrows(() => { let wf = new WeakFactory(proxy); }, TypeError, message); + assertThrows(() => { let fg = new FinalizationGroup(proxy); }, TypeError, message); })(); -(function TestMakeCell() { - let wf = new WeakFactory(() => {}); - let wc = wf.makeCell({}); - assertEquals(wc.toString(), "[object WeakCell]"); - assertNotSame(wc.__proto__, Object.prototype); - assertSame(wc.__proto__.__proto__, Object.prototype); - assertEquals(wc.holdings, undefined); - - let holdings_desc = Object.getOwnPropertyDescriptor(wc.__proto__, "holdings"); - assertEquals(true, holdings_desc.configurable); - assertEquals(false, holdings_desc.enumerable); - assertEquals("function", typeof holdings_desc.get); - assertEquals(undefined, holdings_desc.set); - - let clear_desc = Object.getOwnPropertyDescriptor(wc.__proto__, "clear"); - assertEquals(true, clear_desc.configurable); - assertEquals(false, clear_desc.enumerable); - assertEquals("function", typeof clear_desc.value); +(function TestRegisterWithNonObjectTarget() { + let fg = new FinalizationGroup(() => {}); + let message = "FinalizationGroup.prototype.register: target must be an object"; + assertThrows(() => fg.register(1, "holdings"), TypeError, message); + assertThrows(() => fg.register(false, "holdings"), TypeError, message); + assertThrows(() => fg.register("foo", "holdings"), TypeError, message); + assertThrows(() => fg.register(Symbol(), "holdings"), TypeError, message); + assertThrows(() => fg.register(null, "holdings"), TypeError, message); + assertThrows(() => fg.register(undefined, "holdings"), TypeError, message); })(); -(function TestMakeCellWithHoldings() { - let wf = new WeakFactory(() => {}); - let obj = {a: 1}; - let holdings = {b: 2}; - let wc = wf.makeCell(obj, holdings); - assertSame(wc.holdings, holdings); -})(); - -(function TestMakeCellWithHoldingsSetHoldings() { - let wf = new WeakFactory(() => {}); - let obj = {a: 1}; - let holdings = {b: 2}; - let wc = wf.makeCell(obj, holdings); - assertSame(wc.holdings, holdings); - wc.holdings = 5; - assertSame(wc.holdings, holdings); -})(); - -(function TestMakeCellWithHoldingsSetHoldingsStrict() { - "use strict"; - let wf = new WeakFactory(() => {}); - let obj = {a: 1}; - let holdings = {b: 2}; - let wc = wf.makeCell(obj, holdings); - assertSame(wc.holdings, holdings); - assertThrows(() => { wc.holdings = 5; }, TypeError); - assertSame(wc.holdings, holdings); -})(); - -(function TestMakeCellWithNonObject() { - let wf = new WeakFactory(() => {}); - let message = "WeakFactory.prototype.makeCell: target must be an object"; - assertThrows(() => wf.makeCell(), TypeError, message); - assertThrows(() => wf.makeCell(1), TypeError, message); - assertThrows(() => wf.makeCell(false), TypeError, message); - assertThrows(() => wf.makeCell("foo"), TypeError, message); - assertThrows(() => wf.makeCell(Symbol()), TypeError, message); - assertThrows(() => wf.makeCell(null), TypeError, message); - assertThrows(() => wf.makeCell(undefined), TypeError, message); -})(); - -(function TestMakeCellWithProxy() { +(function TestRegisterWithProxy() { let handler = {}; let obj = {}; let proxy = new Proxy(obj, handler); - let wf = new WeakFactory(() => {}); - let wc = wf.makeCell(proxy); + let fg = new FinalizationGroup(() => {}); + fg.register(proxy); })(); -(function TestMakeCellTargetAndHoldingsSameValue() { - let wf = new WeakFactory(() => {}); +(function TestRegisterTargetAndHoldingsSameValue() { + let fg = new FinalizationGroup(() => {}); let obj = {a: 1}; // SameValue(target, holdings) not ok - assertThrows(() => wf.makeCell(obj, obj), TypeError, - "WeakFactory.prototype.makeCell: target and holdings must not be same"); + assertThrows(() => fg.register(obj, obj), TypeError, + "FinalizationGroup.prototype.register: target and holdings must not be same"); let holdings = {a: 1}; - let wc = wf.makeCell(obj, holdings); + fg.register(obj, holdings); })(); -(function TestMakeCellWithoutWeakFactory() { - assertThrows(() => WeakFactory.prototype.makeCell.call({}, {}), TypeError); +(function TestRegisterWithoutFinalizationGroup() { + assertThrows(() => FinalizationGroup.prototype.register.call({}, {}, "holdings"), TypeError); // Does not throw: - let wf = new WeakFactory(() => {}); - WeakFactory.prototype.makeCell.call(wf, {}); + let fg = new FinalizationGroup(() => {}); + FinalizationGroup.prototype.register.call(fg, {}, "holdings"); })(); -(function TestHoldingsWithoutWeakCell() { - let wf = new WeakFactory(() => {}); - let wc = wf.makeCell({}); - let holdings_getter = Object.getOwnPropertyDescriptor(wc.__proto__, "holdings").get; - assertThrows(() => holdings_getter.call({}), TypeError); - // Does not throw: - holdings_getter.call(wc); -})(); - -(function TestClearWithoutWeakCell() { - let wf = new WeakFactory(() => {}); - let wc = wf.makeCell({}); - let clear = Object.getOwnPropertyDescriptor(wc.__proto__, "clear").value; - assertThrows(() => clear.call({}), TypeError); - // Does not throw: - clear.call(wc); +(function TestUnregisterWithNonExistentKey() { + let fg = new FinalizationGroup(() => {}); + fg.unregister({"k": "whatever"}); })(); (function TestWeakRefConstructor() { @@ -194,21 +131,10 @@ let wr = new WeakRef(proxy); })(); -(function TestCleanupSomeWithoutWeakFactory() { - assertThrows(() => WeakFactory.prototype.cleanupSome.call({}), TypeError); +(function TestCleanupSomeWithoutFinalizationGroup() { + assertThrows(() => FinalizationGroup.prototype.cleanupSome.call({}), TypeError); // Does not throw: - let wf = new WeakFactory(() => {}); - let rv = WeakFactory.prototype.cleanupSome.call(wf); + let fg = new FinalizationGroup(() => {}); + let rv = FinalizationGroup.prototype.cleanupSome.call(fg); assertEquals(undefined, rv); })(); - -(function TestDerefWithoutWeakRef() { - let wf = new WeakFactory(() => {}); - let wc = wf.makeCell({}); - let wr = new WeakRef({}); - let deref = Object.getOwnPropertyDescriptor(wr.__proto__, "deref").value; - assertThrows(() => deref.call({}), TypeError); - assertThrows(() => deref.call(wc), TypeError); - // Does not throw: - deref.call(wr); -})(); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-doesnt-iterate-all-cells.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-doesnt-iterate-all-holdings.js similarity index 58% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-doesnt-iterate-all-cells.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-doesnt-iterate-all-holdings.js index f8e44c355c..20726284bb 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-doesnt-iterate-all-cells.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-doesnt-iterate-all-holdings.js @@ -7,48 +7,47 @@ let cleanup_call_count = 0; let cleanup = function(iter) { if (cleanup_call_count == 0) { - // First call: iterate 2 of the 3 cells - let cells = []; - for (wc of iter) { - cells.push(wc); - // Don't iterate the rest of the cells - if (cells.length == 2) { + // First call: iterate 2 of the 3 holdings + let holdings_list = []; + for (holdings of iter) { + holdings_list.push(holdings); + // Don't iterate the rest of the holdings + if (holdings_list.length == 2) { break; } } - assertEquals(cells.length, 2); - assertTrue(cells[0].holdings < 3); - assertTrue(cells[1].holdings < 3); + assertEquals(holdings_list.length, 2); + assertTrue(holdings_list[0] < 3); + assertTrue(holdings_list[1] < 3); // Update call count only after the asserts; this ensures that the test // fails even if the exceptions inside the cleanup function are swallowed. cleanup_call_count++; } else { - // Second call: iterate one leftover cell and one new cell. + // Second call: iterate one leftover holdings and one holdings. assertEquals(1, cleanup_call_count); - let cells = []; - for (wc of iter) { - cells.push(wc); + let holdings_list = []; + for (holdings of iter) { + holdings_list.push(holdings); } - assertEquals(cells.length, 2); - assertTrue((cells[0].holdings < 3 && cells[1].holdings == 100) || - (cells[1].holdings < 3 && cells[0].holdings == 100)); + assertEquals(holdings_list.length, 2); + assertTrue((holdings_list[0] < 3 && holdings_list[1] == 100) || + (holdings_list[1] < 3 && holdings_list[0] == 100)); // Update call count only after the asserts; this ensures that the test // fails even if the exceptions inside the cleanup function are swallowed. cleanup_call_count++; } } -let wf = new WeakFactory(cleanup); -// Create 3 objects and WeakCells pointing to them. The objects need to be -// inside a closure so that we can reliably kill them! -let weak_cells = []; +let fg = new FinalizationGroup(cleanup); +// Create 3 objects and register them in the FinalizationGroup. The objects need +// to be inside a closure so that we can reliably kill them! (function() { let objects = []; for (let i = 0; i < 3; ++i) { objects[i] = {a: i}; - weak_cells[i] = wf.makeCell(objects[i], i); + fg.register(objects[i], i); } gc(); @@ -58,14 +57,14 @@ let weak_cells = []; objects = []; })(); -// This GC will discover dirty WeakCells. +// This GC will reclaim the targets. gc(); assertEquals(0, cleanup_call_count); let timeout_func_1 = function() { assertEquals(1, cleanup_call_count); - // Assert that the cleanup function won't be called unless new WeakCells appear. + // Assert that the cleanup function won't be called unless new targets appear. setTimeout(timeout_func_2, 0); } @@ -74,9 +73,9 @@ setTimeout(timeout_func_1, 0); let timeout_func_2 = function() { assertEquals(1, cleanup_call_count); - // Create a new WeakCells to be cleaned up. + // Create a new object and register it. let obj = {}; - let wc = wf.makeCell(obj, 100); + let wc = fg.register(obj, 100); obj = null; gc(); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-from-different-realm.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-from-different-realm.js index 02f05ac8e2..97ab1dbd80 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-from-different-realm.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-from-different-realm.js @@ -9,15 +9,15 @@ let r = Realm.create(); let cleanup = Realm.eval(r, "var stored_global; function cleanup() { stored_global = globalThis; } cleanup"); let realm_global_this = Realm.eval(r, "globalThis"); -let wf = new WeakFactory(cleanup); +let fg = new FinalizationGroup(cleanup); -// Create an object and a WeakCell pointing to it. The object needs to be inside -// a closure so that we can reliably kill them! +// Create an object and a register it in the FinalizationGroup. The object needs +// to be inside a closure so that we can reliably kill them! let weak_cell; (function() { let object = {}; - weak_cell = wf.makeCell(object); + fg.register(object, {}); // object goes out of scope. })(); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-is-a-microtask.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-is-a-microtask.js index 6a5bcfa821..c6b834e8fb 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-is-a-microtask.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-is-a-microtask.js @@ -19,17 +19,17 @@ let log = []; let cleanup = (iter) => { log.push("cleanup"); - for (wc of iter) { } + for (holdings of iter) { } } -let wf = new WeakFactory(cleanup); +let fg = new FinalizationGroup(cleanup); let o = null; (function() { // Use a closure here to avoid other references to o which might keep it alive // (e.g., stack frames pointing to it). o = {}; - wf.makeCell(o); + fg.register(o, {}); })(); let microtask_after_cleanup = () => { diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-proxy-from-different-realm.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-proxy-from-different-realm.js index 2e46830093..1d275a19aa 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-proxy-from-different-realm.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanup-proxy-from-different-realm.js @@ -9,15 +9,15 @@ let r = Realm.create(); let cleanup = Realm.eval(r, "var stored_global; let cleanup = new Proxy(function() { stored_global = globalThis;}, {}); cleanup"); let realm_global_this = Realm.eval(r, "globalThis"); -let wf = new WeakFactory(cleanup); +let fg = new FinalizationGroup(cleanup); -// Create an object and a WeakCell pointing to it. The object needs to be inside -// a closure so that we can reliably kill them! +// Create an object and register it in the FinalizationGroup. The object needs +// to be inside a closure so that we can reliably kill them! let weak_cell; (function() { let object = {}; - weak_cell = wf.makeCell(object); + fg.register(object, "holdings"); // object goes out of scope. })(); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome-cleared-weakcell.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome-after-unregister.js similarity index 53% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome-cleared-weakcell.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome-after-unregister.js index 631f43c012..0cef0a1af5 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome-cleared-weakcell.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome-after-unregister.js @@ -5,31 +5,31 @@ // Flags: --harmony-weak-refs --expose-gc --noincremental-marking let cleanup_count = 0; -let cleanup_cells = []; +let cleanup_holdings = []; let cleanup = function(iter) { - for (wc of iter) { - cleanup_cells.push(wc); + for (holdings of iter) { + cleanup_holdings.push(holdings); } ++cleanup_count; } -let wf = new WeakFactory(cleanup); -let weak_cell; +let fg = new FinalizationGroup(cleanup); +let key = {"k": "this is the key"}; (function() { let o = {}; - weak_cell = wf.makeCell(o); + weak_cell = fg.register(o, "holdings", key); - // cleanupSome won't do anything since there are no dirty WeakCells. - wf.cleanupSome(); + // cleanupSome won't do anything since there are no reclaimed targets. + fg.cleanupSome(); assertEquals(0, cleanup_count); })(); // GC will detect the WeakCell as dirty. gc(); -// Clear the WeakCell just before we would've called cleanupSome. -weak_cell.clear(); +// Unregister the tracked object just before calling cleanupSome. +fg.unregister(key); -wf.cleanupSome(); +fg.cleanupSome(); assertEquals(0, cleanup_count); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome-weakcell.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome.js similarity index 52% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome-weakcell.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome.js index 84a946d390..1d3ceda3f2 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome-weakcell.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/cleanupsome.js @@ -5,29 +5,28 @@ // Flags: --harmony-weak-refs --expose-gc --noincremental-marking let cleanup_count = 0; -let cleanup_cells = []; +let cleanup_holdings = []; let cleanup = function(iter) { - for (wc of iter) { - cleanup_cells.push(wc); + for (holdings of iter) { + cleanup_holdings.push(holdings); } ++cleanup_count; } -let wf = new WeakFactory(cleanup); -let weak_cell; +let fg = new FinalizationGroup(cleanup); (function() { let o = {}; - weak_cell = wf.makeCell(o); + fg.register(o, "holdings"); - // cleanupSome won't do anything since there are no dirty WeakCells. - wf.cleanupSome(); + // cleanupSome won't do anything since there are no reclaimed targets. + fg.cleanupSome(); assertEquals(0, cleanup_count); })(); -// GC will detect the WeakCell as dirty. +// GC will detect o as dead. gc(); -wf.cleanupSome(); +fg.cleanupSome(); assertEquals(1, cleanup_count); -assertEquals(1, cleanup_cells.length); -assertEquals(weak_cell, cleanup_cells[0]); +assertEquals(1, cleanup_holdings.length); +assertEquals("holdings", cleanup_holdings[0]); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-called-twice.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-called-twice.js deleted file mode 100644 index a5aa537ff2..0000000000 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-called-twice.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2018 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --harmony-weak-refs --expose-gc --noincremental-marking - -let cleanup_call_count = 0; -let cleanup = function(iter) { - ++cleanup_call_count; -} - -let wf = new WeakFactory(cleanup); -// Create an object and a WeakCell pointing to it. The object needs to be inside -// a closure so that we can reliably kill them! -let weak_cell; - -(function() { - let object = {}; - weak_cell = wf.makeCell(object); - - // Clear the WeakCell before the GC has a chance to discover it. - weak_cell.clear(); - - // Call clear again (just to assert we handle this gracefully). - weak_cell.clear(); - - // object goes out of scope. -})(); - -// This GC will discover dirty WeakCells. -gc(); -assertEquals(0, cleanup_call_count); - -// Assert that the cleanup function won't be called, since the WeakCell was cleared. -let timeout_func = function() { - assertEquals(0, cleanup_call_count); -} - -setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-clears-factory-pointer.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-clears-factory-pointer.js deleted file mode 100644 index 98410d5d0e..0000000000 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-clears-factory-pointer.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2018 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --harmony-weak-refs --expose-gc --noincremental-marking - -// Test that WeakCell.prototype.clear() also clears the WeakFactory pointer of -// WeakCell. The only way to observe this is to assert that the WeakCell no -// longer keeps its WeakFactory alive after clear() has been called. - -let weak_cell; -let weak_cell_pointing_to_factory; - -let cleanup1_call_count = 0; -let cleanup2_call_count = 0; - -let cleanup1 = function() { - ++cleanup1_call_count; -} - -let cleanup2 = function() { - ++cleanup2_call_count; -} - -let wf1 = new WeakFactory(cleanup1); - -(function(){ - let wf2 = new WeakFactory(cleanup2); - - (function() { - let object = {}; - weak_cell = wf2.makeCell(object); - // object goes out of scope. - })(); - - weak_cell_pointing_to_factory = wf1.makeCell(wf2); - // wf goes out of scope -})(); - -weak_cell.clear(); -gc(); - -// Assert that weak_cell_pointing_to_factory now got cleared. -let timeout_func = function() { - assertEquals(1, cleanup1_call_count); - assertEquals(0, cleanup2_call_count); -} - -setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup4.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup4.js deleted file mode 100644 index 794f356119..0000000000 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup4.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2018 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --harmony-weak-refs --expose-gc --noincremental-marking - -let cleanup_call_count = 0; -let cleanup_weak_cell_count = 0; -let cleanup = function(iter) { - for (wc of iter) { - // See which WeakCell we're iterating over and clear the other one. - if (wc == weak_cell1) { - weak_cell2.clear(); - } else { - assertSame(wc, weak_cell2); - weak_cell1.clear(); - } - ++cleanup_weak_cell_count; - } - ++cleanup_call_count; -} - -let wf = new WeakFactory(cleanup); -// Create an object and a WeakCell pointing to it. The object needs to be inside -// a closure so that we can reliably kill them! -let weak_cell1; -let weak_cell2; - -(function() { - let object1 = {}; - weak_cell1 = wf.makeCell(object1); - let object2 = {}; - weak_cell2 = wf.makeCell(object2); - - // object1 and object2 go out of scope. -})(); - -// This GC will discover dirty WeakCells and schedule cleanup. -gc(); -assertEquals(0, cleanup_call_count); - -// Assert that the cleanup function was called and iterated one WeakCell (but not the other one). -let timeout_func = function() { - assertEquals(1, cleanup_call_count); - assertEquals(1, cleanup_weak_cell_count); -} - -setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/weak-factory-keeps-weak-cells-alive.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/finalization-group-keeps-holdings-alive.js similarity index 55% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/weak-factory-keeps-weak-cells-alive.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/finalization-group-keeps-holdings-alive.js index 367cd9a9c0..ea35a2e63f 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/weak-factory-keeps-weak-cells-alive.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/finalization-group-keeps-holdings-alive.js @@ -7,18 +7,19 @@ let cleanup_called = false; let cleanup = function(iter) { assertFalse(cleanup_called); - let cells = []; - for (wc of iter) { - cells.push(wc); + let holdings_list = []; + for (holdings of iter) { + holdings_list.push(holdings); } - assertEquals(cells.length, 1); - assertEquals(cells[0].holdings, "this is my cell"); + assertEquals(holdings_list.length, 1); + assertEquals(holdings_list[0].a, "this is the holdings object"); cleanup_called = true; } -let wf = new WeakFactory(cleanup); +let fg = new FinalizationGroup(cleanup); let o1 = {}; -let wc1 = wf.makeCell(o1, "this is my cell"); +let holdings = {'a': 'this is the holdings object'}; +fg.register(o1, holdings); gc(); assertFalse(cleanup_called); @@ -26,9 +27,9 @@ assertFalse(cleanup_called); // Drop the last references to o1. o1 = null; -// Drop the last reference to the WeakCell. The WeakFactory keeps it alive, so -// the cleanup function will be called as normal. -wc1 = null; +// Drop the last reference to the holdings. The FinalizationGroup keeps it +// alive, so the cleanup function will be called as normal. +holdings = null; gc(); assertFalse(cleanup_called); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/weakcell-and-weakref.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/finalizationgroup-and-weakref.js similarity index 68% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/weakcell-and-weakref.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/finalizationgroup-and-weakref.js index f6627be19e..bd66f1ce1d 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/weakcell-and-weakref.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/finalizationgroup-and-weakref.js @@ -7,27 +7,26 @@ let cleanup_called = false; let cleanup = function(iter) { assertFalse(cleanup_called); - let cells = []; - for (wc of iter) { - cells.push(wc); + let holdings_list = []; + for (holdings of iter) { + holdings_list.push(holdings); } - assertEquals(1, cells.length); - assertEquals(weak_cell, cells[0]); + assertEquals(1, holdings_list.length); + assertEquals("holdings", holdings_list[0]); cleanup_called = true; } -let wf = new WeakFactory(cleanup); +let fg = new FinalizationGroup(cleanup); let weak_ref; -let weak_cell; (function() { let o = {}; weak_ref = new WeakRef(o); - weak_cell = wf.makeCell(o); + fg.register(o, "holdings"); })(); // Since the WeakRef was created during this turn, it is not cleared by GC. The -// WeakCell is not cleared either, since the WeakRef keeps the target object -// alive. +// pointer inside the FinalizationGroup is not cleared either, since the WeakRef +// keeps the target object alive. gc(); (function() { assertNotEquals(undefined, weak_ref.deref()); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/factory-scheduled-for-cleanup-multiple-times.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/finalizationgroup-scheduled-for-cleanup-multiple-times.js similarity index 55% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/factory-scheduled-for-cleanup-multiple-times.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/finalizationgroup-scheduled-for-cleanup-multiple-times.js index 2f3915478e..a1cff3aaa0 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/factory-scheduled-for-cleanup-multiple-times.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/finalizationgroup-scheduled-for-cleanup-multiple-times.js @@ -6,66 +6,66 @@ // Flags: --no-stress-flush-bytecode let cleanup0_call_count = 0; -let cleanup0_weak_cell_count = 0; +let cleanup0_holdings_count = 0; let cleanup1_call_count = 0; -let cleanup1_weak_cell_count = 0; +let cleanup1_holdings_count = 0; let cleanup0 = function(iter) { - for (wc of iter) { - ++cleanup0_weak_cell_count; + for (holdings of iter) { + ++cleanup0_holdings_count; } ++cleanup0_call_count; } let cleanup1 = function(iter) { - for (wc of iter) { - ++cleanup1_weak_cell_count; + for (holdings of iter) { + ++cleanup1_holdings_count; } ++cleanup1_call_count; } -let wf0 = new WeakFactory(cleanup0); -let wf1 = new WeakFactory(cleanup1); +let fg0 = new FinalizationGroup(cleanup0); +let fg1 = new FinalizationGroup(cleanup1); -// Create 1 WeakCell for each WeakFactory and kill the objects they point to. +// Register 1 weak reference for each FinalizationGroup and kill the objects they point to. (function() { // The objects need to be inside a closure so that we can reliably kill them. let objects = []; objects[0] = {}; objects[1] = {}; - wf0.makeCell(objects[0]); - wf1.makeCell(objects[1]); + fg0.register(objects[0], "holdings0-0"); + fg1.register(objects[1], "holdings1-0"); // Drop the references to the objects. objects = []; - // Will schedule both wf0 and wf1 for cleanup. + // Will schedule both fg0 and fg1 for cleanup. gc(); })(); // Before the cleanup task has a chance to run, do the same thing again, so both -// factories are (again) scheduled for cleanup. This has to be a IIFE function +// FinalizationGroups are (again) scheduled for cleanup. This has to be a IIFE function // (so that we can reliably kill the objects) so we cannot use the same function // as before. (function() { let objects = []; objects[0] = {}; objects[1] = {}; - wf0.makeCell(objects[0]); - wf1.makeCell(objects[1]); + fg0.register(objects[0], "holdings0-1"); + fg1.register(objects[1], "holdings1-1"); objects = []; gc(); })(); let timeout_func = function() { assertEquals(1, cleanup0_call_count); - assertEquals(2, cleanup0_weak_cell_count); + assertEquals(2, cleanup0_holdings_count); assertEquals(1, cleanup1_call_count); - assertEquals(2, cleanup1_weak_cell_count); + assertEquals(2, cleanup1_holdings_count); } -// Give the cleanup task a chance to run. All WeakCells to cleanup will be -// available during the same invocation of the cleanup function. +// Give the cleanup task a chance to run. All holdings will be iterated during +// the same invocation of the cleanup function. setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/iterating-weak-cells.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/iterating-in-cleanup.js similarity index 51% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/iterating-weak-cells.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/iterating-in-cleanup.js index 9fef051122..73aac76378 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/iterating-weak-cells.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/iterating-in-cleanup.js @@ -7,29 +7,25 @@ let cleanup_called = false; let cleanup = function(iter) { assertFalse(cleanup_called); - let cells = []; - for (wc of iter) { - cells.push(wc); + let holdings_list = []; + for (holdings of iter) { + holdings_list.push(holdings); } - assertEquals(cells.length, 2); - if (cells[0] == wc1) { - assertEquals(cells[0].holdings, 1); - assertEquals(cells[1], wc2); - assertEquals(cells[1].holdings, 2); + assertEquals(holdings_list.length, 2); + if (holdings_list[0] == 1) { + assertEquals(holdings_list[1], 2); } else { - assertEquals(cells[0], wc2); - assertEquals(cells[0].holdings, 2); - assertEquals(cells[1], wc1); - assertEquals(cells[1].holdings, 1); + assertEquals(holdings_list[0], 2); + assertEquals(holdings_list[1], 1); } cleanup_called = true; } -let wf = new WeakFactory(cleanup); +let fg = new FinalizationGroup(cleanup); let o1 = {}; let o2 = {}; -let wc1 = wf.makeCell(o1, 1); -let wc2 = wf.makeCell(o2, 2); +fg.register(o1, 1); +fg.register(o2, 2); gc(); assertFalse(cleanup_called); @@ -37,8 +33,8 @@ assertFalse(cleanup_called); // Drop the last references to o1 and o2. o1 = null; o2 = null; -// GC will clear the WeakCells; the cleanup function will be called the next time -// we enter the event loop. +// GC will reclaim the target objects; the cleanup function will be called the +// next time we enter the event loop. gc(); assertFalse(cleanup_called); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/multiple-dirty-weak-factories.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/multiple-dirty-finalization-groups.js similarity index 60% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/multiple-dirty-weak-factories.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/multiple-dirty-finalization-groups.js index 98a33df240..51e721401a 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/multiple-dirty-weak-factories.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/multiple-dirty-finalization-groups.js @@ -5,28 +5,26 @@ // Flags: --harmony-weak-refs --expose-gc --noincremental-marking let cleanup_call_count = 0; -let cleanup_weak_cell_count = 0; +let cleanup_holdings_count = 0; let cleanup = function(iter) { - for (wc of iter) { - ++cleanup_weak_cell_count; + for (holdings of iter) { + ++cleanup_holdings_count; } ++cleanup_call_count; } -let wf1 = new WeakFactory(cleanup); -let wf2 = new WeakFactory(cleanup); +let fg1 = new FinalizationGroup(cleanup); +let fg2 = new FinalizationGroup(cleanup); -// Create two objects and WeakCells pointing to them. The objects need to be inside -// a closure so that we can reliably kill them! -let weak_cell1; -let weak_cell2; +// Create two objects and register them in FinalizationGroups. The objects need +// to be inside a closure so that we can reliably kill them! (function() { let object1 = {}; - weak_cell1 = wf1.makeCell(object1); + fg1.register(object1, "holdings1"); let object2 = {}; - weak_cell2 = wf2.makeCell(object2); + fg2.register(object2, "holdings2"); // object1 and object2 go out of scope. })(); @@ -35,10 +33,10 @@ let weak_cell2; gc(); assertEquals(0, cleanup_call_count); -// Assert that the cleanup function was called and iterated the WeakCells. +// Assert that the cleanup function was called and iterated the holdings. let timeout_func = function() { assertEquals(2, cleanup_call_count); - assertEquals(2, cleanup_weak_cell_count); + assertEquals(2, cleanup_holdings_count); } setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/undefined-holdings.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/undefined-holdings.js new file mode 100644 index 0000000000..ac3dc6041a --- /dev/null +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/undefined-holdings.js @@ -0,0 +1,39 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-weak-refs --expose-gc --noincremental-marking + +let cleanup_call_count = 0; +let cleanup_holdings_count = 0; +let cleanup = function(iter) { + for (holdings of iter) { + assertEquals(holdings, undefined); + ++cleanup_holdings_count; + } + ++cleanup_call_count; +} + +let fg = new FinalizationGroup(cleanup); + +// Create an object and register it in the FinalizationGroup. The object needs to be inside +// a closure so that we can reliably kill them! + +(function() { + let object = {}; + fg.register(object); + + // object goes out of scope. +})(); + +// This GC will reclaim the target object and schedule cleanup. +gc(); +assertEquals(0, cleanup_call_count); + +// Assert that the cleanup function was called and iterated the holdings. +let timeout_func = function() { + assertEquals(1, cleanup_call_count); + assertEquals(1, cleanup_holdings_count); +} + +setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-after-cleanup.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-after-cleanup.js similarity index 52% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-after-cleanup.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-after-cleanup.js index 3392d7fbb9..f6480f86b6 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-after-cleanup.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-after-cleanup.js @@ -5,42 +5,42 @@ // Flags: --harmony-weak-refs --expose-gc --noincremental-marking let cleanup_call_count = 0; -let cleanup_weak_cell_count = 0; +let cleanup_holdings_count = 0; let cleanup = function(iter) { - for (wc of iter) { - assertSame(wc, weak_cell); - ++cleanup_weak_cell_count; + for (holdings of iter) { + assertEquals("holdings", holdings); + ++cleanup_holdings_count; } ++cleanup_call_count; } -let wf = new WeakFactory(cleanup); -// Create an object and a WeakCell pointing to it. The object needs to be inside -// a closure so that we can reliably kill them! -let weak_cell; +let fg = new FinalizationGroup(cleanup); +let key = {"k": "this is the key"}; +// Create an object and register it in the FinalizationGroup. The object needs +// to be inside a closure so that we can reliably kill them! (function() { let object = {}; - weak_cell = wf.makeCell(object); + fg.register(object, "holdings", key); // object goes out of scope. })(); -// This GC will discover dirty WeakCells and schedule cleanup. +// This GC will reclaim the target object and schedule cleanup. gc(); assertEquals(0, cleanup_call_count); -// Assert that the cleanup function was called and iterated the WeakCell. +// Assert that the cleanup function was called and iterated the holdings. let timeout_func = function() { assertEquals(1, cleanup_call_count); - assertEquals(1, cleanup_weak_cell_count); + assertEquals(1, cleanup_holdings_count); - // Clear an already iterated over WeakCell. - weak_cell.clear(); + // Unregister an already iterated over weak reference. + fg.unregister(key); // Assert that it didn't do anything. setTimeout(() => { assertEquals(1, cleanup_call_count); }, 0); - setTimeout(() => { assertEquals(1, cleanup_weak_cell_count); }, 0); + setTimeout(() => { assertEquals(1, cleanup_holdings_count); }, 0); } setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-before-cleanup.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-before-cleanup.js similarity index 58% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-before-cleanup.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-before-cleanup.js index 1fd0fbf3b0..10b8bc67ff 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-before-cleanup.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-before-cleanup.js @@ -9,30 +9,27 @@ let cleanup = function(iter) { ++cleanup_call_count; } -let wf = new WeakFactory(cleanup); -// Create an object and a WeakCell pointing to it. The object needs to be inside -// a closure so that we can reliably kill them! -let weak_cell; +let fg = new FinalizationGroup(cleanup); +let key = {"k": "this is the key"}; +// Create an object and register it in the FinalizationGroup. The object needs +// to be inside a closure so that we can reliably kill them! (function() { let object = {}; - weak_cell = wf.makeCell(object, "my holdings"); + fg.register(object, "my holdings", key); // Clear the WeakCell before the GC has a chance to discover it. - let return_value = weak_cell.clear(); + let return_value = fg.unregister(key); assertEquals(undefined, return_value); - // Assert holdings got cleared too. - assertEquals(undefined, weak_cell.holdings); - // object goes out of scope. })(); -// This GC will discover dirty WeakCells. +// This GC will reclaim the target object. gc(); assertEquals(0, cleanup_call_count); -// Assert that the cleanup function won't be called, since the WeakCell was cleared. +// Assert that the cleanup function won't be called, since we called unregister. let timeout_func = function() { assertEquals(0, cleanup_call_count); } diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-called-twice.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-called-twice.js new file mode 100644 index 0000000000..e6ea150027 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-called-twice.js @@ -0,0 +1,40 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-weak-refs --expose-gc --noincremental-marking + +let cleanup_call_count = 0; +let cleanup = function(iter) { + ++cleanup_call_count; +} + +let fg = new FinalizationGroup(cleanup); +let key = {"k": "this is the key"}; +// Create an object and register it in the FinalizationGroup. The object needs +// to be inside a closure so that we can reliably kill them! + +(function() { + let object = {}; + fg.register(object, "holdings", key); + + // Unregister before the GC has a chance to discover the object. + fg.unregister(key); + + // Call unregister again (just to assert we handle this gracefully). + fg.unregister(key); + + // object goes out of scope. +})(); + +// This GC will reclaim the target object. +gc(); +assertEquals(0, cleanup_call_count); + +// Assert that the cleanup function won't be called, since the weak reference +// was unregistered. +let timeout_func = function() { + assertEquals(0, cleanup_call_count); +} + +setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup1.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup1.js similarity index 54% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup1.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup1.js index 6c06d7af74..aa9eab20ff 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup1.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup1.js @@ -5,37 +5,37 @@ // Flags: --harmony-weak-refs --expose-gc --noincremental-marking let cleanup_call_count = 0; -let cleanup_weak_cell_count = 0; +let cleanup_holdings_count = 0; let cleanup = function(iter) { - // Clear the WeakCell before we've iterated through it. - weak_cell.clear(); + // Unregister before we've iterated through the holdings. + fg.unregister(key); for (wc of iter) { - ++cleanup_weak_cell_count; + ++cleanup_holdings_count; } ++cleanup_call_count; } -let wf = new WeakFactory(cleanup); -// Create an object and a WeakCell pointing to it. The object needs to be inside -// a closure so that we can reliably kill them! -let weak_cell; +let fg = new FinalizationGroup(cleanup); +let key = {"k": "the key"}; +// Create an object and register it in the FinalizationGroup. The object needs +// to be inside a closure so that we can reliably kill them! (function() { let object = {}; - weak_cell = wf.makeCell(object); + fg.register(object, "holdings", key); // object goes out of scope. })(); -// This GC will discover dirty WeakCells and schedule cleanup. +// This GC will discover unretained targets and schedule cleanup. gc(); assertEquals(0, cleanup_call_count); -// Assert that the cleanup function was called, but didn't iterate any weak cells. +// Assert that the cleanup function was called, but didn't iterate any holdings. let timeout_func = function() { assertEquals(1, cleanup_call_count); - assertEquals(0, cleanup_weak_cell_count); + assertEquals(0, cleanup_holdings_count); } setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup2.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup2.js similarity index 64% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup2.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup2.js index 0aab366f97..84ec3aaef8 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup2.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup2.js @@ -5,24 +5,24 @@ // Flags: --harmony-weak-refs --expose-gc --noincremental-marking let cleanup_call_count = 0; -let cleanup_weak_cell_count = 0; +let cleanup_holdings_count = 0; let cleanup = function(iter) { - for (wc of iter) { - assertSame(wc, weak_cell); - wc.clear(); - ++cleanup_weak_cell_count; + for (holdings of iter) { + assertEquals(holdings, "holdings"); + fg.unregister(key); + ++cleanup_holdings_count; } ++cleanup_call_count; } -let wf = new WeakFactory(cleanup); -// Create an object and a WeakCell pointing to it. The object needs to be inside +let fg = new FinalizationGroup(cleanup); +// Create an object and register it in the FinalizationGroup. The object needs to be inside // a closure so that we can reliably kill them! -let weak_cell; +let key = {"k": "this is the key"}; (function() { let object = {}; - weak_cell = wf.makeCell(object); + fg.register(object, "holdings", key); // object goes out of scope. })(); @@ -34,7 +34,7 @@ assertEquals(0, cleanup_call_count); // Assert that the cleanup function was called and iterated the WeakCell. let timeout_func = function() { assertEquals(1, cleanup_call_count); - assertEquals(1, cleanup_weak_cell_count); + assertEquals(1, cleanup_holdings_count); } setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup3.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup3.js similarity index 55% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup3.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup3.js index 9dcea5ded5..39706a7b9b 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-inside-cleanup3.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup3.js @@ -5,37 +5,38 @@ // Flags: --harmony-weak-refs --expose-gc --noincremental-marking let cleanup_call_count = 0; -let cleanup_weak_cell_count = 0; +let cleanup_holdings_count = 0; let cleanup = function(iter) { - for (wc of iter) { - assertSame(wc, weak_cell); - ++cleanup_weak_cell_count; + for (holdings of iter) { + assertEquals(holdings, "holdings"); + ++cleanup_holdings_count; } - // Clear an already iterated over WeakCell. - weak_cell.clear(); + // Unregister an already iterated over weak reference. + fg.unregister(key); ++cleanup_call_count; } -let wf = new WeakFactory(cleanup); -// Create an object and a WeakCell pointing to it. The object needs to be inside +let fg = new FinalizationGroup(cleanup); +let key = {"k": "this is the key"}; + +// Create an object and register it in the FinalizationGroup. The object needs to be inside // a closure so that we can reliably kill them! -let weak_cell; (function() { let object = {}; - weak_cell = wf.makeCell(object); + fg.register(object, "holdings", key); // object goes out of scope. })(); -// This GC will discover dirty WeakCells and schedule cleanup. +// This GC will reclaim the target object and schedule cleanup. gc(); assertEquals(0, cleanup_call_count); -// Assert that the cleanup function was called and iterated the WeakCell. +// Assert that the cleanup function was called and iterated the holdings. let timeout_func = function() { assertEquals(1, cleanup_call_count); - assertEquals(1, cleanup_weak_cell_count); + assertEquals(1, cleanup_holdings_count); } setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup4.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup4.js new file mode 100644 index 0000000000..67ed227502 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-inside-cleanup4.js @@ -0,0 +1,48 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-weak-refs --expose-gc --noincremental-marking + +let cleanup_call_count = 0; +let cleanup_holdings_count = 0; +let cleanup = function(iter) { + for (holdings of iter) { + // See which target we're iterating over and unregister the other one. + if (holdings == 1) { + fg.unregister(key2); + } else { + assertSame(holdings, 2); + fg.unregister(key1); + } + ++cleanup_holdings_count; + } + ++cleanup_call_count; +} + +let fg = new FinalizationGroup(cleanup); +let key1 = {"k": "first key"}; +let key2 = {"k": "second key"}; +// Create two objects and register them in the FinalizationGroup. The objects +// need to be inside a closure so that we can reliably kill them! + +(function() { + let object1 = {}; + fg.register(object1, 1, key1); + let object2 = {}; + fg.register(object2, 2, key2); + + // object1 and object2 go out of scope. +})(); + +// This GC will reclaim target objects and schedule cleanup. +gc(); +assertEquals(0, cleanup_call_count); + +// Assert that the cleanup function was called and iterated one holdings (but not the other one). +let timeout_func = function() { + assertEquals(1, cleanup_call_count); + assertEquals(1, cleanup_holdings_count); +} + +setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-many.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-many.js new file mode 100644 index 0000000000..748b7065c6 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-many.js @@ -0,0 +1,50 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-weak-refs --expose-gc --noincremental-marking + +let cleanup_call_count = 0; +let cleanup_holdings_count = 0; +let cleanup = function(iter) { + for (holdings of iter) { + assertEquals("holdings2", holdings); + ++cleanup_holdings_count; + } + ++cleanup_call_count; +} + +let fg = new FinalizationGroup(cleanup); +let key1 = {"k": "key1"}; +let key2 = {"k": "key2"}; +// Create three objects and register them in the FinalizationGroup. The objects +// need to be inside a closure so that we can reliably kill them! + +(function() { + let object1a = {}; + fg.register(object1a, "holdings1a", key1); + + let object1b = {}; + fg.register(object1b, "holdings1b", key1); + + let object2 = {}; + fg.register(object2, "holdings2", key2); + + // Unregister before the GC has a chance to discover the objects. + fg.unregister(key1); + + // objects go out of scope. +})(); + +// This GC will reclaim the target objects. +gc(); +assertEquals(0, cleanup_call_count); + +// Assert that the cleanup function will be called only for the reference which +// was not unregistered. +let timeout_func = function() { + assertEquals(1, cleanup_call_count); + assertEquals(1, cleanup_holdings_count); +} + +setTimeout(timeout_func, 0); diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-when-cleanup-already-scheduled.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-when-cleanup-already-scheduled.js similarity index 65% rename from implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-when-cleanup-already-scheduled.js rename to implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-when-cleanup-already-scheduled.js index 159fb0b140..2466568397 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/clear-when-cleanup-already-scheduled.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/unregister-when-cleanup-already-scheduled.js @@ -9,14 +9,14 @@ let cleanup = function(iter) { ++cleanup_call_count; } -let wf = new WeakFactory(cleanup); -// Create an object and a WeakCell pointing to it. The object needs to be inside +let key = {"k": "this is my key"}; +let fg = new FinalizationGroup(cleanup); +// Create an object and register it in the FinalizationGroup. The object needs to be inside // a closure so that we can reliably kill them! -let weak_cell; (function() { let object = {}; - weak_cell = wf.makeCell(object); + fg.register(object, {}, key); // object goes out of scope. })(); @@ -25,10 +25,10 @@ let weak_cell; gc(); assertEquals(0, cleanup_call_count); -// Clear the WeakCell before cleanup has ran. -weak_cell.clear(); +// Unregister the object from the FinalizationGroup before cleanup has ran. +fg.unregister(key); -// Assert that the cleanup function won't be called, since the WeakCell was cleared. +// Assert that the cleanup function won't be called. let timeout_func = function() { assertEquals(0, cleanup_call_count); } diff --git a/implementation-contributed/v8/mjsunit/harmony/weakrefs/weak-cell-basics.js b/implementation-contributed/v8/mjsunit/harmony/weakrefs/weak-cell-basics.js index eb365986d7..170a52df10 100644 --- a/implementation-contributed/v8/mjsunit/harmony/weakrefs/weak-cell-basics.js +++ b/implementation-contributed/v8/mjsunit/harmony/weakrefs/weak-cell-basics.js @@ -8,16 +8,17 @@ let cleanup_called = false; let cleanup = function(iter) { assertFalse(cleanup_called); let result = iter.next(); - assertEquals(result.value, wc); + assertEquals(result.value, holdings); assertFalse(result.done); result = iter.next(); assertTrue(result.done); cleanup_called = true; } -let wf = new WeakFactory(cleanup); +let fg = new FinalizationGroup(cleanup); let o = {}; -let wc = wf.makeCell(o); +let holdings = {'h': 55}; +fg.register(o, holdings); gc(); assertFalse(cleanup_called); diff --git a/implementation-contributed/v8/mjsunit/integrity-level-map-update.js b/implementation-contributed/v8/mjsunit/integrity-level-map-update.js new file mode 100644 index 0000000000..b4e066f7de --- /dev/null +++ b/implementation-contributed/v8/mjsunit/integrity-level-map-update.js @@ -0,0 +1,166 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +(function SealAndReconfigure() { + function C() { this.x = 1; this.y = 1; Object.seal(this); } + + let c1 = new C(); + + c1.x = 0.1; + + let c2 = new C(); + let c3 = new C(); + let c4 = new C(); + + // The objects c2, c3 and c4 should follow the same transition + // path that we reconfigured c1 to. + assertTrue(%HaveSameMap(c1, c2)); + assertTrue(%HaveSameMap(c1, c3)); + assertTrue(%HaveSameMap(c1, c4)); + + c2.x = 0.1; + c3.x = 0.1; + c4.x = 0.1; + + assertTrue(%HaveSameMap(c1, c2)); + assertTrue(%HaveSameMap(c1, c3)); + assertTrue(%HaveSameMap(c1, c4)); +})(); + +(function SealAndReconfigureWithIC() { + function C() { this.x = 1; this.y = 1; Object.seal(this); } + + let c1 = new C(); + + function g(o) { + o.x = 0.1; + } + + g(c1); + + let c2 = new C(); + let c3 = new C(); + let c4 = new C(); + + // The objects c2, c3 and c4 should follow the same transition + // path that we reconfigured c1 to. + assertTrue(%HaveSameMap(c1, c2)); + assertTrue(%HaveSameMap(c1, c3)); + assertTrue(%HaveSameMap(c1, c4)); + + g(c2); + g(c3); + g(c4); + + assertTrue(%HaveSameMap(c1, c2)); + assertTrue(%HaveSameMap(c1, c3)); + assertTrue(%HaveSameMap(c1, c4)); +})(); + +(function SealReconfigureAndMigrateWithIC() { + function C() { this.x = 1; this.y = 1; Object.seal(this); } + + let c1 = new C(); + let c2 = new C(); + let c3 = new C(); + let c4 = new C(); + + function g(o) { + o.x = 0.1; + } + + g(c1); + + // Now c2, c3 and c4 have deprecated maps. + assertFalse(%HaveSameMap(c1, c2)); + assertFalse(%HaveSameMap(c1, c3)); + assertFalse(%HaveSameMap(c1, c4)); + + g(c2); + g(c3); + g(c4); + + assertTrue(%HaveSameMap(c1, c2)); + assertTrue(%HaveSameMap(c1, c3)); + assertTrue(%HaveSameMap(c1, c4)); +})(); + +(function SealReconfigureAndMigrateWithOptCode() { + function C() { this.x = 1; this.y = 1; Object.seal(this); } + + let c1 = new C(); + let c2 = new C(); + let c3 = new C(); + let c4 = new C(); + + function g(o) { + o.x = 0.1; + } + + g(c1); + g(c2); + g(c3); + %OptimizeFunctionOnNextCall(g); + g(c4); + + assertTrue(%HaveSameMap(c1, c2)); + assertTrue(%HaveSameMap(c1, c3)); + assertTrue(%HaveSameMap(c1, c4)); +})(); + +(function PreventExtensionsAndReconfigure() { + function C() { this.x = 1; this.y = 1; Object.preventExtensions(this); } + + let c1 = new C(); + + function g(o) { + o.x = 0.1; + } + + g(c1); + + let c2 = new C(); + let c3 = new C(); + let c4 = new C(); + + c2.x = 0.1; + c3.x = 0.1; + c4.x = 0.1; + + assertTrue(%HaveSameMap(c1, c2)); + assertTrue(%HaveSameMap(c1, c3)); + assertTrue(%HaveSameMap(c1, c4)); +})(); + +(function PreventExtensionsSealAndReconfigure() { + function C() { + this.x = 1; + this.y = 1; + Object.preventExtensions(this); + Object.seal(this); + } + + let c1 = new C(); + + function g(o) { + o.x = 0.1; + } + + g(c1); + + let c2 = new C(); + let c3 = new C(); + let c4 = new C(); + + c2.x = 0.1; + c3.x = 0.1; + c4.x = 0.1; + + // Ideally, all the objects would have the same map, but at the moment + // we shortcut the unnecessary integrity level transitions. + assertTrue(%HaveSameMap(c2, c3)); + assertTrue(%HaveSameMap(c2, c4)); +})(); diff --git a/implementation-contributed/v8/mjsunit/messages.js b/implementation-contributed/v8/mjsunit/messages.js index d5c796228c..916a7d554f 100644 --- a/implementation-contributed/v8/mjsunit/messages.js +++ b/implementation-contributed/v8/mjsunit/messages.js @@ -126,13 +126,6 @@ test(function() { [].join(o); }, "Cannot convert object to primitive value", TypeError); -// kCircularStructure -test(function() { - var o = {}; - o.o = o; - JSON.stringify(o); -}, "Converting circular structure to JSON", TypeError); - // kConstructorNotFunction test(function() { Map(); diff --git a/implementation-contributed/v8/mjsunit/mjsunit.js b/implementation-contributed/v8/mjsunit/mjsunit.js index 41f2caee7a..b81c9676e6 100644 --- a/implementation-contributed/v8/mjsunit/mjsunit.js +++ b/implementation-contributed/v8/mjsunit/mjsunit.js @@ -213,7 +213,7 @@ var prettyPrinted; // TODO(neis): Remove try-catch once BigInts are enabled by default. try { BigIntPrototypeValueOf = BigInt.prototype.valueOf; - } catch(e) {} + } catch (e) {} function classOf(object) { // Argument must not be null or undefined. @@ -480,14 +480,17 @@ var prettyPrinted; } }; + function executeCode(code) { + if (typeof code === 'function') return code(); + if (typeof code === 'string') return eval(code); + failWithMessage( + 'Given code is neither function nor string, but ' + (typeof code) + + ': <' + prettyPrinted(code) + '>'); + } assertThrows = function assertThrows(code, type_opt, cause_opt) { try { - if (typeof code === 'function') { - code(); - } else { - eval(code); - } + executeCode(code); } catch (e) { if (typeof type_opt === 'function') { assertInstanceof(e, type_opt); @@ -508,11 +511,10 @@ var prettyPrinted; failWithMessage("Did not throw exception"); }; - assertThrowsEquals = function assertThrowsEquals(fun, val) { try { fun(); - } catch(e) { + } catch (e) { assertSame(val, e); return; } @@ -533,15 +535,11 @@ var prettyPrinted; } }; - - assertDoesNotThrow = function assertDoesNotThrow(code, name_opt) { + assertDoesNotThrow = function assertDoesNotThrow(code, name_opt) { try { - if (typeof code === 'function') { - return code(); - } else { - return eval(code); - } + executeCode(code); } catch (e) { + if (e instanceof MjsUnitAssertionError) throw e; failWithMessage("threw an exception: " + (e.message || e)); } }; @@ -584,13 +582,15 @@ var prettyPrinted; } assertPromiseResult = function(promise, success, fail) { + if (success !== undefined) assertEquals('function', typeof success); + if (fail !== undefined) assertEquals('function', typeof fail); const stack = (new Error()).stack; var test_promise = promise.then( result => { try { if (--promiseTestCount == 0) testRunner.notifyDone(); - if (success) success(result); + if (success !== undefined) success(result); } catch (e) { // Use setTimeout to throw the error again to get out of the promise // chain. @@ -602,7 +602,7 @@ var prettyPrinted; result => { try { if (--promiseTestCount == 0) testRunner.notifyDone(); - if (!fail) throw result; + if (fail === undefined) throw result; fail(result); } catch (e) { // Use setTimeout to throw the error again to get out of the promise @@ -667,7 +667,9 @@ var prettyPrinted; // option is provided. Such tests must add --opt to flags comment. assertFalse((opt_status & V8OptimizationStatus.kNeverOptimize) !== 0, "test does not make sense with --no-opt"); - assertTrue((opt_status & V8OptimizationStatus.kIsFunction) !== 0, name_opt); + assertTrue( + (opt_status & V8OptimizationStatus.kIsFunction) !== 0, + 'should be a function: ' + name_opt); if (skip_if_maybe_deopted && (opt_status & V8OptimizationStatus.kMaybeDeopted) !== 0) { // When --deopt-every-n-times flag is specified it's no longer guaranteed @@ -675,7 +677,9 @@ var prettyPrinted; // to stress test the deoptimizer. return; } - assertTrue((opt_status & V8OptimizationStatus.kOptimized) !== 0, name_opt); + assertTrue( + (opt_status & V8OptimizationStatus.kOptimized) !== 0, + 'should be optimized: ' + name_opt); } isNeverOptimizeLiteMode = function isNeverOptimizeLiteMode() { @@ -772,7 +776,7 @@ var prettyPrinted; return frame; }); return "" + error.message + "\n" + ArrayPrototypeJoin.call(stack, "\n"); - } catch(e) {}; + } catch (e) {}; return error.stack; } })(); diff --git a/implementation-contributed/v8/mjsunit/mjsunit.status b/implementation-contributed/v8/mjsunit/mjsunit.status index 884c7cca92..fd13b2750f 100644 --- a/implementation-contributed/v8/mjsunit/mjsunit.status +++ b/implementation-contributed/v8/mjsunit/mjsunit.status @@ -1003,4 +1003,1166 @@ 'regress/regress-913844': [SKIP], }], +] + + /* + ********************************** test262-automation ********************************** + Summary: The two files have now diverged. + File Status: Partially curated & modified. + Source Status: Modified since its export. + Below is the current and modified source which was exported on Mon Feb 04 2019 19:40:41 GMT+0000 (Coordinated Universal Time) + */ + # Copyright 2012 the V8 project authors. All rights reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +[ +[ALWAYS, { + # Modules which are only meant to be imported from by other tests, not to be + # tested standalone. + 'modules-skip*': [SKIP], + 'harmony/modules-skip*': [SKIP], + 'regress/modules-skip*': [SKIP], + 'wasm/exceptions-utils': [SKIP], + 'wasm/wasm-module-builder': [SKIP], + + # All tests in the bug directory are expected to fail. + 'bugs/*': [FAIL], + + ############################################################################## + # Fails. + 'regress/regress-1119': [FAIL], + + # Issue 1719: Slow to collect arrays over several contexts. + 'regress/regress-524': [SKIP], + # When that bug is fixed, revert the expectation to: + # Skip long running test in debug. + # regress/regress-524: [PASS, ['mode == debug', SKIP]], + + # This test non-deterministically runs out of memory on Windows ia32. + 'regress/regress-crbug-160010': [SKIP], + + # Issue 3784: setters-on-elements is flaky + 'setters-on-elements': [PASS, FAIL], + + # Issue 5495: enable the test when the constant field tracking in enabled. + 'const-field-tracking': [SKIP], + + # Issue 8505: Math.pow is incorrect for asm.js + 'regress/wasm/regress-8505': [SKIP], + + ############################################################################## + # Too slow in debug mode with --stress-opt mode. + 'regress/regress-create-exception': [PASS, ['mode == debug', SKIP]], + + ############################################################################## + # Too slow in debug mode for validation of elements. + 'regress/regress-430201': [PASS, ['mode == debug', SKIP], ['tsan', SKIP]], + 'regress/regress-430201b': [PASS, ['mode == debug', SKIP]], + 'regress/regress-716044': [PASS, ['mode == debug', SKIP]], + + ############################################################################## + # Too slow in debug mode for GC stress mode. + 'regress/regress-crbug-217858': [PASS, ['mode == debug', SKIP]], + + # Too slow in debug mode and under turbofan. + 'regress/regress-4595': [PASS, NO_VARIANTS, ['mode == debug', SKIP]], + + ############################################################################## + # Only RegExp stuff tested, no need for extensive optimizing compiler tests. + 'regexp-global': [PASS, NO_VARIANTS], + 'third_party/regexp-pcre/regexp-pcre': [PASS, NO_VARIANTS], + + ############################################################################## + # No need to waste time for this test. + 'd8/d8-performance-now': [PASS, NO_VARIANTS], + 'regress/regress-crbug-491062': [PASS, NO_VARIANTS], + + # Issue 488: this test sometimes times out. + # TODO(arm): This seems to flush out a bug on arm with simulator. + 'array-constructor': [PASS, SLOW, ['arch == arm and simulator_run == True', SKIP]], + + # Very slow test + 'regress/regress-crbug-808192' : [PASS, SLOW, NO_VARIANTS, ['mode == debug or arch == arm or arch == arm64 or arch == android_arm or arch == android_arm64 or arch == mipsel or arch == mips64el or arch == mips64 or arch == mips or arch == s390 or arch == s390x or arch == ppc or arch == ppc64', SKIP]], + + # Very slow on ARM and MIPS, contains no architecture dependent code. + 'unicode-case-overoptimization': [PASS, NO_VARIANTS, ['arch == arm or arch == arm64 or arch == android_arm or arch == android_arm64 or arch == mipsel or arch == mips64el or arch == mips64 or arch == mips', SKIP]], + 'regress/regress-3976': [PASS, NO_VARIANTS, ['arch == arm or arch == arm64 or arch == android_arm or arch == android_arm64 or arch == mipsel or arch == mips64el or arch == mips64 or arch == mips', SKIP]], + 'regress/regress-crbug-482998': [PASS, NO_VARIANTS, ['arch == arm or arch == arm64 or arch == android_arm or arch == android_arm64 or arch == mipsel or arch == mips64el or arch == mips', SKIP]], + 'regress/regress-740784': [PASS, NO_VARIANTS, ['arch == arm or arch == arm64 or arch == android_arm or arch == android_arm64 or arch == mipsel or arch == mips64el or arch == mips', SKIP]], + + # This test allocates a 2G block of memory and if there are multiple + # variants this can lead to OOM. + 'regress/regress-crbug-514081': [PASS, NO_VARIANTS], + + ############################################################################## + # Skip long running tests that time out in debug mode. + 'generated-transition-stub': [PASS, ['mode == debug', SKIP]], + 'migrations': [SKIP], + 'array-functions-prototype-misc': [PASS, SLOW, ['mode == debug', SKIP]], + 'compiler/regress-808472': [PASS, ['mode == debug', SKIP]], + 'es6/promise-all-overflow-1': [SKIP], + 'es6/promise-all-overflow-2': [PASS, SLOW, ['mode == debug or arch != x64', SKIP]], + + ############################################################################## + # This test sets the umask on a per-process basis and hence cannot be + # used in multi-threaded runs. + # On android there is no /tmp directory. + # Currently d8-os generates a temporary directory name using Math.random(), so + # we cannot run several variants of d8-os simultaneously, since all of them + # get the same random seed and would generate the same directory name. Besides + # that, it doesn't make sense to run several variants of d8-os anyways. + 'd8/d8-os': [PASS, NO_VARIANTS, ['isolates or arch == android_arm or arch == android_arm64 or arch == android_ia32', SKIP]], + 'tools/tickprocessor': [PASS, NO_VARIANTS, ['arch == android_arm or arch == android_arm64 or arch == android_ia32', SKIP]], + 'tools/dumpcpp': [PASS, NO_VARIANTS, ['arch == android_arm or arch == android_arm64 or arch == android_ia32', SKIP]], + + ############################################################################## + # These tests generate files in the test directory, so we cannot run several + # variants of them simultaneously. Additionally they should not be affected by + # variants. + 'd8/enable-tracing': [PASS, NO_VARIANTS], + 'tools/compiler-trace-flags': [PASS, NO_VARIANTS], + + ############################################################################## + # Long running test that reproduces memory leak and should be run manually. + 'regress/regress-2073': [SKIP], + + ############################################################################## + # Tests verifying CHECK and ASSERT. + 'verify-check-false': [FAIL, NO_VARIANTS], + 'verify-assert-false': [NO_VARIANTS, ['mode == release and dcheck_always_on == False', PASS], ['mode == debug', FAIL]], + + ############################################################################## + # Tests with different versions for release and debug. + 'compiler/alloc-number': [PASS, ['mode == debug', SKIP]], + 'compiler/alloc-number-debug': [PASS, ['mode == release', SKIP]], + 'regress/regress-634-debug': [PASS, ['mode == release', SKIP]], + + # BUG(v8:2989). + 'regress/regress-2989': [FAIL, NO_VARIANTS, ['lite_mode == True', SKIP]], + + # This test variant makes only sense on arm. + 'math-floor-of-div-nosudiv': [PASS, SLOW, ['arch not in [arm, arm64, android_arm, android_arm64]', SKIP]], + + # Too slow for slow variants. + 'asm/embenchen/*': [PASS, SLOW, NO_VARIANTS], + 'asm/poppler/*': [PASS, SLOW, NO_VARIANTS], + 'asm/sqlite3/*': [PASS, SLOW, NO_VARIANTS], + + # OOM flakes in isolates tests because too many largish heaps are created. + 'asm/asm-heap': [PASS, NO_VARIANTS, ['isolates', SKIP]], + + # Slow tests. + 'copy-on-write-assert': [PASS, SLOW], + 'es6/typedarray-construct-offset-not-smi': [PASS, SLOW], + 'harmony/regexp-property-script-extensions': [PASS, SLOW], + 'md5': [PASS, SLOW], + 'numops-fuzz-part*': [PASS, ['mode == debug', SLOW]], + 'readonly': [PASS, SLOW], + 'regress/regress-1122': [PASS, SLOW], + 'regress/regress-605470': [PASS, SLOW], + 'regress/regress-655573': [PASS, SLOW], + 'regress/regress-1200351': [PASS, SLOW], + 'regress/wasm/regress-810973': [PASS, SLOW], + 'string-replace-gc': [PASS, SLOW], + 'wasm/asm-wasm-f32': [PASS, SLOW], + 'wasm/asm-wasm-f64': [PASS, SLOW], + 'wasm/embenchen/*': [PASS, SLOW], + 'wasm/grow-memory': [PASS, SLOW], + 'wasm/unreachable-validation': [PASS, SLOW], + 'wasm/atomics-stress': [PASS, SLOW, NO_VARIANTS, ['mode != release or dcheck_always_on', SKIP], ['(arch == arm or arch == arm64) and simulator_run', SKIP], ['tsan', SKIP]], + 'wasm/atomics64-stress': [PASS, SLOW, NO_VARIANTS, ['mode != release or dcheck_always_on', SKIP], ['(arch == arm or arch == arm64) and simulator_run', SKIP], ['tsan', SKIP]], + 'wasm/compare-exchange-stress': [PASS, SLOW, NO_VARIANTS], + 'wasm/compare-exchange64-stress': [PASS, SLOW, NO_VARIANTS], + + # case-insensitive unicode regexp relies on case mapping provided by ICU. + 'es6/unicode-regexp-ignore-case': [PASS, ['no_i18n == True', FAIL]], + 'es6/unicode-regexp-ignore-case-noi18n': [FAIL, ['no_i18n == True', PASS]], + 'regress/regress-5036': [PASS, ['no_i18n == True', FAIL]], + 'es7/regexp-ui-word': [PASS, ['no_i18n == True', FAIL]], + 'regexp-modifiers-i18n': [PASS, ['no_i18n == True', FAIL]], + 'regexp-modifiers-autogenerated-i18n': [PASS, ['no_i18n == True', FAIL]], + # desugaring regexp property class relies on ICU. + 'harmony/regexp-property-*': [PASS, ['no_i18n == True', FAIL]], + 'regress/regress-793588': [PASS, ['no_i18n == True', FAIL]], + + # noi18n build cannot parse characters in supplementary plane. + 'harmony/regexp-named-captures': [PASS, ['no_i18n == True', FAIL]], + + # noi18n cannot turn on ICU backend for Date + 'icu-date-to-string': [PASS, ['no_i18n == True', SKIP]], + 'icu-date-lord-howe': [PASS, ['no_i18n == True', SKIP]], + 'tzoffset-transition-apia': [PASS, ['no_i18n == True', SKIP]], + 'tzoffset-transition-lord-howe': [PASS, ['no_i18n == True', SKIP]], + 'tzoffset-transition-moscow': [PASS, ['no_i18n == True', SKIP]], + 'tzoffset-transition-new-york': [PASS, ['no_i18n == True', SKIP]], + 'tzoffset-seoul': [PASS, ['no_i18n == True', SKIP]], + + # TODO(bmeurer): Flaky timeouts (sometimes <1s, sometimes >3m). + 'unicodelctest': [PASS, NO_VARIANTS], + 'unicodelctest-no-optimization': [PASS, NO_VARIANTS], + + # TODO(vogelheim): big-object-literal exceeds the stack in debug builds, + # which makes the test useless. + 'big-object-literal': [PASS, ['mode == debug', SKIP]], + + # Runs out of stack space in debug builds. + 'big-array-literal': [PASS, ['mode == debug', SKIP]], + + # BUG(v8:6306). + 'wasm/huge-memory': [SKIP], + + # Allocates a huge string and then flattens it, very slow in debug mode. + 'regress/regress-752764': [PASS, ['mode == debug', SLOW]], + + # https://crbug.com/v8/7697 + 'array-literal-feedback': [PASS, FAIL], + + # https://crbug.com/v8/7775 + 'allocation-site-info': [SKIP], + + # BUG(v8:8169) + 'external-backing-store-gc': [SKIP], + + # https://crbug.com/v8/8781 + 'compiler/string-from-code-point': [PASS, FAIL], +}], # ALWAYS + +['novfp3 == True', { + 'asm/embenchen/box2d': [SKIP], + 'asm/embenchen/zlib': [SKIP], + 'asm/embenchen/memops': [SKIP], + 'asm/embenchen/lua_binarytrees': [SKIP], +}], # novfp3 == True + +############################################################################## +# TODO(ahaas): Port multiple return values to ARM, MIPS, S390 and PPC +['arch == arm or arch == arm64 or arch == mips or arch == mips64 or arch == mipsel or arch == mips64el or arch == s390 or arch == s390x or arch == ppc or arch == ppc64', { + 'wasm/multi-value': [SKIP], +}], + +############################################################################## +['gc_stress == True', { + # Skip tests not suitable for GC stress. + 'allocation-site-info': [SKIP], + 'array-constructor-feedback': [SKIP], + 'array-feedback': [SKIP], + 'array-literal-feedback': [SKIP], + 'd8/d8-performance-now': [SKIP], + 'elements-kind': [SKIP], + 'elements-transition-hoisting': [SKIP], + 'fast-prototype': [SKIP], + 'field-type-tracking': [SKIP], + 'getters-on-elements': [SKIP], + 'es6/block-let-crankshaft': [SKIP], + 'opt-elements-kind': [SKIP], + 'osr-elements-kind': [SKIP], + 'regress/regress-crbug-137689': [SKIP], + 'regress/regress-trap-allocation-memento': [SKIP], + 'regress/regress-2249': [SKIP], + 'regress/regress-4121': [SKIP], + 'regress/regress-6989': [SKIP], + 'compare-known-objects-slow': [SKIP], + 'compiler/array-multiple-receiver-maps': [SKIP], + # Tests taking too long + 'packed-elements': [SKIP], + 'regress/regress-1122': [SKIP], + 'regress/regress-331444': [SKIP], + 'regress/regress-353551': [SKIP], + 'regress/regress-crbug-119926': [SKIP], + 'regress/short-circuit': [SKIP], + 'stack-traces-overflow': [SKIP], + 'unicode-test': [SKIP], + 'whitespaces': [SKIP], + + # Unsuitable for GC stress because coverage information is lost on GC. + 'code-coverage-ad-hoc': [SKIP], + 'code-coverage-precise': [SKIP], + + # TODO(mstarzinger): Takes too long with TF. + 'array-sort': [PASS, NO_VARIANTS], + 'regress/regress-91008': [PASS, NO_VARIANTS], + 'regress/regress-transcendental': [PASS, ['arch == arm64', NO_VARIANTS]], + 'compiler/osr-regress-max-locals': [PASS, NO_VARIANTS], + 'math-floor-of-div': [PASS, NO_VARIANTS], + 'unicodelctest': [PASS, NO_VARIANTS], + 'unicodelctest-no-optimization': [PASS, NO_VARIANTS], + + # TODO(jkummerow): Doesn't work correctly in GC stress. + 'regress/regress-crbug-500497': [SKIP], + + # Too slow for gc stress. + 'asm/embenchen/box2d': [SKIP], + + # BUG(v8:4237) + 'regress/regress-3976': [SKIP], + + # Slow tests. + 'array-constructor': [PASS, SLOW], + 'json': [PASS, SLOW], + + # BUG(v8:4779): Crashes flakily with stress mode on arm64. + 'array-splice': [PASS, SLOW, ['arch == arm64', NO_VARIANTS]], + + # BUG(v8:7880): Slow tests. + 'regress/regress-707066': [SKIP], + 'regress/regress-446389': [SKIP], + 'regress/regress-458987': [SKIP], + 'es6/regress/regress-crbug-465671': [SKIP], + 'regress/regress-inline-getter-near-stack-limit': [SKIP], + 'es6/regress/regress-crbug-465671-null': [SKIP], + 'regress/regress-148378': [SKIP], + 'regress/regress-crbug-762472': [SKIP], +}], # 'gc_stress == True' + +############################################################################## +['lite_mode or variant == jitless', { + # Skip tests not suitable for lite_mode. + + # TODO(8596): We cache the templates in the feedback vector. In lite mode + # without feedback vectors we need to implement some other mechanism to cache + # them. Enable this test after fixing it. + 'es6/templates': [SKIP], + + # code coverage needs feedback vectors + 'code-coverage-ad-hoc': [SKIP], + 'code-coverage-class-fields': [SKIP], + 'code-coverage-block-noopt': [SKIP], + 'code-coverage-block': [SKIP], + 'code-coverage-precise': [SKIP], + + # Needs feedback vector - tests for allocation sites + 'array-constructor-feedback': [SKIP], + 'regress/regress-trap-allocation-memento': [SKIP], + 'regress/regress-4121': [SKIP], + + # Slow tests without feedback vectors + # TODO(mythria): Investigate why they are slow and either fix if + # possible are update the reason why they are slow. + 'spread-large-string': [SKIP], + 'spread-large-array': [SKIP], + + # TODO(v8:7777): Re-enable once wasm is supported in jitless mode. + 'regress/regress-5888': [SKIP], + 'regress/regress-5911': [SKIP], + 'regress/regress-813440': [SKIP], + 'regress/regress-crbug-746835': [SKIP], + 'regress/regress-crbug-772056': [SKIP], + 'regress/wasm/*': [SKIP], + 'tools/compiler-trace-flags': [SKIP], + 'wasm/*': [SKIP], + + # Other tests that use asm / wasm / optimized code. + 'asm/asm-heap': [SKIP], + 'asm/asm-validation': [SKIP], + 'asm/call-stdlib': [SKIP], + 'asm/call-annotation': [SKIP], + 'asm/global-imports': [SKIP], + 'asm/regress-913822': [SKIP], + 'asm/return-types': [SKIP], + 'regress/regress-599719': [SKIP], + 'regress/regress-6196': [SKIP], + 'regress/regress-6700': [SKIP], + 'regress/regress-6838-2': [SKIP], + 'regress/regress-6838-3': [SKIP], + + # Timeouts in lite / jitless mode. + 'asm/embenchen/*': [SKIP], + + # Tests that generate code at runtime. + 'code-comments': [SKIP], + 'regress/regress-617526': [SKIP], + 'regress/regress-7893': [SKIP], + 'regress/regress-8377': [SKIP], + 'regress/regress-863810': [SKIP], + 'regress/regress-crbug-721835': [SKIP], + 'regress/regress-crbug-759327': [SKIP], + 'regress/regress-crbug-898974': [SKIP], +}], # 'lite_mode or variant == jitless' + +############################################################################## +['variant == jitless', { + # https://crbug.com/v8/7777 + 'array-literal-transitions': [SKIP], + 'array-push5': [SKIP], + 'array-shift4': [SKIP], + 'array-store-and-grow': [SKIP], + 'code-coverage-block-opt': [SKIP], + 'compiler/abstract-equal-receiver': [SKIP], + 'compiler/abstract-equal-symbol': [SKIP], + 'compiler/abstract-equal-undetectable': [SKIP], + 'compiler/array-buffer-is-view': [SKIP], + 'compiler/array-multiple-receiver-maps': [SKIP], + 'compiler/array-push-3': [SKIP], + 'compiler/array-slice-clone': [SKIP], + 'compiler/constant-fold-cow-array': [SKIP], + 'compiler/dataview-deopt': [SKIP], + 'compiler/dataview-get': [SKIP], + 'compiler/dataview-neutered': [SKIP], + 'compiler/dataview-set': [SKIP], + 'compiler/deopt-array-builtins': [SKIP], + 'compiler/deopt-array-push': [SKIP], + 'compiler/deopt-inlined-from-call': [SKIP], + 'compiler/deopt-numberoroddball-binop': [SKIP], + 'compiler/deopt-string-outofbounds': [SKIP], + 'compiler/increment-typefeedback': [SKIP], + 'compiler/inlined-array-pop-opt': [SKIP], + 'compiler/inlined-call': [SKIP], + 'compiler/integral32-add-sub': [SKIP], + 'compiler/manual-concurrent-recompile': [SKIP], + 'compiler/math-imul': [SKIP], + 'compiler/native-context-specialization-hole-check': [SKIP], + 'compiler/number-abs': [SKIP], + 'compiler/number-ceil': [SKIP], + 'compiler/number-comparison-truncations': [SKIP], + 'compiler/number-divide': [SKIP], + 'compiler/number-floor': [SKIP], + 'compiler/number-max': [SKIP], + 'compiler/number-min': [SKIP], + 'compiler/number-modulus': [SKIP], + 'compiler/number-round': [SKIP], + 'compiler/number-toboolean': [SKIP], + 'compiler/number-trunc': [SKIP], + 'compiler/optimized-float32array-length': [SKIP], + 'compiler/optimized-float64array-length': [SKIP], + 'compiler/optimized-int32array-length': [SKIP], + 'compiler/optimized-uint32array-length': [SKIP], + 'compiler/opt-next-call': [SKIP], + 'compiler/opt-next-call-turbo': [SKIP], + 'compiler/promise-resolve-stable-maps': [SKIP], + 'compiler/redundancy-elimination': [SKIP], + 'compiler/regress-5320': [SKIP], + 'compiler/regress-compare-negate': [SKIP], + 'compiler/stress-deopt-count-1': [SKIP], + 'compiler/stress-deopt-count-2': [SKIP], + 'compiler/string-from-code-point': [SKIP], + 'compiler/uint8-clamped-array': [SKIP], + 'constant-folding-2': [SKIP], + 'default-nospec': [SKIP], + 'deopt-minus-zero': [SKIP], + 'deopt-recursive-eager-once': [SKIP], + 'deopt-recursive-lazy-once': [SKIP], + 'deopt-recursive-soft-once': [SKIP], + 'deopt-unlinked': [SKIP], + 'deopt-with-fp-regs': [SKIP], + 'deserialize-optimize-inner': [SKIP], + 'div-mul-minus-one': [SKIP], + 'elements-transition-hoisting': [SKIP], + 'ensure-growing-store-learns': [SKIP], + 'es6/array-iterator-turbo': [SKIP], + 'es6/block-let-crankshaft': [SKIP], + 'es6/block-let-crankshaft-sloppy': [SKIP], + 'es6/block-scoping': [SKIP], + 'es6/block-scoping-sloppy': [SKIP], + 'es6/collections-constructor-custom-iterator': [SKIP], + 'es6/collections-constructor-iterator-side-effect': [SKIP], + 'es6/collections-constructor-with-modified-array-prototype': [SKIP], + 'es6/collections-constructor-with-modified-protoype': [SKIP], + 'es6/map-constructor-entry-side-effect': [SKIP], + 'es6/map-constructor-entry-side-effect2': [SKIP], + 'es6/map-constructor-entry-side-effect3': [SKIP], + 'es6/map-constructor-entry-side-effect4': [SKIP], + 'field-type-tracking': [SKIP], + 'getters-on-elements': [SKIP], + 'ignition/throw-if-hole': [SKIP], + 'ignition/throw-if-not-hole': [SKIP], + 'ignition/throw-super-not-called': [SKIP], + 'keyed-load-hole-to-undefined': [SKIP], + 'keyed-load-with-string-key': [SKIP], + 'keyed-load-with-symbol-key': [SKIP], + 'math-deopt': [SKIP], + 'math-floor-of-div-minus-zero': [SKIP], + 'modules-turbo1': [SKIP], + 'never-optimize': [SKIP], + 'object-seal': [SKIP], + 'optimized-map': [SKIP], + 'regress/regress-2132': [SKIP], + 'regress/regress-2250': [SKIP], + 'regress/regress-2315': [SKIP], + 'regress/regress-2339': [SKIP], + 'regress/regress-2451': [SKIP], + 'regress/regress-252797': [SKIP], + 'regress/regress-2618': [SKIP], + 'regress/regress-3176': [SKIP], + 'regress/regress-3650-3': [SKIP], + 'regress/regress-3709': [SKIP], + 'regress/regress-385565': [SKIP], + 'regress/regress-4380': [SKIP], + 'regress/regress-5404': [SKIP], + 'regress/regress-5790': [SKIP], + 'regress/regress-5802': [SKIP], + 'regress/regress-6607-1': [SKIP], + 'regress/regress-6607-2': [SKIP], + 'regress/regress-6941': [SKIP], + 'regress/regress-6948': [SKIP], + 'regress/regress-6989': [SKIP], + 'regress/regress-6991': [SKIP], + 'regress/regress-7014-1': [SKIP], + 'regress/regress-7014-2': [SKIP], + 'regress/regress-7135': [SKIP], + 'regress/regress-7254': [SKIP], + 'regress/regress-7510': [SKIP], + 'regress/regress-794825': [SKIP], + 'regress/regress-crbug-554831': [SKIP], + 'regress/regress-crbug-587068': [SKIP], + 'regress/regress-crbug-594183': [SKIP], + 'regress/regress-crbug-882233-2': [SKIP], + 'regress/regress-embedded-cons-string': [SKIP], + 'regress/regress-map-invalidation-2': [SKIP], + 'regress/regress-param-local-type': [SKIP], + 'regress/regress-store-uncacheable': [SKIP], + 'regress/regress-v8-5697': [SKIP], + 'shared-function-tier-up-turbo': [SKIP], + 'shift-for-integer-div': [SKIP], + 'sin-cos': [SKIP], + 'smi-mul': [SKIP], + 'smi-mul-const': [SKIP], + 'string-deopt': [SKIP], + 'strong-rooted-literals': [SKIP], + 'unary-minus-deopt': [SKIP], +}], # variant == jitless + +############################################################################## +['byteorder == big', { + # Emscripten requires little-endian, skip all tests on big endian platforms. + 'asm/embenchen/*': [SKIP], + 'asm/poppler/*': [SKIP], + 'asm/sqlite3/*': [SKIP], + # TODO(mips-team): Fix Wasm for big-endian. + 'wasm/*': [SKIP], +}], # 'byteorder == big' + +############################################################################## +['arch == arm64 or arch == android_arm64', { + + # Requires bigger stack size in the Genesis and if stack size is increased, + # the test requires too much time to run. However, the problem test covers + # should be platform-independent. + 'regress/regress-1132': [SKIP], + + # Pass but take too long to run. Skip. + # Some similar tests (with fewer iterations) may be included in arm64-js + # tests. + 'asm/embenchen/box2d': [SKIP], + 'asm/embenchen/lua_binarytrees': [SKIP], + 'big-object-literal': [SKIP], + 'compiler/regress-arguments': [SKIP], + 'compiler/regress-gvn': [SKIP], + 'compiler/regress-4': [SKIP], + 'compiler/regress-or': [SKIP], + 'compiler/regress-rep-change': [SKIP], + 'regress/regress-1117': [SKIP], + 'regress/regress-1849': [SKIP], + 'regress/regress-3247124': [SKIP], + 'regress/regress-91008': [SKIP], + 'regress/regress-91010': [SKIP], + 'regress/regress-91013': [SKIP], + 'regress/regress-99167': [SKIP], + + # BUG(v8:3457). + 'deserialize-reference': [PASS, FAIL], + + # BUG(v8:4016) + 'regress/regress-crbug-467047': [SKIP], + + # Slow tests. + 'array-concat': [PASS, SLOW], + 'array-indexing': [PASS, SLOW], + 'array-reduce': [PASS, SLOW], + 'array-sort': [PASS, SLOW], + 'array-splice': [PASS, SLOW], + 'bit-not': [PASS, SLOW], + 'compiler/alloc-number': [PASS, SLOW], + 'compiler/osr-with-args': [PASS, SLOW], + 'generated-transition-stub': [PASS, SLOW], + 'json2': [PASS, SLOW], + 'math-floor-of-div-nosudiv': [PASS, SLOW], + 'math-floor-of-div': [PASS, SLOW], + 'messages': [PASS, SLOW], + 'packed-elements': [PASS, SLOW], + 'regress/regress-2790': [PASS, SLOW], + 'regress/regress-331444': [PASS, SLOW], + 'regress/regress-490': [PASS, SLOW], + 'regress/regress-crbug-217858': [PASS, SLOW], + 'regress/regress-create-exception': [PASS, SLOW], + 'regress/regress-json-stringify-gc': [PASS, SLOW], + 'string-indexof-2': [PASS, SLOW], + 'unicodelctest-no-optimization': [PASS, SLOW], + 'unicodelctest': [PASS, SLOW], + 'unicode-test': [PASS, SLOW], + 'wasm/atomics': [PASS, SLOW], + 'whitespaces': [PASS, SLOW], + + # BUG(v8:7247). + 'regress/regress-779407': [PASS, SLOW, NO_VARIANTS], +}], # 'arch == arm64' + +['arch == arm64 and mode == debug and simulator_run', { + + # Pass but take too long with the simulator in debug mode. + 'array-sort': [PASS, SLOW], + 'packed-elements': [SKIP], + 'regexp-global': [SKIP], + 'math-floor-of-div': [PASS, SLOW], + 'math-floor-of-div-nosudiv': [PASS, SLOW], + 'unicodelctest': [PASS, SLOW], + 'unicodelctest-no-optimization': [PASS, SLOW], + # Issue 3219: + 'getters-on-elements': [PASS, ['gc_stress == True', FAIL]], +}], # 'arch == arm64 and mode == debug and simulator_run' + +############################################################################## +['asan == True', { + # Skip tests not suitable for ASAN. + 'big-array-literal': [SKIP], + 'big-object-literal': [SKIP], + 'regress/regress-crbug-178790': [SKIP], + + # https://bugs.chromium.org/p/v8/issues/detail?id=4639 + # The failed allocation causes an asan/msan/tsan error + 'es6/typedarray-construct-offset-not-smi': [SKIP], + + # Exception thrown during bootstrapping on ASAN builds, see issue 4236. + 'regress/regress-1132': [SKIP], + + # Flaky on ASAN builds: https://bugs.chromium.org/p/v8/issues/detail?id=6305 + 'regress/regress-430201': [SKIP], + 'regress/regress-430201b': [SKIP], + + # Stack overflow on windows. + 'es8/regress/regress-624300': [PASS, ['system == windows', SKIP]], + + # https://bugs.chromium.org/p/v8/issues/detail?id=7102 + # Flaky due to huge string allocation. + 'regress/regress-748069': [SKIP], +}], # 'asan == True' + +############################################################################## +['msan == True', { + # Skip tests not suitable for MSAN. + 'big-array-literal': [SKIP], + # ICU upstream issues. + 'date': [SKIP], + 'deep-recursion': [SKIP], + 'regress/regress-builtinbust-7': [SKIP], + 'string-localecompare': [SKIP], + + # Too slow. + 'harmony/regexp-property-lu-ui': [SKIP], + + # https://bugs.chromium.org/p/v8/issues/detail?id=7102 + # Flaky due to huge string allocation. + 'regress/regress-748069': [SKIP], + # Slow test. + 'regress/regress-779407': [PASS, SLOW], +}], # 'msan == True' + +############################################################################## +['tsan == True', { + # https://bugs.chromium.org/p/v8/issues/detail?id=7102 + # Flaky due to huge string allocation. + 'regress/regress-748069': [SKIP], + + # Allocates a large array buffer, which TSAN sometimes cannot handle. + 'regress/regress-599717': [SKIP], + + # BUG(v8:7042). Uses a lot of memory. + 'regress/regress-678917': [SKIP], + + # BUG(v8:8103). Uses a lot of memory. + 'regress/regress-852258': [SKIP], + + # BUG(v8:6924). The test uses a lot of memory. + 'regress/wasm/regress-694433': [SKIP], + 'es6/typedarray': [PASS, NO_VARIANTS], + 'regress/regress-752764': [PASS, NO_VARIANTS], +}], # 'tsan == True' + +############################################################################## +['arch == arm or arch == android_arm', { + + # Slow tests which times out in debug mode. + 'try': [PASS, ['mode == debug', SKIP]], + 'array-constructor': [PASS, ['mode == debug', SKIP]], + 'regress/regress-1122': [PASS, SLOW, ['mode == debug and arch == android_arm', SKIP]], + + # Flaky test that can hit compilation-time stack overflow in debug mode. + 'unicode-test': [PASS, ['mode == debug', PASS, FAIL]], + + # Slow in release mode on ARM. + 'compiler/regress-stacktrace-methods': [PASS, SLOW], + 'array-splice': [PASS, SLOW], + + # Long running tests. Skipping because having them timeout takes too long on + # the buildbot. + 'big-object-literal': [SKIP], + 'compiler/alloc-number': [SKIP], + 'regress/regress-490': [SKIP], + 'regress/regress-create-exception': [SKIP], + 'regress/regress-3247124': [SKIP], + + # Requires bigger stack size in the Genesis and if stack size is increased, + # the test requires too much time to run. However, the problem test covers + # should be platform-independent. + 'regress/regress-1132': [SKIP], + + # Currently always deopt on minus zero + 'math-floor-of-div-minus-zero': [SKIP], + + # Slow tests. + 'array-sort': [PASS, SLOW], + 'compiler/osr-with-args': [PASS, SLOW], + 'packed-elements': [PASS, SLOW], + 'regress/regress-2790': [PASS, SLOW], + 'regress/regress-91008': [PASS, SLOW], + 'regress/regress-json-stringify-gc': [PASS, SLOW], + 'string-indexof-2': [PASS, SLOW], + 'wasm/atomics': [PASS, SLOW], +}], # 'arch == arm or arch == android_arm' + +############################################################################## +['(arch == mipsel or arch == mips or arch == mips64el or arch == mips64) and simulator_run != True', { + # These tests fail occasionally on the buildbots because they consume + # a large amount of memory if executed in parallel. Therefore we + # run only a single instance of these tests + 'regress/regress-crbug-514081': [PASS, NO_VARIANTS], + 'regress/regress-599717': [PASS, NO_VARIANTS], + 'regress/regress-599414-array-concat-fast-path': [PASS, NO_VARIANTS], + 'array-functions-prototype-misc': [PASS, NO_VARIANTS], +}], # 'arch == mipsel or arch == mips or arch == mips64el or arch == mips64' + +############################################################################## +['arch == mipsel or arch == mips or arch == mips64el or arch == mips64 or arch == ppc or arch == ppc64', { + # These tests fail because qNaN and sNaN values are encoded differently on + # MIPS and ARM/x86 architectures + 'wasm/float-constant-folding': [SKIP], +}], + +############################################################################## +['arch == mipsel or arch == mips', { + + # Slow tests which times out in debug mode. + 'try': [PASS, ['mode == debug', SKIP]], + 'array-constructor': [PASS, ['mode == debug', SKIP]], + + # Slow in release mode on MIPS. + 'compiler/regress-stacktrace-methods': [PASS, SLOW], + 'array-splice': [PASS, SLOW], + + # Long running test. + 'string-indexof-2': [PASS, SLOW], + + # Long running tests. Skipping because having them timeout takes too long on + # the buildbot. + 'compiler/alloc-number': [SKIP], + 'regress/regress-490': [SKIP], + 'regress/regress-create-exception': [SKIP], + 'regress/regress-3247124': [SKIP], + + # Requires bigger stack size in the Genesis and if stack size is increased, + # the test requires too much time to run. However, the problem test covers + # should be platform-independent. + 'regress/regress-1132': [SKIP], + + # Currently always deopt on minus zero + 'math-floor-of-div-minus-zero': [SKIP], + + # Requires too much memory on MIPS. + 'regress/regress-752764': [SKIP], + 'regress/regress-779407': [SKIP], + 'harmony/bigint/regressions': [SKIP], + + # Pre-r6 MIPS32 doesn't have instructions needed to properly handle 64-bit + # atomic instructions. + 'wasm/atomics64-stress': [PASS, ['mips_arch_variant != r6', SKIP]], +}], # 'arch == mipsel or arch == mips' + +############################################################################## +['arch == mips64el or arch == mips64', { + + # Slow tests which times out in debug mode. + 'try': [PASS, ['mode == debug', SKIP]], + 'array-constructor': [PASS, ['mode == debug', SKIP]], + + # Slow in release mode on MIPS. + 'compiler/regress-stacktrace-methods': [PASS, SLOW], + 'array-splice': [PASS, SLOW], + + # Long running test. + 'string-indexof-2': [PASS, SLOW], + + # BUG(3251035): Timeouts in long looping crankshaft optimization + # tests. Skipping because having them timeout takes too long on the + # buildbot. + 'compiler/alloc-number': [PASS, SLOW], + 'compiler/array-length': [PASS, SLOW], + 'compiler/assignment-deopt': [PASS, SLOW], + 'compiler/deopt-args': [PASS, SLOW], + 'compiler/inline-compare': [PASS, SLOW], + 'compiler/inline-global-access': [PASS, SLOW], + 'compiler/optimized-function-calls': [PASS, SLOW], + 'compiler/pic': [PASS, SLOW], + 'compiler/property-calls': [PASS, SLOW], + 'compiler/recursive-deopt': [PASS, SLOW], + 'compiler/regress-4': [PASS, SLOW], + 'compiler/regress-funcaller': [PASS, SLOW], + 'compiler/regress-rep-change': [PASS, SLOW], + 'compiler/regress-arguments': [PASS, SLOW], + 'compiler/regress-funarguments': [PASS, SLOW], + 'compiler/regress-3249650': [PASS, SLOW], + 'compiler/simple-deopt': [PASS, SLOW], + 'regress/regress-490': [PASS, SLOW], + 'regress/regress-create-exception': [PASS, SLOW], + 'regress/regress-3218915': [PASS, SLOW], + 'regress/regress-3247124': [PASS, SLOW], + + # Requires bigger stack size in the Genesis and if stack size is increased, + # the test requires too much time to run. However, the problem test covers + # should be platform-independent. + 'regress/regress-1132': [SKIP], + + # Currently always deopt on minus zero + 'math-floor-of-div-minus-zero': [SKIP], + + # Requires too much memory on MIPS. + 'regress/regress-752764': [SKIP], + 'regress/regress-779407': [SKIP], +}], # 'arch == mips64el or arch == mips64' + +['(arch == mips64el or arch == mips64) and simulator_run', { + # Slow tests which have flaky timeout on simulator. + 'wasm/atomics64-stress': [SKIP], +}], # '(arch == mips64el or arch == mips64) and simulator_run' + +############################################################################## +['system == windows', { + # TODO(mstarzinger): Too slow with turbo fan. + 'big-object-literal': [SKIP], + 'math-floor-of-div': [PASS, ['mode == debug', SKIP]], + 'math-floor-of-div-nosudiv': [PASS, ['mode == debug', SKIP]], + 'unicodelctest': [PASS, ['mode == debug', SKIP]], + + # Setting the timezone and locale with environment variables unavailable + 'icu-date-to-string': [SKIP], + 'icu-date-lord-howe': [SKIP], + 'regress/regress-6288': [SKIP], + 'tzoffset-transition-apia': [SKIP], + 'tzoffset-transition-lord-howe': [SKIP], + 'tzoffset-transition-moscow': [SKIP], + 'tzoffset-transition-new-york': [SKIP], + 'tzoffset-transition-new-york-noi18n': [SKIP], + 'tzoffset-seoul': [SKIP], + 'tzoffset-seoul-noi18n': [SKIP], +}], # 'system == windows' + +############################################################################## +['system == android', { + # Tests consistently failing on Android. + # Unable to change locale on Android: + 'icu-date-to-string': [FAIL], + 'regress/regress-6288': [FAIL], + # OOM: + 'regress/regress-748069': [FAIL], + 'regress/regress-752764': [FAIL], + 'regress/regress-779407': [FAIL], + # Flaky OOM: + 'regress/regress-852258': [SKIP], +}], # 'system == android' + +############################################################################## +['system == macos', { + # BUG(v8:5333) + 'big-object-literal': [SKIP], +}], # 'system == macos' + +############################################################################## +['isolates', { + # Slow tests. + 'es6/typedarray-of': [PASS, SLOW], + 'regress/regress-crbug-854299': [PASS, SLOW], +}], # 'isolates' + +############################################################################## +['deopt_fuzzer == True', { + + # Skip tests that are not suitable for deoptimization fuzzing. + 'never-optimize': [SKIP], + 'readonly': [SKIP], + 'array-feedback': [SKIP], + 'deopt-recursive-eager-once': [SKIP], + 'deopt-recursive-lazy-once': [SKIP], + 'deopt-recursive-soft-once': [SKIP], + 'code-coverage-block-opt': [SKIP], + + # Bounds check triggers forced deopt for array constructors. + 'array-constructor-feedback': [SKIP], + + # Deopting uses just enough memory to make this one OOM. + 'regress/regress-3976': [SKIP], + + # Forced optimisation path tests. + 'shared-function-tier-up-turbo': [SKIP], + + # Fails deopt_fuzzer due to --deopt_every_n_times + 'es6/array-iterator-turbo': [SKIP] +}], # 'deopt_fuzzer == True' + +############################################################################## +['gc_fuzzer', { + 'regress/regress-336820': [SKIP], + 'regress/regress-748069': [SKIP], + 'regress/regress-778668': [SKIP], + 'ignition/regress-672027': [PASS, ['tsan', SKIP]], + 'string-replace-gc': [PASS, SLOW, ['mode == debug', SKIP]], + + # Unsuitable for GC fuzzing because coverage information is lost on GC. + 'code-coverage-ad-hoc': [SKIP], + 'code-coverage-precise': [SKIP], + + # Passes incompatible arguments. + 'd8/d8-arguments': [SKIP], + + # Fails allocation on tsan. + 'es6/classes': [PASS, ['tsan', SKIP]], + + # Tests that fail some assertions due to checking internal state sensitive + # to GC. We mark PASS,FAIL to not skip those tests on the endurance fuzzer. + 'array-literal-feedback': [PASS, FAIL], + 'compiler/dataview-neutered': [PASS, FAIL], + 'compiler/native-context-specialization-hole-check': [PASS, FAIL], + 'elements-transition-hoisting': [PASS, FAIL], + 'es6/collections-constructor-custom-iterator': [PASS, FAIL], + 'ignition/throw-if-not-hole': [PASS, FAIL], + 'keyed-load-with-symbol-key': [PASS, FAIL], + 'object-seal': [PASS, FAIL], + 'regress/regress-3709': [PASS, FAIL], + 'regress/regress-385565': [PASS, FAIL], + 'regress/regress-6948': [PASS, FAIL], + 'regress/regress-7014-1': [PASS, FAIL], + 'regress/regress-7014-2': [PASS, FAIL], + 'regress/regress-7510': [PASS, FAIL], + 'regress/regress-crbug-882233-2': [PASS, FAIL], + 'regress/regress-trap-allocation-memento': [PASS, FAIL], + 'regress/regress-unlink-closures-on-deopt': [PASS, FAIL], + 'shared-function-tier-up-turbo': [PASS, FAIL], +}], # 'gc_fuzzer' + +############################################################################## +['endurance_fuzzer', { + # BUG(v8:7400). + 'wasm/lazy-compilation': [SKIP], + + # BUG(v8:7429). + 'regress/regress-599414-array-concat-fast-path': [SKIP], + + # Often crashes due to memory consumption. + 'regress/regress-655573': [SKIP], + + # TSAN allocation failures. + 'deep-recursion': [PASS, ['tsan', SKIP]], + 'regress/regress-430201b': [PASS, ['tsan', SKIP]], + 'regress/regress-crbug-493779': [PASS, ['tsan', SKIP]], + 'regress/wasm/regress-763439': [PASS, ['tsan', SKIP]], +}], # 'endurance_fuzzer' + +############################################################################## +['predictable == True', { + + # Skip tests that are known to be non-deterministic. + 'd8/d8-worker-sharedarraybuffer': [SKIP], + 'd8/d8-os': [SKIP], + 'harmony/futex': [SKIP], + + # BUG(v8:7166). + 'd8/enable-tracing': [SKIP], + # Relies on async compilation which requires background tasks. + 'wasm/streaming-error-position': [SKIP], + # Intentionally non-deterministic using shared arraybuffers. + 'wasm/atomics-stress': [SKIP], + 'wasm/atomics64-stress': [SKIP], + 'wasm/futex': [SKIP], +}], # 'predictable == True' + +############################################################################## +['simulator_run and (arch == ppc or arch == ppc64 or arch == s390 or arch == s390x)', { + + # take too long with the simulator. + 'regress/regress-1132': [SKIP], + 'regress/regress-740784': [SKIP], + 'regress/regress-crbug-482998': [PASS, SLOW], + 'regress/regress-91008': [PASS, SLOW], + 'harmony/regexp-property-lu-ui': [PASS, SLOW], + 'whitespaces': [PASS, SLOW], + 'wasm/atomics-stress': [SKIP], + 'wasm/atomics64-stress': [SKIP], +}], # 'simulator_run and (arch == ppc or arch == ppc64 or arch == s390 or arch == s390x)' + +############################################################################## +['arch == ppc64', { + + # stack overflow + 'big-array-literal': [SKIP], + 'regress/regress-353551': [SKIP], +}], # 'arch == ppc64' + +############################################################################## +['arch == ppc64 or arch == ppc or arch == s390 or arch == s390x', { + + # TODO(ppc/s390): fix constant pool issue and implement tagging for reloc + 'wasm/compiled-module-serialization': [SKIP], + 'regress/wasm/regress-808980': [SKIP], + 'regress/wasm/regress-808848': [SKIP], +}], # 'arch == ppc64 or arch == ppc or arch == s390 or arch == s390x' + +############################################################################## +['variant == stress', { + # Slow tests. + 'array-natives-elements': [SKIP], + 'big-object-literal': [SKIP], + 'es6/array-iterator-turbo': [SKIP], + 'ignition/regress-599001-verifyheap': [SKIP], + 'unicode-test': [SKIP], + + # Flaky crash on Odroid devices: https://crbug.com/v8/7678 + 'regress/regress-336820': [PASS, ['arch == arm and not simulator_run', SKIP]], + + # Too slow for TSAN in stress mode. + 'es6/classes': [PASS, ['tsan', SKIP]], + 'regress/regress-1122': [PASS, ['tsan', SKIP]], + + # Too slow with gc_stress on arm64. + 'messages': [PASS, ['gc_stress and arch == arm64', SKIP]], + + # Slow on arm64 simulator: https://crbug.com/v8/7783 + 'string-replace-gc': [PASS, ['arch == arm64 and simulator_run', SKIP]], + + # Too memory hungry on Odroid devices. + 'regress/regress-678917': [PASS, ['arch == arm and not simulator_run', SKIP]], +}], # variant == stress + +############################################################################## +['variant == stress and (arch == arm or arch == arm64) and simulator_run', { + # Slow tests: https://crbug.com/v8/7783 + 'generated-transition-stub': [SKIP], + 'regress/regress-336820': [SKIP], + 'wasm/grow-memory': [SKIP], +}], # variant == stress and (arch == arm or arch == arm64) and simulator_run + +############################################################################## +['variant == nooptimization and (arch == arm or arch == arm64) and simulator_run', { + # Slow tests: https://crbug.com/v8/7783 + 'md5': [SKIP], + 'packed-elements': [SKIP], + 'regress/regress-crbug-319860': [SKIP], + 'wasm/asm-wasm-f32': [SKIP], + 'wasm/asm-wasm-f64': [SKIP], + 'wasm/grow-memory': [SKIP], +}], # variant == nooptimization and (arch == arm or arch == arm64) and simulator_run + +############################################################################## +['(arch == arm or arch == arm64)', { + # Flaky tests: https://crbug.com/v8/8090 + 'regress/regress-752764': [SKIP], +}], # (arch == arm or arch == arm64) + +############################################################################## +['gcov_coverage', { + # Tests taking too long. + 'array-functions-prototype-misc': [SKIP], + + # Stack overflow. + 'big-array-literal': [SKIP], +}], # 'gcov_coverage' + +############################################################################## +['variant == no_wasm_traps', { + # Skip stuff uninteresting for wasm traps + 'bugs/*': [SKIP], + 'compiler/*': [SKIP], + 'es6/*': [SKIP], + 'es7/*': [SKIP], + 'es8/*': [SKIP], + 'harmony/*': [SKIP], + 'ignition/*': [SKIP], + 'lithium/*': [SKIP], + 'third_party/*': [SKIP], + 'tools/*': [SKIP], + 'apply': [SKIP], + 'math-*': [SKIP], + 'unicode-test': [SKIP], + 'whitespaces': [SKIP], +}], # variant == no_wasm_traps + +############################################################################## +['no_harness', { + # skip assertion tests since the stack trace is broken if mjsunit is + # included in the snapshot + 'mjsunit-assertion-error' : [SKIP], +}], # no_harness + +############################################################################## +['arch != x64 or deopt_fuzzer', { + # Skip stress-deopt-count tests since it's in x64 only + 'compiler/stress-deopt-count-*': [SKIP], +}], # arch != x64 or deopt_fuzzer + +############################################################################## +# Liftoff is currently only sufficiently implemented on x64, ia32, arm64 and +# arm. +# TODO(clemensh): Implement on all other platforms (crbug.com/v8/6600). +['arch != x64 and arch != ia32 and arch != arm64 and arch != arm', { + 'wasm/liftoff': [SKIP], + 'wasm/tier-up-testing-flag': [SKIP], +}], # arch != x64 and arch != ia32 and arch != arm64 and arch != arm + +############################################################################## +['variant == slow_path and gc_stress', { + # Slow tests. + 'regress/regress-crbug-493779': [SKIP], + 'string-replace-gc': [SKIP], +}], # variant == slow_path + +############################################################################## +['arch == x64', { + # TODO: Flaky test: crbug.com/v8/7899 + 'wasm/asm-wasm-i32': [SKIP], + 'wasm/asm-wasm-f64': [SKIP], +}], # arch == x64 + +############################################################################## +['arch in [arm, android_arm, android_ia32, ia32, ppc, s390, s390x, mipsel, mips]', { + # TODO(ssauleau): implement BigInt<>Wasm conversion for other arch - + # crbug.com/v8/7741 + 'wasm/bigint': [SKIP], +}], # arch in [arm, android_arm, android_ia32, ia32, ppc, s390, s390x, mipsel, mips] + +############################################################################## +['arch not in [x64, arm, arm64] or system != linux', { + # Unwinding info writer is only supported on x64, arm, and arm64 Linux + 'regress/regress-913844': [SKIP], +}], + ] diff --git a/implementation-contributed/v8/mjsunit/regress/regress-3218530.js b/implementation-contributed/v8/mjsunit/regress/regress-3218530.js index 247f3dfe67..54c66dfded 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-3218530.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-3218530.js @@ -33,7 +33,7 @@ var p = "floor"; function test() { var bignumber = 31363200000; - assertDoesNotThrow(assertEquals(m[p](Math.round(bignumber/864E5)/7)+1, 52)); + assertEquals(m[p](Math.round(bignumber/864E5)/7)+1, 52); } test(); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-3255.js b/implementation-contributed/v8/mjsunit/regress/regress-3255.js index 0c5ee4ff00..3526d600c9 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-3255.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-3255.js @@ -16,4 +16,4 @@ f(str, 0); f(str, 0); // This is just to trigger elements validation, object already broken. -%SetKeyedProperty(str, 1, 'y', 0); +%SetKeyedProperty(str, 1, 'y'); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-336820.js b/implementation-contributed/v8/mjsunit/regress/regress-336820.js index 7423610934..660a8fc314 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-336820.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-336820.js @@ -28,11 +28,10 @@ // Flags: --max-old-space-size=1600 assertThrows((function() { - s = "Hello World!\n"; - while (true) { - x = new Array(); - x[0] = s; - x[1000] = s; - x[10000] = s; - s = x.join("::"); - }}), RangeError); + let str = "a".repeat(1e7); + let arr = new Array(2000); + for (let i = 0; i < 200; ++i) { + arr[i*10] = str; + } + let res = arr.join(':'); +}), RangeError); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-5888.js b/implementation-contributed/v8/mjsunit/regress/regress-5888.js index 0725ac4285..6481c79338 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-5888.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-5888.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/regress-5911.js b/implementation-contributed/v8/mjsunit/regress/regress-5911.js index 0175fd3e2c..9d6d4ae5b8 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-5911.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-5911.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/regress-6711.js b/implementation-contributed/v8/mjsunit/regress/regress-6711.js new file mode 100644 index 0000000000..c1b61c72a1 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-6711.js @@ -0,0 +1,21 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// ensure `delete this` throws before `super` is called. +assertThrows(()=>{ + new class extends Object { + constructor() { + delete this; + super(); + } + } +}, ReferenceError); + +// ensure `delete this` doesn't throw after `super` is called. +new class extends Object { + constructor() { + super(); + delete this; + } +} diff --git a/implementation-contributed/v8/mjsunit/regress/regress-687.js b/implementation-contributed/v8/mjsunit/regress/regress-687.js index a917a447f2..9dffcc1a9e 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-687.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-687.js @@ -29,9 +29,8 @@ // update a accessor property to a data property using Object.defineProperty. var obj = { get value() {}, set value (v) { throw "Error";} }; -assertDoesNotThrow( - Object.defineProperty(obj, "value", - { value: 5, writable:true, configurable: true })); +Object.defineProperty(obj, "value", + { value: 5, writable:true, configurable: true }); var desc = Object.getOwnPropertyDescriptor(obj, "value"); assertEquals(obj.value, 5); assertTrue(desc.configurable); @@ -49,7 +48,7 @@ var proto = { var create = Object.create(proto); assertEquals(create.value, undefined); -assertDoesNotThrow(create.value = 4); +create.value = 4; assertEquals(create.value, 4); // These tests where provided in bug 959, but are all related to the this issue. diff --git a/implementation-contributed/v8/mjsunit/regress/regress-813440.js b/implementation-contributed/v8/mjsunit/regress/regress-813440.js index 8fcb695f5a..f4df95daae 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-813440.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-813440.js @@ -4,7 +4,6 @@ // Flags: --invoke-weak-callbacks --omit-quit --expose-wasm --allow-natives-syntax -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-863810.js b/implementation-contributed/v8/mjsunit/regress/regress-863810.js index 0ee1330310..3bec6f5ae9 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-863810.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-863810.js @@ -4,7 +4,6 @@ // Flags: --no-liftoff --no-wasm-tier-up --no-future --debug-code -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-8708.js b/implementation-contributed/v8/mjsunit/regress/regress-8708.js new file mode 100644 index 0000000000..4faff3324c --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-8708.js @@ -0,0 +1,10 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --stack-size=100 + +let array = new Array(1); +array.splice(1, 0, array); + +assertThrows(() => array.flat(Infinity), RangeError); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-923723.js b/implementation-contributed/v8/mjsunit/regress/regress-923723.js new file mode 100644 index 0000000000..5a838e558f --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-923723.js @@ -0,0 +1,14 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --stack-size=50 + +function __f_3() { + try { + __f_3(); + } catch(e) { + eval("let fun = ({a} = {a: 30}) => {"); + } +} +assertThrows(__f_3); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-926036.js b/implementation-contributed/v8/mjsunit/regress/regress-926036.js new file mode 100644 index 0000000000..3c8f49c956 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-926036.js @@ -0,0 +1,5 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +assertThrows("async() => { for await (var a ;;) {} }", SyntaxError); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-crbug-715455.js b/implementation-contributed/v8/mjsunit/regress/regress-crbug-715455.js index 21ec165683..87b240227d 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-crbug-715455.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-crbug-715455.js @@ -20,6 +20,6 @@ for (var i = 0; i < test_set.length; ++i) { src = src.replace(/MODULE/g, "Module" + i); src = src.replace(/LIMIT/g, test_set[i]); var module = eval("(" + src + ")"); - assertDoesNotThrow(module(this).f()); + module(this).f(); assertFalse(%IsAsmWasmCode(module)); } diff --git a/implementation-contributed/v8/mjsunit/regress/regress-crbug-772056.js b/implementation-contributed/v8/mjsunit/regress/regress-crbug-772056.js index 380bae356d..d9fb4d51d2 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-crbug-772056.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-crbug-772056.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); var builder = new WasmModuleBuilder(); @@ -14,4 +13,4 @@ let table = new WebAssembly.Table({element: "anyfunc", initial: 1, maximum:1000000}); let instance = new WebAssembly.Instance(module, {x: {table:table}}); -assertThrows(() => table.grow(Infinity), RangeError); +assertThrows(() => table.grow(Infinity), TypeError); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-crbug-923264.js b/implementation-contributed/v8/mjsunit/regress/regress-crbug-923264.js new file mode 100644 index 0000000000..e8c0d43022 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-crbug-923264.js @@ -0,0 +1,27 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --verify-heap --expose-gc + +let paramName = ''; +for (let i=0; i < 2**10; i++) { + paramName += 'a'; +} + +let params = ''; +for (let i = 0; i < 2**10; i++) { + params += paramName + i + ','; +} + +let fn = eval(`( + class A { + constructor (${params}) { + function lazy() { + return function lazier() { return ${paramName+1} } + }; + return lazy; + } +})`); + +gc() diff --git a/implementation-contributed/v8/mjsunit/regress/regress-crbug-923265.js b/implementation-contributed/v8/mjsunit/regress/regress-crbug-923265.js new file mode 100644 index 0000000000..8e6125b34b --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-crbug-923265.js @@ -0,0 +1,9 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +let a = {0: 5, 1: 4, 2: 3, length: 2}; +Object.freeze(a); + +assertThrows(() => Array.prototype.sort.call(a)); +assertPropertiesEqual({0: 5, 1: 4, 2: 3, length: 2}, a); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-crbug-923705.js b/implementation-contributed/v8/mjsunit/regress/regress-crbug-923705.js new file mode 100644 index 0000000000..9cdb98b15b --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-crbug-923705.js @@ -0,0 +1,15 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --verify-heap + +function __f_5() { + function __f_1() { + function __f_0() { + ({y = eval()}) => assertEquals()(); + } + } +} + +__f_5(); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-crbug-926819.js b/implementation-contributed/v8/mjsunit/regress/regress-crbug-926819.js new file mode 100644 index 0000000000..060c72f60e --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-crbug-926819.js @@ -0,0 +1,5 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +assertThrows("a(function(){{let f;function f}})", SyntaxError); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-crbug-926856.js b/implementation-contributed/v8/mjsunit/regress/regress-crbug-926856.js new file mode 100644 index 0000000000..a3fa934483 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-crbug-926856.js @@ -0,0 +1,18 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Need a fast array with enough elements to surpass +// kMaxRegularHeapObjectSize. +var size = 63392; +var a = []; +function build() { + for (let i = 0; i < size; i++) { + a.push(i); + } +} + +build(); + +function c(v) { return v + 0.5; } +a.map(c); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/loop-stack-check.js b/implementation-contributed/v8/mjsunit/regress/wasm/loop-stack-check.js index a76ad017d9..b1e92fa4ec 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/loop-stack-check.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/loop-stack-check.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-02256.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-02256.js index d1dae276d3..791d2a1d2d 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-02256.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-02256.js @@ -264,7 +264,6 @@ var __v_11 = this; var __v_12 = {}; var __v_13 = {}; try { - load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-__v_1.js"); __v_2 = 0x10000; } catch (e) { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-5531.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-5531.js index 1363f96264..cea547d09c 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-5531.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-5531.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-5800.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-5800.js index 2e56da853d..77c436119c 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-5800.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-5800.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function AddTest() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-5860.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-5860.js index b193323dd1..961e52d2dc 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-5860.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-5860.js @@ -4,7 +4,6 @@ // // Flags: --expose-wasm -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); let module1 = (() => { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-5884.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-5884.js index 8677f105ee..c6013d3f86 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-5884.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-5884.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-6054.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-6054.js index 7b309b6f82..3afb371131 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-6054.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-6054.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-6164.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-6164.js index 3035ea5249..ed728f5acc 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-6164.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-6164.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-644682.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-644682.js index b58c0d9b10..a48e5aeef0 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-644682.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-644682.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-648079.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-648079.js index acc6146ef5..fbb5414480 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-648079.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-648079.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); // Non-standard opcodes. diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-651961.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-651961.js index bf08200d30..f42f431703 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-651961.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-651961.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-654377.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-654377.js index 871da72114..455139f0bb 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-654377.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-654377.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-663994.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-663994.js index da3d7c7771..9643a86acb 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-663994.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-663994.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-667745.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-667745.js index 68c880303b..cae5122ca5 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-667745.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-667745.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-684858.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-684858.js index bfef7fcc8e..1ac3cc6f2a 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-684858.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-684858.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var name = 'regression_684858'; diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-688876.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-688876.js index 02932b4812..5e142b3417 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-688876.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-688876.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-689450.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-689450.js index 9a4989c633..bcd25387b4 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-689450.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-689450.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-6931.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-6931.js index 364e95a680..5edf25761f 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-6931.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-6931.js @@ -3,7 +3,6 @@ // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-699485.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-699485.js index a44b14b031..8a70afa591 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-699485.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-699485.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-702460.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-702460.js index 44e60330b4..21a84bcf28 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-702460.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-702460.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); // Non-standard opcodes. diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7033.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7033.js index 17d79c896f..58dff5e2f9 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7033.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7033.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7035.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7035.js index cd69c7d1b4..73485494b3 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7035.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7035.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7049.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7049.js index b9ad1a0be4..6d2cd351fb 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7049.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7049.js @@ -4,7 +4,6 @@ // Flags: --allow-natives-syntax --expose-gc -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); // Build two instances, instance 2 is interpreted, and calls instance 1 (via diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-708714.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-708714.js index 10cd67ad8d..dc90a0aba3 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-708714.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-708714.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-709684.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-709684.js index 1ca0cb63fd..a6e03e0a0b 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-709684.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-709684.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm --allow-natives-syntax -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); let importingModuleBinary1 = (() => { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-710844.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-710844.js index 20c8154e4a..3bafe41c0f 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-710844.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-710844.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-711203.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-711203.js index 46f274a8b0..beca86d378 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-711203.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-711203.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-715216b.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-715216b.js index 0954f807dd..85e93e07c9 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-715216b.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-715216b.js @@ -4,7 +4,6 @@ // Flags: --wasm-interpret-all --wasm-lazy-compilation -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-722445.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-722445.js index f6a96dc60d..5868d76190 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-722445.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-722445.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-724846.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-724846.js index 628d58f294..b215b6021a 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-724846.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-724846.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); // Flags: --wasm-max-mem-pages=49152 diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-724851.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-724851.js index 18834795d2..5c4c421a1c 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-724851.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-724851.js @@ -4,7 +4,6 @@ // Flags: --wasm-lazy-compilation -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); let builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-724972.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-724972.js index 2af403ce20..cbe5d35d54 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-724972.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-724972.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-727222.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-727222.js index 6b3f2faf5f..3096334096 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-727222.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-727222.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-727560.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-727560.js index f92d879a2e..e9ed441860 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-727560.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-727560.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-729991.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-729991.js index 85a9ae7231..8cabd515b3 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-729991.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-729991.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); let builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-734246.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-734246.js index 57f98949f8..b861141db7 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-734246.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-734246.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); let builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-734345.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-734345.js index f55a06288e..d7486d2d1e 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-734345.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-734345.js @@ -4,7 +4,6 @@ // Flags: --expose-gc -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); builder1 = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7353.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7353.js index 748c74139f..81f45fe6a5 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7353.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7353.js @@ -4,7 +4,6 @@ // Flags: --wasm-lazy-compilation -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7364.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7364.js index 8e66295b70..f508585ebb 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7364.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7364.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const exportingModuleBinary = (() => { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-736584.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-736584.js index 033732f368..0e027f3a57 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-736584.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-736584.js @@ -4,7 +4,6 @@ // Flags: --wasm-lazy-compilation -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); let mem = new WebAssembly.Memory({initial: 0}); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7366.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7366.js index 41f758efb1..b5cae8daa4 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7366.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7366.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-737069.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-737069.js index c68d10f06d..e4c4fae895 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-737069.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-737069.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); let binary = new Binary; diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-739768.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-739768.js index 52985c3297..a191c828d6 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-739768.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-739768.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); // Flags: --wasm-lazy-compilation diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7422.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7422.js index 87896b4c35..71e1eb89bd 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7422.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7422.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7499.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7499.js index 71f246decf..74e4d53a17 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7499.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7499.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7508.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7508.js index 7c07d2d7e3..10ce500a44 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7508.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7508.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-752423.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-752423.js index 15ee9a6c34..938ecbf252 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-752423.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-752423.js @@ -6,7 +6,6 @@ 'use strict'; -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7565.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7565.js index 055bfc0c59..c9d4e2ca88 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7565.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7565.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-757217.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-757217.js index 218b090c45..28e554b87a 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-757217.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-757217.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); let builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7579.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7579.js index 40cf12317f..876a76cad9 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7579.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7579.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7582.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7582.js index 476a0e18e8..d8b5e9d7fc 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7582.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7582.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-763439.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-763439.js index 1f90e0a017..ef84b97859 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-763439.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-763439.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-763697.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-763697.js index faf74e1cff..c831a55fba 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-763697.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-763697.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm --no-experimental-wasm-simd -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); let builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-766003.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-766003.js index d8a1ea1ebf..3aaff40636 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-766003.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-766003.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm --wasm-interpret-all -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); __v_6 = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-769637.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-769637.js index c2e783014a..71aaa45bfd 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-769637.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-769637.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); let builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-771243.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-771243.js index e1581fcdd8..81b9e8f2a9 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-771243.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-771243.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm --wasm-interpret-all -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); assertThrows(() => { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-772332.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-772332.js index 56e6f2ceb8..e8547c8175 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-772332.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-772332.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm --wasm-interpret-all -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); assertThrows(() => { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-775366.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-775366.js index e8db923896..69a1f68dc0 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-775366.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-775366.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); +load("test/mjsunit/wasm/wasm-module-builder.js"); (function BadTypeSection() { var data = bytes( diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7785.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7785.js index 12d7e6b5da..72638b1685 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7785.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7785.js @@ -4,7 +4,6 @@ // Flags: --allow-natives-syntax --experimental-wasm-anyref -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function testAnyRefNull() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-778917.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-778917.js index 083f1d12e3..c7eb033d95 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-778917.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-778917.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm --wasm-interpret-all -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-782280.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-782280.js index a94f061c2b..008ab16159 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-782280.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-782280.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-784050.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-784050.js index 8f1a79002c..acf4539aee 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-784050.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-784050.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7914.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7914.js index ede4668d08..48f8b902f0 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-7914.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-7914.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-791810.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-791810.js index cd6c4e2728..73b47bdd78 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-791810.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-791810.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-793551.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-793551.js index 8aa0241923..657b2c0013 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-793551.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-793551.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-797846.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-797846.js index 6a4fd5c5f7..1470de4fc6 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-797846.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-797846.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); // We need a module with one valid function. diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-800756.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-800756.js index 2d29997cef..76afc88d8f 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-800756.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-800756.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-801785.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-801785.js index 1870d7e8f1..105fd4bc38 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-801785.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-801785.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); // Flags: --print-wasm-code diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-801850.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-801850.js index b56af694a9..0e0f5c249c 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-801850.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-801850.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-802244.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-802244.js index 0b8decb637..aeaf850365 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-802244.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-802244.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-803427.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-803427.js index d3ab31b4c9..26b1413c3b 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-803427.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-803427.js @@ -4,7 +4,6 @@ // Flags: --wasm-lazy-compilation -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-803788.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-803788.js index e7fa3aaa8f..17325538f1 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-803788.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-803788.js @@ -4,7 +4,6 @@ // Flags: --wasm-lazy-compilation -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-8059.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-8059.js index c30ed152f8..78ee6bd1d2 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-8059.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-8059.js @@ -4,7 +4,6 @@ // Flags: --no-wasm-disable-structured-cloning -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function TestPostModule() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-808012.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-808012.js index ae613ceb54..a54b88a5e1 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-808012.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-808012.js @@ -4,7 +4,6 @@ // Flags: --wasm-lazy-compilation -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-808848.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-808848.js index bcf8469a14..57920de09d 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-808848.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-808848.js @@ -4,7 +4,6 @@ // Flags: --allow-natives-syntax -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); // The number of locals must be greater than the constant defined here: diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-808980.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-808980.js index ecf6476c37..d78c07f36c 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-808980.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-808980.js @@ -4,7 +4,6 @@ // Flags: --allow-natives-syntax --throws -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); let kTableSize = 3; diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-8094.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-8094.js index a35d583a4a..dc78366ed8 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-8094.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-8094.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm --experimental-wasm-eh -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); // Instantiate a throwing module. diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-8095.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-8095.js index 66ffc0d4b7..7d21932ec4 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-8095.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-8095.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm --experimental-wasm-eh -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); // Prepare a special error object to throw. diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-812005.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-812005.js index 979b769bbc..ba49987de5 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-812005.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-812005.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-817380.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-817380.js index 2cf50892fc..5b3281a150 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-817380.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-817380.js @@ -4,7 +4,6 @@ // Flags: --wasm-lazy-compilation -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder1 = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-819869.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-819869.js index f2606fb610..a32928ab0c 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-819869.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-819869.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-820802.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-820802.js index 224a2260f5..214e71819f 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-820802.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-820802.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-824681.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-824681.js index 18ca3d0b5d..9d712e6ddb 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-824681.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-824681.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); let chain = Promise.resolve(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-825087a.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-825087a.js index a1f9a1bea8..9a986d0839 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-825087a.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-825087a.js @@ -5,5 +5,5 @@ PAGES = 10; memory = new WebAssembly.Memory({initial: PAGES}); buffer = memory.buffer; -memory.grow(); +memory.grow(0); WebAssembly.validate(buffer); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-825087b.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-825087b.js index 699549d429..266fd53219 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-825087b.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-825087b.js @@ -6,5 +6,5 @@ PAGES = 10; memory = new WebAssembly.Memory({initial: PAGES}); buffer = memory.buffer; buffer = new Uint8Array(buffer); -memory.grow(); +memory.grow(0); WebAssembly.validate(buffer); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-827806.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-827806.js index c06e0fae96..8576de2e79 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-827806.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-827806.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); try { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-831463.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-831463.js index 65d1213dd0..2818ad350b 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-831463.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-831463.js @@ -4,7 +4,6 @@ // Flags: --wasm-interpret-all -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-834619.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-834619.js index 378e38e03c..145f415221 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-834619.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-834619.js @@ -4,7 +4,6 @@ // Flags: --wasm-lazy-compilation -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); (function ExportedFunctionsImportedOrder() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-834624.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-834624.js index 9161f098e0..45af23cde2 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-834624.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-834624.js @@ -4,7 +4,6 @@ // Flags: --wasm-interpret-all -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); let instance; diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-834693.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-834693.js index dac0e8578d..ad51b2a400 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-834693.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-834693.js @@ -4,7 +4,6 @@ // flags: --wasm-lazy-compilation -load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); var module = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-836141.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-836141.js index b37dbea628..5ac58042e4 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-836141.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-836141.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-837417.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-837417.js index 9dcc299ecf..ef1d3cfaf6 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-837417.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-837417.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-840757.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-840757.js index 0887401336..ad1cf9f64f 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-840757.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-840757.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); // Also enable predictable mode. Otherwise, concurrent recompilation will be diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-842501.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-842501.js index 83f5c9d4b8..d54507cc59 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-842501.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-842501.js @@ -4,7 +4,6 @@ // Flags: --no-wasm-trap-handler -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-843563.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-843563.js index 8c18cfa7a9..ca22299254 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-843563.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-843563.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-8505.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-8505.js index ebc97a95b4..0488723e4f 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-8505.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-8505.js @@ -4,7 +4,6 @@ // Flags: --expose-wasm --wasm-math-intrinsics --validate-asm --allow-natives-syntax -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); function verbose(args) { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-8533.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-8533.js index 5d782b747c..da5f44925a 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-8533.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-8533.js @@ -4,7 +4,6 @@ // Flags: --wasm-shared-engine --no-wasm-disable-structured-cloning --allow-natives-syntax --experimental-wasm-threads -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-854011.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-854011.js index 11863368f3..b0356a873f 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-854011.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-854011.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-854050.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-854050.js index e2146ca365..d6c4829acd 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-854050.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-854050.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-864509.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-864509.js index 822c06750a..19e3bfcfb8 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-864509.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-864509.js @@ -4,7 +4,6 @@ // Flags: --liftoff --no-wasm-tier-up --no-future --wasm-tier-mask-for-testing=2 -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-875556.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-875556.js index e1ea426f87..cc8bc5cc3e 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-875556.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-875556.js @@ -3,7 +3,6 @@ // found in the LICENSE file. // Flags: --expose-wasm --experimental-wasm-mv -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); (function() { diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-894307.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-894307.js index 5aef9eba86..f40388fcb4 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-894307.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-894307.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-894374.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-894374.js index fb9cb3b4fe..02be0088cf 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-894374.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-894374.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-910824.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-910824.js index 7c8f154496..b795425b1f 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-910824.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-910824.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-913804.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-913804.js index c12013c9f8..e9d4026308 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-913804.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-913804.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-916869.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-916869.js index 6acd5d68d7..30bb011364 100644 --- a/implementation-contributed/v8/mjsunit/regress/wasm/regress-916869.js +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-916869.js @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-922670.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-922670.js new file mode 100644 index 0000000000..2988eddf30 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-922670.js @@ -0,0 +1,31 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +const sig = builder.addType(makeSig([kWasmI32], [])); +builder.addFunction(undefined, sig) + .addLocals({i64_count: 1}) + .addBody([ + kExprLoop, kWasmI32, + kExprGetLocal, 1, + kExprI64Const, 1, + kExprLoop, kWasmI32, + kExprGetLocal, 0, + kExprI32Const, 1, + kExprI32Const, 1, + kExprIf, kWasmI32, + kExprI32Const, 1, + kExprElse, + kExprUnreachable, + kExprEnd, + kExprSelect, + kExprUnreachable, + kExprEnd, + kExprUnreachable, + kExprEnd, + kExprUnreachable +]); +builder.instantiate(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-922933.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-922933.js new file mode 100644 index 0000000000..4d44509598 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-922933.js @@ -0,0 +1,51 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +const sig = builder.addType(makeSig([kWasmI64], [kWasmI64])); +builder.addFunction(undefined, sig) + .addLocals({i32_count: 14}).addLocals({i64_count: 17}).addLocals({f32_count: 14}) + .addBody([ + kExprBlock, kWasmStmt, + kExprBr, 0x00, + kExprEnd, + kExprBlock, kWasmStmt, + kExprI32Const, 0x00, + kExprSetLocal, 0x09, + kExprI32Const, 0x00, + kExprIf, kWasmStmt, + kExprBlock, kWasmStmt, + kExprI32Const, 0x00, + kExprSetLocal, 0x0a, + kExprBr, 0x00, + kExprEnd, + kExprBlock, kWasmStmt, + kExprBlock, kWasmStmt, + kExprGetLocal, 0x00, + kExprSetLocal, 0x12, + kExprBr, 0x00, + kExprEnd, + kExprGetLocal, 0x16, + kExprSetLocal, 0x0f, + kExprGetLocal, 0x0f, + kExprSetLocal, 0x17, + kExprGetLocal, 0x0f, + kExprSetLocal, 0x18, + kExprGetLocal, 0x17, + kExprGetLocal, 0x18, + kExprI64ShrS, + kExprSetLocal, 0x19, + kExprUnreachable, + kExprEnd, + kExprUnreachable, + kExprElse, + kExprUnreachable, + kExprEnd, + kExprUnreachable, + kExprEnd, + kExprUnreachable +]); +builder.instantiate(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-924843.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-924843.js new file mode 100644 index 0000000000..0549a769fb --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-924843.js @@ -0,0 +1,16 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +const sig = builder.addType(makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI32])); +builder.addFunction(undefined, sig) + .addBody([ + kExprGetLocal, 2, + kExprIf, kWasmStmt, + kExprBlock, kWasmStmt + ]); +builder.addExport('main', 0); +assertThrows(() => builder.instantiate(), WebAssembly.CompileError); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-924905.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-924905.js new file mode 100644 index 0000000000..9dbdf7e299 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-924905.js @@ -0,0 +1,17 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +let builder = new WasmModuleBuilder(); +builder.addFunction("kaboom", kSig_i_v) + .addBody([ + kExprI32Const, 0, + kExprI32Const, 0, + kExprI32And, + kExprI32Const, 0, + kExprI32ShrU, + ]).exportFunc(); +let instance = builder.instantiate(); +assertEquals(0, instance.exports.kaboom()); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-925671.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-925671.js new file mode 100644 index 0000000000..c6113c272e --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-925671.js @@ -0,0 +1,12 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --wasm-tier-mask-for-testing=1 + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +var builder = new WasmModuleBuilder(); +builder.addFunction('f0', kSig_v_v).addBody([]); +builder.addFunction('f1', kSig_v_v).addBody([]); +builder.instantiate(); diff --git a/implementation-contributed/v8/mjsunit/tools/compiler-trace-flags.js b/implementation-contributed/v8/mjsunit/tools/compiler-trace-flags.js index 491aad8c1e..ea6f816f5d 100644 --- a/implementation-contributed/v8/mjsunit/tools/compiler-trace-flags.js +++ b/implementation-contributed/v8/mjsunit/tools/compiler-trace-flags.js @@ -6,7 +6,6 @@ // Flags: --trace-turbo-cfg-file=test/mjsunit/tools/turbo.cfg // Flags: --trace-turbo-path=test/mjsunit/tools -load('test/mjsunit/wasm/wasm-constants.js'); load('test/mjsunit/wasm/wasm-module-builder.js'); // The idea behind this test is to make sure we do not crash when using the diff --git a/implementation-contributed/v8/mjsunit/ubsan-fuzzerbugs.js b/implementation-contributed/v8/mjsunit/ubsan-fuzzerbugs.js new file mode 100644 index 0000000000..d2a21288ab --- /dev/null +++ b/implementation-contributed/v8/mjsunit/ubsan-fuzzerbugs.js @@ -0,0 +1,19 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// crbug.com/923466 +__v_5 = [ -1073741825, -2147483648]; +__v_5.sort(); + +// crbug.com/923642 +new RegExp("(abcd){2148473648,}", ""); + +// crbug.com/923626 +new Date(2146399200000).toString(); +new Date(2146940400000).toString(); +new Date(2147481600000).toString(); +new Date(2148022800000).toString(); + +// crbug.com/927212 +assertThrows(() => (2n).toString(-2147483657), RangeError); diff --git a/implementation-contributed/v8/test262/test262.status b/implementation-contributed/v8/test262/test262.status index fae6692cb8..34fc0a999e 100644 --- a/implementation-contributed/v8/test262/test262.status +++ b/implementation-contributed/v8/test262/test262.status @@ -1290,4 +1290,1330 @@ 'intl402/DateTimeFormat/prototype/resolvedOptions/basic': [SKIP], }], # system == windows +] + + /* + ********************************** test262-automation ********************************** + Summary: The two files have now diverged. + File Status: Partially curated & modified. + Source Status: Modified since its export. + Below is the current and modified source which was exported on Mon Feb 04 2019 19:40:41 GMT+0000 (Coordinated Universal Time) + */ + # Copyright 2011 the V8 project authors. All rights reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +[ + +[ALWAYS, { + ###################### MISSING ES6 FEATURES ####################### + + # https://code.google.com/p/v8/issues/detail?id=4248 + 'language/expressions/compound-assignment/S11.13.2_A5.*': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A6.*': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A7.10_T4': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A7.11_T4': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A7.1_T4': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A7.2_T4': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A7.3_T4': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A7.4_T4': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A7.5_T4': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A7.6_T4': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A7.7_T4': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A7.8_T4': [FAIL], + 'language/expressions/compound-assignment/S11.13.2_A7.9_T4': [FAIL], + 'language/statements/with/unscopables-inc-dec': [FAIL], + + # https://code.google.com/p/v8/issues/detail?id=4249 + 'language/expressions/assignment/S11.13.1_A7_T1': [FAIL], + 'language/expressions/assignment/S11.13.1_A7_T2': [FAIL], + 'language/expressions/assignment/S11.13.1_A7_T3': [FAIL], + 'language/expressions/postfix-increment/S11.3.1_A6_T3': [FAIL], + 'language/expressions/postfix-decrement/S11.3.2_A6_T3': [FAIL], + 'language/expressions/prefix-decrement/S11.4.5_A6_T3': [FAIL], + 'language/expressions/prefix-increment/S11.4.4_A6_T3': [FAIL], + + # https://code.google.com/p/v8/issues/detail?id=4250 + 'language/expressions/assignment/S11.13.1_A5*': [FAIL], + 'language/expressions/assignment/S11.13.1_A6*': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=4709 + 'built-ins/Promise/reject-function-name': [FAIL], + 'built-ins/Promise/resolve-function-name': [FAIL], + 'built-ins/Promise/all/resolve-element-function-name': [FAIL], + 'built-ins/Promise/executor-function-name': [FAIL], + 'built-ins/Proxy/revocable/revocation-function-name': [FAIL], + 'language/expressions/assignment/fn-name-lhs-cover': [FAIL], + 'language/expressions/assignment/fn-name-lhs-member': [FAIL], + 'language/expressions/function/name': [FAIL], + 'language/expressions/generators/name': [FAIL], + 'intl402/NumberFormat/prototype/format/format-function-name': [FAIL], + 'intl402/DateTimeFormat/prototype/format/format-function-name': [FAIL], + 'intl402/Collator/prototype/compare/compare-function-name': [FAIL], + + # https://code.google.com/p/v8/issues/detail?id=4251 + 'language/expressions/postfix-increment/S11.3.1_A5_T1': [FAIL], + 'language/expressions/postfix-increment/S11.3.1_A5_T2': [FAIL], + 'language/expressions/postfix-increment/S11.3.1_A5_T3': [FAIL], + 'language/expressions/postfix-increment/S11.3.1_A5_T4': [FAIL], + 'language/expressions/postfix-increment/S11.3.1_A5_T5': [FAIL], + 'language/expressions/postfix-decrement/S11.3.2_A5_*': [FAIL], + 'language/expressions/prefix-decrement/S11.4.5_A5_*': [FAIL], + 'language/expressions/prefix-increment/S11.4.4_A5_*': [FAIL], + 'language/statements/variable/binding-resolution': [FAIL], + + # https://code.google.com/p/v8/issues/detail?id=8771 + 'language/computed-property-names/class/static/method-number': [FAIL], + 'language/computed-property-names/class/static/method-string': [FAIL], + 'language/computed-property-names/class/static/method-symbol': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=4895 + 'built-ins/TypedArrayConstructors/internals/DefineOwnProperty/detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/DefineOwnProperty/BigInt/detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/DefineOwnProperty/detached-buffer-realm': [FAIL], + 'built-ins/TypedArrayConstructors/internals/DefineOwnProperty/BigInt/detached-buffer-realm': [FAIL], + 'built-ins/TypedArrayConstructors/internals/DefineOwnProperty/tonumber-value-detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/DefineOwnProperty/BigInt/tonumber-value-detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Get/detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Get/BigInt/detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Get/detached-buffer-realm': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Get/BigInt/detached-buffer-realm': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Get/infinity-detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Get/BigInt/infinity-detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/GetOwnProperty/detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/GetOwnProperty/BigInt/detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/GetOwnProperty/detached-buffer-realm': [FAIL], + 'built-ins/TypedArrayConstructors/internals/GetOwnProperty/BigInt/detached-buffer-realm': [FAIL], + 'built-ins/TypedArrayConstructors/internals/GetOwnProperty/enumerate-detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/GetOwnProperty/BigInt/enumerate-detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/HasProperty/detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/HasProperty/BigInt/detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/HasProperty/detached-buffer-realm': [FAIL], + 'built-ins/TypedArrayConstructors/internals/HasProperty/BigInt/detached-buffer-realm': [FAIL], + 'built-ins/TypedArrayConstructors/internals/HasProperty/infinity-with-detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/HasProperty/BigInt/infinity-with-detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Set/detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Set/BigInt/detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Set/detached-buffer-realm': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Set/BigInt/detached-buffer-realm': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Set/tonumber-value-detached-buffer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Set/BigInt/tonumber-value-detached-buffer': [FAIL], + # Some TypedArray methods throw due to the same bug, from Get + 'built-ins/TypedArray/prototype/every/callbackfn-detachbuffer': [FAIL], + 'built-ins/TypedArray/prototype/every/BigInt/callbackfn-detachbuffer': [FAIL], + 'built-ins/TypedArray/prototype/find/predicate-may-detach-buffer': [FAIL], + 'built-ins/TypedArray/prototype/find/BigInt/predicate-may-detach-buffer': [FAIL], + 'built-ins/TypedArray/prototype/findIndex/predicate-may-detach-buffer': [FAIL], + 'built-ins/TypedArray/prototype/findIndex/BigInt/predicate-may-detach-buffer': [FAIL], + 'built-ins/TypedArray/prototype/forEach/callbackfn-detachbuffer': [FAIL], + 'built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-detachbuffer': [FAIL], + 'built-ins/TypedArray/prototype/map/callbackfn-detachbuffer': [FAIL], + 'built-ins/TypedArray/prototype/map/BigInt/callbackfn-detachbuffer': [FAIL], + 'built-ins/TypedArray/prototype/reduce/callbackfn-detachbuffer': [FAIL], + 'built-ins/TypedArray/prototype/reduce/BigInt/callbackfn-detachbuffer': [FAIL], + 'built-ins/TypedArray/prototype/reduceRight/callbackfn-detachbuffer': [FAIL], + 'built-ins/TypedArray/prototype/reduceRight/BigInt/callbackfn-detachbuffer': [FAIL], + 'built-ins/TypedArray/prototype/some/callbackfn-detachbuffer': [FAIL], + 'built-ins/TypedArray/prototype/some/BigInt/callbackfn-detachbuffer': [FAIL], + # DataView functions should also throw on detached buffers + 'built-ins/ArrayBuffer/prototype/byteLength/detached-buffer': [FAIL], + 'built-ins/DataView/detached-buffer': [FAIL], + 'built-ins/DataView/prototype/byteLength/detached-buffer': [FAIL], + 'built-ins/DataView/prototype/byteOffset/detached-buffer': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=4951 + 'language/expressions/assignment/destructuring/iterator-destructuring-property-reference-target-evaluation-order': [FAIL], + 'language/expressions/assignment/destructuring/keyed-destructuring-property-reference-target-evaluation-order': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=896 + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/character-class-range-end': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/character-class-range-no-dash-end': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/character-class-range-no-dash-start': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/character-class-range-start': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-empty': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-empty-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-invalid': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-invalid-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-no-braces': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-no-braces-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-no-braces-value': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-no-braces-value-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-separator': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-separator-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-separator-only': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-separator-only-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-unclosed': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-unclosed-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-unopened': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/grammar-extension-unopened-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-01': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-01-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-02': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-02-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-03': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-03-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-04': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-04-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-05': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-05-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-06': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-06-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-07': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-07-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-08': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-08-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-09': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-09-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-10': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-10-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-11': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-11-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-12': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-12-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-13': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-13-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-14': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/loose-matching-14-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-Script': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-binary-property': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-binary-property-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-property-and-value': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-property-and-value-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-property-existing-value': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-property-existing-value-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-property-value-General_Category-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-property-value-Script': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-property-value-Script-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/non-existent-property-value-general-category': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-property-Block-with-value': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-property-Block-with-value-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-property-Line_Break': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-property-Line_Break-negated': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value': [FAIL_PHASE_ONLY], + 'built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value-negated': [FAIL_PHASE_ONLY], + 'language/literals/regexp/early-err-pattern': [FAIL_PHASE_ONLY], + 'language/literals/regexp/invalid-braced-quantifier-exact': [FAIL_PHASE_ONLY], + 'language/literals/regexp/invalid-braced-quantifier-lower': [FAIL_PHASE_ONLY], + 'language/literals/regexp/invalid-braced-quantifier-range': [FAIL_PHASE_ONLY], + 'language/literals/regexp/invalid-optional-lookbehind': [FAIL_PHASE_ONLY], + 'language/literals/regexp/invalid-optional-negative-lookbehind': [FAIL_PHASE_ONLY], + 'language/literals/regexp/invalid-range-lookbehind': [FAIL_PHASE_ONLY], + 'language/literals/regexp/invalid-range-negative-lookbehind': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-dangling-groupname': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-dangling-groupname-2': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-dangling-groupname-2-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-dangling-groupname-3': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-dangling-groupname-3-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-dangling-groupname-4': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-dangling-groupname-4-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-dangling-groupname-5': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-dangling-groupname-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-dangling-groupname-without-group-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-duplicate-groupspecifier': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-duplicate-groupspecifier-2': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-duplicate-groupspecifier-2-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-duplicate-groupspecifier-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-empty-groupspecifier': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-empty-groupspecifier-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-identity-escape-in-capture-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname-2': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname-2-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname-3': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname-3-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname-4': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname-5': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname-6': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname-without-group-2-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname-without-group-3-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-incomplete-groupname-without-group-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-continue-groupspecifier': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-continue-groupspecifier-4': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-continue-groupspecifier-4-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-2': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-2-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-3': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-4': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-4-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-5': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-5-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-6': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-7': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-8': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-8-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-9-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-numeric-groupspecifier': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-numeric-groupspecifier-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-punctuator-starting-groupspecifier': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-punctuator-starting-groupspecifier-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-punctuator-within-groupspecifier': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-punctuator-within-groupspecifier-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-u-escape-in-groupspecifier': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-u-escape-in-groupspecifier-2': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-unterminated-groupspecifier': [FAIL_PHASE_ONLY], + 'language/literals/regexp/named-groups/invalid-unterminated-groupspecifier-u': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-dec-esc': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-class-escape': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-extended-pattern-char': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-identity-escape': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-legacy-octal-escape': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-non-empty-class-ranges': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-non-empty-class-ranges-no-dash-a': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-non-empty-class-ranges-no-dash-ab': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-non-empty-class-ranges-no-dash-b': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-oob-decimal-escape': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-optional-lookahead': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-optional-lookbehind': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-optional-negative-lookahead': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-optional-negative-lookbehind': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-range-lookahead': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-range-lookbehind': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-range-negative-lookahead': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-invalid-range-negative-lookbehind': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-unicode-esc-bounds': [FAIL_PHASE_ONLY], + 'language/literals/regexp/u-unicode-esc-non-hex': [FAIL_PHASE_ONLY], + 'language/literals/regexp/unicode-escape-nls-err': [FAIL_PHASE_ONLY], + + # https://bugs.chromium.org/p/v8/issues/detail?id=4628 + 'language/eval-code/direct/non-definable-function-with-function': [FAIL], + 'language/eval-code/direct/non-definable-function-with-variable': [FAIL], + 'language/eval-code/indirect/non-definable-function-with-function': [FAIL], + 'language/eval-code/indirect/non-definable-function-with-variable': [FAIL], + 'language/global-code/script-decl-func-err-non-configurable': [FAIL], + 'language/global-code/script-decl-var-collision': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=5116 + 'built-ins/TypedArray/prototype/fill/fill-values-conversion-operations-consistent-nan': [PASS, FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=4698 + 'language/expressions/call/tco-call-args': [SKIP], + 'language/expressions/call/tco-cross-realm-class-construct': [SKIP], + 'language/expressions/call/tco-cross-realm-class-derived-construct': [SKIP], + 'language/expressions/call/tco-cross-realm-fun-call': [SKIP], + 'language/expressions/call/tco-cross-realm-fun-construct': [SKIP], + 'language/expressions/call/tco-member-args': [SKIP], + 'language/expressions/call/tco-non-eval-function': [SKIP], + 'language/expressions/call/tco-non-eval-function-dynamic': [SKIP], + 'language/expressions/call/tco-non-eval-global': [SKIP], + 'language/expressions/call/tco-non-eval-with': [SKIP], + 'language/expressions/comma/tco-final': [SKIP], + 'language/expressions/conditional/tco-cond': [SKIP], + 'language/expressions/conditional/tco-pos': [SKIP], + 'language/expressions/logical-and/tco-right': [SKIP], + 'language/expressions/logical-or/tco-right': [SKIP], + 'language/expressions/tagged-template/tco-call': [SKIP], + 'language/expressions/tagged-template/tco-member': [SKIP], + 'language/expressions/tco-pos': [SKIP], + 'language/statements/block/tco-stmt': [SKIP], + 'language/statements/block/tco-stmt-list': [SKIP], + 'language/statements/do-while/tco-body': [SKIP], + 'language/statements/for/tco-const-body': [SKIP], + 'language/statements/for/tco-let-body': [SKIP], + 'language/statements/for/tco-lhs-body': [SKIP], + 'language/statements/for/tco-var-body': [SKIP], + 'language/statements/if/tco-else-body': [SKIP], + 'language/statements/if/tco-if-body': [SKIP], + 'language/statements/labeled/tco': [SKIP], + 'language/statements/return/tco': [SKIP], + 'language/statements/switch/tco-case-body': [SKIP], + 'language/statements/switch/tco-case-body-dflt': [SKIP], + 'language/statements/switch/tco-dftl-body': [SKIP], + 'language/statements/try/tco-catch': [SKIP], + 'language/statements/try/tco-catch-finally': [SKIP], + 'language/statements/try/tco-finally': [SKIP], + 'language/statements/while/tco-body': [SKIP], + + # https://bugs.chromium.org/p/v8/issues/detail?id=5327 + 'built-ins/TypedArrayConstructors/internals/Set/key-is-minus-zero': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Set/BigInt/key-is-minus-zero': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Set/key-is-not-integer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Set/BigInt/key-is-not-integer': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Set/key-is-out-of-bounds': [FAIL], + 'built-ins/TypedArrayConstructors/internals/Set/BigInt/key-is-out-of-bounds': [FAIL], + + # SharedArrayBuffer tests that require flags + 'built-ins/SharedArrayBuffer/*': ['--harmony-sharedarraybuffer'], + 'built-ins/Atomics/*': ['--harmony-sharedarraybuffer'], + 'built-ins/ArrayBuffer/prototype/byteLength/this-is-sharedarraybuffer': ['--harmony-sharedarraybuffer'], + 'built-ins/ArrayBuffer/prototype/slice/this-is-sharedarraybuffer': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/buffer-does-not-have-arraybuffer-data-throws-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/buffer-reference-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/byteoffset-is-negative-throws-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/custom-proto-if-not-object-fallbacks-to-default-prototype-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/custom-proto-if-object-is-used-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/defined-bytelength-and-byteoffset-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/defined-byteoffset-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/defined-byteoffset-undefined-bytelength-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/excessive-bytelength-throws-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/excessive-byteoffset-throws-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/instance-extensibility-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/negative-bytelength-throws-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/negative-byteoffset-throws-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/newtarget-undefined-throws-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/proto-from-ctor-realm-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/buffer/return-buffer-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/buffer/this-has-no-dataview-internal-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/byteLength/return-bytelength-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/byteLength/this-has-no-dataview-internal-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/byteOffset/return-byteoffset-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/byteOffset/this-has-no-dataview-internal-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/getInt32/index-is-out-of-range-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/getInt32/negative-byteoffset-throws-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/getInt32/return-abrupt-from-tonumber-byteoffset-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/getInt32/return-abrupt-from-tonumber-byteoffset-symbol-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/getInt32/return-value-clean-arraybuffer-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/getInt32/return-values-custom-offset-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/getInt32/return-values-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/getInt32/this-has-no-dataview-internal-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/prototype/getInt32/to-boolean-littleendian-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/return-abrupt-tonumber-bytelength-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/return-abrupt-tonumber-bytelength-symbol-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/return-abrupt-tonumber-byteoffset-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/return-abrupt-tonumber-byteoffset-symbol-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/return-instance-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/toindex-bytelength-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/DataView/toindex-byteoffset-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/TypedArray/prototype/set/typedarray-arg-set-values-diff-buffer-other-type-conversions-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/TypedArray/prototype/set/typedarray-arg-set-values-diff-buffer-other-type-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/TypedArray/prototype/set/typedarray-arg-set-values-diff-buffer-same-type-sab': ['--harmony-sharedarraybuffer'], + 'built-ins/TypedArray/prototype/set/typedarray-arg-set-values-same-buffer-same-type-sab': ['--harmony-sharedarraybuffer'], + + # https://bugs.chromium.org/p/v8/issues/detail?id=8100 + 'built-ins/Atomics/notify/bigint/*': [SKIP], + 'built-ins/Atomics/wait/bigint/*': [SKIP], + + # https://bugs.chromium.org/p/v8/issues/detail?id=6049 + 'built-ins/Object/internals/DefineOwnProperty/consistent-value-function-caller': [FAIL_SLOPPY], + 'built-ins/Object/internals/DefineOwnProperty/consistent-value-function-arguments': [FAIL_SLOPPY], + + # https://bugs.chromium.org/p/v8/issues/detail?id=7184 + 'annexB/language/expressions/yield/star-iterable-return-emulates-undefined-throws-when-called': [FAIL], + 'annexB/language/statements/for-await-of/iterator-close-return-emulates-undefined-throws-when-called': [FAIL], + 'annexB/language/statements/for-of/iterator-close-return-emulates-undefined-throws-when-called': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=7468 + 'language/statements/class/elements/privatename-not-valid-earlyerr-script-8': [SKIP], + + # https://bugs.chromium.org/p/v8/issues/detail?id=5690 + 'language/expressions/call/eval-spread': [FAIL], + 'language/expressions/call/eval-spread-empty-leading': [FAIL], + 'language/expressions/call/eval-spread-empty-trailing': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=8664 + 'intl402/Collator/missing-unicode-ext-value-defaults-to-true': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=8717 + 'intl402/Segmenter/constructor/constructor/options-granularity-valid': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=7472 + 'intl402/NumberFormat/currency-digits': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=7483 + 'annexB/built-ins/Function/createdynfn-html-close-comment-params': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=8260 + 'intl402/Locale/constructor-non-iana-canon': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=8261 + 'intl402/Locale/constructor-options-language-valid': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=8262 + 'intl402/Locale/constructor-parse-twice': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=8246 + 'intl402/Locale/constructor-tag': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=8243 + 'intl402/Locale/extensions-private': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=8236 + 'intl402/Locale/likely-subtags': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=8242 + 'intl402/Locale/extensions-grandfathered': [FAIL], + 'intl402/Locale/getters-grandfathered': [FAIL], + 'intl402/Locale/likely-subtags-grandfathered': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=7831 + 'language/statements/generators/generator-created-after-decl-inst': [FAIL], + 'language/expressions/generators/generator-created-after-decl-inst': [FAIL], + 'language/expressions/async-generator/generator-created-after-decl-inst': [FAIL], + 'language/statements/async-generator/generator-created-after-decl-inst': [FAIL], + + # await tests that require flags + 'language/expressions/await/async-generator-interleaved': ['--harmony-await-optimization'], + 'language/expressions/await/await-monkey-patched-promise': ['--harmony-await-optimization'], + 'language/expressions/await/for-await-of-interleaved': ['--harmony-await-optimization'], + 'language/expressions/await/async-await-interleaved': ['--harmony-await-optimization'], + + # https://github.com/tc39/test262/issues/2033 + 'language/expressions/class/elements/private-derived-cls-direct-eval-err-contains-supercall': [SKIP], + 'language/expressions/class/elements/private-derived-cls-direct-eval-err-contains-supercall-1': [SKIP], + 'language/expressions/class/elements/private-derived-cls-direct-eval-err-contains-supercall-2': [SKIP], + 'language/expressions/class/elements/private-derived-cls-indirect-eval-err-contains-supercall': [SKIP], + 'language/expressions/class/elements/private-derived-cls-indirect-eval-err-contains-supercall-1': [SKIP], + 'language/expressions/class/elements/private-derived-cls-indirect-eval-err-contains-supercall-2': [SKIP], + 'language/statements/class/elements/private-derived-cls-direct-eval-err-contains-supercall': [SKIP], + 'language/statements/class/elements/private-derived-cls-direct-eval-err-contains-supercall-1': [SKIP], + 'language/statements/class/elements/private-derived-cls-direct-eval-err-contains-supercall-2': [SKIP], + 'language/statements/class/elements/private-derived-cls-indirect-eval-err-contains-supercall': [SKIP], + 'language/statements/class/elements/private-derived-cls-indirect-eval-err-contains-supercall-1': [SKIP], + 'language/statements/class/elements/private-derived-cls-indirect-eval-err-contains-supercall-2': [SKIP], + + # https://github.com/tc39/test262/issues/2034 + 'language/expressions/postfix-decrement/arguments': [SKIP], + 'language/expressions/postfix-decrement/arguments-nostrict': [SKIP], + 'language/expressions/postfix-decrement/eval': [SKIP], + 'language/expressions/postfix-decrement/eval-nostrict': [SKIP], + 'language/expressions/postfix-increment/arguments': [SKIP], + 'language/expressions/postfix-increment/arguments-nostrict': [SKIP], + 'language/expressions/postfix-increment/eval': [SKIP], + 'language/expressions/postfix-increment/eval-nostrict': [SKIP], + 'language/expressions/prefix-decrement/arguments': [SKIP], + 'language/expressions/prefix-decrement/arguments-nostrict': [SKIP], + 'language/expressions/prefix-decrement/eval': [SKIP], + 'language/expressions/prefix-decrement/eval-nostrict': [SKIP], + 'language/expressions/prefix-increment/arguments': [SKIP], + 'language/expressions/prefix-increment/arguments-nostrict': [SKIP], + 'language/expressions/prefix-increment/eval': [SKIP], + 'language/expressions/prefix-increment/eval-nostrict': [SKIP], + + # https://github.com/tc39/proposal-class-fields/issues/215 + 'language/expressions/function/early-errors/invalid-names-call-expression-bad-reference': [FAIL], + 'language/expressions/function/early-errors/invalid-names-call-expression-this': [FAIL], + 'language/expressions/function/early-errors/invalid-names-member-expression-bad-reference': [FAIL], + 'language/expressions/function/early-errors/invalid-names-member-expression-this': [FAIL], + 'language/statements/function/early-errors/invalid-names-call-expression-bad-reference': [FAIL], + 'language/statements/function/early-errors/invalid-names-call-expression-this': [FAIL], + 'language/statements/function/early-errors/invalid-names-member-expression-bad-reference': [FAIL], + 'language/statements/function/early-errors/invalid-names-member-expression-this': [FAIL], + + ######################## NEEDS INVESTIGATION ########################### + + # These test failures are specific to the intl402 suite and need investigation + # to be either marked as bugs with issues filed for them or as deliberate + # incompatibilities if the test cases turn out to be broken or ambiguous. + # Some of these are related to v8:4361 in being visible side effects from Intl. + + # https://bugs.chromium.org/p/v8/issues/detail?id=7833 + 'built-ins/Atomics/wait/cannot-suspend-throws': [SKIP], + 'built-ins/Atomics/wait/undefined-index-defaults-to-zero': [SKIP], + + # https://bugs.chromium.org/p/v8/issues/detail?id=8258 + 'intl402/Locale/constructor-options-language-valid-undefined': [FAIL], + + ##################### DELIBERATE INCOMPATIBILITIES ##################### + + # https://github.com/tc39/ecma262/pull/889 + 'annexB/language/function-code/block-decl-func-skip-arguments': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=6538 + + # https://bugs.chromium.org/p/v8/issues/detail?id=6541 + 'language/export/escaped-as-export-specifier': [FAIL], + 'language/export/escaped-from': [FAIL], + 'language/expressions/object/method-definition/escaped-get': [FAIL], + 'language/expressions/object/method-definition/escaped-set': [FAIL], + 'language/import/escaped-as-import-specifier': [FAIL], + 'language/import/escaped-as-namespace-import': [FAIL], + 'language/import/escaped-from': [FAIL], + 'language/statements/for-await-of/escaped-of': [FAIL], + 'language/statements/for-of/escaped-of': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=6543 + 'language/statements/labeled/value-await-non-module-escaped': [FAIL], + 'language/statements/labeled/value-yield-non-strict-escaped': [FAIL], + 'language/expressions/async-arrow-function/escaped-async-line-terminator': [FAIL], + 'language/expressions/class/class-name-ident-await-escaped': [FAIL], + 'language/statements/class/class-name-ident-await-escaped': [FAIL], + + ############################ INVALID TESTS ############################# + + # Test makes unjustified assumptions about the number of calls to SortCompare. + # Test262 Bug: https://bugs.ecmascript.org/show_bug.cgi?id=596 + 'built-ins/Array/prototype/sort/bug_596_1': [PASS, FAIL_OK], + + # https://github.com/tc39/test262/pull/688#pullrequestreview-14025354 + 'built-ins/Function/internals/Construct/derived-this-uninitialized-realm': [FAIL], + + # Date tests that fail in CE(S)T timezone. + # https://bugs.chromium.org/p/v8/issues/detail?id=5449 + 'built-ins/Date/prototype/setFullYear/new-value-time-clip': [PASS, FAIL], + 'built-ins/Date/prototype/setMonth/new-value-time-clip': [PASS, FAIL], + + # Test against internals of harness; we plug in differently + 'harness/detachArrayBuffer': [SKIP], + 'harness/detachArrayBuffer-host-detachArrayBuffer': [SKIP], + + ############################ SKIPPED TESTS ############################# + + # These tests take a looong time to run. + 'built-ins/decodeURI/S15.1.3.1_A1.10_T1': [SKIP], + 'built-ins/decodeURI/S15.1.3.1_A1.11_T1': [SKIP], + 'built-ins/decodeURI/S15.1.3.1_A1.11_T2': [SKIP], + 'built-ins/decodeURI/S15.1.3.1_A1.12_T1': [SKIP], + 'built-ins/decodeURI/S15.1.3.1_A1.12_T2': [SKIP], + 'built-ins/decodeURI/S15.1.3.1_A2.5_T1': [SKIP], + 'built-ins/decodeURIComponent/S15.1.3.2_A1.11_T1': [SKIP], + 'built-ins/decodeURIComponent/S15.1.3.2_A1.12_T1': [SKIP], + 'built-ins/decodeURIComponent/S15.1.3.2_A2.5_T1': [SKIP], + 'language/literals/regexp/S7.8.5_A1.1_T2': [SKIP], + 'language/literals/regexp/S7.8.5_A1.4_T2': [SKIP], + 'language/literals/regexp/S7.8.5_A2.1_T2': [SKIP], + 'language/literals/regexp/S7.8.5_A2.4_T2': [SKIP], + 'built-ins/Array/prototype/slice/S15.4.4.10_A3_T1': [SKIP], + 'built-ins/Array/prototype/slice/S15.4.4.10_A3_T2': [SKIP], + + # https://bugs.chromium.org/p/v8/issues/detail?id=7187 + 'built-ins/Function/prototype/toString/line-terminator-normalisation-CR': [SKIP], + + ############################ SLOW TESTS ############################# + + 'annexB/built-ins/RegExp/RegExp-leading-escape-BMP': [PASS, SLOW], + 'annexB/built-ins/RegExp/RegExp-trailing-escape-BMP': [PASS, SLOW], + 'language/comments/S7.4_A5': [PASS, SLOW], + 'language/comments/S7.4_A6': [PASS, SLOW], + +}], # ALWAYS + +['no_i18n == True', { + # Unicode canonicalization is not available with i18n turned off. + 'built-ins/String/prototype/localeCompare/15.5.4.9_CE': [SKIP], + + # Unicode regexp case mapping is not available with i18n turned off. + 'language/literals/regexp/u-case-mapping': [SKIP], + + # BUG(v8:4437). + 'built-ins/String/prototype/normalize/return-normalized-string': [SKIP], + 'built-ins/String/prototype/normalize/return-normalized-string-from-coerced-form': [SKIP], + 'built-ins/String/prototype/normalize/return-normalized-string-using-default-parameter': [SKIP], + + # Case-conversion is not fully compliant to the Unicode spec with i18n off. + 'built-ins/String/prototype/toLocaleLowerCase/Final_Sigma_U180E': [FAIL], + 'built-ins/String/prototype/toLocaleLowerCase/special_casing_conditional': [FAIL], + 'built-ins/String/prototype/toLocaleLowerCase/supplementary_plane': [FAIL], + 'built-ins/String/prototype/toLowerCase/Final_Sigma_U180E': [FAIL], + 'built-ins/String/prototype/toLowerCase/special_casing_conditional': [FAIL], + 'built-ins/String/prototype/toLowerCase/supplementary_plane': [FAIL], + 'built-ins/String/prototype/toLocaleUpperCase/supplementary_plane': [FAIL], + 'built-ins/String/prototype/toUpperCase/supplementary_plane': [FAIL], + + # Locale-sensitive case-conversion is not available with i18n off. + 'intl402/String/prototype/toLocaleLowerCase/special_casing_Azeri': [FAIL], + 'intl402/String/prototype/toLocaleLowerCase/special_casing_Lithuanian': [FAIL], + 'intl402/String/prototype/toLocaleLowerCase/special_casing_Turkish': [FAIL], + 'intl402/String/prototype/toLocaleUpperCase/special_casing_Azeri': [FAIL], + 'intl402/String/prototype/toLocaleUpperCase/special_casing_Lithuanian': [FAIL], + 'intl402/String/prototype/toLocaleUpperCase/special_casing_Turkish': [FAIL], + + # Unicode property escapes unavailable without i18n + 'built-ins/RegExp/property-escapes/*': [SKIP], + 'built-ins/RegExp/named-groups/unicode-property-names': [SKIP], +}], # no_i18n == True + +['arch == arm or arch == mipsel or arch == mips or arch == arm64 or arch == mips64 or arch == mips64el', { + + # TODO(mstarzinger): Causes stack overflow on simulators due to eager + # compilation of parenthesized function literals. Needs investigation. + 'language/statements/function/S13.2.1_A1_T1': [SKIP], + + # BUG(3251225): Tests that timeout with --noopt. + 'built-ins/decodeURI/S15.1.3.1_A2.4_T1': [SKIP], + 'built-ins/decodeURI/S15.1.3.1_A2.5_T1': [SKIP], + 'built-ins/decodeURIComponent/S15.1.3.2_A2.4_T1': [SKIP], + 'built-ins/decodeURIComponent/S15.1.3.2_A2.5_T1': [SKIP], + 'built-ins/encodeURI/S15.1.3.3_A2.3_T1': [SKIP], + 'built-ins/encodeURIComponent/S15.1.3.4_A2.3_T1': [SKIP], +}], # 'arch == arm or arch == mipsel or arch == mips or arch == arm64' + +['byteorder == big', { + # Test failures on big endian platforms due to the way the tests + # are written + + # https://github.com/tc39/test262/issues/757 + 'built-ins/TypedArray/prototype/set/typedarray-arg-set-values-same-buffer-other-type': [SKIP], +}], + +['asan == True', { + # BUG(v8:4653): Test262 tests which rely on quit() are not compatible with + # asan's --omit-quit flag. + 'built-ins/Promise/prototype/then/deferred-is-resolved-value': [SKIP], + 'language/expressions/dynamic-import/always-create-new-promise': [SKIP], + 'language/expressions/dynamic-import/assign-expr-get-value-abrupt-throws': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/additive-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/array-literal': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/arrow-function': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/await-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/await-identifier': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/call-expr-arguments': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/call-expr-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/call-expr-identifier': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/cover-call-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/cover-parenthesized-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/identifier': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/import-meta': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/lhs-assign-operator-assign-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/lhs-eq-assign-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/lhs-eq-assign-expr-nostrict': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/logical-and-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/logical-or-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/member-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/new-target': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/object-literal': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/tagged-function-call': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/ternary': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/this': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/unary-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/yield-assign-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/yield-expr': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/yield-identifier': [SKIP], + 'language/expressions/dynamic-import/assignment-expression/yield-star': [SKIP], + 'language/expressions/dynamic-import/await-import-evaluation': [SKIP], + 'language/expressions/dynamic-import/catch/nested-arrow-import-catch-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-arrow-import-catch-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-arrow-import-catch-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-arrow-import-catch-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-arrow-import-catch-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-arrow-import-catch-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-arrow-import-catch-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-await-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-await-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-await-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-await-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-await-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-await-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-await-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-await-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-await-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-await-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-await-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-await-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-await-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-await-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-return-await-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-return-await-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-return-await-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-return-await-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-return-await-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-return-await-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-return-await-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-function-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-await-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-await-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-await-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-await-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-await-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-await-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-await-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-return-await-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-return-await-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-return-await-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-return-await-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-return-await-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-return-await-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-async-gen-return-await-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-import-catch-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-import-catch-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-import-catch-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-import-catch-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-import-catch-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-import-catch-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-import-catch-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-labeled-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-labeled-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-labeled-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-labeled-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-labeled-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-labeled-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-block-labeled-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-do-while-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-do-while-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-do-while-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-do-while-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-do-while-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-do-while-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-do-while-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-else-import-catch-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-else-import-catch-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-else-import-catch-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-else-import-catch-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-else-import-catch-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-else-import-catch-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-else-import-catch-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-function-import-catch-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-function-import-catch-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-function-import-catch-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-function-import-catch-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-function-import-catch-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-function-import-catch-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-function-import-catch-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-if-import-catch-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-if-import-catch-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-if-import-catch-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-if-import-catch-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-if-import-catch-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-if-import-catch-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-if-import-catch-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/nested-while-import-catch-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-while-import-catch-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/nested-while-import-catch-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/nested-while-import-catch-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/nested-while-import-catch-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/nested-while-import-catch-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/nested-while-import-catch-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/catch/top-level-import-catch-eval-rqstd-abrupt-typeerror': [SKIP], + 'language/expressions/dynamic-import/catch/top-level-import-catch-eval-rqstd-abrupt-urierror': [SKIP], + 'language/expressions/dynamic-import/catch/top-level-import-catch-eval-script-code-target': [SKIP], + 'language/expressions/dynamic-import/catch/top-level-import-catch-file-does-not-exist': [SKIP], + 'language/expressions/dynamic-import/catch/top-level-import-catch-instn-iee-err-ambiguous-import': [SKIP], + 'language/expressions/dynamic-import/catch/top-level-import-catch-instn-iee-err-circular': [SKIP], + 'language/expressions/dynamic-import/catch/top-level-import-catch-specifier-tostring-abrupt-rejects': [SKIP], + 'language/expressions/dynamic-import/custom-primitive': [SKIP], + 'language/expressions/dynamic-import/double-error-resolution': [SKIP], + 'language/expressions/dynamic-import/double-error-resolution-promise': [SKIP], + 'language/expressions/dynamic-import/escape-sequence-import': [SKIP], + 'language/expressions/dynamic-import/eval-export-dflt-cls-anon': [SKIP], + 'language/expressions/dynamic-import/eval-export-dflt-cls-named': [SKIP], + 'language/expressions/dynamic-import/eval-export-dflt-cls-name-meth': [SKIP], + 'language/expressions/dynamic-import/eval-export-dflt-expr-cls-anon': [SKIP], + 'language/expressions/dynamic-import/eval-export-dflt-expr-cls-named': [SKIP], + 'language/expressions/dynamic-import/eval-export-dflt-expr-cls-name-meth': [SKIP], + 'language/expressions/dynamic-import/eval-export-dflt-expr-fn-anon': [SKIP], + 'language/expressions/dynamic-import/eval-export-dflt-expr-fn-named': [SKIP], + 'language/expressions/dynamic-import/eval-export-dflt-expr-gen-anon': [SKIP], + 'language/expressions/dynamic-import/eval-export-dflt-expr-gen-named': [SKIP], + 'language/expressions/dynamic-import/eval-export-dflt-expr-in': [SKIP], + 'language/expressions/dynamic-import/eval-rqstd-once': [SKIP], + 'language/expressions/dynamic-import/eval-self-once-module': [SKIP], + 'language/expressions/dynamic-import/eval-self-once-script': [SKIP], + 'language/expressions/dynamic-import/for-await-resolution-and-error-agen': [SKIP], + 'language/expressions/dynamic-import/for-await-resolution-and-error-agen-yield': [SKIP], + 'language/expressions/dynamic-import/for-await-resolution-and-error': [SKIP], + 'language/expressions/dynamic-import/imported-self-update': [SKIP], + 'language/expressions/dynamic-import/indirect-resolution': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-define-own-property': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-delete-exported-init-no-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-delete-exported-init-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-delete-non-exported-no-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-delete-non-exported-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-extensible': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-get-nested-namespace-dflt-direct': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-get-nested-namespace-dflt-indirect': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-get-nested-namespace-props-nrml': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-get-own-property-str-found-init': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-get-own-property-str-not-found': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-get-own-property-sym': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-get-str-found': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-get-str-not-found': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-get-sym-found': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-get-sym-not-found': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-has-property-str-found-init': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-has-property-str-not-found': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-has-property-sym-found': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-has-property-sym-not-found': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-no-iterator': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-own-property-keys-sort': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-prevent-extensions-object': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-prevent-extensions-reflect': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-prop-descs': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-prototype': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-set-no-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-set-prototype-of': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-set-prototype-of-null': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-set-same-values-no-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-set-same-values-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-set-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/await-ns-Symbol-toStringTag': [SKIP], + 'language/expressions/dynamic-import/namespace/default-property-not-set-own': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-define-own-property': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-delete-exported-init-no-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-delete-exported-init-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-delete-non-exported-no-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-delete-non-exported-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-extensible': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-get-nested-namespace-dflt-direct': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-get-nested-namespace-dflt-indirect': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-get-nested-namespace-props-nrml': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-get-own-property-str-found-init': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-get-own-property-str-not-found': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-get-own-property-sym': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-get-str-found': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-get-str-not-found': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-get-sym-found': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-get-sym-not-found': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-has-property-str-found-init': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-has-property-str-not-found': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-has-property-sym-found': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-has-property-sym-not-found': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-no-iterator': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-own-property-keys-sort': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-prevent-extensions-object': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-prevent-extensions-reflect': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-prop-descs': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-prototype': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-set-no-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-set-prototype-of': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-set-prototype-of-null': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-set-same-values-no-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-set-same-values-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-set-strict': [SKIP], + 'language/expressions/dynamic-import/namespace/promise-then-ns-Symbol-toStringTag': [SKIP], + 'language/expressions/dynamic-import/returns-promise': [SKIP], + 'language/expressions/dynamic-import/reuse-namespace-object': [SKIP], + 'language/expressions/dynamic-import/reuse-namespace-object-from-import': [SKIP], + 'language/expressions/dynamic-import/reuse-namespace-object-from-script': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-10-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-11-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-12-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-13-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-14-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-15-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-16-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-17-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-1-update-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-2-update-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-3-update-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-4-update-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-5-lhs-equals-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-6-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-7-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-8-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-9-lhs-assignment-operator-assignment-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-arrow-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-arrow-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-arrow-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-arrow-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-arrow-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-arrow-function-await-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-arrow-function-await-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-arrow-function-await-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-arrow-function-await-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-arrow-function-await-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-arrow-function-return-await-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-arrow-function-return-await-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-arrow-function-return-await-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-arrow-function-return-await-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-arrow-function-return-await-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-await-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-await-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-await-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-await-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-await-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-return-await-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-return-await-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-return-await-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-return-await-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-function-return-await-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-gen-await-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-gen-await-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-gen-await-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-gen-await-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-async-gen-await-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-block-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-block-labeled-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-block-labeled-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-block-labeled-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-block-labeled-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-block-labeled-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-block-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-block-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-block-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-block-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-do-while-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-do-while-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-do-while-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-do-while-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-do-while-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-else-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-else-braceless-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-else-braceless-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-else-braceless-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-else-braceless-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-else-braceless-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-else-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-else-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-else-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-else-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-function-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-function-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-function-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-function-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-function-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-function-return-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-function-return-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-function-return-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-function-return-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-function-return-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-if-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-if-braceless-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-if-braceless-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-if-braceless-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-if-braceless-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-if-braceless-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-if-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-if-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-if-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-if-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-while-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-while-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-while-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-while-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-while-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-with-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-with-expression-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-with-expression-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-with-expression-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-with-expression-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-with-expression-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-with-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-with-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-with-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/nested-with-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/top-level-assignment-expr-not-optional': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/top-level-no-new-call-expression': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/top-level-no-rest-param': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/top-level-not-extensible-args': [SKIP], + 'language/expressions/dynamic-import/syntax/invalid/top-level-not-extensible-no-trailing-comma': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/callexpression-arguments': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/callexpression-templateliteral': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-arrow-assignment-expression-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-arrow-assignment-expression-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-arrow-assignment-expression-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-arrow-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-arrow-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-arrow-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-await-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-await-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-await-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-return-await-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-return-await-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-return-await-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-function-await-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-function-await-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-function-await-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-function-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-function-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-function-return-await-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-function-return-await-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-function-return-await-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-function-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-block-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-block-labeled-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-block-labeled-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-block-labeled-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-block-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-block-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-do-while-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-do-while-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-do-while-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-else-braceless-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-else-braceless-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-else-braceless-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-else-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-else-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-else-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-function-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-function-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-function-return-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-function-return-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-function-return-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-function-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-if-braceless-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-if-braceless-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-if-braceless-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-if-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-if-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-if-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-while-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-while-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-while-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-with-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-with-expression-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-with-expression-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-with-expression-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-with-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/nested-with-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/new-covered-expression-is-valid': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/top-level-empty-str-is-valid-assign-expr': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/top-level-nested-imports': [SKIP], + 'language/expressions/dynamic-import/syntax/valid/top-level-script-code-valid': [SKIP], + 'language/expressions/dynamic-import/update-to-dynamic-import': [SKIP], + 'language/expressions/dynamic-import/usage-from-eval': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-assignment-expression-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-assignment-expression-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-assignment-expression-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-assignment-expression-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-assignment-expression-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-assignment-expression-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-import-then-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-import-then-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-import-then-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-import-then-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-import-then-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-arrow-import-then-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-await-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-await-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-await-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-await-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-await-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-await-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-return-await-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-return-await-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-return-await-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-return-await-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-return-await-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-arrow-function-return-await-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-await-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-await-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-await-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-await-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-await-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-await-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-return-await-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-return-await-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-return-await-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-return-await-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-return-await-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-return-await-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-function-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-await-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-await-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-await-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-await-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-await-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-await-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-return-await-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-return-await-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-return-await-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-return-await-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-return-await-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-async-gen-return-await-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-block-import-then-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-block-import-then-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-block-import-then-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-block-import-then-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-block-import-then-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-block-import-then-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-do-while-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-do-while-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-do-while-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-do-while-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-do-while-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-do-while-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-else-import-then-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-else-import-then-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-else-import-then-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-else-import-then-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-else-import-then-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-else-import-then-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-function-import-then-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-function-import-then-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-function-import-then-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-function-import-then-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-function-import-then-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-function-import-then-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-braceless-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-braceless-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-braceless-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-braceless-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-braceless-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-braceless-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-import-then-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-import-then-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-import-then-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-import-then-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-import-then-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-if-import-then-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/nested-while-import-then-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/nested-while-import-then-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/nested-while-import-then-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/nested-while-import-then-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/nested-while-import-then-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/nested-while-import-then-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/syntax-nested-block-labeled-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/syntax-nested-block-labeled-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/syntax-nested-block-labeled-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/syntax-nested-block-labeled-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/syntax-nested-block-labeled-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/syntax-nested-block-labeled-specifier-tostring': [SKIP], + 'language/expressions/dynamic-import/usage/top-level-import-then-eval-gtbndng-indirect-update-dflt': [SKIP], + 'language/expressions/dynamic-import/usage/top-level-import-then-eval-gtbndng-indirect-update': [SKIP], + 'language/expressions/dynamic-import/usage/top-level-import-then-eval-script-code-host-resolves-module-code': [SKIP], + 'language/expressions/dynamic-import/usage/top-level-import-then-is-call-expression-square-brackets': [SKIP], + 'language/expressions/dynamic-import/usage/top-level-import-then-returns-thenable': [SKIP], + 'language/expressions/dynamic-import/usage/top-level-import-then-specifier-tostring': [SKIP], +}], # asan == True + +['asan == True or msan == True or tsan == True', { + # https://bugs.chromium.org/p/v8/issues/detail?id=4639 + # The failed allocation causes an asan/msan/tsan error + 'built-ins/ArrayBuffer/allocation-limit': [SKIP], + 'built-ins/ArrayBuffer/length-is-too-large-throws': [SKIP], + 'built-ins/SharedArrayBuffer/allocation-limit': [SKIP], + 'built-ins/SharedArrayBuffer/length-is-too-large-throws': [SKIP], +}], # asan == True or msan == True or tsan == True + +['variant == interpreted_regexp', { + # Call stack exceeded: https://crbug.com/v8/8678 + 'built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u': [SKIP], + 'built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u': [SKIP], + 'built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u': [SKIP], +}], # variant == interpreted_regexp + +############################################################################## +['variant == jitless', { + # https://crbug.com/v8/7777 + 'built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u': [SKIP], + 'built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u': [SKIP], + 'built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u': [SKIP], +}], # variant == jitless + +['variant == no_wasm_traps', { + '*': [SKIP], +}], # variant == no_wasm_traps + +['variant != default or arch == arm or arch == arm64 or arch == mipsel or arch == mips or arch == mips64 or arch == mips64el', { + # These tests take a long time to run + 'built-ins/RegExp/property-escapes/generated/*': [SKIP], +}], # variant != default or arch == arm or arch == arm64 + +['system == windows', { + # https://crbug.com/856119 + 'intl402/DateTimeFormat/prototype/resolvedOptions/basic': [SKIP], +}], # system == windows + ] diff --git a/implementation-contributed/v8/test262/testcfg.py b/implementation-contributed/v8/test262/testcfg.py index 6674abbfce..8bec9965e2 100644 --- a/implementation-contributed/v8/test262/testcfg.py +++ b/implementation-contributed/v8/test262/testcfg.py @@ -46,14 +46,11 @@ FEATURE_FLAGS = { 'class-static-fields-public': '--harmony-class-fields', 'class-fields-private': '--harmony-private-fields', 'class-static-fields-private': '--harmony-private-fields', - 'Array.prototype.flat': '--harmony-array-flat', - 'Array.prototype.flatMap': '--harmony-array-flat', 'String.prototype.matchAll': '--harmony-string-matchall', 'Symbol.matchAll': '--harmony-string-matchall', 'numeric-separator-literal': '--harmony-numeric-separator', 'Intl.ListFormat': '--harmony-intl-list-format', 'Intl.Locale': '--harmony-locale', - 'Intl.RelativeTimeFormat': '--harmony-intl-relative-time-format', 'Intl.Segmenter': '--harmony-intl-segmenter', 'Symbol.prototype.description': '--harmony-symbol-description', 'globalThis': '--harmony-global', diff --git a/implementation-contributed/v8/wasm-js/wasm-js.status b/implementation-contributed/v8/wasm-js/wasm-js.status index 856a50aed0..16de4f9822 100644 --- a/implementation-contributed/v8/wasm-js/wasm-js.status +++ b/implementation-contributed/v8/wasm-js/wasm-js.status @@ -3,14 +3,6 @@ # found in the LICENSE file. [ -[ALWAYS, { - # https://bugs.chromium.org/p/v8/issues/detail?id=8319 - 'memory/grow': [FAIL], - 'table/grow': [FAIL], - 'table/get-set': [FAIL], - 'module/customSections': [FAIL], -}], # ALWAYS - [ALWAYS, { # https://bugs.chromium.org/p/v8/issues/detail?id=8633 'limits': [SKIP], @@ -19,12 +11,13 @@ ['arch == s390 or arch == s390x or system == aix', { # https://bugs.chromium.org/p/v8/issues/detail?id=8402 'instance/constructor': [SKIP], + 'constructor/instantiate': [SKIP], }], # 'arch == s390 or arch == s390x or system == aix' ############################################################################## -['lite_mode', { +['lite_mode or variant == jitless', { # TODO(v8:7777): Re-enable once wasm is supported in jitless mode. '*': [SKIP], -}], # lite_mode +}], # lite_mode or variant == jitless ]