Bug 1530879 - Update the test262 import to upstream rev dab8c8983adc37ed3da672442e0e378ff6cd2714. rs=jorendorff
authorJeff Walden <jwalden@mit.edu>
Tue, 26 Feb 2019 17:06:38 -0800
changeset 519532 3fa28490c94694d2e97c4bc8716bb3983d291632
parent 519531 7af55c5b089d26a3cfe5ef38a5948410aeed6805
child 519533 467495eead9f478eba392658ef1473d115131220
push id10862
push userffxbld-merge
push dateMon, 11 Mar 2019 13:01:11 +0000
treeherdermozilla-beta@a2e7f5c935da [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjorendorff
bugs1530879
milestone67.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1530879 - Update the test262 import to upstream rev dab8c8983adc37ed3da672442e0e378ff6cd2714. rs=jorendorff
js/src/tests/test262/GIT-INFO
js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/name.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/name.js
js/src/tests/test262/built-ins/ArrayBuffer/Symbol.species/symbol-species.js
js/src/tests/test262/built-ins/Object/fromEntries/requires-argument.js
js/src/tests/test262/built-ins/Object/is/symbol-object-is-same-value.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-cannot-convert-to-primitive-err.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-symbol-typeerror.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-cannot-convert-to-primitive-err.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-symbol-typeerror.js
js/src/tests/test262/intl402/Locale/constructor-newtarget-undefined.js
js/src/tests/test262/intl402/Locale/invalid-tag-throws-boolean.js
js/src/tests/test262/intl402/Locale/invalid-tag-throws-null.js
js/src/tests/test262/intl402/Locale/invalid-tag-throws-number.js
js/src/tests/test262/intl402/Locale/invalid-tag-throws-symbol.js
js/src/tests/test262/intl402/Locale/invalid-tag-throws-undefined.js
js/src/tests/test262/intl402/Locale/invalid-tag-throws.js
js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/locales-invalid.js
js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/newtarget-undefined.js
js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-invalid.js
js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-numeric-invalid.js
js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-throwing-getters.js
js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-undefined.js
js/src/tests/test262/intl402/Segmenter/constructor/constructor/newtarget-undefined.js
js/src/tests/test262/intl402/Segmenter/iterator/following.js
js/src/tests/test262/intl402/Segmenter/iterator/granularity.js
js/src/tests/test262/intl402/Segmenter/iterator/position.js
js/src/tests/test262/intl402/Segmenter/iterator/preceding.js
js/src/tests/test262/intl402/Segmenter/iterator/prototype.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-following.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-iterable.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-next.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-preceding.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-following.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-iterable.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-next.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-preceding.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-following.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-iterable.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-next.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-preceding.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-tostring.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-following.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-iterable.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-next.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-preceding.js
js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word.js
js/src/tests/test262/language/expressions/class/private-methods/prod-private-method-initialize-order.js
js/src/tests/test262/language/expressions/object/method-definition/generator-super-prop-param.js
js/src/tests/test262/language/statements/class/private-methods/prod-private-method-initialize-order.js
js/src/tests/test262/language/statements/for-of/body-dstr-assign-error.js
js/src/tests/test262/language/statements/for-of/body-dstr-assign.js
js/src/tests/test262/language/statements/for-of/body-put-error.js
--- a/js/src/tests/test262/GIT-INFO
+++ b/js/src/tests/test262/GIT-INFO
@@ -1,8 +1,5 @@
-commit 8e3c6d048449a2e47c7748eafa350f49c0b8b7bc
-Merge: e2119bece6 5303404d54
-Author: Leo Balter <leonardo.balter@gmail.com>
-Date:   Mon Dec 10 10:59:09 2018 -0500
+commit dab8c8983adc37ed3da672442e0e378ff6cd2714
+Author: Frank Yung-Fong Tang <41213225+FrankYFTang@users.noreply.github.com>
+Date:   Wed Dec 19 16:36:10 2018 -0800
 
-    Merge pull request #1987 from test262-automation/v8-test262-automation-export-07b313100e
-    
-    Import test changes from V8
+    remove "TypeError: Cannot convert a Symbol value to a string" (#2009)
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/name.js
@@ -6,17 +6,17 @@ esid: sec-string.prototype.trimLeft
 description: >
   String.prototype.trimLeft.name is "trimStart".
 info: >
   String.prototype.trimLeft ( )
 
   The function object that is the initial value of  String.prototype.trimLeft is the same function object that is the initial value of  String.prototype.trimStart.
 
 includes: [propertyHelper.js]
-features: [string-trimming,String.prototype.trimStart]
+features: [string-trimming, String.prototype.trimStart]
 ---*/
 
 verifyProperty(String.prototype.trimLeft, "name", {
   value: "trimStart",
   enumerable: false,
   writable: false,
   configurable: true,
 });
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/name.js
@@ -5,17 +5,17 @@
 esid: sec-string.prototype.trimRight
 description: >
   String.prototype.trimRight.name is "trimEnd".
 info: >
   String.prototype.trimRight ( )#
 
   The function object that is the initial value of  String.prototype.trimRight is the same function object that is the initial value of  String.prototype.trimEnd.
 includes: [propertyHelper.js]
-features: [string-trimming,String.prototype.trimEnd]
+features: [string-trimming, String.prototype.trimEnd]
 ---*/
 
 verifyProperty(String.prototype.trimRight, "name", {
   value: "trimEnd",
   enumerable: false,
   writable: false,
   configurable: true,
 });
--- a/js/src/tests/test262/built-ins/ArrayBuffer/Symbol.species/symbol-species.js
+++ b/js/src/tests/test262/built-ins/ArrayBuffer/Symbol.species/symbol-species.js
@@ -3,17 +3,17 @@
 
 /*---
 info: |
  ArrayBuffer has a property at `Symbol.species`
 esid: sec-get-arraybuffer-@@species
 es6id: 24.1.3.3
 author: Sam Mikes
 description: ArrayBuffer[Symbol.species] exists per spec
-features: [ ArrayBuffer, Symbol.species ]
+features: [ArrayBuffer, Symbol.species]
 includes: [propertyHelper.js]
 ---*/
 
 var desc = Object.getOwnPropertyDescriptor(ArrayBuffer, Symbol.species);
 
 assert.sameValue(desc.set, undefined);
 assert.sameValue(typeof desc.get, 'function');
 
--- a/js/src/tests/test262/built-ins/Object/fromEntries/requires-argument.js
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/requires-argument.js
@@ -1,16 +1,15 @@
 // Copyright (C) 2018 Kevin Gibbons. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: sec-object.fromentries
 description: Throws when called without an argument.
 info: |
-
   Object.fromEntries ( iterable )
 
   1. Perform ? RequireObjectCoercible(iterable).
   ...
 
 features: [Object.fromEntries]
 ---*/
 
--- a/js/src/tests/test262/built-ins/Object/is/symbol-object-is-same-value.js
+++ b/js/src/tests/test262/built-ins/Object/is/symbol-object-is-same-value.js
@@ -1,15 +1,15 @@
 // Copyright (C) 2013 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-object.is
 description: >
     Object.is/SameValue: Symbol
-features: [Object.is,Symbol]
+features: [Object.is, Symbol]
 ---*/
 var symA = Symbol('66');
 var symB = Symbol('66');
 
 
 assert.sameValue(Object.is(symA, symA), true, "`Object.is(symA, symA)` returns `true`");
 assert.sameValue(Object.is(symB, symB), true, "`Object.is(symB, symB)` returns `true`");
 assert.sameValue(Object.is(symA, symB), false, "`Object.is(symA, symB)` returns `false`");
--- a/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-cannot-convert-to-primitive-err.js
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-cannot-convert-to-primitive-err.js
@@ -38,16 +38,18 @@ info: |
       a. Let method be ? Get(O, name).
       b. If IsCallable(method) is true, then
         i. Let result be ? Call(method, O).
         ii. If Type(result) is not Object, return result.
     6. Throw a TypeError exception.
 features: [string-trimming, String.prototype.trimEnd, Symbol.toPrimitive]
 ---*/
 
+assert.sameValue(typeof String.prototype.trimEnd, "function");
+
 var thisVal = {
   [Symbol.toPrimitive]: undefined,
   toString: undefined,
   valueOf: undefined,
 };
 
 // If trimEnd is called on an object with neither Symbol.toPrimitive, toString
 // nor valueOf defined, then a TypeError exception should be thrown.
--- a/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-symbol-typeerror.js
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-symbol-typeerror.js
@@ -9,16 +9,18 @@ info: |
   2. Let S be ? ToString(str).
 
   ToString ( argument )
   Argument Type: Symbol
   Result: Throw a TypeError exception
 features: [string-trimming, String.prototype.trimEnd]
 ---*/
 
+assert.sameValue(typeof String.prototype.trimEnd, "function");
+
 var trimEnd = String.prototype.trimEnd;
 var symbol = Symbol();
 
 assert.throws(
   TypeError,
   function() {
     trimEnd.call(symbol);
   },
--- a/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-cannot-convert-to-primitive-err.js
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-cannot-convert-to-primitive-err.js
@@ -38,16 +38,18 @@ info: |
       a. Let method be ? Get(O, name).
       b. If IsCallable(method) is true, then
         i. Let result be ? Call(method, O).
         ii. If Type(result) is not Object, return result.
     6. Throw a TypeError exception.
 features: [string-trimming, String.prototype.trimStart, Symbol.toPrimitive]
 ---*/
 
+assert.sameValue(typeof String.prototype.trimStart, "function");
+
 var thisVal = {
   [Symbol.toPrimitive]: undefined,
   toString: undefined,
   valueOf: undefined,
 };
 
 // If trimStart is called on an object with neither Symbol.toPrimitive, toString
 // nor valueOf defined, then a TypeError exception should be thrown.
--- a/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-symbol-typeerror.js
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-symbol-typeerror.js
@@ -9,16 +9,18 @@ info: |
   2. Let S be ? ToString(str).
 
   ToString ( argument )
   Argument Type: Symbol
   Result: Throw a TypeError exception
 features: [string-trimming, String.prototype.trimStart]
 ---*/
 
+assert.sameValue(typeof String.prototype.trimStart, "function");
+
 var trimStart = String.prototype.trimStart;
 var symbol = Symbol();
 
 assert.throws(
   TypeError,
   function() {
     trimStart.call(symbol);
   },
--- a/js/src/tests/test262/intl402/Locale/constructor-newtarget-undefined.js
+++ b/js/src/tests/test262/intl402/Locale/constructor-newtarget-undefined.js
@@ -8,16 +8,18 @@ description: >
     Verifies the NewTarget check for Intl.Locale.
 info: |
     Intl.Locale( tag [, options] )
 
     1. If NewTarget is undefined, throw a TypeError exception.
 features: [Intl.Locale]
 ---*/
 
+assert.sameValue(typeof Intl.Locale, "function");
+
 assert.throws(TypeError, function() {
   Intl.Locale();
 }, 'Intl.Locale() throws TypeError');
 
 assert.throws(TypeError, function() {
   Intl.Locale("en");
 }, 'Intl.Locale("en") throws TypeError');
 
--- a/js/src/tests/test262/intl402/Locale/invalid-tag-throws-boolean.js
+++ b/js/src/tests/test262/intl402/Locale/invalid-tag-throws-boolean.js
@@ -8,16 +8,18 @@ description: >
   Verifies the type check on the tag argument to Intl.Locale.
 info: |
   Intl.Locale( tag [, options] )
 
   7. If Type(tag) is not String or Object, throw a TypeError exception.
 features: [Intl.Locale]
 ---*/
 
+assert.sameValue(typeof Intl.Locale, "function");
+
 assert.throws(TypeError, function() {
   new Intl.Locale(true);
 }, "true is an invalid tag value");
 assert.throws(TypeError, function() {
   new Intl.Locale(false);
 }, "false is an invalid tag value");
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Locale/invalid-tag-throws-null.js
+++ b/js/src/tests/test262/intl402/Locale/invalid-tag-throws-null.js
@@ -8,13 +8,15 @@ description: >
   Verifies the type check on the tag argument to Intl.Locale.
 info: |
   Intl.Locale( tag [, options] )
 
   7. If Type(tag) is not String or Object, throw a TypeError exception.
 features: [Intl.Locale]
 ---*/
 
+assert.sameValue(typeof Intl.Locale, "function");
+
 assert.throws(TypeError, function() {
   new Intl.Locale(null);
 }, "null is an invalid tag value");
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Locale/invalid-tag-throws-number.js
+++ b/js/src/tests/test262/intl402/Locale/invalid-tag-throws-number.js
@@ -8,16 +8,18 @@ description: >
     Verifies the type check on the tag argument to Intl.Locale.
 info: |
     Intl.Locale( tag [, options] )
 
     7. If Type(tag) is not String or Object, throw a TypeError exception.
 features: [Intl.Locale]
 ---*/
 
+assert.sameValue(typeof Intl.Locale, "function");
+
 assert.throws(TypeError, function() {
   new Intl.Locale(0);
 }, "0 is an invalid tag value");
 
 assert.throws(TypeError, function() {
   new Intl.Locale(1);
 }, "1 is an invalid tag value");
 
--- a/js/src/tests/test262/intl402/Locale/invalid-tag-throws-symbol.js
+++ b/js/src/tests/test262/intl402/Locale/invalid-tag-throws-symbol.js
@@ -8,13 +8,15 @@ description: >
     Verifies the type check on the tag argument to Intl.Locale.
 info: |
     Intl.Locale( tag [, options] )
 
     7. If Type(tag) is not String or Object, throw a TypeError exception.
 features: [Intl.Locale, Symbol]
 ---*/
 
+assert.sameValue(typeof Intl.Locale, "function");
+
 assert.throws(TypeError, function() {
   new Intl.Locale(Symbol());
 }, "Symbol() is an invalid tag value");
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Locale/invalid-tag-throws-undefined.js
+++ b/js/src/tests/test262/intl402/Locale/invalid-tag-throws-undefined.js
@@ -8,16 +8,18 @@ description: >
     Verifies the type check on the tag argument to Intl.Locale.
 info: |
     Intl.Locale( tag [, options] )
 
     7. If Type(tag) is not String or Object, throw a TypeError exception.
 features: [Intl.Locale]
 ---*/
 
+assert.sameValue(typeof Intl.Locale, "function");
+
 assert.throws(TypeError, function() {
   new Intl.Locale();
 }, "(empty) is an invalid tag value");
 
 assert.throws(TypeError, function() {
   new Intl.Locale(undefined)
 }, "undefined is an invalid tag value");
 
--- a/js/src/tests/test262/intl402/Locale/invalid-tag-throws.js
+++ b/js/src/tests/test262/intl402/Locale/invalid-tag-throws.js
@@ -20,20 +20,21 @@ info: |
 
     ...
     2. If IsStructurallyValidLanguageTag(tag) is false, throw a RangeError exception.
     ...
 includes: [testIntl.js]
 features: [Intl.Locale]
 ---*/
 
+assert.sameValue(typeof Intl.Locale, "function");
+
 // Intl.Locale step 11.a.
 assert.throws(TypeError, function() { new Intl.Locale("en", null) })
 
-
 // ApplyOptionsToTag step 2.
 for (const invalidTag of getInvalidLanguageTags()) {
   assert.throws(RangeError, function() {
     new Intl.Locale(invalidTag);
   }, `${invalidTag} is an invalid tag value`);
 }
 
 
--- a/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/locales-invalid.js
+++ b/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/locales-invalid.js
@@ -6,13 +6,15 @@ esid: sec-Intl.RelativeTimeFormat
 description: Checks error cases for the locales argument to the RelativeTimeFormat constructor.
 info: |
     InitializeRelativeTimeFormat (relativeTimeFormat, locales, options)
     3. Let _requestedLocales_ be ? CanonicalizeLocaleList(_locales_).
 includes: [testIntl.js]
 features: [Intl.RelativeTimeFormat]
 ---*/
 
+assert.sameValue(typeof Intl.RelativeTimeFormat, "function");
+
 for (const [locales, expectedError] of getInvalidLocaleArguments()) {
-    assert.throws(expectedError, function() { new Intl.RelativeTimeFormat(locales) })
+    assert.throws(expectedError, function() { new Intl.RelativeTimeFormat(locales) });
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/newtarget-undefined.js
+++ b/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/newtarget-undefined.js
@@ -7,16 +7,18 @@ description: >
     Verifies the NewTarget check for Intl.RelativeTimeFormat.
 info: |
     Intl.RelativeTimeFormat ([ locales [ , options ]])
 
     1. If NewTarget is undefined, throw a TypeError exception.
 features: [Intl.RelativeTimeFormat]
 ---*/
 
+assert.sameValue(typeof Intl.RelativeTimeFormat, "function");
+
 assert.throws(TypeError, function() {
   Intl.RelativeTimeFormat();
 });
 
 assert.throws(TypeError, function() {
   Intl.RelativeTimeFormat("en");
 });
 
--- a/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-invalid.js
+++ b/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-invalid.js
@@ -6,11 +6,13 @@ esid: sec-Intl.RelativeTimeFormat
 description: Checks handling of a null options argument to the RelativeTimeFormat constructor.
 info: |
     InitializeRelativeTimeFormat (relativeTimeFormat, locales, options)
     5. Else
         a. Let options be ? ToObject(options).
 features: [Intl.RelativeTimeFormat]
 ---*/
 
+assert.sameValue(typeof Intl.RelativeTimeFormat, "function");
+
 assert.throws(TypeError, function() { new Intl.RelativeTimeFormat([], null) })
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-numeric-invalid.js
+++ b/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-numeric-invalid.js
@@ -5,16 +5,18 @@
 esid: sec-Intl.RelativeTimeFormat
 description: Checks handling of invalid value for the numeric option to the RelativeTimeFormat constructor.
 info: |
     InitializeRelativeTimeFormat (relativeTimeFormat, locales, options)
     16. Let numeric be ? GetOption(options, "numeric", "string", «"always", "auto"», "always").
 features: [Intl.RelativeTimeFormat]
 ---*/
 
+assert.sameValue(typeof Intl.RelativeTimeFormat, "function");
+
 const invalidOptions = [
   null,
   1,
   "",
   "Always",
   "ALWAYS",
   "always\0",
   "Auto",
--- a/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-throwing-getters.js
+++ b/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-throwing-getters.js
@@ -1,28 +1,87 @@
 // Copyright 2018 Igalia, S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: sec-InitializeRelativeTimeFormat
 description: Checks the propagation of exceptions from the options for the RelativeTimeFormat constructor.
+info: |
+  InitializeRelativeTimeFormat
+
+  5. Let matcher be ? GetOption(options, "localeMatcher", "string", «"lookup", "best fit"», "best fit").
+  ...
+  12. Let s be ? GetOption(options, "style", "string", «"long", "short", "narrow"», "long").
+  ...
+  14. Let numeric be ? GetOption(options, "numeric", "string", «"always", "auto"», "always").
+
+  GetOption ( options, property, type, values, fallback )
+
+  1. Let value be ? Get(options, property).
+  2. If value is not undefined, then
+    a. Assert: type is "boolean" or "string".
+    b. If type is "boolean", then
+      i. Let value be ToBoolean(value).
+    c. If type is "string", then
+      i. Let value be ? ToString(value).
+    d. If values is not undefined, then
+      i. If values does not contain an element equal to value, throw a RangeError exception.
+    e. Return value.
+  3. Else, return fallback.
 features: [Intl.RelativeTimeFormat]
+includes: [compareArray.js]
 ---*/
 
 function CustomError() {}
 
-const options = [
-  "localeMatcher",
-  "style",
-  "numeric",
-];
+const o1 = {
+  get localeMatcher() {
+    throw new CustomError();
+  },
+  get style() {
+    throw "should not get the style option before localeMatcher";
+  },
+  get numeric() {
+    throw "should not get the numeric option before localeMatcher";
+  }
+};
+
+const o2captures = [];
+const o2 = {
+  get localeMatcher() {
+    o2captures.push('localeMatcher');
+  },
+  get style() {
+    throw new CustomError();
+  },
+  get numeric() {
+    throw "should not get the numeric option before style";
+  }
+};
 
-for (const option of options) {
-  assert.throws(CustomError, () => {
-    new Intl.RelativeTimeFormat("en", {
-      get [option]() {
-        throw new CustomError();
-      }
-    });
-  }, `Exception from ${option} getter should be propagated`);
-}
+const o3captures = [];
+const o3 = {
+  get localeMatcher() {
+    o3captures.push('localeMatcher');
+  },
+  get style() {
+    o3captures.push('style');
+  },
+  get numeric() {
+    throw new CustomError();
+  }
+};
+
+assert.throws(CustomError, () => {
+  new Intl.RelativeTimeFormat("en", o1);
+}, `Exception from localeMatcher getter should be propagated`);
+
+assert.throws(CustomError, () => {
+  new Intl.RelativeTimeFormat("en", o2);
+}, `Exception from style getter should be propagated`);
+assert.compareArray(o2captures, ['localeMatcher']);
+
+assert.throws(CustomError, () => {
+  new Intl.RelativeTimeFormat("en", o3);
+}, `Exception from numeric getter should be propagated`);
+assert.compareArray(o3captures, ['localeMatcher', 'style']);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-undefined.js
+++ b/js/src/tests/test262/intl402/RelativeTimeFormat/constructor/constructor/options-undefined.js
@@ -5,36 +5,36 @@
 esid: sec-Intl.RelativeTimeFormat
 description: Checks handling of non-object option arguments to the RelativeTimeFormat constructor.
 info: |
     InitializeRelativeTimeFormat (relativeTimeFormat, locales, options)
 features: [Intl.RelativeTimeFormat]
 ---*/
 
 Object.defineProperties(Object.prototype, {
-  "style": {
+  style: {
     get() {
       throw new Error("Should not call style getter");
     }
   },
-  "numeric": {
+  numeric: {
     get() {
       throw new Error("Should not call numeric getter");
     }
   },
 })
 
 const optionsArguments = [
   [],
   [[]],
   [[], undefined],
 ];
 
 for (const args of optionsArguments) {
   const rtf = new Intl.RelativeTimeFormat(...args);
   const resolvedOptions = rtf.resolvedOptions();
   assert.sameValue(resolvedOptions.style, "long",
-    `Calling with ${args.length} empty arguments should yield the correct value for "style"`);
+    `Calling with ${args.length} empty arguments should yield the fallback value for "style"`);
   assert.sameValue(resolvedOptions.numeric, "always",
-    `Calling with ${args.length} empty arguments should yield the correct value for "numeric"`);
+    `Calling with ${args.length} empty arguments should yield the fallback value for "numeric"`);
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/constructor/constructor/newtarget-undefined.js
+++ b/js/src/tests/test262/intl402/Segmenter/constructor/constructor/newtarget-undefined.js
@@ -7,16 +7,18 @@ esid: sec-Intl.Segmenter
 description: Verifies the NewTarget check for Intl.Segmenter.
 info: |
     Intl.Segmenter ([ locales [ , options ]])
 
     1. If NewTarget is undefined, throw a TypeError exception.
 features: [Intl.Segmenter]
 ---*/
 
+assert.sameValue(typeof Intl.Segmenter, "function");
+
 assert.throws(TypeError, function() {
   Intl.Segmenter();
 });
 
 assert.throws(TypeError, function() {
   Intl.Segmenter("en");
 });
 
--- a/js/src/tests/test262/intl402/Segmenter/iterator/following.js
+++ b/js/src/tests/test262/intl402/Segmenter/iterator/following.js
@@ -20,19 +20,19 @@ const tests = [
   [null, 1],
   [true, 2],
   [1.4, 2],
   [{ valueOf() { return 5; } }, 6],
   [0, 1],
   [text.length - 1, text.length],
 ];
 
-for (const [input, position] of tests) {
+for (const [input, index] of tests) {
   assert.sameValue(iter.following(input), false);
-  assert.sameValue(iter.position, position, String(input));
+  assert.sameValue(iter.index, index, String(input));
 }
 
 assert.throws(RangeError, () => iter.following(-3));
 // 1.5.3.2 %SegmentIteratorPrototype%.following( [ from ] )
 // 3.b If from >= iterator.[[SegmentIteratorString]], throw a RangeError exception.
 assert.throws(RangeError, () => iter.following(text.length));
 assert.throws(RangeError, () => iter.following(text.length + 1));
 
--- a/js/src/tests/test262/intl402/Segmenter/iterator/granularity.js
+++ b/js/src/tests/test262/intl402/Segmenter/iterator/granularity.js
@@ -8,14 +8,14 @@ description: Verifies the behavior for t
 features: [Intl.Segmenter]
 ---*/
 
 const text = "Hello World, Test 123! Foo Bar. How are you?";
 for (const granularity of ["grapheme", "word", "sentence", "line"]) {
   const segmenter = new Intl.Segmenter("en", { granularity });
   const iter = segmenter.segment(text);
 
-  assert.sameValue(typeof iter.position, "number");
-  assert.sameValue(iter.position, 0);
+  assert.sameValue(typeof iter.index, "number");
+  assert.sameValue(iter.index, 0);
   assert.sameValue(iter.breakType, undefined);
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/iterator/position.js
+++ b/js/src/tests/test262/intl402/Segmenter/iterator/position.js
@@ -7,11 +7,11 @@ esid: sec-segment-iterator-prototype
 description: Verifies the behavior for the iterators.
 features: [Intl.Segmenter]
 ---*/
 
 const segmenter = new Intl.Segmenter();
 const text = "Hello World, Test 123! Foo Bar. How are you?";
 const iter = segmenter.segment(text);
 
-assert.sameValue(iter.position, 0);
+assert.sameValue(iter.index, 0);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/iterator/preceding.js
+++ b/js/src/tests/test262/intl402/Segmenter/iterator/preceding.js
@@ -18,19 +18,19 @@ const tests = [
   ["3", 2],
   [true, 0],
   [1.4, 0],
   [{ valueOf() { return 5; } }, 4],
   [text.length - 1, text.length - 2],
   [text.length, text.length - 1],
 ];
 
-for (const [input, position] of tests) {
+for (const [input, index] of tests) {
   assert.sameValue(iter.preceding(input), false);
-  assert.sameValue(iter.position, position, String(input));
+  assert.sameValue(iter.index, index, String(input));
 }
 
 assert.throws(RangeError, () => iter.preceding("ABC"));
 assert.throws(RangeError, () => iter.preceding(null));
 assert.throws(RangeError, () => iter.preceding(-3));
 
 // 1.5.3.3 %SegmentIteratorPrototype%.preceding( [ from ] )
 // 3.b If ... from = 0, throw a RangeError exception.
--- a/js/src/tests/test262/intl402/Segmenter/iterator/prototype.js
+++ b/js/src/tests/test262/intl402/Segmenter/iterator/prototype.js
@@ -13,17 +13,17 @@ const prototype = Object.getPrototypeOf(
 for (const func of ["next", "following", "preceding"]) {
   verifyProperty(prototype, func, {
     writable: true,
     enumerable: false,
     configurable: true,
   });
 }
 
-for (const property of ["position", "breakType"]) {
+for (const property of ["index", "breakType"]) {
   let desc = Object.getOwnPropertyDescriptor(prototype, property);
   assert.sameValue(desc.get.name, `get ${property}`);
   assert.sameValue(typeof desc.get, "function")
   assert.sameValue(desc.set, undefined);
   assert.sameValue(desc.enumerable, false);
   assert.sameValue(desc.configurable, true);
 }
 
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-following.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-following.js
@@ -29,18 +29,18 @@ for (const text of [
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   let prev = 0;
   let segments = [];
   while (!iter.following()) {
     assert.sameValue(undefined, iter.breakType);
-    assert(iter.position >= 0);
-    assert(iter.position <= text.length);
-    assert(iter.position > prev);
-    segments.push(text.substring(prev, iter.position));
-    prev = iter.position;
+    assert(iter.index >= 0);
+    assert(iter.index <= text.length);
+    assert(iter.index > prev);
+    segments.push(text.substring(prev, iter.index));
+    prev = iter.index;
   }
   assert.sameValue(text, segments.join(""));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-iterable.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-iterable.js
@@ -38,16 +38,16 @@ for (const text of [
     assert.sameValue(undefined, v.breakType);
     assert.sameValue("string", typeof v.segment);
     assert(v.segment.length > 0);
     segments.push(v.segment);
 
     // manually advance the iter.
     assert.sameValue(iter.following(), false);
     assert.sameValue(iter.breakType, v.breakType);
-    assert.sameValue(text.substring(prev, iter.position), v.segment);
-    prev = iter.position;
+    assert.sameValue(text.substring(prev, iter.index), v.segment);
+    prev = iter.index;
   }
   assert(iter.following());
   assert.sameValue(text, segments.join(''));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-next.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-next.js
@@ -33,16 +33,16 @@ for (const text of [
   let segments = [];
   let oldPos = -1;
   for (let result = iter.next(); !result.done; result = iter.next()) {
     const v = result.value;
     assert.sameValue(undefined, v.breakType);
     assert.sameValue("string", typeof v.segment);
     assert(v.segment.length > 0);
     segments.push(v.segment);
-    assert.sameValue(typeof v.position, "number");
-    assert(oldPos < v.position);
-    oldPos = v.position;
+    assert.sameValue(typeof v.index, "number");
+    assert(oldPos < v.index);
+    oldPos = v.index;
   }
   assert.sameValue(text, segments.join(''));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-preceding.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme-preceding.js
@@ -29,24 +29,24 @@ for (const text of [
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   let prev = text.length;
   let segments = [];
   iter.preceding(prev)
   assert.sameValue(undefined, iter.breakType)
-  assert(iter.position >= 0);
-  assert(iter.position < prev);
-  segments.push(text.substring(iter.position, prev));
-  prev = iter.position;
+  assert(iter.index >= 0);
+  assert(iter.index < prev);
+  segments.push(text.substring(iter.index, prev));
+  prev = iter.index;
   while (!iter.preceding()) {
     assert.sameValue(undefined, iter.breakType);
-    assert(iter.position >= 0);
-    assert(iter.position <= text.length);
-    assert(iter.position < prev);
-    segments.push(text.substring(iter.position, prev));
-    prev = iter.position;
+    assert(iter.index >= 0);
+    assert(iter.index <= text.length);
+    assert(iter.index < prev);
+    segments.push(text.substring(iter.index, prev));
+    prev = iter.index;
   }
   assert.sameValue(text, segments.reverse().join(""));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-grapheme.js
@@ -26,12 +26,12 @@ for (const text of [
     "'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్‌సైట్లో పెట్టవద్దు'", // Telugu
     "台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
     "วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว",  // Thai
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   assert.sameValue(undefined, iter.breakType);
-  assert.sameValue(0, iter.position);
+  assert.sameValue(0, iter.index);
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-following.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-following.js
@@ -29,18 +29,18 @@ for (const text of [
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   let prev = 0;
   let segments = [];
   while (!iter.following()) {
     assert(["soft", "hard"].includes(iter.breakType), iter.breakType);
-    assert(iter.position >= 0);
-    assert(iter.position <= text.length);
-    assert(iter.position > prev);
-    segments.push(text.substring(prev, iter.position));
-    prev = iter.position;
+    assert(iter.index >= 0);
+    assert(iter.index <= text.length);
+    assert(iter.index > prev);
+    segments.push(text.substring(prev, iter.index));
+    prev = iter.index;
   }
   assert.sameValue(text, segments.join(""));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-iterable.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-iterable.js
@@ -38,16 +38,16 @@ for (const text of [
     assert(["soft", "hard"].includes(v.breakType), v.breakType);
     assert.sameValue("string", typeof v.segment);
     assert(v.segment.length > 0);
     segments.push(v.segment);
 
     // manually advance the iter.
     assert.sameValue(iter.following(), false);
     assert.sameValue(iter.breakType, v.breakType);
-    assert.sameValue(text.substring(prev, iter.position), v.segment);
-    prev = iter.position;
+    assert.sameValue(text.substring(prev, iter.index), v.segment);
+    prev = iter.index;
   }
   assert(iter.following());
   assert.sameValue(text, segments.join(''));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-next.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-next.js
@@ -33,16 +33,16 @@ for (const text of [
   let segments = [];
   let oldPos = -1;
   for (let result = iter.next(); !result.done; result = iter.next()) {
     const v = result.value;
     assert(["soft", "hard"].includes(iter.breakType), iter.breakType);
     assert.sameValue("string", typeof v.segment);
     assert(v.segment.length > 0);
     segments.push(v.segment);
-    assert.sameValue(typeof v.position, "number");
-    assert(oldPos < v.position);
-    oldPos = v.position;
+    assert.sameValue(typeof v.index, "number");
+    assert(oldPos < v.index);
+    oldPos = v.index;
   }
   assert.sameValue(text, segments.join(''));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-preceding.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line-preceding.js
@@ -29,24 +29,24 @@ for (const text of [
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   let prev = text.length;
   let segments = [];
   iter.preceding(prev)
   assert(["soft", "hard"].includes(iter.breakType), iter.breakType);
-  assert(iter.position >= 0);
-  assert(iter.position < prev);
-  segments.push(text.substring(iter.position, prev));
-  prev = iter.position;
+  assert(iter.index >= 0);
+  assert(iter.index < prev);
+  segments.push(text.substring(iter.index, prev));
+  prev = iter.index;
   while (!iter.preceding()) {
     assert(["soft", "hard"].includes(iter.breakType), iter.breakType);
-    assert(iter.position >= 0);
-    assert(iter.position <= text.length);
-    assert(iter.position < prev);
-    segments.push(text.substring(iter.position, prev));
-    prev = iter.position;
+    assert(iter.index >= 0);
+    assert(iter.index <= text.length);
+    assert(iter.index < prev);
+    segments.push(text.substring(iter.index, prev));
+    prev = iter.index;
   }
   assert.sameValue(text, segments.reverse().join(""));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-line.js
@@ -26,12 +26,12 @@ for (const text of [
     "'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్‌సైట్లో పెట్టవద్దు'", // Telugu
     "台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
     "วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว",  // Thai
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   assert.sameValue(undefined, iter.breakType);
-  assert.sameValue(0, iter.position);
+  assert.sameValue(0, iter.index);
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-following.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-following.js
@@ -29,18 +29,18 @@ for (const text of [
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   let prev = 0;
   let segments = [];
   while (!iter.following()) {
     assert(["sep", "term"].includes(iter.breakType), iter.breakType);
-    assert(iter.position >= 0);
-    assert(iter.position <= text.length);
-    assert(iter.position > prev);
-    segments.push(text.substring(prev, iter.position));
-    prev = iter.position;
+    assert(iter.index >= 0);
+    assert(iter.index <= text.length);
+    assert(iter.index > prev);
+    segments.push(text.substring(prev, iter.index));
+    prev = iter.index;
   }
   assert.sameValue(text, segments.join(""));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-iterable.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-iterable.js
@@ -38,16 +38,16 @@ for (const text of [
     assert(["sep", "term"].includes(v.breakType), v.breakType);
     assert.sameValue("string", typeof v.segment);
     assert(v.segment.length > 0);
     segments.push(v.segment);
 
     // manually advance the iter.
     assert.sameValue(iter.following(), false);
     assert.sameValue(iter.breakType, v.breakType);
-    assert.sameValue(text.substring(prev, iter.position), v.segment);
-    prev = iter.position;
+    assert.sameValue(text.substring(prev, iter.index), v.segment);
+    prev = iter.index;
   }
   assert(iter.following());
   assert.sameValue(text, segments.join(''));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-next.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-next.js
@@ -33,16 +33,16 @@ for (const text of [
   let segments = [];
   let oldPos = -1;
   for (let result = iter.next(); !result.done; result = iter.next()) {
     const v = result.value;
     assert(["sep", "term"].includes(iter.breakType), iter.breakType);
     assert.sameValue("string", typeof v.segment);
     assert(v.segment.length > 0);
     segments.push(v.segment);
-    assert.sameValue(typeof v.position, "number");
-    assert(oldPos < v.position);
-    oldPos = v.position;
+    assert.sameValue(typeof v.index, "number");
+    assert(oldPos < v.index);
+    oldPos = v.index;
   }
   assert.sameValue(text, segments.join(''));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-preceding.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence-preceding.js
@@ -29,24 +29,24 @@ for (const text of [
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   let prev = text.length;
   let segments = [];
   iter.preceding(prev);
   assert(["sep", "term"].includes(iter.breakType), iter.breakType);
-  assert(iter.position >= 0);
-  assert(iter.position < prev);
-  segments.push(text.substring(iter.position, prev));
-  prev = iter.position;
+  assert(iter.index >= 0);
+  assert(iter.index < prev);
+  segments.push(text.substring(iter.index, prev));
+  prev = iter.index;
   while (!iter.preceding()) {
     assert(["sep", "term"].includes(iter.breakType), iter.breakType);
-    assert(iter.position >= 0);
-    assert(iter.position <= text.length);
-    assert(iter.position < prev);
-    segments.push(text.substring(iter.position, prev));
-    prev = iter.position;
+    assert(iter.index >= 0);
+    assert(iter.index <= text.length);
+    assert(iter.index < prev);
+    segments.push(text.substring(iter.index, prev));
+    prev = iter.index;
   }
   assert.sameValue(text, segments.reverse().join(""));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-sentence.js
@@ -26,12 +26,12 @@ for (const text of [
     "'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్‌సైట్లో పెట్టవద్దు'", // Telugu
     "台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
     "วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว",  // Thai
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   assert.sameValue(undefined, iter.breakType);
-  assert.sameValue(0, iter.position);
+  assert.sameValue(0, iter.index);
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-tostring.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-tostring.js
@@ -25,15 +25,15 @@ const tests = [
 ];
 
 const segmenter = new Intl.Segmenter("en", { "granularity": "word" });
 for (const [args, expected] of tests) {
   const iterator = segmenter.segment(...args);
   const result = iterator.next().value;
   assert.sameValue(result.segment, expected, `Expected segment "${expected}", found "${result.segment}" for arguments ${args}`);
   assert(["word", "none"].includes(result.breakType), `Expected valid breakType, found "${result.breakType}" for arguments ${args}`);
-  assert.sameValue(result.position, expected.length, `Expected position ${expected.length}, found ${result.position} for arguments ${args}`);
+  assert.sameValue(result.index, expected.length, `Expected index ${expected.length}, found ${result.index} for arguments ${args}`);
 }
 
 const symbol = Symbol();
 assert.throws(TypeError, () => segmenter.segment(symbol));
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-following.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-following.js
@@ -29,18 +29,18 @@ for (const text of [
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   let prev = 0;
   let segments = [];
   while (!iter.following()) {
     assert(["word", "none"].includes(iter.breakType), iter.breakType);
-    assert(iter.position >= 0);
-    assert(iter.position <= text.length);
-    assert(iter.position > prev);
-    segments.push(text.substring(prev, iter.position));
-    prev = iter.position;
+    assert(iter.index >= 0);
+    assert(iter.index <= text.length);
+    assert(iter.index > prev);
+    segments.push(text.substring(prev, iter.index));
+    prev = iter.index;
   }
   assert.sameValue(text, segments.join(""));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-iterable.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-iterable.js
@@ -38,16 +38,16 @@ for (const text of [
     assert(["word", "none"].includes(v.breakType), v.breakType);
     assert.sameValue("string", typeof v.segment);
     assert(v.segment.length > 0);
     segments.push(v.segment);
 
     // manually advance the iter.
     assert.sameValue(iter.following(), false);
     assert.sameValue(iter.breakType, v.breakType);
-    assert.sameValue(text.substring(prev, iter.position), v.segment);
-    prev = iter.position;
+    assert.sameValue(text.substring(prev, iter.index), v.segment);
+    prev = iter.index;
   }
   assert(iter.following());
   assert.sameValue(text, segments.join(''));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-next.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-next.js
@@ -33,16 +33,16 @@ for (const text of [
   let segments = [];
   let oldPos = -1;
   for (let result = iter.next(); !result.done; result = iter.next()) {
     const v = result.value;
     assert(["word", "none"].includes(iter.breakType), iter.breakType);
     assert.sameValue("string", typeof v.segment);
     assert(v.segment.length > 0);
     segments.push(v.segment);
-    assert.sameValue(typeof v.position, "number");
-    assert(oldPos < v.position);
-    oldPos = v.position;
+    assert.sameValue(typeof v.index, "number");
+    assert(oldPos < v.index);
+    oldPos = v.index;
   }
   assert.sameValue(text, segments.join(''));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-preceding.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word-preceding.js
@@ -29,24 +29,24 @@ for (const text of [
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   let prev = text.length;
   let segments = [];
   iter.preceding(prev);
   assert(["word", "none"].includes(iter.breakType), iter.breakType);
-  assert(iter.position >= 0);
-  assert(iter.position < prev);
-  segments.push(text.substring(iter.position, prev));
-  prev = iter.position;
+  assert(iter.index >= 0);
+  assert(iter.index < prev);
+  segments.push(text.substring(iter.index, prev));
+  prev = iter.index;
   while (!iter.preceding()) {
     assert(["word", "none"].includes(iter.breakType), iter.breakType);
-    assert(iter.position >= 0);
-    assert(iter.position <= text.length);
-    assert(iter.position < prev);
-    segments.push(text.substring(iter.position, prev));
-    prev = iter.position;
+    assert(iter.index >= 0);
+    assert(iter.index <= text.length);
+    assert(iter.index < prev);
+    segments.push(text.substring(iter.index, prev));
+    prev = iter.index;
   }
   assert.sameValue(text, segments.reverse().join(""));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word.js
+++ b/js/src/tests/test262/intl402/Segmenter/prototype/segment/segment-word.js
@@ -26,12 +26,12 @@ for (const text of [
     "'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్‌సైట్లో పెట్టవద్దు'", // Telugu
     "台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
     "วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว",  // Thai
     "九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp",  // Japanese
     "법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
     ]) {
   const iter = seg.segment(text);
   assert.sameValue(undefined, iter.breakType);
-  assert.sameValue(0, iter.position);
+  assert.sameValue(0, iter.index);
 }
 
 reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/class/private-methods/prod-private-method-initialize-order.js
@@ -0,0 +1,144 @@
+// |reftest| skip -- class-methods-private,class-fields-private is not supported
+// This file was procedurally generated from the following sources:
+// - src/class-elements/prod-private-method-initialize-order.case
+// - src/class-elements/private-methods/cls-expr.template
+/*---
+description: Private methods are added before any field initializer is run, even if they appear textually later (private method definitions in a class expression)
+esid: prod-MethodDefinition
+features: [class-methods-private, class-fields-private, class]
+flags: [generated]
+info: |
+    ClassElement :
+      MethodDefinition
+      ...
+      ;
+
+    ClassElementName :
+      PropertyName
+      PrivateName
+
+    PrivateName ::
+      # IdentifierName
+
+    MethodDefinition :
+      ClassElementName ( UniqueFormalParameters ) { FunctionBody }
+      GeneratorMethod
+      AsyncMethod
+      AsyncGeneratorMethod 
+      get ClassElementName () { FunctionBody }
+      set ClassElementName ( PropertySetParameterList ) { FunctionBody }
+
+    GeneratorMethod :
+      * ClassElementName ( UniqueFormalParameters ){GeneratorBody}
+
+    AsyncMethod :
+      async [no LineTerminator here] ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here]* ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+    ---
+
+    InitializeClassElements ( F, proto )
+
+    ...
+    5. For each item element in order from elements,
+      a. Assert: If element.[[Placement]] is "prototype" or "static", then element.[[Key]] is not a Private Name.
+      b. If element.[[Kind]] is "method" and element.[[Placement]] is "static" or "prototype",
+        i. Let receiver be F if element.[[Placement]] is "static", else let receiver be proto.
+        ii. Perform ? DefineClassElement(receiver, element).
+
+    InitializeInstanceElements ( O, constructor )
+
+    ...
+    3. Let elements be the value of F's [[Elements]] internal slot.
+    4. For each item element in order from elements,
+      a. If element.[[Placement]] is "own" and element.[[Kind]] is "method",
+        i. Perform ? DefineClassElement(O, element).
+
+    DefineClassElement (receiver, element)
+
+    ...
+    6. If key is a Private Name,
+      a. Perform ? PrivateFieldDefine(receiver, key, descriptor).
+
+    PrivateFieldDefine (P, O, desc)
+
+    ...
+    6. Append { [[PrivateName]]: P, [[PrivateFieldDescriptor]]: desc } to O.[[PrivateFieldDescriptors]].
+
+
+    
+    InitializeInstanceElements ( O, constructor )
+      ...
+      4. For each item element in order from elements,
+        a. If element.[[Placement]] is "own" and element.[[Kind]] is "method",
+          i. Perform ? DefineClassElement(O, element).
+      5. For each item element in order from elements,
+        a. If element.[[Placement]] is "own" and element.[[Kind]] is "field",
+          i. Assert: element.[[Descriptor]] does not have a [[Value]], [[Get]] or [[Set]] slot.
+          ii. Perform ? DefineClassElement(O, element).
+      6. Return.
+
+      EDITOR'S NOTE:
+      Value properties are added before initializers so that private methods are visible from all initializers.
+
+---*/
+
+
+/***
+ * template notes:
+ * 1. method should always be #m
+ * 2. the template provides c.ref/other.ref for external reference
+ */
+
+function hasProp(obj, name, expected, msg) {
+  var hasOwnProperty = Object.prototype.hasOwnProperty.call(obj, name);
+  assert.sameValue(hasOwnProperty, expected, msg);
+
+  var hasProperty = Reflect.has(obj, name);
+  assert.sameValue(hasProperty, expected, msg);
+}
+
+var C = class {
+  a = this.#m();
+
+  #m() { return 42; }
+  get bGetter() { return this.#b; }
+
+  #b = this.#m();
+
+
+  get ref() { return this.#m; }
+
+  constructor() {
+    hasProp(this, '#m', false, 'private methods are defined in an special internal slot and cannot be found as own properties');
+    assert.sameValue(typeof this.#m, 'function');
+    assert.sameValue(this.ref, this.#m, 'returns the same value');
+    assert.sameValue(this.#m, (() => this)().#m, 'memberexpression and call expression forms');
+
+    assert.sameValue(this.a, 42);
+    assert.sameValue(this.#b, 42);
+
+  }
+}
+
+var c = new C();
+var other = new C();
+
+hasProp(C.prototype, '#m', false, 'method is not defined in the prototype');
+hasProp(C, '#m', false, 'method is not defined in the contructor');
+hasProp(c, '#m', false, 'method cannot be seen outside of the class');
+
+/***
+ * MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody }
+ * 
+ * 1. Let methodDef be DefineMethod of MethodDefinition with argument homeObject.
+ * ...
+ */
+assert.sameValue(c.ref, other.ref, 'The method is defined once, and reused on every new instance');
+
+assert.sameValue(c.a, 42);
+assert.sameValue(c.bGetter, 42);
+
+reportCompare(0, 0);
--- a/js/src/tests/test262/language/expressions/object/method-definition/generator-super-prop-param.js
+++ b/js/src/tests/test262/language/expressions/object/method-definition/generator-super-prop-param.js
@@ -2,17 +2,17 @@
 // See LICENSE for details.
 
 /*---
 info: |
  GeneratorMethod can reference SuperProperty in default parameters
 es6id: 14.4.1
 author: Sam Mikes
 description: GeneratorMethod uses SuperProperty (allowed)
-features: [ default-parameters, generators, super ]
+features: [default-parameters, generators, super]
 ---*/
 
 var obj = {
   *foo(a = super.toString) {
     return a;
   }
 };
 
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/statements/class/private-methods/prod-private-method-initialize-order.js
@@ -0,0 +1,143 @@
+// |reftest| skip -- class-methods-private,class-fields-private is not supported
+// This file was procedurally generated from the following sources:
+// - src/class-elements/prod-private-method-initialize-order.case
+// - src/class-elements/private-methods/cls-decl.template
+/*---
+description: Private methods are added before any field initializer is run, even if they appear textually later (private method definitions in a class declaration)
+esid: prod-MethodDefinition
+features: [class-methods-private, class-fields-private, class]
+flags: [generated]
+info: |
+    ClassElement :
+      MethodDefinition
+      ...
+      ;
+
+    ClassElementName :
+      PropertyName
+      PrivateName
+
+    PrivateName ::
+      # IdentifierName
+
+    MethodDefinition :
+      ClassElementName ( UniqueFormalParameters ) { FunctionBody }
+      GeneratorMethod
+      AsyncMethod
+      AsyncGeneratorMethod 
+      get ClassElementName () { FunctionBody }
+      set ClassElementName ( PropertySetParameterList ) { FunctionBody }
+
+    GeneratorMethod :
+      * ClassElementName ( UniqueFormalParameters ){GeneratorBody}
+
+    AsyncMethod :
+      async [no LineTerminator here] ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here]* ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+    ---
+
+    InitializeClassElements ( F, proto )
+
+    ...
+    5. For each item element in order from elements,
+      a. Assert: If element.[[Placement]] is "prototype" or "static", then element.[[Key]] is not a Private Name.
+      b. If element.[[Kind]] is "method" and element.[[Placement]] is "static" or "prototype",
+        i. Let receiver be F if element.[[Placement]] is "static", else let receiver be proto.
+        ii. Perform ? DefineClassElement(receiver, element).
+
+    InitializeInstanceElements ( O, constructor )
+
+    ...
+    3. Let elements be the value of F's [[Elements]] internal slot.
+    4. For each item element in order from elements,
+      a. If element.[[Placement]] is "own" and element.[[Kind]] is "method",
+        i. Perform ? DefineClassElement(O, element).
+
+    DefineClassElement (receiver, element)
+
+    ...
+    6. If key is a Private Name,
+      a. Perform ? PrivateFieldDefine(receiver, key, descriptor).
+
+    PrivateFieldDefine (P, O, desc)
+
+    ...
+    6. Append { [[PrivateName]]: P, [[PrivateFieldDescriptor]]: desc } to O.[[PrivateFieldDescriptors]].
+
+
+    
+    InitializeInstanceElements ( O, constructor )
+      ...
+      4. For each item element in order from elements,
+        a. If element.[[Placement]] is "own" and element.[[Kind]] is "method",
+          i. Perform ? DefineClassElement(O, element).
+      5. For each item element in order from elements,
+        a. If element.[[Placement]] is "own" and element.[[Kind]] is "field",
+          i. Assert: element.[[Descriptor]] does not have a [[Value]], [[Get]] or [[Set]] slot.
+          ii. Perform ? DefineClassElement(O, element).
+      6. Return.
+
+      EDITOR'S NOTE:
+      Value properties are added before initializers so that private methods are visible from all initializers.
+
+---*/
+
+
+/*** template notes
+ * method should always be #m
+ * the template provides c.ref() for external reference
+ */
+
+function hasProp(obj, name, expected, msg) {
+  var hasOwnProperty = Object.prototype.hasOwnProperty.call(obj, name);
+  assert.sameValue(hasOwnProperty, expected, msg);
+
+  var hasProperty = Reflect.has(obj, name);
+  assert.sameValue(hasProperty, expected, msg);
+}
+
+class C {
+  a = this.#m();
+
+  #m() { return 42; }
+  get bGetter() { return this.#b; }
+
+  #b = this.#m();
+
+
+  get ref() { return this.#m; }
+
+  constructor() {
+    hasProp(this, '#m', false, 'private methods are defined in an special internal slot and cannot be found as own properties');
+    assert.sameValue(typeof this.#m, 'function');
+    assert.sameValue(this.ref, this.#m, 'returns the same value');
+    assert.sameValue(this.#m, (() => this)().#m, 'memberexpression and call expression forms');
+
+    assert.sameValue(this.a, 42);
+    assert.sameValue(this.#b, 42);
+
+  }
+}
+
+var c = new C();
+var other = new C();
+
+hasProp(C.prototype, '#m', false, 'method is not defined in the prototype');
+hasProp(C, '#m', false, 'method is not defined in the contructor');
+hasProp(c, '#m', false, 'method cannot be seen outside of the class');
+
+/***
+ * MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody }
+ * 
+ * 1. Let methodDef be DefineMethod of MethodDefinition with argument homeObject.
+ * ...
+ */
+assert.sameValue(c.ref, other.ref, 'The method is defined once, and reused on every new instance');
+
+assert.sameValue(c.a, 42);
+assert.sameValue(c.bGetter, 42);
+
+reportCompare(0, 0);
--- a/js/src/tests/test262/language/statements/for-of/body-dstr-assign-error.js
+++ b/js/src/tests/test262/language/statements/for-of/body-dstr-assign-error.js
@@ -13,17 +13,17 @@ info: |
       Let status be the result of performing DestructuringAssignmentEvaluation of
       assignmentPattern using nextValue as the argument.
   ...
   If status is an abrupt completion, then
     Set the running execution context's LexicalEnvironment to oldEnv.
     If iterationKind is enumerate, then
       Return status.
 
-features: [destructuring-assignment,for-of,Symbol.iterator]
+features: [destructuring-assignment, for-of, Symbol.iterator]
 ---*/
 
 var callCount = 0;
 var iterationCount = 0;
 var iterable = {};
 var x = {
   set attr(_) {
     throw new Test262Error();
--- a/js/src/tests/test262/language/statements/for-of/body-dstr-assign.js
+++ b/js/src/tests/test262/language/statements/for-of/body-dstr-assign.js
@@ -6,17 +6,17 @@ description: >
   The left-hand side may take the form of a DestructuringAssignment.
 info: |
   ...
   Else,
     If lhsKind is assignment, then
       Let status be the result of performing DestructuringAssignmentEvaluation of
       assignmentPattern using nextValue as the argument.
 
-features: [destructuring-assignment,for-of]
+features: [destructuring-assignment, for-of]
 ---*/
 
 var iterationCount = 0;
 var x;
 
 for ([x] of [[0]]) {
   assert.sameValue(x, 0);
   iterationCount += 1;
--- a/js/src/tests/test262/language/statements/for-of/body-put-error.js
+++ b/js/src/tests/test262/language/statements/for-of/body-put-error.js
@@ -12,17 +12,17 @@ info: |
     If lhsRef is an abrupt completion, then
       Let status be lhsRef.
     Else if lhsKind is lexicalBinding, then
       Let status be InitializeReferencedBinding(lhsRef, nextValue).
     Else,
       Let status be PutValue(lhsRef, nextValue).
   ...
 
-features: [for-of,Symbol.iterator]
+features: [for-of, Symbol.iterator]
 ---*/
 
 var callCount = 0;
 var iterationCount = 0;
 var iterable = {};
 var x = {
   set attr(_) {
     throw new Test262Error();