Bug 1434953 - Part 1: Update test262 - Feb 02 2018 edition. rs=sfink
authorAndré Bargull <andre.bargull@gmail.com>
Fri, 02 Feb 2018 06:01:29 -0800
changeset 402607 3b73abe9c19b8a57419c658d22b723c08f248821
parent 402606 842b589abd9ca0563f14fd2e786f05a34c44e6bb
child 402608 421caf8d226b793f8cd7b3919863b9e93ad7c990
push id33393
push userrgurzau@mozilla.com
push dateTue, 06 Feb 2018 21:54:26 +0000
treeherdermozilla-central@0790ec12200d [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssfink
bugs1434953
milestone60.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 1434953 - Part 1: Update test262 - Feb 02 2018 edition. rs=sfink
js/src/tests/test262/GIT-INFO
js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/browser.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/length.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/name.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/prop-desc.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/reference-trimStart.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/shell.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/browser.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/length.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/name.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/prop-desc.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/reference-trimEnd.js
js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/shell.js
js/src/tests/test262/annexB/language/comments/multi-line-html-close.js
js/src/tests/test262/annexB/language/comments/single-line-html-close-asi.js
js/src/tests/test262/annexB/language/comments/single-line-html-close.js
js/src/tests/test262/annexB/language/comments/single-line-html-open.js
js/src/tests/test262/annexB/language/expressions/object/__proto__-fn-name.js
js/src/tests/test262/annexB/language/literals/numeric/legacy-octal-integer.js
js/src/tests/test262/annexB/language/literals/numeric/non-octal-decimal-integer.js
js/src/tests/test262/built-ins/Array/prototype/flatMap/depth-always-one.js
js/src/tests/test262/built-ins/ArrayBuffer/isView/prop-desc.js
js/src/tests/test262/built-ins/ArrayBuffer/prototype/byteLength/this-is-sharedarraybuffer.js
js/src/tests/test262/built-ins/ArrayBuffer/prototype/slice/this-is-sharedarraybuffer.js
js/src/tests/test262/built-ins/Atomics/add/bad-range.js
js/src/tests/test262/built-ins/Atomics/add/nonshared-int-views.js
js/src/tests/test262/built-ins/Atomics/and/bad-range.js
js/src/tests/test262/built-ins/Atomics/and/nonshared-int-views.js
js/src/tests/test262/built-ins/Atomics/compareExchange/bad-range.js
js/src/tests/test262/built-ins/Atomics/compareExchange/nonshared-int-views.js
js/src/tests/test262/built-ins/Atomics/exchange/bad-range.js
js/src/tests/test262/built-ins/Atomics/exchange/nonshared-int-views.js
js/src/tests/test262/built-ins/Atomics/load/bad-range.js
js/src/tests/test262/built-ins/Atomics/load/nonshared-int-views.js
js/src/tests/test262/built-ins/Atomics/or/bad-range.js
js/src/tests/test262/built-ins/Atomics/or/nonshared-int-views.js
js/src/tests/test262/built-ins/Atomics/store/bad-range.js
js/src/tests/test262/built-ins/Atomics/store/nonshared-int-views.js
js/src/tests/test262/built-ins/Atomics/sub/bad-range.js
js/src/tests/test262/built-ins/Atomics/sub/nonshared-int-views.js
js/src/tests/test262/built-ins/Atomics/wait/bad-range.js
js/src/tests/test262/built-ins/Atomics/wait/nonshared-int-views.js
js/src/tests/test262/built-ins/Atomics/wake/bad-range.js
js/src/tests/test262/built-ins/Atomics/wake/nonshared-int-views.js
js/src/tests/test262/built-ins/Atomics/xor/bad-range.js
js/src/tests/test262/built-ins/Atomics/xor/nonshared-int-views.js
js/src/tests/test262/built-ins/Date/UTC/non-integer-values.js
js/src/tests/test262/built-ins/Date/shell.js
js/src/tests/test262/built-ins/Map/prototype/size/this-not-object-throw.js
js/src/tests/test262/built-ins/Number/NEGATIVE_INFINITY/value.js
js/src/tests/test262/built-ins/Number/POSITIVE_INFINITY/value.js
js/src/tests/test262/built-ins/Object/is/symbol-object-is-same-value.js
js/src/tests/test262/built-ins/Promise/all/S25.4.4.1_A8.2_T1.js
js/src/tests/test262/built-ins/Promise/all/S25.4.4.1_A8.2_T2.js
js/src/tests/test262/built-ins/Promise/prototype/finally/invokes-then-with-function.js
js/src/tests/test262/built-ins/Promise/prototype/finally/species-constructor.js
js/src/tests/test262/built-ins/Promise/prototype/finally/subclass-reject-count.js
js/src/tests/test262/built-ins/Promise/prototype/finally/subclass-resolve-count.js
js/src/tests/test262/built-ins/Promise/prototype/finally/subclass-species-constructor-reject-count.js
js/src/tests/test262/built-ins/Promise/prototype/finally/subclass-species-constructor-resolve-count.js
js/src/tests/test262/built-ins/Promise/prototype/finally/this-value-non-promise.js
js/src/tests/test262/built-ins/Promise/resolve/S25.Promise_resolve_foreign_thenable_1.js
js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass-sans.js
js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass.js
js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-undefined.js
js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-unmatched.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/browser.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/length.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/name.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/prop-desc.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/shell.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-boolean.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-line-terminator.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-not-obj-coercible.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-number.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-object-toprimitive-call-err.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-toprimitive-meth-err.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-toprimitive-meth-priority.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-toprimitive-returns-object-err.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-tostring-call-err.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-tostring-meth-err.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-tostring-meth-priority.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-tostring-returns-object-err.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-valueof-call-err.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-valueof-meth-err.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-valueof-meth-priority.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-valueof-returns-object-err.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-symbol-typeerror.js
js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-whitespace.js
js/src/tests/test262/built-ins/String/prototype/trimStart/browser.js
js/src/tests/test262/built-ins/String/prototype/trimStart/length.js
js/src/tests/test262/built-ins/String/prototype/trimStart/name.js
js/src/tests/test262/built-ins/String/prototype/trimStart/prop-desc.js
js/src/tests/test262/built-ins/String/prototype/trimStart/shell.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-boolean.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-line-terminator.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-not-obj-coercible.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-number.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-object-toprimitive-call-err.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-toprimitive-meth-err.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-toprimitive-meth-priority.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-toprimitive-returns-object-err.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-tostring-call-err.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-tostring-meth-err.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-tostring-meth-priority.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-tostring-returns-object-err.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-valueof-call-err.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-valueof-meth-err.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-valueof-meth-priority.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-valueof-returns-object-err.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-symbol-typeerror.js
js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-whitespace.js
js/src/tests/test262/built-ins/StringIteratorPrototype/next/next-missing-internal-slots.js
js/src/tests/test262/built-ins/Symbol/species/builtin-getter-name.js
js/src/tests/test262/built-ins/Symbol/species/subclassing.js
js/src/tests/test262/built-ins/TypedArrays/internals/Get/indexed-value-sab.js
js/src/tests/test262/built-ins/TypedArrays/typedarray-arg-detached-when-species-retrieved-different-type.js
js/src/tests/test262/built-ins/TypedArrays/typedarray-arg-detached-when-species-retrieved-same-type.js
js/src/tests/test262/built-ins/global/global-object.js
js/src/tests/test262/harness/shell.js
js/src/tests/test262/intl402/DateTimeFormat/prototype/format/date-constructor-not-called.js
js/src/tests/test262/intl402/DateTimeFormat/prototype/format/shell.js
js/src/tests/test262/intl402/DateTimeFormat/prototype/format/time-clip-near-time-boundaries.js
js/src/tests/test262/intl402/DateTimeFormat/prototype/format/time-clip-to-integer.js
js/src/tests/test262/intl402/DateTimeFormat/prototype/formatToParts/date-constructor-not-called.js
js/src/tests/test262/intl402/DateTimeFormat/prototype/formatToParts/shell.js
js/src/tests/test262/intl402/DateTimeFormat/prototype/formatToParts/time-clip-near-time-boundaries.js
js/src/tests/test262/intl402/DateTimeFormat/prototype/formatToParts/time-clip-to-integer.js
js/src/tests/test262/intl402/DateTimeFormat/prototype/resolvedOptions/resolved-locale-with-hc-unicode.js
js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/default-parameter.js
js/src/tests/test262/language/asi/S7.9.2_A1_T1.js
js/src/tests/test262/language/asi/S7.9.2_A1_T2.js
js/src/tests/test262/language/asi/S7.9.2_A1_T3.js
js/src/tests/test262/language/asi/S7.9.2_A1_T4.js
js/src/tests/test262/language/asi/S7.9.2_A1_T5.js
js/src/tests/test262/language/asi/S7.9.2_A1_T6.js
js/src/tests/test262/language/asi/S7.9.2_A1_T7.js
js/src/tests/test262/language/comments/multi-line-html-close-extra.js
js/src/tests/test262/language/comments/single-line-html-close-without-lt.js
js/src/tests/test262/language/expressions/addition/bigint-and-number.js
js/src/tests/test262/language/expressions/addition/order-of-evaluation.js
js/src/tests/test262/language/expressions/assignment/id-arguments-strict-strict.js
js/src/tests/test262/language/expressions/assignment/id-eval-strict-strict.js
js/src/tests/test262/language/expressions/async-generator/early-errors-expression-formals-contains-await.js
js/src/tests/test262/language/expressions/async-generator/early-errors-expression-formals-contains-yield.js
js/src/tests/test262/language/expressions/async-generator/early-errors-expression-label-name-await.js
js/src/tests/test262/language/expressions/async-generator/early-errors-expression-label-name-yield.js
js/src/tests/test262/language/expressions/bitwise-and/bigint-and-number.js
js/src/tests/test262/language/expressions/bitwise-and/order-of-evaluation.js
js/src/tests/test262/language/expressions/bitwise-or/bigint-and-number.js
js/src/tests/test262/language/expressions/bitwise-or/order-of-evaluation.js
js/src/tests/test262/language/expressions/bitwise-xor/bigint-and-number.js
js/src/tests/test262/language/expressions/bitwise-xor/order-of-evaluation.js
js/src/tests/test262/language/expressions/delete/11.4.1-3-a-1-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-1-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-10-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-11-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-12-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-13-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-14-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-15-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-16-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-17-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-18-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-19-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-2-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-20-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-21-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-22-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-23-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-24-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-25-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-26-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-3-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-4-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-5-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-6-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-7-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-8-s-strict.js
js/src/tests/test262/language/expressions/delete/11.4.1-5-a-9-s-strict.js
js/src/tests/test262/language/expressions/delete/S11.4.1_A1.js
js/src/tests/test262/language/expressions/delete/identifier-strict-strict.js
js/src/tests/test262/language/expressions/delete/white-space-line-terminator-between-delete-unaryexpression-allowed.js
js/src/tests/test262/language/expressions/division/bigint-and-number.js
js/src/tests/test262/language/expressions/division/order-of-evaluation.js
js/src/tests/test262/language/expressions/exponentiation/bigint-and-number.js
js/src/tests/test262/language/expressions/exponentiation/order-of-evaluation.js
js/src/tests/test262/language/expressions/left-shift/bigint-and-number.js
js/src/tests/test262/language/expressions/left-shift/order-of-evaluation.js
js/src/tests/test262/language/expressions/modulus/bigint-and-number.js
js/src/tests/test262/language/expressions/modulus/order-of-evaluation.js
js/src/tests/test262/language/expressions/multiplication/bigint-and-number.js
js/src/tests/test262/language/expressions/multiplication/order-of-evaluation.js
js/src/tests/test262/language/expressions/object/11.1.5-1-s-strict.js
js/src/tests/test262/language/expressions/object/11.1.5-2-s-strict.js
js/src/tests/test262/language/expressions/object/11.1.5-3-s.js
js/src/tests/test262/language/expressions/object/11.1.5-4-4-a-1-s.js
js/src/tests/test262/language/expressions/object/11.1.5-4-s.js
js/src/tests/test262/language/expressions/object/11.1.5_4-4-a-2.js
js/src/tests/test262/language/expressions/object/11.1.5_4-4-b-2.js
js/src/tests/test262/language/expressions/object/11.1.5_4-4-c-1.js
js/src/tests/test262/language/expressions/object/11.1.5_4-4-c-2.js
js/src/tests/test262/language/expressions/object/11.1.5_4-4-d-1.js
js/src/tests/test262/language/expressions/object/11.1.5_4-4-d-2.js
js/src/tests/test262/language/expressions/object/11.1.5_4-4-d-3.js
js/src/tests/test262/language/expressions/object/11.1.5_4-4-d-4.js
js/src/tests/test262/language/expressions/object/11.1.5_6-2-1-s-strict.js
js/src/tests/test262/language/expressions/object/11.1.5_6-2-2-s.js
js/src/tests/test262/language/expressions/object/11.1.5_7-2-1-s-strict.js
js/src/tests/test262/language/expressions/object/11.1.5_7-2-2-s-strict.js
js/src/tests/test262/language/expressions/object/getter-body-strict-inside.js
js/src/tests/test262/language/expressions/object/getter-body-strict-outside-strict.js
js/src/tests/test262/language/expressions/object/prop-dup-data-data.js
js/src/tests/test262/language/expressions/object/prop-dup-data-set.js
js/src/tests/test262/language/expressions/object/prop-dup-get-data.js
js/src/tests/test262/language/expressions/object/prop-dup-get-get.js
js/src/tests/test262/language/expressions/object/prop-dup-get-set-get.js
js/src/tests/test262/language/expressions/object/prop-dup-set-data.js
js/src/tests/test262/language/expressions/object/prop-dup-set-get-set.js
js/src/tests/test262/language/expressions/object/prop-dup-set-set.js
js/src/tests/test262/language/expressions/object/setter-body-strict-inside.js
js/src/tests/test262/language/expressions/object/setter-body-strict-outside-strict.js
js/src/tests/test262/language/expressions/object/setter-param-arguments-strict-inside.js
js/src/tests/test262/language/expressions/object/setter-param-arguments-strict-outside-strict.js
js/src/tests/test262/language/expressions/object/setter-param-eval-strict-inside.js
js/src/tests/test262/language/expressions/object/setter-param-eval-strict-outside-strict.js
js/src/tests/test262/language/expressions/property-accessors/non-identifier-name.js
js/src/tests/test262/language/expressions/right-shift/bigint-and-number.js
js/src/tests/test262/language/expressions/right-shift/order-of-evaluation.js
js/src/tests/test262/language/expressions/subtraction/bigint-and-number.js
js/src/tests/test262/language/expressions/subtraction/order-of-evaluation.js
js/src/tests/test262/language/expressions/unsigned-right-shift/bigint-and-number.js
js/src/tests/test262/language/expressions/unsigned-right-shift/order-of-evaluation.js
js/src/tests/test262/language/identifiers/vertical-tilde-continue-escaped.js
js/src/tests/test262/language/identifiers/vertical-tilde-continue.js
js/src/tests/test262/language/identifiers/vertical-tilde-start-escaped.js
js/src/tests/test262/language/identifiers/vertical-tilde-start.js
js/src/tests/test262/language/literals/numeric/legacy-octal-integer-strict-strict.js
js/src/tests/test262/language/literals/numeric/non-octal-decimal-integer-strict-strict.js
js/src/tests/test262/language/module-code/comment-multi-line-html-close.js
js/src/tests/test262/language/module-code/comment-single-line-html-close.js
js/src/tests/test262/language/module-code/comment-single-line-html-open.js
js/src/tests/test262/language/statements/class/definition/fn-name-static-precedence.js
js/src/tests/test262/language/statements/class/subclass/builtin-objects/Array/length.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
js/src/tests/test262/language/statements/variable/id-arguments-strict-strict.js
js/src/tests/test262/language/statements/variable/id-eval-strict-strict.js
--- a/js/src/tests/test262/GIT-INFO
+++ b/js/src/tests/test262/GIT-INFO
@@ -1,5 +1,5 @@
-commit 73120a5492ce274d551d2a215e65ba30085be7ef
-Author: Rick Waldron <waldron.rick@gmail.com>
-Date:   Wed Jan 10 17:33:03 2018 -0500
+commit 82c6148980332febe92a544a1fb653718e9fdb57
+Author: André Bargull <andre.bargull@gmail.com>
+Date:   Thu Feb 1 11:04:51 2018 -0800
 
-    Fix: various lint fixes
+    Add missing closing parenthesis and remove invalid async flag (#1402)
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/length.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimLeft
+description: >
+  String.prototype.trimLeft.length is 0.
+info: >
+  String.prototype.trimLeft ( )
+
+  17 ECMAScript Standard Built-in Objects:
+    Every built-in Function object, including constructors, has a length
+    property whose value is an integer. Unless otherwise specified, this
+    value is equal to the largest number of named arguments shown in the
+    subclause headings for the function description, including optional
+    parameters. However, rest parameters shown using the form “...name”
+    are not included in the default argument count.
+
+    Unless otherwise specified, the length property of a built-in Function
+    object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+    [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [string-trimming]
+---*/
+
+verifyProperty(String.prototype.trimLeft, "length", {
+  value: 0,
+  enumerable: false,
+  writable: false,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/name.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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]
+---*/
+
+verifyProperty(String.prototype.trimLeft, "name", {
+  value: "trimStart",
+  enumerable: false,
+  writable: false,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/prop-desc.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimLeft
+description: >
+  "trimLeft" property of String.prototype
+info: >
+  17 ECMAScript Standard Built-in Objects:
+
+  Every other data property described in clauses 18 through 26 and in Annex B.2
+  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+  [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [string-trimming]
+---*/
+
+verifyProperty(String.prototype, "trimLeft", {
+  enumerable: false,
+  writable: true,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/trimLeft/reference-trimStart.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimLeft
+description: >
+  String.prototype.trimLeft is a reference to String.prototype.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.
+features: [string-trimming]
+---*/
+
+assert.sameValue(String.prototype.trimLeft, String.prototype.trimStart);
+
+reportCompare(0, 0);
new file mode 100644
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/length.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimRight
+description: >
+  String.prototype.trimRight.length is 0.
+info: >
+  String.prototype.trimRight ( )
+
+  17 ECMAScript Standard Built-in Objects:
+    Every built-in Function object, including constructors, has a length
+    property whose value is an integer. Unless otherwise specified, this
+    value is equal to the largest number of named arguments shown in the
+    subclause headings for the function description, including optional
+    parameters. However, rest parameters shown using the form “...name”
+    are not included in the default argument count.
+
+    Unless otherwise specified, the length property of a built-in Function
+    object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+    [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [string-trimming]
+---*/
+
+verifyProperty(String.prototype.trimRight, "length", {
+  value: 0,
+  enumerable: false,
+  writable: false,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/name.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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]
+---*/
+
+verifyProperty(String.prototype.trimRight, "name", {
+  value: "trimEnd",
+  enumerable: false,
+  writable: false,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/prop-desc.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimRight
+description: >
+  "trimRight" property of String.prototype
+info: >
+  17 ECMAScript Standard Built-in Objects:
+
+  Every other data property described in clauses 18 through 26 and in Annex B.2
+  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+  [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [string-trimming]
+---*/
+
+verifyProperty(String.prototype, "trimRight", {
+  enumerable: false,
+  writable: true,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/trimRight/reference-trimEnd.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimRight
+description: >
+  String.prototype.trimRight is a reference to String.prototype.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.
+features: [string-trimming]
+---*/
+
+assert.sameValue(String.prototype.trimRight, String.prototype.trimEnd);
+
+reportCompare(0, 0);
new file mode 100644
--- a/js/src/tests/test262/annexB/language/comments/multi-line-html-close.js
+++ b/js/src/tests/test262/annexB/language/comments/multi-line-html-close.js
@@ -1,14 +1,13 @@
 // |reftest| error:Test262Error
 // Copyright (C) 2016 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-html-like-comments
-esid: sec-html-like-comments
 description: Optional HTMLCloseComment following MultiLineComment
 info: |
     Comment ::
       MultiLineComment
       SingleLineComment
       SingleLineHTMLOpenComment
       SingleLineHTMLCloseComment
       SingleLineDelimitedComment
--- a/js/src/tests/test262/annexB/language/comments/single-line-html-close-asi.js
+++ b/js/src/tests/test262/annexB/language/comments/single-line-html-close-asi.js
@@ -1,14 +1,13 @@
 // |reftest| error:Test262Error
 // Copyright (C) 2016 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-html-like-comments
-esid: sec-html-like-comments
 description: >
     A SingleLineHTMLCloseComment is considered to be a LineTerminator for
     purposes of parsing by the syntactic grammar.
 info: |
     Comment ::
       MultiLineComment
       SingleLineComment
       SingleLineHTMLOpenComment
--- a/js/src/tests/test262/annexB/language/comments/single-line-html-close.js
+++ b/js/src/tests/test262/annexB/language/comments/single-line-html-close.js
@@ -1,14 +1,13 @@
 // |reftest| error:Test262Error
 // Copyright (C) 2016 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-html-like-comments
-esid: sec-html-like-comments
 description: SingleLineHTMLCloseComment
 info: |
     Comment ::
       MultiLineComment
       SingleLineComment
       SingleLineHTMLOpenComment
       SingleLineHTMLCloseComment
       SingleLineDelimitedComment
--- a/js/src/tests/test262/annexB/language/comments/single-line-html-open.js
+++ b/js/src/tests/test262/annexB/language/comments/single-line-html-open.js
@@ -1,14 +1,13 @@
 // |reftest| error:Test262Error
 // Copyright (C) 2016 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-html-like-comments
-esid: sec-html-like-comments
 description: SingleLineHTMLOpenComment
 info: |
     Comment ::
       MultiLineComment
       SingleLineComment
       SingleLineHTMLOpenComment
       SingleLineHTMLCloseComment
       SingleLineDelimitedComment
--- a/js/src/tests/test262/annexB/language/expressions/object/__proto__-fn-name.js
+++ b/js/src/tests/test262/annexB/language/expressions/object/__proto__-fn-name.js
@@ -10,17 +10,16 @@ info: |
        IsComputedPropertyKey(propKey) is false, then
        a. If Type(propValue) is either Object or Null, then
           i. Return object.[[SetPrototypeOf]](propValue).
        b. Return NormalCompletion(empty).
     7. If IsAnonymousFunctionDefinition(AssignmentExpression) is true, then
        a. Let hasNameProperty be HasOwnProperty(propValue, "name").
        b. ReturnIfAbrupt(hasNameProperty).
        c. If hasNameProperty is false, perform SetFunctionName(propValue, propKey).
-includes: [propertyHelper.js]
 ---*/
 
 var o;
 
 o = {
   __proto__: function() {}
 };
 
--- a/js/src/tests/test262/annexB/language/literals/numeric/legacy-octal-integer.js
+++ b/js/src/tests/test262/annexB/language/literals/numeric/legacy-octal-integer.js
@@ -1,13 +1,12 @@
 // Copyright (C) 2016 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-additional-syntax-numeric-literals
-esid: sec-additional-syntax-numeric-literals
 description: Mathematical value for LegacyOctalIntegerLiteral
 info: |
     NumericLiteral ::
       DecimalLiteral
       BinaryIntegerLiteral
       OctalIntegerLiteral
       HexIntegerLiteral
       LegacyOctalIntegerLiteral
--- a/js/src/tests/test262/annexB/language/literals/numeric/non-octal-decimal-integer.js
+++ b/js/src/tests/test262/annexB/language/literals/numeric/non-octal-decimal-integer.js
@@ -1,13 +1,12 @@
 // Copyright (C) 2016 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-additional-syntax-numeric-literals
-esid: sec-additional-syntax-numeric-literals
 description: Mathematical value for NonOctalDecimalIntegerLiteral
 info: |
      DecimalIntegerLiteral ::
        0
        NonZeroDigit DecimalDigits[opt]
        NonOctalDecimalIntegerLiteral
 
      NonOctalDecimalIntegerLiteral ::
--- a/js/src/tests/test262/built-ins/Array/prototype/flatMap/depth-always-one.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/flatMap/depth-always-one.js
@@ -7,13 +7,17 @@ description: >
 includes: [compareArray.js]
 features: [Array.prototype.flatMap]
 ---*/
 
 assert.compareArray([1, 2].flatMap(function(e) {
   return [e, e * 2];
 }), [1, 2, 2, 4], 'array depth is 1');
 
-assert.compareArray([1, 2, 3].flatMap(function(ele) {
+var result = [1, 2, 3].flatMap(function(ele) {
   return [[ele * 2]];
-}), [[2], [4], [6]], 'array depth is more than 1');
+});
+assert.sameValue(result.length, 3, 'array depth is more than 1 - length');
+assert.compareArray(result[0], [2], 'array depth is more than 1 - 1st element');
+assert.compareArray(result[1], [4], 'array depth is more than 1 - 2nd element');
+assert.compareArray(result[2], [6], 'array depth is more than 1 - 3rd element');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/ArrayBuffer/isView/prop-desc.js
+++ b/js/src/tests/test262/built-ins/ArrayBuffer/isView/prop-desc.js
@@ -4,16 +4,16 @@
 /*---
 esid: sec-arraybuffer.isview
 description: >
   "isView" property of ArrayBuffer
 info: |
   ES6 section 17: Every other data property described in clauses 18 through 26
   and in Annex B.2 has the attributes { [[Writable]]: true,
   [[Enumerable]]: false, [[Configurable]]: true } unless otherwise specified.
-includes: [propertyHelper.js, testTypedArray.js]
+includes: [propertyHelper.js]
 ---*/
 
 verifyNotEnumerable(ArrayBuffer, "isView");
 verifyWritable(ArrayBuffer, "isView");
 verifyConfigurable(ArrayBuffer, "isView");
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/ArrayBuffer/prototype/byteLength/this-is-sharedarraybuffer.js
+++ b/js/src/tests/test262/built-ins/ArrayBuffer/prototype/byteLength/this-is-sharedarraybuffer.js
@@ -1,14 +1,16 @@
+// |reftest| skip-if(!this.hasOwnProperty('SharedArrayBuffer')) -- SharedArrayBuffer is not enabled unconditionally
 // Copyright (C) 2017 Mozilla Corporation. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: sec-get-arraybuffer.prototype.bytelength
 description: Throws a TypeError exception when `this` is a SharedArrayBuffer
+features: [SharedArrayBuffer]
 ---*/
 
 var getter = Object.getOwnPropertyDescriptor(
   ArrayBuffer.prototype, "byteLength"
 ).get;
 
 assert.throws(TypeError, function() {
   var sab = new SharedArrayBuffer(4);
--- a/js/src/tests/test262/built-ins/ArrayBuffer/prototype/slice/this-is-sharedarraybuffer.js
+++ b/js/src/tests/test262/built-ins/ArrayBuffer/prototype/slice/this-is-sharedarraybuffer.js
@@ -1,15 +1,17 @@
+// |reftest| skip-if(!this.hasOwnProperty('SharedArrayBuffer')) -- SharedArrayBuffer is not enabled unconditionally
 // Copyright (C) 2017 Mozilla Corporation. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: sec-arraybuffer.prototype.slice
 description: >
   Throws a TypeError if `this` is a SharedArrayBuffer
+features: [SharedArrayBuffer]
 ---*/
 
 assert.throws(TypeError, function() {
   var sab = new SharedArrayBuffer(0);
   ArrayBuffer.prototype.slice.call(sab);
 }, "`this` value cannot be a SharedArrayBuffer");
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/add/bad-range.js
+++ b/js/src/tests/test262/built-ins/Atomics/add/bad-range.js
@@ -5,19 +5,24 @@
 /*---
 esid: sec-atomics.add
 description: >
   Test range checking of Atomics.add on arrays that allow atomic operations
 includes: [testAtomics.js, testTypedArray.js]
 features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of]
 ---*/
 
-var sab = new SharedArrayBuffer(4);
+var sab = new SharedArrayBuffer(8);
 var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+  views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     let view = new View(sab);
     testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
         let Idx = IdxGen(view);
         assert.throws(RangeError, () => Atomics.add(view, Idx, 10));
     });
 }, views);
 
--- a/js/src/tests/test262/built-ins/Atomics/add/nonshared-int-views.js
+++ b/js/src/tests/test262/built-ins/Atomics/add/nonshared-int-views.js
@@ -8,15 +8,20 @@ description: >
 includes: [testTypedArray.js]
 features: [TypedArray]
 ---*/
 
 var ab = new ArrayBuffer(16);
 
 var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  int_views.push(BigInt64Array);
+  int_views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     var view = new View(ab);
 
     assert.throws(TypeError, (() => Atomics.add(view, 0, 0)));
 }, int_views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/and/bad-range.js
+++ b/js/src/tests/test262/built-ins/Atomics/and/bad-range.js
@@ -5,19 +5,24 @@
 /*---
 esid: sec-atomics.and
 description: >
   Test range checking of Atomics.and on arrays that allow atomic operations
 includes: [testAtomics.js, testTypedArray.js]
 features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of]
 ---*/
 
-var sab = new SharedArrayBuffer(4);
+var sab = new SharedArrayBuffer(8);
 var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+  views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     let view = new View(sab);
     testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
         let Idx = IdxGen(view);
         assert.throws(RangeError, () => Atomics.and(view, Idx, 10));
     });
 }, views);
 
--- a/js/src/tests/test262/built-ins/Atomics/and/nonshared-int-views.js
+++ b/js/src/tests/test262/built-ins/Atomics/and/nonshared-int-views.js
@@ -8,15 +8,20 @@ description: >
 includes: [testTypedArray.js]
 features: [TypedArray]
 ---*/
 
 var ab = new ArrayBuffer(16);
 
 var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  int_views.push(BigInt64Array);
+  int_views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     var view = new View(ab);
 
     assert.throws(TypeError, (() => Atomics.and(view, 0, 0)));
 }, int_views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/compareExchange/bad-range.js
+++ b/js/src/tests/test262/built-ins/Atomics/compareExchange/bad-range.js
@@ -5,19 +5,24 @@
 /*---
 esid: sec-atomics.compareexchange
 description: >
   Test range checking of Atomics.compareExchange on arrays that allow atomic operations
 includes: [testAtomics.js, testTypedArray.js]
 features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of]
 ---*/
 
-var sab = new SharedArrayBuffer(4);
+var sab = new SharedArrayBuffer(8);
 var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+  views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     let view = new View(sab);
     testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
         let Idx = IdxGen(view);
         assert.throws(RangeError, () => Atomics.compareExchange(view, Idx, 10, 0));
     });
 }, views);
 
--- a/js/src/tests/test262/built-ins/Atomics/compareExchange/nonshared-int-views.js
+++ b/js/src/tests/test262/built-ins/Atomics/compareExchange/nonshared-int-views.js
@@ -8,15 +8,20 @@ description: >
 includes: [testTypedArray.js]
 features: [TypedArray]
 ---*/
 
 var ab = new ArrayBuffer(16);
 
 var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  int_views.push(BigInt64Array);
+  int_views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     var view = new View(ab);
 
     assert.throws(TypeError, (() => Atomics.compareExchange(view, 0, 0, 0)));
 }, int_views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/exchange/bad-range.js
+++ b/js/src/tests/test262/built-ins/Atomics/exchange/bad-range.js
@@ -5,19 +5,24 @@
 /*---
 esid: sec-atomics.exchange
 description: >
   Test range checking of Atomics.exchange on arrays that allow atomic operations
 includes: [testAtomics.js, testTypedArray.js]
 features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of]
 ---*/
 
-var sab = new SharedArrayBuffer(4);
+var sab = new SharedArrayBuffer(8);
 var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+  views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     let view = new View(sab);
     testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
         let Idx = IdxGen(view);
         assert.throws(RangeError, () => Atomics.exchange(view, Idx, 10, 0));
     });
 }, views);
 
--- a/js/src/tests/test262/built-ins/Atomics/exchange/nonshared-int-views.js
+++ b/js/src/tests/test262/built-ins/Atomics/exchange/nonshared-int-views.js
@@ -8,15 +8,20 @@ description: >
 includes: [testTypedArray.js]
 features: [TypedArray]
 ---*/
 
 var ab = new ArrayBuffer(16);
 
 var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  int_views.push(BigInt64Array);
+  int_views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     var view = new View(ab);
 
     assert.throws(TypeError, (() => Atomics.exchange(view, 0, 0)));
 }, int_views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/load/bad-range.js
+++ b/js/src/tests/test262/built-ins/Atomics/load/bad-range.js
@@ -5,19 +5,24 @@
 /*---
 esid: sec-atomics.load
 description: >
   Test range checking of Atomics.load on arrays that allow atomic operations
 includes: [testAtomics.js, testTypedArray.js]
 features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of]
 ---*/
 
-var sab = new SharedArrayBuffer(4);
+var sab = new SharedArrayBuffer(8);
 var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+  views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     let view = new View(sab);
     testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
         let Idx = IdxGen(view);
         assert.throws(RangeError, () => Atomics.load(view, Idx));
     });
 }, views);
 
--- a/js/src/tests/test262/built-ins/Atomics/load/nonshared-int-views.js
+++ b/js/src/tests/test262/built-ins/Atomics/load/nonshared-int-views.js
@@ -8,15 +8,20 @@ description: >
 includes: [testTypedArray.js]
 features: [TypedArray]
 ---*/
 
 var ab = new ArrayBuffer(16);
 
 var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  int_views.push(BigInt64Array);
+  int_views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     var view = new View(ab);
 
     assert.throws(TypeError, (() => Atomics.load(view, 0)));
 }, int_views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/or/bad-range.js
+++ b/js/src/tests/test262/built-ins/Atomics/or/bad-range.js
@@ -5,19 +5,24 @@
 /*---
 esid: sec-atomics.or
 description: >
   Test range checking of Atomics.or on arrays that allow atomic operations
 includes: [testAtomics.js, testTypedArray.js]
 features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of]
 ---*/
 
-var sab = new SharedArrayBuffer(4);
+var sab = new SharedArrayBuffer(8);
 var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+  views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     let view = new View(sab);
     testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
         let Idx = IdxGen(view);
         assert.throws(RangeError, () => Atomics.or(view, Idx, 10));
     });
 }, views);
 
--- a/js/src/tests/test262/built-ins/Atomics/or/nonshared-int-views.js
+++ b/js/src/tests/test262/built-ins/Atomics/or/nonshared-int-views.js
@@ -8,15 +8,20 @@ description: >
 includes: [testTypedArray.js]
 features: [TypedArray]
 ---*/
 
 var ab = new ArrayBuffer(16);
 
 var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  int_views.push(BigInt64Array);
+  int_views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     var view = new View(ab);
 
     assert.throws(TypeError, (() => Atomics.or(view, 0, 0)));
 }, int_views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/store/bad-range.js
+++ b/js/src/tests/test262/built-ins/Atomics/store/bad-range.js
@@ -5,19 +5,24 @@
 /*---
 esid: sec-atomics.store
 description: >
   Test range checking of Atomics.store on arrays that allow atomic operations
 includes: [testAtomics.js, testTypedArray.js]
 features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of]
 ---*/
 
-var sab = new SharedArrayBuffer(4);
+var sab = new SharedArrayBuffer(8);
 var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+  views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     let view = new View(sab);
     testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
         let Idx = IdxGen(view);
         assert.throws(RangeError, () => Atomics.store(view, Idx, 10));
     });
 }, views);
 
--- a/js/src/tests/test262/built-ins/Atomics/store/nonshared-int-views.js
+++ b/js/src/tests/test262/built-ins/Atomics/store/nonshared-int-views.js
@@ -8,15 +8,20 @@ description: >
 includes: [testTypedArray.js]
 features: [TypedArray]
 ---*/
 
 var ab = new ArrayBuffer(16);
 
 var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  int_views.push(BigInt64Array);
+  int_views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     var view = new View(ab);
 
     assert.throws(TypeError, (() => Atomics.store(view, 0, 0)));
 }, int_views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/sub/bad-range.js
+++ b/js/src/tests/test262/built-ins/Atomics/sub/bad-range.js
@@ -5,19 +5,24 @@
 /*---
 esid: sec-atomics.sub
 description: >
   Test range checking of Atomics.sub on arrays that allow atomic operations
 includes: [testAtomics.js, testTypedArray.js]
 features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of]
 ---*/
 
-var sab = new SharedArrayBuffer(4);
+var sab = new SharedArrayBuffer(8);
 var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+  views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     let view = new View(sab);
     testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
         let Idx = IdxGen(view);
         assert.throws(RangeError, () => Atomics.sub(view, Idx, 10));
     });
 }, views);
 
--- a/js/src/tests/test262/built-ins/Atomics/sub/nonshared-int-views.js
+++ b/js/src/tests/test262/built-ins/Atomics/sub/nonshared-int-views.js
@@ -8,15 +8,20 @@ description: >
 includes: [testTypedArray.js]
 features: [TypedArray]
 ---*/
 
 var ab = new ArrayBuffer(16);
 
 var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  int_views.push(BigInt64Array);
+  int_views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     var view = new View(ab);
 
     assert.throws(TypeError, (() => Atomics.sub(view, 0, 0)));
 }, int_views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/wait/bad-range.js
+++ b/js/src/tests/test262/built-ins/Atomics/wait/bad-range.js
@@ -1,21 +1,28 @@
 // |reftest| skip-if(!this.hasOwnProperty('SharedArrayBuffer')||!this.hasOwnProperty('Atomics')) -- SharedArrayBuffer,Atomics is not enabled unconditionally
 // Copyright (C) 2017 Mozilla Corporation.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: sec-atomics.wait
 description: >
   Test range checking of Atomics.wait on arrays that allow atomic operations
-includes: [testAtomics.js]
-features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of]
+includes: [testAtomics.js, testTypedArray.js]
+features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, TypedArray, arrow-function, let, for-of]
 ---*/
 
-var sab = new SharedArrayBuffer(4);
-var view = new Int32Array(sab);
+var sab = new SharedArrayBuffer(8);
+var views = [Int32Array];
 
-testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+}
+
+testWithTypedArrayConstructors(function(View) {
+  let view = new View(sab);
+  testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
     let Idx = IdxGen(view);
     assert.throws(RangeError, () => Atomics.wait(view, Idx, 10, 0)); // Even with zero timeout
-});
+  });
+}, views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/wait/nonshared-int-views.js
+++ b/js/src/tests/test262/built-ins/Atomics/wait/nonshared-int-views.js
@@ -8,15 +8,20 @@ description: >
 includes: [testTypedArray.js]
 features: [TypedArray]
 ---*/
 
 var ab = new ArrayBuffer(16);
 
 var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  int_views.push(BigInt64Array);
+  int_views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     var view = new View(ab);
 
     assert.throws(TypeError, (() => Atomics.wait(view, 0, 0, 0))); // Should fail even if waiting 0ms
 }, int_views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/wake/bad-range.js
+++ b/js/src/tests/test262/built-ins/Atomics/wake/bad-range.js
@@ -1,21 +1,28 @@
 // |reftest| skip-if(!this.hasOwnProperty('SharedArrayBuffer')||!this.hasOwnProperty('Atomics')) -- SharedArrayBuffer,Atomics is not enabled unconditionally
 // Copyright (C) 2017 Mozilla Corporation.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: sec-atomics.wake
 description: >
   Test range checking of Atomics.wake on arrays that allow atomic operations
-includes: [testAtomics.js]
-features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of]
+includes: [testAtomics.js, testTypedArray.js]
+features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, TypedArray, arrow-function, let, for-of]
 ---*/
 
-var sab = new SharedArrayBuffer(4);
-var view = new Int32Array(sab);
+var sab = new SharedArrayBuffer(8);
+var views = [Int32Array];
 
-testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+}
+
+testWithTypedArrayConstructors(function(View) {
+  let view = new View(sab);
+  testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
     let Idx = IdxGen(view);
     assert.throws(RangeError, () => Atomics.wake(view, Idx, 0)); // Even with waking zero
-});
+  });
+}, views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/wake/nonshared-int-views.js
+++ b/js/src/tests/test262/built-ins/Atomics/wake/nonshared-int-views.js
@@ -8,15 +8,20 @@ description: >
 includes: [testTypedArray.js]
 features: [TypedArray]
 ---*/
 
 var ab = new ArrayBuffer(16);
 
 var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  int_views.push(BigInt64Array);
+  int_views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     var view = new View(ab);
 
     assert.throws(TypeError, (() => Atomics.wake(view, 0, 0))); // Should fail even if waking zero waiters
 }, int_views);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Atomics/xor/bad-range.js
+++ b/js/src/tests/test262/built-ins/Atomics/xor/bad-range.js
@@ -5,19 +5,24 @@
 /*---
 esid: sec-atomics.xor
 description: >
   Test range checking of Atomics.xor on arrays that allow atomic operations
 includes: [testAtomics.js, testTypedArray.js]
 features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of]
 ---*/
 
-var sab = new SharedArrayBuffer(4);
+var sab = new SharedArrayBuffer(8);
 var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+  views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     let view = new View(sab);
     testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
         let Idx = IdxGen(view);
         assert.throws(RangeError, () => Atomics.xor(view, Idx, 0));
     });
 }, views);
 
--- a/js/src/tests/test262/built-ins/Atomics/xor/nonshared-int-views.js
+++ b/js/src/tests/test262/built-ins/Atomics/xor/nonshared-int-views.js
@@ -8,15 +8,20 @@ description: >
 includes: [testTypedArray.js]
 features: [TypedArray]
 ---*/
 
 var ab = new ArrayBuffer(16);
 
 var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
 
+if (typeof BigInt !== "undefined") {
+  int_views.push(BigInt64Array);
+  int_views.push(BigUint64Array);
+}
+
 testWithTypedArrayConstructors(function(View) {
     var view = new View(ab);
 
     assert.throws(TypeError, (() => Atomics.xor(view, 0, 0)));
 }, int_views);
 
 reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Date/UTC/non-integer-values.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 Viktor Mukhachev. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-date.utc
+description: non-integer values are converted to integers using `ToInteger`
+info: |
+  [...]
+  Return TimeClip(MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli))).
+
+  #sec-timeclip
+
+  Let clippedTime be ! ToInteger(time).
+
+  #sec-makeday
+
+  Let y be ! ToInteger(year).
+  Let m be ! ToInteger(month).
+  Let dt be ! ToInteger(date).
+
+  #sec-maketime
+
+  Let h be ! ToInteger(hour).
+  Let m be ! ToInteger(min).
+  Let s be ! ToInteger(sec).
+  Let milli be ! ToInteger(ms).
+---*/
+
+assert.sameValue(Date.UTC(1970.9, 0.9, 1.9, 0.9, 0.9, 0.9, 0.9), 0, 'positive non-integer values');
+assert.sameValue(Date.UTC(-1970.9, -0.9, -0.9, -0.9, -0.9, -0.9, -0.9), -124334438400000, 'negative non-integer values');
+
+reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/shell.js
+++ b/js/src/tests/test262/built-ins/Date/shell.js
@@ -35,8 +35,11 @@ description: |
 var date_1899_end = -2208988800001;
 var date_1900_start = -2208988800000;
 var date_1969_end = -1;
 var date_1970_start = 0;
 var date_1999_end = 946684799999;
 var date_2000_start = 946684800000;
 var date_2099_end = 4102444799999;
 var date_2100_start = 4102444800000;
+
+var start_of_time = -8.64e15;
+var end_of_time = 8.64e15;
--- a/js/src/tests/test262/built-ins/Map/prototype/size/this-not-object-throw.js
+++ b/js/src/tests/test262/built-ins/Map/prototype/size/this-not-object-throw.js
@@ -8,17 +8,16 @@ info: |
   get Map.prototype.size
 
   1. Let M be the this value.
   2. If Type(M) is not Object, throw a TypeError exception.
   3. If M does not have a [[MapData]] internal slot, throw a TypeError
   exception.
   ...
 
-includes: [propertyHelper.js]
 features: [Symbol]
 ---*/
 
 var descriptor = Object.getOwnPropertyDescriptor(Map.prototype, 'size');
 
 assert.throws(TypeError, function() {
   descriptor.get.call(1);
 });
--- a/js/src/tests/test262/built-ins/Number/NEGATIVE_INFINITY/value.js
+++ b/js/src/tests/test262/built-ins/Number/NEGATIVE_INFINITY/value.js
@@ -5,14 +5,13 @@
 es6id: 20.1.2.11
 esid: sec-number.negative_infinity
 description: >
   The value of Number.NEGATIVE_INFINITY is -Infinity
 info: |
   Number.NEGATIVE_INFINITY
 
   The value of Number.NEGATIVE_INFINITY is -∞.
-includes: [propertyHelper.js]
 ---*/
 
 assert.sameValue(Number.NEGATIVE_INFINITY, -Infinity);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Number/POSITIVE_INFINITY/value.js
+++ b/js/src/tests/test262/built-ins/Number/POSITIVE_INFINITY/value.js
@@ -5,14 +5,13 @@
 es6id: 20.1.2.14
 esid: sec-number.positive_infinity
 description: >
   The value of Number.POSITIVE_INFINITY is +Infinity
 info: |
   Number.POSITIVE_INFINITY
 
   The value of Number.POSITIVE_INFINITY is +∞.
-includes: [propertyHelper.js]
 ---*/
 
 assert.sameValue(Number.POSITIVE_INFINITY, Infinity);
 
 reportCompare(0, 0);
--- 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.
 /*---
-es6id: 7.2.
+esid: sec-object.is
 description: >
     Object.is/SameValue: Symbol
-features: [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/Promise/all/S25.4.4.1_A8.2_T1.js
+++ b/js/src/tests/test262/built-ins/Promise/all/S25.4.4.1_A8.2_T1.js
@@ -2,17 +2,16 @@
 // See LICENSE for details.
 
 /*---
 info: |
     Promise.all with 2-element array
 es6id: S25.4.4.1_A8.1_T1
 author: Sam Mikes
 description: Promise.all() rejects when a promise in its array rejects
-includes: [promiseHelper.js]
 flags: [async]
 ---*/
 
 var rejectP1,
     p1 = new Promise(function (resolve, reject) {
         rejectP1 = reject;
     }),
     p2 = Promise.resolve(2);
--- a/js/src/tests/test262/built-ins/Promise/all/S25.4.4.1_A8.2_T2.js
+++ b/js/src/tests/test262/built-ins/Promise/all/S25.4.4.1_A8.2_T2.js
@@ -2,17 +2,16 @@
 // See LICENSE for details.
 
 /*---
 info: |
     Promise.all with 2-element array
 es6id: S25.4.4.1_A8.2_T2
 author: Sam Mikes
 description: Promise.all() rejects when second promise in array rejects
-includes: [promiseHelper.js]
 flags: [async]
 ---*/
 
 var rejectP2,
     p1 = Promise.resolve(1),
     p2 = new Promise(function (resolve, reject) {
         rejectP2 = reject;
     });
--- a/js/src/tests/test262/built-ins/Promise/prototype/finally/invokes-then-with-function.js
+++ b/js/src/tests/test262/built-ins/Promise/prototype/finally/invokes-then-with-function.js
@@ -22,34 +22,40 @@ target.then = function(a, b) {
   argCount = arguments.length;
   firstArg = a;
   secondArg = b;
 
   return returnValue;
 };
 
 var originalFinallyHandler = function () {};
+var anonName = Object(function () {}).name;
 
 var result = Promise.prototype.finally.call(target, originalFinallyHandler, 2, 3);
 
 assert.sameValue(callCount, 1, 'Invokes `then` method exactly once');
 assert.sameValue(
   thisValue,
   target,
   'Invokes `then` method with the instance as the `this` value'
 );
 assert.sameValue(argCount, 2, 'Invokes `then` method with exactly two single arguments');
 assert.sameValue(
   typeof firstArg,
   'function',
   'Invokes `then` method with a function as the first argument'
 );
 assert.notSameValue(firstArg, originalFinallyHandler, 'Invokes `then` method with a different fulfillment handler');
+assert.sameValue(firstArg.length, 1, 'fulfillment handler has a length of 1');
+assert.sameValue(firstArg.name, anonName, 'fulfillment handler is anonymous');
+
 assert.sameValue(
   typeof secondArg,
   'function',
   'Invokes `then` method with a function as the second argument'
 );
-assert.notSameValue(secondArg, originalFinallyHandler, 'Invokes `then` method with a different fulfillment handler');
+assert.notSameValue(secondArg, originalFinallyHandler, 'Invokes `then` method with a different rejection handler');
+assert.sameValue(secondArg.length, 1, 'rejection handler has a length of 1');
+assert.sameValue(secondArg.name, anonName, 'rejection handler is anonymous');
 
 assert.sameValue(result, returnValue, 'Returns the result of the invocation of `then`');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Promise/prototype/finally/species-constructor.js
+++ b/js/src/tests/test262/built-ins/Promise/prototype/finally/species-constructor.js
@@ -1,13 +1,13 @@
 // Copyright (C) 2017 V8. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 author: Sathya Gunasekaran
-description: finally calls the SpeciesConstructor
+description: finally calls the SpeciesConstructor and creates the right amount of promises
 esid: sec-promise.prototype.finally
 features: [Promise.prototype.finally]
 flags: [async]
 ---*/
 
 
 var count = 0;
 class FooPromise extends Promise {
@@ -17,9 +17,9 @@ class FooPromise extends Promise {
   }
 }
 
 new FooPromise(r => r())
   .finally(() => {})
   .then(() => {
     assert.sameValue(count, 6, "6 new promises were created");
     $DONE();
-});
+  }, $ERROR);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Promise/prototype/finally/subclass-reject-count.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2018 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+author: Jordan Harband
+description: Promise subclass finally on rejected creates the proper number of subclassed promises
+esid: sec-promise.prototype.finally
+features: [Promise.prototype.finally]
+flags: [async]
+---*/
+
+var count = 0;
+class FooPromise extends Promise {
+  constructor(resolve, reject) {
+    count++;
+    return super(resolve, reject);
+  }
+}
+
+FooPromise.reject().finally(() => {}).then($ERROR).catch(() => {
+  assert.sameValue(7, count);
+  $DONE();
+});
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Promise/prototype/finally/subclass-resolve-count.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2018 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+author: Jordan Harband
+description: Promise subclass finally on resolved creates the proper number of subclassed promises
+esid: sec-promise.prototype.finally
+features: [Promise.prototype.finally]
+flags: [async]
+---*/
+
+var count = 0;
+class FooPromise extends Promise {
+  constructor(resolve, reject) {
+    count++;
+    return super(resolve, reject);
+  }
+}
+
+FooPromise.resolve().finally(() => {}).then(() => {
+  assert.sameValue(6, count);
+  $DONE();
+}, $ERROR);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Promise/prototype/finally/subclass-species-constructor-reject-count.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2018 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+author: Jordan Harband
+description: finally on rejected Promise calls the SpeciesConstructor
+esid: sec-promise.prototype.finally
+features: [Promise.prototype.finally]
+---*/
+
+class FooPromise extends Promise {
+  static get [Symbol.species]() { return Promise; }
+}
+
+var p = Promise.reject().finally(() => FooPromise.reject());
+
+assert.sameValue(p instanceof Promise, true);
+assert.sameValue(p instanceof FooPromise, false);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Promise/prototype/finally/subclass-species-constructor-resolve-count.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2018 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+author: Jordan Harband
+description: finally on resolved Promise calls the SpeciesConstructor
+esid: sec-promise.prototype.finally
+features: [Promise.prototype.finally]
+---*/
+
+class FooPromise extends Promise {
+  static get [Symbol.species]() { return Promise; }
+}
+
+var p = Promise.resolve().finally(() => FooPromise.resolve());
+
+assert.sameValue(p instanceof Promise, true);
+assert.sameValue(p instanceof FooPromise, false);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Promise/prototype/finally/this-value-non-promise.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2018 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+author: Jordan Harband
+description: >
+  Promise.prototype.finally called with a non-branded Promise does not throw
+esid: sec-promise.prototype.finally
+features: [Promise.prototype.finally]
+---*/
+
+var called = false;
+var p = new Proxy(Promise.resolve(), {});
+var oldThen = Promise.prototype.then;
+Promise.prototype.then = () => { called = true; };
+Promise.prototype.finally.call(p);
+assert.sameValue(called, true);
+Promise.prototype.then = oldThen;
+
+reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Promise/resolve/S25.Promise_resolve_foreign_thenable_1.js
+++ b/js/src/tests/test262/built-ins/Promise/resolve/S25.Promise_resolve_foreign_thenable_1.js
@@ -2,22 +2,19 @@
 // See LICENSE for details.
 
 /*---
 info: |
    Promise.resolve
 es6id: S25.4.4.5
 author: Sam Mikes
 description: Promise.resolve delegates to foreign thenable
-includes: [promiseHelper.js]
 flags: [async]
 ---*/
 
-var sequence = [];
-
 var thenable = {
     then: function(onResolve, onReject) {
         return onResolve('resolved');
     }
 };
 
 var p = Promise.resolve(thenable);
 
--- a/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass-sans.js
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass-sans.js
@@ -1,16 +1,15 @@
 // |reftest| skip -- regexp-named-groups is not supported
 // Copyright 2017 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 description: >
   Test the groups object on RegExp subclass results that do not have their own.
-includes: [propertyHelper.js]
 esid: sec-regexpbuiltinexec
 features: [regexp-named-groups]
 info: |
   Runtime Semantics: RegExpBuiltinExec ( R, S )
     24. If _R_ contains any |GroupName|, then
       a. Let _groups_ be ObjectCreate(*null*).
     25. Else,
       a. Let _groups_ be *undefined*.
@@ -23,18 +22,18 @@ class FakeRegExp extends RegExp {
     fakeResult.index = 0;
     // `groups` is not set, triggering prototype lookup.
     return fakeResult;
   }
 };
 
 const re = new FakeRegExp();
 const result = re.exec("ab");
-assert.sameValue(result.__proto__, Array.prototype);
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
 assert.sameValue(false, result.hasOwnProperty("groups"));
 
 Array.prototype.groups = { a: "b" };
-Array.prototype.groups.__proto__.b = "c";
+Object.getPrototypeOf(Array.prototype.groups).b = "c";
 assert.sameValue("b", "ab".replace(re, "$<a>"));
 assert.sameValue("c", "ab".replace(re, "$<b>"));
 Array.prototype.groups = undefined;
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass.js
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass.js
@@ -1,38 +1,37 @@
 // |reftest| skip -- regexp-named-groups is not supported
 // Copyright 2017 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 description: >
   Test the groups object on RegExp subclass results that have their own.
-includes: [propertyHelper.js]
 esid: sec-regexpbuiltinexec
 features: [regexp-named-groups]
 info: |
   Runtime Semantics: RegExpBuiltinExec ( R, S )
     24. If _R_ contains any |GroupName|, then
       a. Let _groups_ be ObjectCreate(*null*).
     25. Else,
       a. Let _groups_ be *undefined*.
     26. Perform ! CreateDataProperty(_A_, `"groups"`, _groups_).
 ---*/
 
 class FakeRegExp extends RegExp {
   exec(subject) {
     const fakeResult = ["ab", "a"];
     fakeResult.index = 0;
     fakeResult.groups = { a: "b" };
-    fakeResult.groups.__proto__.b = "c";
+    Object.getPrototypeOf(fakeResult.groups).b = "c";
     return fakeResult;
   }
 };
 
 const re = new FakeRegExp();
 const result = re.exec("ab");
-assert.sameValue(result.__proto__, Array.prototype);
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
 assert(result.hasOwnProperty("groups"));
 assert.sameValue("b", result.groups.a);
 assert.sameValue("b", "ab".replace(re, "$<a>"));
 assert.sameValue("c", "ab".replace(re, "$<b>"));
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-undefined.js
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-undefined.js
@@ -13,17 +13,17 @@ info: |
       a. Let _groups_ be ObjectCreate(*null*).
     25. Else,
       a. Let _groups_ be *undefined*.
     26. Perform ! CreateDataProperty(_A_, `"groups"`, _groups_).
 ---*/
 
 const re = /./;
 const result = re.exec("a");
-assert.sameValue(result.__proto__, Array.prototype);
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
 assert(result.hasOwnProperty("groups"));
 assert.sameValue("a", result[0]);
 assert.sameValue(0, result.index);
 assert.sameValue(undefined, result.groups);
 verifyProperty(result, "groups", {
   writable: true,
   enumerable: true,
   configurable: true,
--- a/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-unmatched.js
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-unmatched.js
@@ -1,30 +1,29 @@
 // |reftest| skip -- regexp-named-groups is not supported
 // Copyright 2017 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 description: >
   Test the groups object with matched and unmatched named captures.
-includes: [propertyHelper.js]
 esid: sec-regexpbuiltinexec
 features: [regexp-named-groups]
 info: |
   Runtime Semantics: RegExpBuiltinExec ( R, S )
     24. If _R_ contains any |GroupName|, then
       a. Let _groups_ be ObjectCreate(*null*).
     25. Else,
       a. Let _groups_ be *undefined*.
     26. Perform ! CreateDataProperty(_A_, `"groups"`, _groups_).
 ---*/
 
 const re = /(?<a>a).|(?<x>x)/;
 const result = re.exec("ab");
-assert.sameValue(result.__proto__, Array.prototype);
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
 assert(result.hasOwnProperty("groups"));
 assert.sameValue("ab", result[0]);
 assert.sameValue("a", result[1]);
 assert.sameValue(undefined, result[2]);
 assert.sameValue(0, result.index);
 assert.sameValue("a", result.groups.a);
 assert.sameValue(undefined, result.groups.x);
 
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/length.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  String.prototype.trimEnd.length is 0.
+info: >
+  String.prototype.trimEnd ( )
+
+  17 ECMAScript Standard Built-in Objects:
+    Every built-in Function object, including constructors, has a length
+    property whose value is an integer. Unless otherwise specified, this
+    value is equal to the largest number of named arguments shown in the
+    subclause headings for the function description, including optional
+    parameters. However, rest parameters shown using the form “...name”
+    are not included in the default argument count.
+
+    Unless otherwise specified, the length property of a built-in Function
+    object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+    [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [string-trimming, String.prototype.trimEnd]
+---*/
+
+verifyProperty(String.prototype.trimEnd, "length", {
+  value: 0,
+  enumerable: false,
+  writable: false,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/name.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  String.prototype.trimEnd.name is "trimEnd".
+info: >
+  String.prototype.trimEnd ( )
+
+  17 ECMAScript Standard Built-in Objects:
+    Every built-in Function object, including constructors, that is not
+    identified as an anonymous function has a name property whose value
+    is a String.
+
+    Unless otherwise specified, the name property of a built-in Function
+    object, if it exists, has the attributes { [[Writable]]: false,
+    [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [string-trimming, String.prototype.trimEnd]
+---*/
+
+verifyProperty(String.prototype.trimEnd, "name", {
+  value: "trimEnd",
+  enumerable: false,
+  writable: false,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/prop-desc.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  "trimEnd" property of String.prototype
+info: >
+  17 ECMAScript Standard Built-in Objects:
+
+  Every other data property described in clauses 18 through 26 and in Annex B.2
+  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+  [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [string-trimming, String.prototype.trimEnd]
+---*/
+
+verifyProperty(String.prototype, "trimEnd", {
+  enumerable: false,
+  writable: true,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-boolean.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2017 Valerie Young.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: Behavior when "this" value is a boolean.
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  2. Let S be ? ToString(str).
+
+  ToString ( argument )
+  Argument Type: Boolean
+  Result:
+    If argument is true, return "true".
+    If argument is false, return "false".
+features: [string-trimming, String.prototype.trimEnd]
+---*/
+
+var trimEnd = String.prototype.trimEnd
+
+assert.sameValue(
+  trimEnd.call(true),
+  'true',
+  'String.prototype.trimEnd.call(true)'
+);
+
+assert.sameValue(
+  String.prototype.trimEnd.call(false),
+  'false',
+  'String.prototype.trimEnd.call(false)'
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-line-terminator.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2017 Valerie Young.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: TrimEnd removes all line terminators from the end of a string.
+info: |
+  Runtime Symantics: TrimString ( string, where )
+  ...
+  4. Else if where is "end", let T be a String value that is a copy of S with
+     trailing white space removed.
+  ...
+
+  The definition of white space is the union of WhiteSpace and LineTerminator.
+
+features: [string-trimming, String.prototype.trimEnd]
+---*/
+
+var trimEnd = String.prototype.trimEnd;
+
+// A string of all valid LineTerminator Unicode code points
+var lt = '\u000A\u000D\u2028\u2029';
+
+var str = lt + 'a' + lt + 'b' + lt;
+var expected = lt + 'a' + lt + 'b';
+
+assert.sameValue(
+  trimEnd.call(str),
+  expected,
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-not-obj-coercible.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: The "this" value must be object-coercible
+info: |
+  1. Let O be ? RequireObjectCoercible(this value).
+features: [string-trimming, String.prototype.trimEnd]
+---*/
+
+var trimEnd = String.prototype.trimEnd;
+
+assert.sameValue(typeof trimEnd, 'function');
+
+assert.throws(TypeError, function() {
+  trimEnd.call(undefined);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+  trimEnd.call(null);
+}, 'null');
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-number.js
@@ -0,0 +1,50 @@
+// Copyright (c) 2017 Valerie Young.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: Behavoir when "this" value is a number.
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  2. Let S be ? ToString(str).
+
+  ToString ( argument )
+  Argument Type: Number
+  Result: NumberToString(argument)
+features: [string-trimming, String.prototype.trimEnd]
+---*/
+
+var trimEnd = String.prototype.trimEnd
+
+assert.sameValue(
+  trimEnd.call(NaN),
+  'NaN',
+  'String.prototype.trimEnd.call(NaN)'
+);
+
+assert.sameValue(
+  trimEnd.call(Infinity),
+  'Infinity',
+  'String.prototype.trimEnd.call(Infinity)'
+);
+
+assert.sameValue(
+  trimEnd.call(-0),
+  '0',
+  'String.prototype.trimEnd.call(-0)'
+);
+
+assert.sameValue(
+  trimEnd.call(1),
+  '1',
+  'String.prototype.trimEnd.call(1)'
+);
+
+assert.sameValue(
+  trimEnd.call(-1),
+  '-1',
+  'String.prototype.trimEnd.call(-1)'
+);
+
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-cannot-convert-to-primitive-err.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  This value is an object which cannot be converted to a primitive
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      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]
+---*/
+
+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.
+assert.throws(
+  TypeError,
+  function() { String.prototype.trimEnd.call(thisVal); },
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-toprimitive-call-err.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  Abrupt completion when getting Symbol.toPrimitive method
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
+   ...
+features: [string-trimming, String.prototype.trimEnd, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  get [Symbol.toPrimitive]() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimEnd.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-toprimitive-meth-err.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+    Abrupt completion when Symbol.toPrimitive abrupt completes.
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+   ...
+features: [string-trimming, String.prototype.trimEnd, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: function() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimEnd.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-toprimitive-meth-priority.js
@@ -0,0 +1,76 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  Priority of Symbol[toPrimitive] when converting object to string for trimming
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+   ...
+features: [string-trimming, String.prototype.trimEnd, Symbol.toPrimitive]
+---*/
+
+
+var toPrimitiveAccessed = 0;
+var toStringAccessed = 0;
+var valueOfAccessed = 0;
+var thisVal = {
+  get [Symbol.toPrimitive]() {
+    toPrimitiveAccessed += 1;
+    return function() { return '42 '; };
+  },
+  get toString() {
+    toStringAccessed += 1;
+    return function() { return ''; };
+  },
+  get valueOf() {
+    valueOfAccessed += 1;
+    return function() { return ''; };
+  },
+};
+
+// Test that thisVal[Symbol.toPrimitive] has been called.
+
+var result = String.prototype.trimEnd.call(thisVal);
+
+assert.sameValue(
+  toPrimitiveAccessed,
+  1,
+  'thisVal[Symbol.toPrimitive] expected to have been accessed.'
+);
+assert.sameValue(
+  result,
+  '42',
+  'thisVal[Symbol.toPrimitive] expected to have been called.',
+);
+
+// Test that thisVal.toString and thisVal.valueOf have not been accessedo
+
+assert.sameValue(
+  toStringAccessed,
+  0,
+  'thisVal.toString should not have been accessed.'
+);
+assert.sameValue(
+  valueOfAccessed,
+  0,
+  'thisVal.valueOf should not have been accessed.'
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-toprimitive-returns-object-err.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+    Abrupt completion when Symbol.toPrimitive returns an object
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If arguement is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+   ...
+features: [string-trimming, String.prototype.trimEnd, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: function() {
+    return {};
+  },
+};
+
+assert.throws(TypeError, function() {
+  String.prototype.trimEnd.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-tostring-call-err.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  Abrupt completion when getting toString method
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      a. Let method be ? Get(O, name).
+features: [string-trimming, String.prototype.trimEnd, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  get toString() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimEnd.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-tostring-meth-err.js
@@ -0,0 +1,55 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  Abrupt completion when toString called and abrupt completes.
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      a. Let method be ? Get(O, name).
+      b. If IsCallable(method) is true, then
+        i. Let result be ? Call(method, O).
+features: [string-trimming, String.prototype.trimEnd, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  toString: function() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimEnd.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-tostring-meth-priority.js
@@ -0,0 +1,95 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  Priority of toString when converting object to string for trimming
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      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.
+   ...
+features: [string-trimming, String.prototype.trimEnd, Symbol.toPrimitive]
+---*/
+
+var toPrimitiveAccessed = 0;
+var toStringAccessed = 0;
+var valueOfAccessed = 0;
+var thisVal = {
+  get [Symbol.toPrimitive]() {
+    toPrimitiveAccessed +=1;
+    return undefined;
+  },
+  get toString() {
+    toStringAccessed += 1;
+    return function() { return '42 '; };
+  },
+  get valueOf() {
+    valueOfAccessed += 1;
+    return function() { return ''; };
+  },
+};
+
+// Test that toString is called when Symbol.toPrimitive is undefined.
+
+var result = String.prototype.trimEnd.call(thisVal)
+
+assert.sameValue(
+  toPrimitiveAccessed,
+  1,
+  'thisVal.toString expected to have been accessed.'
+);
+assert.sameValue(
+  result,
+  '42',
+  'thisVal.toString expected to have been called.',
+);
+
+// Test that thisVal[toPrimitive] has been accessed.
+
+assert.sameValue(
+  toPrimitiveAccessed,
+  1,
+  'thisVal[Symbol.toPrimitive should have been accessed.'
+);
+
+// Test that thisVal.valueOf has not been accessed.
+
+assert.sameValue(
+  valueOfAccessed,
+  0,
+  'thisVal.valueOf should not have been accessed.'
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-tostring-returns-object-err.js
@@ -0,0 +1,58 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  Abrupt completion when toString called and returns an object
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      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]
+---*/
+
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  toString: function() {
+    return {};
+  },
+};
+
+assert.throws(TypeError, function() {
+  String.prototype.trimEnd.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-valueof-call-err.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  Abrupt completion when getting valueOf method
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      a. Let method be ? Get(O, name).
+features: [string-trimming, String.prototype.trimEnd, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  toString: undefined,
+  get valueOf() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimEnd.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-valueof-meth-err.js
@@ -0,0 +1,56 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  Abrupt completion when valueOf called and abrupt completes.
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      a. Let method be ? Get(O, name).
+      b. If IsCallable(method) is true, then
+        i. Let result be ? Call(method, O).
+features: [string-trimming, String.prototype.trimEnd, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  toString: undefined,
+  valueOf: function() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimEnd.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-valueof-meth-priority.js
@@ -0,0 +1,93 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  Priority of valueOf when converting object to string for trimming
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      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.
+   ...
+features: [string-trimming, String.prototype.trimEnd, Symbol.toPrimitive]
+---*/
+
+var toPrimitiveAccessed = 0;
+var toStringAccessed = 0;
+var valueOfAccessed = 0;
+var thisVal = {
+  get [Symbol.toPrimitive]() {
+    toPrimitiveAccessed += 1;
+    return undefined;
+  },
+  get toString() {
+    toStringAccessed += 1;
+    return undefined;
+  },
+  get valueOf() {
+    valueOfAccessed += 1;
+    return function() { return '42 '; };
+  },
+};
+
+// Test that valueOf is called when Symbol.toPrimitive and toString are both
+// undefined.
+
+var result = String.prototype.trimEnd.call(thisVal);
+
+assert.sameValue(
+  valueOfAccessed,
+  1,
+  'thisVal.toString expected to have been accessed.'
+);
+assert.sameValue(
+  result,
+  '42',
+  'thisVal.valueOf expected to have been called.',
+);
+
+// Test that thisVal[toPrimitive] and thisVal.toString has been accessed.
+
+assert.sameValue(
+  toPrimitiveAccessed,
+  1,
+  'thisVal[Symbol.toPrimitive should have been accessed.'
+);
+assert.sameValue(
+  toStringAccessed,
+  1,
+  'thisVal[Symbol.toString should have been accessed.'
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-object-valueof-returns-object-err.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: >
+  Abrupt completion when valueOf called and returns an object
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      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]
+---*/
+
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  toString: undefined,
+  valueOf: function() {
+    return {};
+  },
+};
+
+assert.throws(TypeError, function() {
+  String.prototype.trimEnd.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-symbol-typeerror.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: Type error when "this" value is a Symbol
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  2. Let S be ? ToString(str).
+
+  ToString ( argument )
+  Argument Type: Symbol
+  Result: Throw a TypeError exception
+features: [string-trimming, String.prototype.trimEnd]
+---*/
+
+var trimEnd = String.prototype.trimEnd;
+var symbol = Symbol();
+
+assert.throws(
+  TypeError,
+  function() { trimEnd.call(symbol); },
+  'String.prototype.trimEnd.call(Symbol())'
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimEnd/this-value-whitespace.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2017 Valerie Young.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimEnd
+description: TrimEnd removes all whitespace from the end of a string.
+info: |
+  Runtime Symantics: TrimString ( string, where )
+  ...
+  3. Else if where is "end", let T be a String value that is a copy of S with
+     trailing white space removed.
+  ...
+
+  The definition of white space is the union of WhiteSpace and LineTerminator.
+  When determining whether a Unicode code point is in Unicode general category
+  “Zs”, code unit sequences are interpreted as UTF-16 encoded code point
+  sequences as specified in 6.1.4.
+
+features: [string-trimming, String.prototype.trimEnd]
+---*/
+
+var trimEnd = String.prototype.trimEnd;
+
+// A string of all valid WhiteSpace Unicode code points
+var wspc = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
+
+var str = wspc + 'a' + wspc + 'b' + wspc;
+var expected = wspc + 'a' + wspc + 'b';
+
+assert.sameValue(
+  trimEnd.call(str),
+  expected,
+);
+
+reportCompare(0, 0);
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/length.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  String.prototype.trimStart.length is 0.
+info: >
+  String.prototype.trimStart ( )
+
+  17 ECMAScript Standard Built-in Objects:
+    Every built-in Function object, including constructors, has a length
+    property whose value is an integer. Unless otherwise specified, this
+    value is equal to the largest number of named arguments shown in the
+    subclause headings for the function description, including optional
+    parameters. However, rest parameters shown using the form “...name”
+    are not included in the default argument count.
+
+    Unless otherwise specified, the length property of a built-in Function
+    object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+    [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [string-trimming, String.prototype.trimStart]
+---*/
+
+verifyProperty(String.prototype.trimStart, "length", {
+  value: 0,
+  enumerable: false,
+  writable: false,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/name.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  String.prototype.trimStart.name is "trimStart".
+info: >
+  String.prototype.trimStart ( )
+
+  17 ECMAScript Standard Built-in Objects:
+    Every built-in Function object, including constructors, that is not
+    identified as an anonymous function has a name property whose value
+    is a String.
+
+    Unless otherwise specified, the name property of a built-in Function
+    object, if it exists, has the attributes { [[Writable]]: false,
+    [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [string-trimming, String.prototype.trimStart]
+---*/
+
+verifyProperty(String.prototype.trimStart, "name", {
+  value: "trimStart",
+  enumerable: false,
+  writable: false,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/prop-desc.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  "trimStart" property of String.prototype
+info: >
+  17 ECMAScript Standard Built-in Objects:
+
+  Every other data property described in clauses 18 through 26 and in Annex B.2
+  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+  [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [string-trimming, String.prototype.trimStart]
+---*/
+
+verifyProperty(String.prototype, "trimStart", {
+  enumerable: false,
+  writable: true,
+  configurable: true,
+});
+
+reportCompare(0, 0);
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-boolean.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2017 Valerie Young.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: Behavior when "this" value is a boolean.
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  2. Let S be ? ToString(str).
+
+  ToString ( argument )
+  Argument Type: Boolean
+  Result:
+    If argument is true, return "true".
+    If argument is false, return "false".
+features: [string-trimming, String.prototype.trimStart]
+---*/
+
+var trimStart = String.prototype.trimStart
+
+assert.sameValue(
+  trimStart.call(true),
+  'true',
+  'String.prototype.trimStart.call(true)'
+);
+
+assert.sameValue(
+  String.prototype.trimStart.call(false),
+  'false',
+  'String.prototype.trimStart.call(false)'
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-line-terminator.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2017 Valerie Young.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: TrimStart removes all line terminators from the start of a string.
+info: |
+  Runtime Symantics: TrimString ( string, where )
+  ...
+  4. If where is "start", let T be a String value that is a copy of S with
+     trailing white space removed.
+  ...
+
+  The definition of white space is the union of WhiteSpace and LineTerminator.
+
+features: [string-trimming, String.prototype.trimStart]
+---*/
+
+var trimStart = String.prototype.trimStart;
+
+// A string of all valid LineTerminator Unicode code points
+var lt = '\u000A\u000D\u2028\u2029';
+
+var str = lt + 'a' + lt + 'b' + lt;
+var expected = 'a' + lt + 'b' + lt;
+
+assert.sameValue(
+  trimStart.call(str),
+  expected,
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-not-obj-coercible.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: The "this" value must be object-coercible
+info: |
+  1. Let O be ? RequireObjectCoercible(this value).
+features: [string-trimming, String.prototype.trimStart]
+---*/
+
+var trimStart = String.prototype.trimStart;
+
+assert.sameValue(typeof trimStart, 'function');
+
+assert.throws(TypeError, function() {
+  trimStart.call(undefined);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+  trimStart.call(null);
+}, 'null');
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-number.js
@@ -0,0 +1,50 @@
+// Copyright (c) 2017 Valerie Young.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: Behavoir when "this" value is a number.
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  2. Let S be ? ToString(str).
+
+  ToString ( argument )
+  Argument Type: Number
+  Result: NumberToString(argument)
+features: [string-trimming, String.prototype.trimStart]
+---*/
+
+var trimStart = String.prototype.trimStart
+
+assert.sameValue(
+  trimStart.call(NaN),
+  'NaN',
+  'String.prototype.trimStart.call(NaN)'
+);
+
+assert.sameValue(
+  trimStart.call(Infinity),
+  'Infinity',
+  'String.prototype.trimStart.call(Infinity)'
+);
+
+assert.sameValue(
+  trimStart.call(-0),
+  '0',
+  'String.prototype.trimStart.call(-0)'
+);
+
+assert.sameValue(
+  trimStart.call(1),
+  '1',
+  'String.prototype.trimStart.call(1)'
+);
+
+assert.sameValue(
+  trimStart.call(-1),
+  '-1',
+  'String.prototype.trimStart.call(-1)'
+);
+
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-cannot-convert-to-primitive-err.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  This value is an object which cannot be converted to a primitive
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      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]
+---*/
+
+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.
+assert.throws(
+  TypeError,
+  function() { String.prototype.trimStart.call(thisVal); },
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-toprimitive-call-err.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  Abrupt completion when getting Symbol.toPrimitive method
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
+   ...
+features: [string-trimming, String.prototype.trimStart, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  get [Symbol.toPrimitive]() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimStart.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-toprimitive-meth-err.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+    Abrupt completion when Symbol.toPrimitive abrupt completes.
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+   ...
+features: [string-trimming, String.prototype.trimStart, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: function() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimStart.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-toprimitive-meth-priority.js
@@ -0,0 +1,76 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  Priority of Symbol[toPrimitive] when converting object to string for trimming
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+   ...
+features: [string-trimming, String.prototype.trimStart, Symbol.toPrimitive]
+---*/
+
+
+var toPrimitiveAccessed = 0;
+var toStringAccessed = 0;
+var valueOfAccessed = 0;
+var thisVal = {
+  get [Symbol.toPrimitive]() {
+    toPrimitiveAccessed += 1;
+    return function() { return ' 42'; };
+  },
+  get toString() {
+    toStringAccessed += 1;
+    return function() { return ''; };
+  },
+  get valueOf() {
+    valueOfAccessed += 1;
+    return function() { return ''; };
+  },
+};
+
+// Test that thisVal[Symbol.toPrimitive] has been called.
+
+var result = String.prototype.trimStart.call(thisVal);
+
+assert.sameValue(
+  toPrimitiveAccessed,
+  1,
+  'thisVal[Symbol.toPrimitive] expected to have been accessed.'
+);
+assert.sameValue(
+  result,
+  '42',
+  'thisVal[Symbol.toPrimitive] expected to have been called.',
+);
+
+// Test that thisVal.toString and thisVal.valueOf have not been accessedo
+
+assert.sameValue(
+  toStringAccessed,
+  0,
+  'thisVal.toString should not have been accessed.'
+);
+assert.sameValue(
+  valueOfAccessed,
+  0,
+  'thisVal.valueOf should not have been accessed.'
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-toprimitive-returns-object-err.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+    Abrupt completion when Symbol.toPrimitive returns an object
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If arguement is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+   ...
+features: [string-trimming, String.prototype.trimStart, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: function() {
+    return {};
+  },
+};
+
+assert.throws(TypeError, function() {
+  String.prototype.trimStart.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-tostring-call-err.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  Abrupt completion when getting toString method
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      a. Let method be ? Get(O, name).
+features: [string-trimming, String.prototype.trimStart, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  get toString() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimStart.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-tostring-meth-err.js
@@ -0,0 +1,55 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  Abrupt completion when toString called and abrupt completes.
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      a. Let method be ? Get(O, name).
+      b. If IsCallable(method) is true, then
+        i. Let result be ? Call(method, O).
+features: [string-trimming, String.prototype.trimStart, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  toString: function() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimStart.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-tostring-meth-priority.js
@@ -0,0 +1,95 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  Priority of toString when converting object to string for trimming
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      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.
+   ...
+features: [string-trimming, String.prototype.trimStart, Symbol.toPrimitive]
+---*/
+
+var toPrimitiveAccessed = 0;
+var toStringAccessed = 0;
+var valueOfAccessed = 0;
+var thisVal = {
+  get [Symbol.toPrimitive]() {
+    toPrimitiveAccessed +=1;
+    return undefined;
+  },
+  get toString() {
+    toStringAccessed += 1;
+    return function() { return ' 42'; };
+  },
+  get valueOf() {
+    valueOfAccessed += 1;
+    return function() { return ''; };
+  },
+};
+
+// Test that toString is called when Symbol.toPrimitive is undefined.
+
+var result = String.prototype.trimStart.call(thisVal)
+
+assert.sameValue(
+  toPrimitiveAccessed,
+  1,
+  'thisVal.toString expected to have been accessed.'
+);
+assert.sameValue(
+  result,
+  '42',
+  'thisVal.toString expected to have been called.',
+);
+
+// Test that thisVal[toPrimitive] has been accessed.
+
+assert.sameValue(
+  toPrimitiveAccessed,
+  1,
+  'thisVal[Symbol.toPrimitive should have been accessed.'
+);
+
+// Test that thisVal.valueOf has not been accessed.
+
+assert.sameValue(
+  valueOfAccessed,
+  0,
+  'thisVal.valueOf should not have been accessed.'
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-tostring-returns-object-err.js
@@ -0,0 +1,58 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  Abrupt completion when toString called and returns an object
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      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]
+---*/
+
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  toString: function() {
+    return {};
+  },
+};
+
+assert.throws(TypeError, function() {
+  String.prototype.trimStart.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-valueof-call-err.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  Abrupt completion when getting valueOf method
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      a. Let method be ? Get(O, name).
+features: [string-trimming, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  toString: undefined,
+  get valueOf() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimStart.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-valueof-meth-err.js
@@ -0,0 +1,56 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  Abrupt completion when valueOf called and abrupt completes.
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      a. Let method be ? Get(O, name).
+      b. If IsCallable(method) is true, then
+        i. Let result be ? Call(method, O).
+features: [string-trimming, String.prototype.trimStart, Symbol.toPrimitive]
+---*/
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  toString: undefined,
+  valueOf: function() {
+    throw new Test262Error();
+  },
+};
+
+assert.throws(Test262Error, function() {
+  String.prototype.trimStart.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-valueof-meth-priority.js
@@ -0,0 +1,93 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  Priority of valueOf when converting object to string for trimming
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      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.
+   ...
+features: [string-trimming, String.prototype.trimStart, Symbol.toPrimitive]
+---*/
+
+var toPrimitiveAccessed = 0;
+var toStringAccessed = 0;
+var valueOfAccessed = 0;
+var thisVal = {
+  get [Symbol.toPrimitive]() {
+    toPrimitiveAccessed += 1;
+    return undefined;
+  },
+  get toString() {
+    toStringAccessed += 1;
+    return undefined;
+  },
+  get valueOf() {
+    valueOfAccessed += 1;
+    return function() { return ' 42'; };
+  },
+};
+
+// Test that valueOf is called when Symbol.toPrimitive and toString are both
+// undefined.
+
+var result = String.prototype.trimStart.call(thisVal);
+
+assert.sameValue(
+  valueOfAccessed,
+  1,
+  'thisVal.toString expected to have been accessed.'
+);
+assert.sameValue(
+  result,
+  '42',
+  'thisVal.valueOf expected to have been called.',
+);
+
+// Test that thisVal[toPrimitive] and thisVal.toString has been accessed.
+
+assert.sameValue(
+  toPrimitiveAccessed,
+  1,
+  'thisVal[Symbol.toPrimitive should have been accessed.'
+);
+assert.sameValue(
+  toStringAccessed,
+  1,
+  'thisVal[Symbol.toString should have been accessed.'
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-object-valueof-returns-object-err.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: >
+  Abrupt completion when valueOf called and returns an object
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  1. Let str be ? RequireObjectCoercible(string).
+  2. Let S be ? ToString(str).
+   ...
+
+  ToString ( argument )
+  If argument is Object:
+    1. Let primValue be ? ToPrimitive(argument, hint String).
+   ...
+
+  ToPrimitive ( input [, PreferredType ])
+   ...
+    b. Else if PreferredType is hint String, let hint be "string".
+   ...
+    d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive)
+    e. If exoticToPrim is not undefined, then
+      i. Let result be ? Call(exoticToPrim, input, « hint »).
+      ii. If Type(result) is not Object, return result.
+      iii. Throw a TypeError exception.
+    f. If hint is "default", set hint to "number".
+    g. Return ? OrdinaryToPrimitive(input, hint).
+   ...
+
+  OrdinaryToPrimitive( O, hint )
+   ...
+    3. If hint is "string", then
+      a. Let methodNames be « "toString", "valueOf" ».
+   ...
+    5. For each name in methodNames in List order, do
+      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]
+---*/
+
+
+var thisVal = {
+  [Symbol.toPrimitive]: undefined,
+  toString: undefined,
+  valueOf: function() {
+    return {};
+  },
+};
+
+assert.throws(TypeError, function() {
+  String.prototype.trimStart.call(thisVal);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-symbol-typeerror.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: Type error when "this" value is a Symbol
+info: |
+  Runtime Semantics: TrimString ( string, where )
+  2. Let S be ? ToString(str).
+
+  ToString ( argument )
+  Argument Type: Symbol
+  Result: Throw a TypeError exception
+features: [string-trimming, String.prototype.trimStart]
+---*/
+
+var trimStart = String.prototype.trimStart;
+var symbol = Symbol();
+
+assert.throws(
+  TypeError,
+  function() { trimStart.call(symbol); },
+  'String.prototype.trimStart.call(Symbol())'
+);
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/String/prototype/trimStart/this-value-whitespace.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2017 Valerie Young.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.trimStart
+description: TrimStart removes all whitespace from the start of a string.
+info: |
+  Runtime Symantics: TrimString ( string, where )
+  ...
+  3. If where is "start", let T be a String value that is a copy of S with
+     trailing white space removed.
+  ...
+
+  The definition of white space is the union of WhiteSpace and LineTerminator.
+  When determining whether a Unicode code point is in Unicode general category
+  “Zs”, code unit sequences are interpreted as UTF-16 encoded code point
+  sequences as specified in 6.1.4.
+
+features: [string-trimming, String.prototype.trimStart]
+---*/
+
+var trimStart = String.prototype.trimStart;
+
+// A string of all valid WhiteSpace Unicode code points
+var wspc = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
+
+var str = wspc + 'a' + wspc + 'b' + wspc;
+var expected = 'a' + wspc + 'b' + wspc;
+
+assert.sameValue(
+  trimStart.call(str),
+  expected,
+);
+
+reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/StringIteratorPrototype/next/next-missing-internal-slots.js
+++ b/js/src/tests/test262/built-ins/StringIteratorPrototype/next/next-missing-internal-slots.js
@@ -1,15 +1,21 @@
 // Copyright (C) 2014 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-es6id: 21.1.5.2.1 S 3
+esid: sec-properties-of-string-iterator-instances
 description: >
     If the `this` value does not have all of the internal slots of an String
     Iterator Instance (21.1.5.3), throw a `TypeError` exception.
+info: |
+  ...
+  If O does not have all of the internal slots of a String Iterator Instance (21.1.5.3),
+  throw a TypeError exception.
+  ...
+
 features: [Symbol.iterator]
 ---*/
 
 var iterator = ''[Symbol.iterator]();
 var object = Object.create(iterator);
 
 assert.throws(TypeError, function() {
   object.next();
--- a/js/src/tests/test262/built-ins/Symbol/species/builtin-getter-name.js
+++ b/js/src/tests/test262/built-ins/Symbol/species/builtin-getter-name.js
@@ -2,18 +2,16 @@
 // See LICENSE for details.
 
 /*---
 info: |
  ES6 spec 'get [Symbol.species]'
 es6id: 21.2.4.2, 22.1.2.5, 22.2.2.4, 23.1.2.2, 23.2.2.2
 author: Sam Mikes
 description: Symbol.species getters have defined names
-includes: 
-  - propertyHelper.js
 features: [Symbol.species]
 ---*/
 
 function getGetterName(obj, name) {
     var getter = Object.getOwnPropertyDescriptor(obj, Symbol.species).get;
     return getter && getter.name;
 }
 
--- a/js/src/tests/test262/built-ins/Symbol/species/subclassing.js
+++ b/js/src/tests/test262/built-ins/Symbol/species/subclassing.js
@@ -1,18 +1,16 @@
 // Copyright 2015 Cubane Canada, Inc.  All rights reserved.
 // See LICENSE for details.
 
 /*---
 info: |
  Symbol.species is retained on subclassing
 author: Sam Mikes
 description: Symbol.species is retained on subclassing
-includes:
-  - propertyHelper.js
 features: [Symbol.species]
 ---*/
 
 class MyRegExp extends RegExp {
 };
 
 assert.sameValue(MyRegExp[Symbol.species], MyRegExp);
 
--- a/js/src/tests/test262/built-ins/TypedArrays/internals/Get/indexed-value-sab.js
+++ b/js/src/tests/test262/built-ins/TypedArrays/internals/Get/indexed-value-sab.js
@@ -1,17 +1,18 @@
+// |reftest| skip-if(!this.hasOwnProperty('SharedArrayBuffer')) -- SharedArrayBuffer is not enabled unconditionally
 // Copyright (C) 2016 the V8 project authors. All rights reserved.
 // Copyright (C) 2017 Mozilla Corporation. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-integer-indexed-exotic-objects-get-p-receiver
 description: >
   Return value from valid numeric index, with SharedArrayBuffer
 includes: [testTypedArray.js]
-features: [TypedArray]
+features: [TypedArray, SharedArrayBuffer]
 ---*/
 
 var proto = TypedArray.prototype;
 var throwDesc = {
   get: function() {
     throw new Test262Error("OrdinaryGet was called! Ref: 9.1.8.1 3.c");
   }
 };
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrays/typedarray-arg-detached-when-species-retrieved-different-type.js
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-typedarray-typedarray
+description: >
+    When a TypedArray is created from another TypedArray with a different element-type
+    and SpeciesConstructor detaches the source buffer, AllocateArrayBuffer is still
+    executed.
+info: |
+    22.2.4.3 TypedArray ( typedArray )
+
+    ...
+    16. If IsSharedArrayBuffer(srcData) is false, then
+        a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%).
+    ...
+    18. If SameValue(elementType, srcType) is true, then
+        ...
+    19. Else,
+        a. Let data be ? AllocateArrayBuffer(bufferConstructor, byteLength).
+        b. If IsDetachedBuffer(srcData) is true, throw a TypeError exception.
+    ...
+
+    24.1.1.1 AllocateArrayBuffer ( constructor, byteLength )
+
+    1. Let obj be ? OrdinaryCreateFromConstructor(constructor, "%ArrayBufferPrototype%",
+       « [[ArrayBufferData]], [[ArrayBufferByteLength]] »).
+    ...
+includes: [testTypedArray.js, detachArrayBuffer.js]
+features: [TypedArray, Symbol.species]
+---*/
+
+testWithTypedArrayConstructors(function(TA) {
+    var speciesCallCount = 0;
+    var bufferConstructor = Object.defineProperty({}, Symbol.species, {
+        get: function() {
+            speciesCallCount += 1;
+            $DETACHBUFFER(ta.buffer);
+            return speciesConstructor;
+        }
+    });
+
+    var prototypeCallCount = 0;
+    var speciesConstructor = Object.defineProperty(function(){}.bind(), "prototype", {
+        get: function() {
+            prototypeCallCount += 1;
+            return null;
+        }
+    });
+
+    var ta = new TA(0);
+    ta.buffer.constructor = bufferConstructor;
+
+    assert.throws(TypeError, function() {
+        var targetType = TA !== Int32Array ? Int32Array : Uint32Array;
+        new targetType(ta);
+    }, "TypeError thrown for detached source buffer");
+
+    assert.sameValue(speciesCallCount, 1, "@@species getter called once");
+    assert.sameValue(prototypeCallCount, 1, "prototype getter called once");
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrays/typedarray-arg-detached-when-species-retrieved-same-type.js
@@ -0,0 +1,66 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-typedarray-typedarray
+description: >
+    When a TypedArray is created from another TypedArray with the same element-type
+    and SpeciesConstructor detaches the source buffer, AllocateArrayBuffer is still
+    executed.
+info: |
+    22.2.4.3 TypedArray ( typedArray )
+
+    ...
+    16. If IsSharedArrayBuffer(srcData) is false, then
+        a. Let bufferConstructor be ? SpeciesConstructor(srcData, %ArrayBuffer%).
+    ...
+    18. If SameValue(elementType, srcType) is true, then
+        a. Let data be ? CloneArrayBuffer(srcData, srcByteOffset, byteLength, bufferConstructor).
+    ...
+
+    24.1.1.4 CloneArrayBuffer ( srcBuffer, srcByteOffset, srcLength, cloneConstructor )
+
+    ...
+    3. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, srcLength).
+    4. If IsDetachedBuffer(srcBuffer) is true, throw a TypeError exception.
+    ...
+
+    24.1.1.1 AllocateArrayBuffer ( constructor, byteLength )
+
+    1. Let obj be ? OrdinaryCreateFromConstructor(constructor, "%ArrayBufferPrototype%",
+       « [[ArrayBufferData]], [[ArrayBufferByteLength]] »).
+    ...
+includes: [testTypedArray.js, detachArrayBuffer.js]
+features: [TypedArray, Symbol.species]
+---*/
+
+testWithTypedArrayConstructors(function(TA) {
+    var speciesCallCount = 0;
+    var bufferConstructor = Object.defineProperty({}, Symbol.species, {
+        get: function() {
+            speciesCallCount += 1;
+            $DETACHBUFFER(ta.buffer);
+            return speciesConstructor;
+        }
+    });
+
+    var prototypeCallCount = 0;
+    var speciesConstructor = Object.defineProperty(function(){}.bind(), "prototype", {
+        get: function() {
+            prototypeCallCount += 1;
+            return null;
+        }
+    });
+
+    var ta = new TA(0);
+    ta.buffer.constructor = bufferConstructor;
+
+    assert.throws(TypeError, function() {
+        new TA(ta);
+    }, "TypeError thrown for detached source buffer");
+
+    assert.sameValue(speciesCallCount, 1, "@@species getter called once");
+    assert.sameValue(prototypeCallCount, 1, "prototype getter called once");
+});
+
+reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/global/global-object.js
+++ b/js/src/tests/test262/built-ins/global/global-object.js
@@ -1,16 +1,15 @@
 // Copyright (C) 2016 Jordan Harband. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: sec-other-properties-of-the-global-object-global
 description: "'global' should be the global object"
 author: Jordan Harband
-includes: [propertyHelper.js]
 ---*/
 
 assert.sameValue(this, global);
 assert.sameValue(global.global, global);
 
 assert.sameValue(Array, global.Array);
 assert.sameValue(Boolean, global.Boolean);
 assert.sameValue(Date, global.Date);
--- a/js/src/tests/test262/harness/shell.js
+++ b/js/src/tests/test262/harness/shell.js
@@ -513,16 +513,19 @@ var date_1899_end = -2208988800001;
 var date_1900_start = -2208988800000;
 var date_1969_end = -1;
 var date_1970_start = 0;
 var date_1999_end = 946684799999;
 var date_2000_start = 946684800000;
 var date_2099_end = 4102444799999;
 var date_2100_start = 4102444800000;
 
+var start_of_time = -8.64e15;
+var end_of_time = 8.64e15;
+
 // file: decimalToHexString.js
 // Copyright (C) 2017 André Bargull. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 description: |
     Collection of functions used to assert the correctness of various encoding operations.
 ---*/
 
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/intl402/DateTimeFormat/prototype/format/date-constructor-not-called.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-partitiondatetimepattern
+description: |
+  The Date constructor is not called to convert the input value.
+info: >
+  12.1.5 DateTime Format Functions
+
+  ...
+  3. If date is not provided or is undefined, then
+    ...
+  4. Else,
+    a. Let x be ? ToNumber(date).
+  5. Return FormatDateTime(dtf, x).
+
+  12.1.6 PartitionDateTimePattern ( dateTimeFormat, x )
+
+  1. Let x be TimeClip(x).
+  2. If x is NaN, throw a RangeError exception.
+  3. ...
+---*/
+
+var dtf = new Intl.DateTimeFormat();
+
+var dateTimeString = "2017-11-10T14:09:00.000Z";
+
+// |dateTimeString| is valid ISO-8601 style date/time string.
+assert.notSameValue(new Date(dateTimeString), NaN);
+
+// Ensure string input values are not converted to time values by calling the
+// Date constructor.
+assert.throws(RangeError, function() {
+    dtf.format(dateTimeString);
+});
+
+reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/DateTimeFormat/prototype/format/shell.js
+++ b/js/src/tests/test262/intl402/DateTimeFormat/prototype/format/shell.js
@@ -1,8 +1,28 @@
+// file: dateConstants.js
+// Copyright (C) 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+    Collection of date-centric values
+---*/
+
+var date_1899_end = -2208988800001;
+var date_1900_start = -2208988800000;
+var date_1969_end = -1;
+var date_1970_start = 0;
+var date_1999_end = 946684799999;
+var date_2000_start = 946684800000;
+var date_2099_end = 4102444799999;
+var date_2100_start = 4102444800000;
+
+var start_of_time = -8.64e15;
+var end_of_time = 8.64e15;
+
 // file: isConstructor.js
 // Copyright (C) 2017 André Bargull. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 description: |
     Test if a given function is a constructor function.
 ---*/
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/intl402/DateTimeFormat/prototype/format/time-clip-near-time-boundaries.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-partitiondatetimepattern
+description: |
+  TimeClip is applied when calling Intl.DateTimeFormat.prototype.format.
+info: >
+  12.1.6 PartitionDateTimePattern ( dateTimeFormat, x )
+
+  1. Let x be TimeClip(x).
+  2. If x is NaN, throw a RangeError exception.
+  3. ...
+
+  20.3.1.15 TimeClip ( time )
+  ...
+  2. If abs(time) > 8.64 × 10^15, return NaN.
+  ...
+
+includes: [dateConstants.js]
+---*/
+
+var dtf = new Intl.DateTimeFormat();
+
+// Test values near the start of the ECMAScript time range.
+assert.throws(RangeError, function() {
+    dtf.format(start_of_time - 1);
+});
+assert.sameValue(typeof dtf.format(start_of_time), "string");
+assert.sameValue(typeof dtf.format(start_of_time + 1), "string");
+
+// Test values near the end of the ECMAScript time range.
+assert.sameValue(typeof dtf.format(end_of_time - 1), "string");
+assert.sameValue(typeof dtf.format(end_of_time), "string");
+assert.throws(RangeError, function() {
+    dtf.format(end_of_time + 1);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/intl402/DateTimeFormat/prototype/format/time-clip-to-integer.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-partitiondatetimepattern
+description: |
+  TimeClip applies ToInteger on its input value.
+info: >
+  12.1.6 PartitionDateTimePattern ( dateTimeFormat, x )
+
+  1. Let x be TimeClip(x).
+  2. ...
+
+  20.3.1.15 TimeClip ( time )
+  ...
+  3. Let clippedTime be ! ToInteger(time).
+  4. If clippedTime is -0, set clippedTime to +0.
+  5. Return clippedTime.
+---*/
+
+// Switch to a time format instead of using DateTimeFormat's default date-only format.
+var dtf = new Intl.DateTimeFormat(undefined, {
+    hour: "numeric", minute: "numeric", second: "numeric"
+});
+
+var expected = dtf.format(0);
+
+assert.sameValue(dtf.format(-0.9), expected, "format(-0.9)");
+assert.sameValue(dtf.format(-0.5), expected, "format(-0.5)");
+assert.sameValue(dtf.format(-0.1), expected, "format(-0.1)");
+assert.sameValue(dtf.format(-Number.MIN_VALUE), expected, "format(-Number.MIN_VALUE)");
+assert.sameValue(dtf.format(-0), expected, "format(-0)");
+assert.sameValue(dtf.format(+0), expected, "format(+0)");
+assert.sameValue(dtf.format(Number.MIN_VALUE), expected, "format(Number.MIN_VALUE)");
+assert.sameValue(dtf.format(0.1), expected, "format(0.1)");
+assert.sameValue(dtf.format(0.5), expected, "format(0.5)");
+assert.sameValue(dtf.format(0.9), expected, "format(0.9)");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/intl402/DateTimeFormat/prototype/formatToParts/date-constructor-not-called.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-partitiondatetimepattern
+description: |
+  The Date constructor is not called to convert the input value.
+info: >
+  12.4.4 Intl.DateTimeFormat.prototype.formatToParts ( date )
+
+  ...
+  4. If date is undefined, then
+    ...
+  5. Else,
+    a. Let x be ? ToNumber(date).
+  5. Return ? FormatDateTimeToParts(dtf, x).
+
+  12.1.6 PartitionDateTimePattern ( dateTimeFormat, x )
+
+  1. Let x be TimeClip(x).
+  2. If x is NaN, throw a RangeError exception.
+  3. ...
+---*/
+
+var dtf = new Intl.DateTimeFormat();
+
+var dateTimeString = "2017-11-10T14:09:00.000Z";
+
+// |dateTimeString| is valid ISO-8601 style date/time string.
+assert.notSameValue(new Date(dateTimeString), NaN);
+
+// Ensure string input values are not converted to time values by calling the
+// Date constructor.
+assert.throws(RangeError, function() {
+    dtf.formatToParts(dateTimeString);
+});
+
+reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/DateTimeFormat/prototype/formatToParts/shell.js
+++ b/js/src/tests/test262/intl402/DateTimeFormat/prototype/formatToParts/shell.js
@@ -0,0 +1,19 @@
+// file: dateConstants.js
+// Copyright (C) 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+    Collection of date-centric values
+---*/
+
+var date_1899_end = -2208988800001;
+var date_1900_start = -2208988800000;
+var date_1969_end = -1;
+var date_1970_start = 0;
+var date_1999_end = 946684799999;
+var date_2000_start = 946684800000;
+var date_2099_end = 4102444799999;
+var date_2100_start = 4102444800000;
+
+var start_of_time = -8.64e15;
+var end_of_time = 8.64e15;
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/intl402/DateTimeFormat/prototype/formatToParts/time-clip-near-time-boundaries.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-partitiondatetimepattern
+description: |
+  TimeClip is applied when calling Intl.DateTimeFormat.prototype.formatToParts.
+info: >
+  12.1.6 PartitionDateTimePattern ( dateTimeFormat, x )
+
+  1. Let x be TimeClip(x).
+  2. If x is NaN, throw a RangeError exception.
+  3. ...
+
+  20.3.1.15 TimeClip ( time )
+  ...
+  2. If abs(time) > 8.64 × 10^15, return NaN.
+  ...
+
+includes: [dateConstants.js]
+---*/
+
+var dtf = new Intl.DateTimeFormat();
+
+// Test values near the start of the ECMAScript time range.
+assert.throws(RangeError, function() {
+    dtf.formatToParts(start_of_time - 1);
+});
+assert.sameValue(typeof dtf.formatToParts(start_of_time), "object");
+assert.sameValue(typeof dtf.formatToParts(start_of_time + 1), "object");
+
+// Test values near the end of the ECMAScript time range.
+assert.sameValue(typeof dtf.formatToParts(end_of_time - 1), "object");
+assert.sameValue(typeof dtf.formatToParts(end_of_time), "object");
+assert.throws(RangeError, function() {
+    dtf.formatToParts(end_of_time + 1);
+});
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/intl402/DateTimeFormat/prototype/formatToParts/time-clip-to-integer.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-partitiondatetimepattern
+description: |
+  TimeClip applies ToInteger on its input value.
+info: >
+  12.1.6 PartitionDateTimePattern ( dateTimeFormat, x )
+
+  1. Let x be TimeClip(x).
+  2. ...
+
+  20.3.1.15 TimeClip ( time )
+  ...
+  3. Let clippedTime be ! ToInteger(time).
+  4. If clippedTime is -0, set clippedTime to +0.
+  5. Return clippedTime.
+---*/
+
+// Switch to a time format instead of using DateTimeFormat's default date-only format.
+var dtf = new Intl.DateTimeFormat(undefined, {
+    hour: "numeric", minute: "numeric", second: "numeric"
+});
+
+function formatAsString(dtf, time) {
+    return dtf.formatToParts(time).map(part => part.value).join("");
+}
+
+var expected = formatAsString(dtf, 0);
+
+assert.sameValue(formatAsString(dtf, -0.9), expected, "formatToParts(-0.9)");
+assert.sameValue(formatAsString(dtf, -0.5), expected, "formatToParts(-0.5)");
+assert.sameValue(formatAsString(dtf, -0.1), expected, "formatToParts(-0.1)");
+assert.sameValue(formatAsString(dtf, -Number.MIN_VALUE), expected, "formatToParts(-Number.MIN_VALUE)");
+assert.sameValue(formatAsString(dtf, -0), expected, "formatToParts(-0)");
+assert.sameValue(formatAsString(dtf, +0), expected, "formatToParts(+0)");
+assert.sameValue(formatAsString(dtf, Number.MIN_VALUE), expected, "formatToParts(Number.MIN_VALUE)");
+assert.sameValue(formatAsString(dtf, 0.1), expected, "formatToParts(0.1)");
+assert.sameValue(formatAsString(dtf, 0.5), expected, "formatToParts(0.5)");
+assert.sameValue(formatAsString(dtf, 0.9), expected, "formatToParts(0.9)");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/intl402/DateTimeFormat/prototype/resolvedOptions/resolved-locale-with-hc-unicode.js
@@ -0,0 +1,89 @@
+// Copyright 2018 André Bargull. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-Intl.DateTimeFormat.prototype.resolvedOptions
+description: >
+  The resolved locale doesn't include a hc Unicode extension value if the
+  hour12 or hourCycle option is also present.
+info: |
+  12.1.1 InitializeDateTimeFormat(dateTimeFormat, locales, options)
+    ...
+    6. Let hour12 be ? GetOption(options, "hour12", "boolean", undefined, undefined).
+    7. Let hourCycle be ? GetOption(options, "hourCycle", "string", « "h11", "h12", "h23", "h24" », undefined).
+    8. If hour12 is not undefined, then
+      a. Let hourCycle be null.
+    9. Set opt.[[hc]] to hourCycle.
+    ...
+
+  9.2.6 ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData)
+    ...
+    8. For each element key of relevantExtensionKeys in List order, do
+      ...
+      i. If options has a field [[<key>]], then
+        i. Let optionsValue be options.[[<key>]].
+        ii. Assert: Type(optionsValue) is either String, Undefined, or Null.
+        iii. If keyLocaleData contains optionsValue, then
+          1. If SameValue(optionsValue, value) is false, then
+            a. Let value be optionsValue.
+            b. Let supportedExtensionAddition be "".
+      ...
+---*/
+
+var defaultLocale = new Intl.DateTimeFormat().resolvedOptions().locale;
+var defaultLocaleWithHourCycle = defaultLocale + "-u-hc-h11";
+
+function assertLocale(locale, expectedLocale, options, message) {
+  var resolved = new Intl.DateTimeFormat(locale, {
+    hour: "2-digit",
+    hour12: options.hour12,
+    hourCycle: options.hourCycle,
+  }).resolvedOptions();
+  assert.sameValue(resolved.locale, expectedLocale, message + " (With hour option.)");
+
+  // Also test the case when no hour option is present at all.
+  // The resolved options don't include hour12 and hourCycle if the date-time
+  // formatter doesn't include an hour option. This restriction doesn't apply
+  // to the hc Unicode extension value.
+  resolved = new Intl.DateTimeFormat(locale, {
+    hour12: options.hour12,
+    hourCycle: options.hourCycle,
+  }).resolvedOptions();
+  assert.sameValue(resolved.locale, expectedLocale, message + " (Without hour option.)");
+}
+
+assertLocale(defaultLocaleWithHourCycle, defaultLocale, {
+  hour12: false,
+  hourCycle: "h23",
+}, "hour12 and hourCycle options and hc Unicode extension value are present.");
+
+assertLocale(defaultLocaleWithHourCycle, defaultLocale, {
+  hour12: false,
+}, "hour12 option and hc Unicode extension value are present.");
+
+assertLocale(defaultLocaleWithHourCycle, defaultLocale, {
+  hourCycle: "h23",
+}, "hourCycle option and hc Unicode extension value are present.");
+
+assertLocale(defaultLocaleWithHourCycle, defaultLocaleWithHourCycle, {
+}, "Only hc Unicode extension value is present.");
+
+// And make sure the hc Unicode extension doesn't get added if it's not present
+// in the requested locale.
+assertLocale(defaultLocale, defaultLocale, {
+  hour12: false,
+  hourCycle: "h23",
+}, "hour12 and hourCycle options are present, but no hc Unicode extension value.");
+
+assertLocale(defaultLocale, defaultLocale, {
+  hour12: false,
+}, "hourCycle option is present, but no hc Unicode extension value.");
+
+assertLocale(defaultLocale, defaultLocale, {
+  hourCycle: "h23",
+}, "hourCycle option is present, but no hc Unicode extension value.");
+
+assertLocale(defaultLocale, defaultLocale, {
+}, "No options are present and no hc Unicode extension value.");
+
+reportCompare(0, 0);
--- a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/default-parameter.js
+++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/default-parameter.js
@@ -1,12 +1,12 @@
 // Copyright (C) 2017 Josh Wolfe. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-esid: #sec-intl.numberformat.prototype.formattoparts
+esid: sec-intl.numberformat.prototype.formattoparts
 description: Intl.NumberFormat.prototype.formatToParts called with no parameters
 info: |
   Intl.NumberFormat.prototype.formatToParts ([ value ])
 
   3. If value is not provided, let value be undefined.
 ---*/
 
 var nf = new Intl.NumberFormat();
--- a/js/src/tests/test262/language/asi/S7.9.2_A1_T1.js
+++ b/js/src/tests/test262/language/asi/S7.9.2_A1_T1.js
@@ -1,14 +1,14 @@
 // |reftest| error:SyntaxError
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-info: Check examples for automatic semicolon insertion from the Standart
+info: Check examples for automatic semicolon insertion from the standard
 es5id: 7.9.2_A1_T1
 description: "{ 1 2 } 3 is not a valid sentence in the ECMAScript grammar"
 negative:
   phase: parse
   type: SyntaxError
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
--- a/js/src/tests/test262/language/asi/S7.9.2_A1_T2.js
+++ b/js/src/tests/test262/language/asi/S7.9.2_A1_T2.js
@@ -1,13 +1,13 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-info: Check examples for automatic semicolon insertion from the Standart
+info: Check examples for automatic semicolon insertion from the standard
 es5id: 7.9.2_A1_T2
 description: >
     { 1 \n 2 } 3 is a valid sentence in the ECMAScript grammar with
     automatic semicolon insertion
 ---*/
 
 //CHECK#1
 { 1
--- a/js/src/tests/test262/language/asi/S7.9.2_A1_T3.js
+++ b/js/src/tests/test262/language/asi/S7.9.2_A1_T3.js
@@ -1,14 +1,14 @@
 // |reftest| error:SyntaxError
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-info: Check examples for automatic semicolon insertion from the Standart
+info: Check examples for automatic semicolon insertion from the standard
 es5id: 7.9.2_A1_T3
 description: for( a ; b \n ) is not a valid sentence in the ECMAScript grammar
 negative:
   phase: parse
   type: SyntaxError
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
--- a/js/src/tests/test262/language/asi/S7.9.2_A1_T4.js
+++ b/js/src/tests/test262/language/asi/S7.9.2_A1_T4.js
@@ -1,13 +1,13 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-info: Check examples for automatic semicolon insertion from the Standart
+info: Check examples for automatic semicolon insertion from the standard
 es5id: 7.9.2_A1_T4
 description: >
     return \n a+b is a valid sentence in the ECMAScript grammar  with
     automatic semicolon insertion, but returned undefined
 ---*/
 
 //CHECK#1
 var a=1,b=2;
--- a/js/src/tests/test262/language/asi/S7.9.2_A1_T5.js
+++ b/js/src/tests/test262/language/asi/S7.9.2_A1_T5.js
@@ -1,13 +1,13 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-info: Check examples for automatic semicolon insertion from the Standart
+info: Check examples for automatic semicolon insertion from the standard
 es5id: 7.9.2_A1_T5
 description: >
     a=b \n ++c is a valid sentence in the ECMAScript grammar  with
     automatic semicolon insertion, but a!==b++c
 ---*/
 
 //CHECK#1
 var a=1,b=2,c=3;
--- a/js/src/tests/test262/language/asi/S7.9.2_A1_T6.js
+++ b/js/src/tests/test262/language/asi/S7.9.2_A1_T6.js
@@ -1,14 +1,14 @@
 // |reftest| error:SyntaxError
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-info: Check examples for automatic semicolon insertion from the Standart
+info: Check examples for automatic semicolon insertion from the standard
 es5id: 7.9.2_A1_T6
 description: >
     if(a>b) \n else c=d is not a valid sentence in the ECMAScript
     grammar
 negative:
   phase: parse
   type: SyntaxError
 ---*/
--- a/js/src/tests/test262/language/asi/S7.9.2_A1_T7.js
+++ b/js/src/tests/test262/language/asi/S7.9.2_A1_T7.js
@@ -1,13 +1,13 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-info: Check examples for automatic semicolon insertion from the Standart
+info: Check examples for automatic semicolon insertion from the standard
 es5id: 7.9.2_A1_T7
 description: >
     a=b+c \n (d+e).print() is a valid sentence in the ECMAScript
     grammar,  and automatic semicolon insertion not run
 ---*/
 
 //CHECK#1
 function c (a){
--- a/js/src/tests/test262/language/comments/multi-line-html-close-extra.js
+++ b/js/src/tests/test262/language/comments/multi-line-html-close-extra.js
@@ -1,14 +1,13 @@
 // |reftest| error:SyntaxError
 // Copyright (C) 2016 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-html-like-comments
-esid: sec-html-like-comments
 description: >
     Arbitrary character sequence not permitted before HTMLCloseComment token
 info: |
     Comment ::
       MultiLineComment
       SingleLineComment
       SingleLineHTMLOpenComment
       SingleLineHTMLCloseComment
--- a/js/src/tests/test262/language/comments/single-line-html-close-without-lt.js
+++ b/js/src/tests/test262/language/comments/single-line-html-close-without-lt.js
@@ -1,14 +1,13 @@
 // |reftest| error:SyntaxError
 // Copyright (C) 2016 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-html-like-comments
-esid: sec-html-like-comments
 description: An HTMLCloseComment must be preceeded by a LineTerminator
 info: |
     Comment ::
       MultiLineComment
       SingleLineComment
       SingleLineHTMLOpenComment
       SingleLineHTMLCloseComment
       SingleLineDelimitedComment
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/addition/bigint-and-number.js
@@ -0,0 +1,36 @@
+// |reftest| skip -- BigInt is not supported
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-addition-operator-plus-runtime-semantics-evaluation
+description: Mixing BigInt and Number produces a TypeError for addition operator
+features: [BigInt]
+info: |
+  Let lprim be ? ToPrimitive(lval).
+  Let rprim be ? ToPrimitive(rval).
+  ...
+  Let lnum be ? ToNumeric(lprim)
+  Let rnum be ? ToNumeric(rprim)
+  If Type(lnum) does not equal Type(rnum), throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() { 1n + 1; }, "1n + 1 throws TypeError");
+assert.throws(TypeError, function() { 1 + 1n; }, "1 + 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) + 1; }, "Object(1n) + 1 throws TypeError");
+assert.throws(TypeError, function() { 1 + Object(1n); }, "1 + Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n + Object(1); }, "1n + Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) + 1n; }, "Object(1) + 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) + Object(1); }, "Object(1n) + Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) + Object(1n); }, "Object(1) + Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n + NaN; }, "1n + NaN throws TypeError");
+assert.throws(TypeError, function() { NaN + 1n; }, "NaN + 1n throws TypeError");
+assert.throws(TypeError, function() { 1n + Infinity; }, "1n + Infinity throws TypeError");
+assert.throws(TypeError, function() { Infinity + 1n; }, "Infinity + 1n throws TypeError");
+assert.throws(TypeError, function() { 1n + true; }, "1n + true throws TypeError");
+assert.throws(TypeError, function() { true + 1n; }, "true + 1n throws TypeError");
+assert.throws(TypeError, function() { 1n + null; }, "1n + null throws TypeError");
+assert.throws(TypeError, function() { null + 1n; }, "null + 1n throws TypeError");
+assert.throws(TypeError, function() { 1n + undefined; }, "1n + undefined throws TypeError");
+assert.throws(TypeError, function() { undefined + 1n; }, "undefined + 1n throws TypeError");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/addition/order-of-evaluation.js
@@ -0,0 +1,142 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-addition-operator-plus-runtime-semantics-evaluation
+description: Type coercion order of operations for addition operator
+features: [Symbol]
+info: |
+  Evaluate lhs
+  Evaluate rhs
+  ToPrimitive(lhs)
+  ToPrimitive(rhs)
+  ToNumeric(lhs)
+  ToNumeric(rhs)
+---*/
+
+function MyError() {}
+var trace;
+
+// ?GetValue(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    throw new MyError();
+  })() + (function() {
+    trace += "2";
+    throw new Test262Error("should not be evaluated");
+  })();
+}, "?GetValue(lhs) throws.");
+assert.sameValue(trace, "1", "?GetValue(lhs) throws.");
+
+// ?GetValue(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })() + (function() {
+    trace += "2";
+    throw new MyError();
+  })();
+}, "?GetValue(rhs) throws.");
+assert.sameValue(trace, "12", "?GetValue(rhs) throws.");
+
+// ?ToPrimive(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new MyError();
+      }
+    };
+  })() + (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToPrimive(lhs) throws.");
+assert.sameValue(trace, "123", "?ToPrimive(lhs) throws.");
+
+// ?ToPrimive(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() + (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new MyError();
+      }
+    };
+  })();
+}, "?ToPrimive(rhs) throws.");
+assert.sameValue(trace, "1234", "?ToPrimive(rhs) throws.");
+
+// ?ToPrimive(rhs) is called before ?ToNumeric(lhs).
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return Symbol("1");
+      }
+    };
+  })() + (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new MyError();
+      }
+    };
+  })();
+}, "?ToPrimive(rhs) is called before ?ToNumeric(lhs).");
+assert.sameValue(trace, "1234", "?ToPrimive(rhs) is called before ?ToNumeric(lhs).");
+
+// GetValue(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() + (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        return Symbol("1");
+      }
+    };
+  })();
+}, "GetValue(lhs) throws.");
+assert.sameValue(trace, "1234", "GetValue(lhs) throws.");
+
+reportCompare(0, 0);
--- a/js/src/tests/test262/language/expressions/assignment/id-arguments-strict-strict.js
+++ b/js/src/tests/test262/language/expressions/assignment/id-arguments-strict-strict.js
@@ -3,16 +3,16 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 es5id: 11.13.1-4-30-s
 description: >
   Strict Mode - SyntaxError is thrown if the identifier 'arguments' appears as
   the LeftHandSideExpression (PrimaryExpression) of simple assignment(=).
 negative:
-  phase: early
+  phase: parse
   type: SyntaxError
 flags: [onlyStrict]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
 
 (arguments) = 20;
--- a/js/src/tests/test262/language/expressions/assignment/id-eval-strict-strict.js
+++ b/js/src/tests/test262/language/expressions/assignment/id-eval-strict-strict.js
@@ -3,16 +3,16 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 es5id: 11.13.1-4-30-s
 description: >
   Strict Mode - SyntaxError is thrown if the identifier 'eval' appears as the
   LeftHandSideExpression (PrimaryExpression) of simple assignment(=).
 negative:
-  phase: early
+  phase: parse
   type: SyntaxError
 flags: [onlyStrict]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
 
 (eval) = 20;
--- a/js/src/tests/test262/language/expressions/async-generator/early-errors-expression-formals-contains-await.js
+++ b/js/src/tests/test262/language/expressions/async-generator/early-errors-expression-formals-contains-await.js
@@ -1,15 +1,15 @@
 // |reftest| error:SyntaxError
 // Copyright 2017 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 author: Caitlin Potter <caitp@igalia.com>
-esid: 12.1
+esid: sec-identifiers
 description: >
   `await` is a reserved keyword within async generator function bodies and may
   not be used as the binding identifier of a parameter.
 negative:
   phase: parse
   type: SyntaxError
 features: [async-iteration]
 ---*/
--- a/js/src/tests/test262/language/expressions/async-generator/early-errors-expression-formals-contains-yield.js
+++ b/js/src/tests/test262/language/expressions/async-generator/early-errors-expression-formals-contains-yield.js
@@ -1,15 +1,15 @@
 // |reftest| error:SyntaxError
 // Copyright 2017 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 author: Caitlin Potter <caitp@igalia.com>
-esid: 12.1
+esid: sec-identifiers
 description: >
   `yield` is a reserved keyword within async generator function bodies and may
   not be used as the binding identifier of a parameter.
 negative:
   phase: parse
   type: SyntaxError
 features: [async-iteration]
 ---*/
--- a/js/src/tests/test262/language/expressions/async-generator/early-errors-expression-label-name-await.js
+++ b/js/src/tests/test262/language/expressions/async-generator/early-errors-expression-label-name-await.js
@@ -1,15 +1,15 @@
 // |reftest| error:SyntaxError
 // Copyright 2017 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 author: Caitlin Potter <caitp@igalia.com>
-esid: 12.1.1
+esid: sec-identifiers
 description: >
   `await` is a reserved keyword within async generator function bodies and may
   not be used as a label.
 negative:
   phase: parse
   type: SyntaxError
 features: [async-iteration]
 ---*/
--- a/js/src/tests/test262/language/expressions/async-generator/early-errors-expression-label-name-yield.js
+++ b/js/src/tests/test262/language/expressions/async-generator/early-errors-expression-label-name-yield.js
@@ -1,15 +1,15 @@
 // |reftest| error:SyntaxError
 // Copyright 2017 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 author: Caitlin Potter <caitp@igalia.com>
-esid: 12.1.1
+esid: sec-identifiers
 description: >
   `yield` is a reserved keyword within async generator function bodies and may
   not be used as a label.
 negative:
   phase: parse
   type: SyntaxError
 features: [async-iteration]
 ---*/
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-and/bigint-and-number.js
@@ -0,0 +1,35 @@
+// |reftest| skip -- BigInt is not supported
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+description: Mixing BigInt and Number produces a TypeError for bitwise-and operator
+features: [BigInt]
+info: |
+  Let lnum be ? ToNumeric(leftValue).
+  Let rnum be ? ToNumeric(rightValue).
+  If Type(lnum) does not equal Type(rnum), throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() { 1n & 1; }, "1n & 1 throws TypeError");
+assert.throws(TypeError, function() { 1 & 1n; }, "1 & 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) & 1; }, "Object(1n) & 1 throws TypeError");
+assert.throws(TypeError, function() { 1 & Object(1n); }, "1 & Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n & Object(1); }, "1n & Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) & 1n; }, "Object(1) & 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) & Object(1); }, "Object(1n) & Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) & Object(1n); }, "Object(1) & Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n & NaN; }, "1n & NaN throws TypeError");
+assert.throws(TypeError, function() { NaN & 1n; }, "NaN & 1n throws TypeError");
+assert.throws(TypeError, function() { 1n & Infinity; }, "1n & Infinity throws TypeError");
+assert.throws(TypeError, function() { Infinity & 1n; }, "Infinity & 1n throws TypeError");
+assert.throws(TypeError, function() { 1n & true; }, "1n & true throws TypeError");
+assert.throws(TypeError, function() { true & 1n; }, "true & 1n throws TypeError");
+assert.throws(TypeError, function() { 1n & "1"; }, '1n & "1" throws TypeError');
+assert.throws(TypeError, function() { "1" & 1n; }, '"1" & 1n throws TypeError');
+assert.throws(TypeError, function() { 1n & null; }, "1n & null throws TypeError");
+assert.throws(TypeError, function() { null & 1n; }, "null & 1n throws TypeError");
+assert.throws(TypeError, function() { 1n & undefined; }, "1n & undefined throws TypeError");
+assert.throws(TypeError, function() { undefined & 1n; }, "undefined & 1n throws TypeError");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-and/order-of-evaluation.js
@@ -0,0 +1,140 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+description: Type coercion order of operations for bitwise-and operator
+features: [Symbol]
+info: |
+  Evaluate lhs
+  Evaluate rhs
+  ToNumeric(lhs)
+  ToNumeric(rhs)
+---*/
+
+function MyError() {}
+var trace;
+
+// ?GetValue(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    throw new MyError();
+  })() & (function() {
+    trace += "2";
+    throw new Test262Error("should not be evaluated");
+  })();
+}, "?GetValue(lhs) throws.");
+assert.sameValue(trace, "1", "?GetValue(lhs) throws.");
+
+// ?GetValue(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })() & (function() {
+    trace += "2";
+    throw new MyError();
+  })();
+}, "?GetValue(rhs) throws.");
+assert.sameValue(trace, "12", "?GetValue(rhs) throws.");
+
+// ?ToPrimive(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new MyError();
+      }
+    };
+  })() & (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToPrimive(lhs) throws.");
+assert.sameValue(trace, "123", "?ToPrimive(lhs) throws.");
+
+// ?ToPrimive(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() & (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new MyError();
+      }
+    };
+  })();
+}, "?ToPrimive(rhs) throws.");
+assert.sameValue(trace, "1234", "?ToPrimive(rhs) throws.");
+
+// ?ToNumeric(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return Symbol("1");
+      }
+    };
+  })() & (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToNumeric(lhs) throws.");
+assert.sameValue(trace, "123", "?ToNumeric(lhs) throws.");
+
+// GetValue(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() & (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        return Symbol("1");
+      }
+    };
+  })();
+}, "GetValue(lhs) throws.");
+assert.sameValue(trace, "1234", "GetValue(lhs) throws.");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-or/bigint-and-number.js
@@ -0,0 +1,35 @@
+// |reftest| skip -- BigInt is not supported
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+description: Mixing BigInt and Number produces a TypeError for bitwise-or operator
+features: [BigInt]
+info: |
+  Let lnum be ? ToNumeric(leftValue).
+  Let rnum be ? ToNumeric(rightValue).
+  If Type(lnum) does not equal Type(rnum), throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() { 1n | 1; }, "1n | 1 throws TypeError");
+assert.throws(TypeError, function() { 1 | 1n; }, "1 | 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) | 1; }, "Object(1n) | 1 throws TypeError");
+assert.throws(TypeError, function() { 1 | Object(1n); }, "1 | Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n | Object(1); }, "1n | Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) | 1n; }, "Object(1) | 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) | Object(1); }, "Object(1n) | Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) | Object(1n); }, "Object(1) | Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n | NaN; }, "1n | NaN throws TypeError");
+assert.throws(TypeError, function() { NaN | 1n; }, "NaN | 1n throws TypeError");
+assert.throws(TypeError, function() { 1n | Infinity; }, "1n | Infinity throws TypeError");
+assert.throws(TypeError, function() { Infinity | 1n; }, "Infinity | 1n throws TypeError");
+assert.throws(TypeError, function() { 1n | true; }, "1n | true throws TypeError");
+assert.throws(TypeError, function() { true | 1n; }, "true | 1n throws TypeError");
+assert.throws(TypeError, function() { 1n | "1"; }, '1n | "1" throws TypeError');
+assert.throws(TypeError, function() { "1" | 1n; }, '"1" | 1n throws TypeError');
+assert.throws(TypeError, function() { 1n | null; }, "1n | null throws TypeError");
+assert.throws(TypeError, function() { null | 1n; }, "null | 1n throws TypeError");
+assert.throws(TypeError, function() { 1n | undefined; }, "1n | undefined throws TypeError");
+assert.throws(TypeError, function() { undefined | 1n; }, "undefined | 1n throws TypeError");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-or/order-of-evaluation.js
@@ -0,0 +1,140 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+description: Type coercion order of operations for bitwise-or operator
+features: [Symbol]
+info: |
+  Evaluate lhs
+  Evaluate rhs
+  ToNumeric(lhs)
+  ToNumeric(rhs)
+---*/
+
+function MyError() {}
+var trace;
+
+// ?GetValue(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    throw new MyError();
+  })() | (function() {
+    trace += "2";
+    throw new Test262Error("should not be evaluated");
+  })();
+}, "?GetValue(lhs) throws.");
+assert.sameValue(trace, "1", "?GetValue(lhs) throws.");
+
+// ?GetValue(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })() | (function() {
+    trace += "2";
+    throw new MyError();
+  })();
+}, "?GetValue(rhs) throws.");
+assert.sameValue(trace, "12", "?GetValue(rhs) throws.");
+
+// ?ToPrimive(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new MyError();
+      }
+    };
+  })() | (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToPrimive(lhs) throws.");
+assert.sameValue(trace, "123", "?ToPrimive(lhs) throws.");
+
+// ?ToPrimive(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() | (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new MyError();
+      }
+    };
+  })();
+}, "?ToPrimive(rhs) throws.");
+assert.sameValue(trace, "1234", "?ToPrimive(rhs) throws.");
+
+// ?ToNumeric(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return Symbol("1");
+      }
+    };
+  })() | (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToNumeric(lhs) throws.");
+assert.sameValue(trace, "123", "?ToNumeric(lhs) throws.");
+
+// GetValue(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() | (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        return Symbol("1");
+      }
+    };
+  })();
+}, "GetValue(lhs) throws.");
+assert.sameValue(trace, "1234", "GetValue(lhs) throws.");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/bigint-and-number.js
@@ -0,0 +1,35 @@
+// |reftest| skip -- BigInt is not supported
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+description: Mixing BigInt and Number produces a TypeError for bitwise-xor operator
+features: [BigInt]
+info: |
+  Let lnum be ? ToNumeric(leftValue).
+  Let rnum be ? ToNumeric(rightValue).
+  If Type(lnum) does not equal Type(rnum), throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() { 1n ^ 1; }, "1n ^ 1 throws TypeError");
+assert.throws(TypeError, function() { 1 ^ 1n; }, "1 ^ 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) ^ 1; }, "Object(1n) ^ 1 throws TypeError");
+assert.throws(TypeError, function() { 1 ^ Object(1n); }, "1 ^ Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n ^ Object(1); }, "1n ^ Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) ^ 1n; }, "Object(1) ^ 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) ^ Object(1); }, "Object(1n) ^ Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) ^ Object(1n); }, "Object(1) ^ Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n ^ NaN; }, "1n ^ NaN throws TypeError");
+assert.throws(TypeError, function() { NaN ^ 1n; }, "NaN ^ 1n throws TypeError");
+assert.throws(TypeError, function() { 1n ^ Infinity; }, "1n ^ Infinity throws TypeError");
+assert.throws(TypeError, function() { Infinity ^ 1n; }, "Infinity ^ 1n throws TypeError");
+assert.throws(TypeError, function() { 1n ^ true; }, "1n ^ true throws TypeError");
+assert.throws(TypeError, function() { true ^ 1n; }, "true ^ 1n throws TypeError");
+assert.throws(TypeError, function() { 1n ^ "1"; }, '1n ^ "1" throws TypeError');
+assert.throws(TypeError, function() { "1" ^ 1n; }, '"1" ^ 1n throws TypeError');
+assert.throws(TypeError, function() { 1n ^ null; }, "1n ^ null throws TypeError");
+assert.throws(TypeError, function() { null ^ 1n; }, "null ^ 1n throws TypeError");
+assert.throws(TypeError, function() { 1n ^ undefined; }, "1n ^ undefined throws TypeError");
+assert.throws(TypeError, function() { undefined ^ 1n; }, "undefined ^ 1n throws TypeError");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/order-of-evaluation.js
@@ -0,0 +1,140 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+description: Type coercion order of operations for bitwise-xor operator
+features: [Symbol]
+info: |
+  Evaluate lhs
+  Evaluate rhs
+  ToNumeric(lhs)
+  ToNumeric(rhs)
+---*/
+
+function MyError() {}
+var trace;
+
+// ?GetValue(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    throw new MyError();
+  })() ^ (function() {
+    trace += "2";
+    throw new Test262Error("should not be evaluated");
+  })();
+}, "?GetValue(lhs) throws.");
+assert.sameValue(trace, "1", "?GetValue(lhs) throws.");
+
+// ?GetValue(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })() ^ (function() {
+    trace += "2";
+    throw new MyError();
+  })();
+}, "?GetValue(rhs) throws.");
+assert.sameValue(trace, "12", "?GetValue(rhs) throws.");
+
+// ?ToPrimive(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new MyError();
+      }
+    };
+  })() ^ (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToPrimive(lhs) throws.");
+assert.sameValue(trace, "123", "?ToPrimive(lhs) throws.");
+
+// ?ToPrimive(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() ^ (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new MyError();
+      }
+    };
+  })();
+}, "?ToPrimive(rhs) throws.");
+assert.sameValue(trace, "1234", "?ToPrimive(rhs) throws.");
+
+// ?ToNumeric(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return Symbol("1");
+      }
+    };
+  })() ^ (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToNumeric(lhs) throws.");
+assert.sameValue(trace, "123", "?ToNumeric(lhs) throws.");
+
+// GetValue(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() ^ (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        return Symbol("1");
+      }
+    };
+  })();
+}, "GetValue(lhs) throws.");
+assert.sameValue(trace, "1234", "GetValue(lhs) throws.");
+
+reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-3-a-1-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-3-a-1-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting an un-resolvable
-    reference
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("delete obj");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-1-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-1-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable which
-    is a primitive value type (number)
-flags: [onlyStrict]
----*/
-
-        var _11_4_1_5 = 5;
-assert.throws(SyntaxError, function() {
-            eval("delete _11_4_1_5;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-10-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-10-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable of
-    type Array
-flags: [onlyStrict]
----*/
-
-        var arrObj = [1,2,3];
-assert.throws(SyntaxError, function() {
-            eval("delete arrObj;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-11-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-11-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable of
-    type String
-flags: [onlyStrict]
----*/
-
-        var strObj = new String("abc");
-assert.throws(SyntaxError, function() {
-            eval("delete strObj;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-12-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-12-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable of
-    type Boolean
-flags: [onlyStrict]
----*/
-
-        var boolObj = new Boolean(false);
-assert.throws(SyntaxError, function() {
-            eval("delete boolObj;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-13-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-13-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable of
-    type Number
-flags: [onlyStrict]
----*/
-
-        var numObj = new Number(0);
-assert.throws(SyntaxError, function() {
-            eval("delete numObj;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-14-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-14-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable of
-    type Date
-flags: [onlyStrict]
----*/
-
-        var dateObj = new Date();
-assert.throws(SyntaxError, function() {
-            eval("delete dateObj;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-15-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-15-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable of
-    type RegExp
-flags: [onlyStrict]
----*/
-
-        var regObj = new RegExp();
-assert.throws(SyntaxError, function() {
-            eval("delete regObj;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-16-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-16-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable of
-    type Error
-flags: [onlyStrict]
----*/
-
-        var errObj = new Error();
-assert.throws(SyntaxError, function() {
-            eval("delete errObj;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-17-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-17-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable of
-    type Arguments
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("var argObj = (function (a, b) { delete arguments; }(1, 2));");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-18-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-18-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a built-in
-    (Object)
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("delete Object;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-19-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-19-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a built-in
-    (Function)
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("delete Function;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-2-s-strict.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-2-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a function
-    parameter
-flags: [onlyStrict]
----*/
-
-        function funObj(x) {
-            eval("delete x;");
-        }
-assert.throws(SyntaxError, function() {
-            funObj(1);
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-20-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-20-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a built-in
-    (Array)
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("delete Array;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-21-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-21-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a built-in
-    (String)
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("delete String;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-22-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-22-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a built-in
-    (Boolean)
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("delete Boolean;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-23-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-23-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a built-in
-    (Number)
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("delete Number;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-24-s-strict.js
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-24-s
-description: Strict Mode - SyntaxError is thrown when deleting a built-in (Date)
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("delete Date;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-25-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-25-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a built-in
-    (RegExp)
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("delete RegExp;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-26-s-strict.js
+++ /dev/null
@@ -1,17 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-26-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a built-in
-    (Error)
-flags: [onlyStrict]
----*/
-
-assert.throws(SyntaxError, function() {
-            eval("delete Error;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-3-s-strict.js
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-3-s
-description: Strict Mode - SyntaxError is thrown when deleting a function name
-flags: [onlyStrict]
----*/
-
-        function funObj () { }
-assert.throws(SyntaxError, function() {
-            eval("delete funObj");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-4-s-strict.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-4-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a function
-    parameter
-flags: [onlyStrict]
----*/
-
-        function funObj(x, y, z) {
-            eval("delete y;");
-        }
-assert.throws(SyntaxError, function() {
-            funObj(1);
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-5-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-5-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable which
-    is a primitive type (boolean)
-flags: [onlyStrict]
----*/
-
-        var _11_4_1_5 = true;
-assert.throws(SyntaxError, function() {
-            eval("delete _11_4_1_5;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-6-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-6-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable which
-    is a primitive type (string)
-flags: [onlyStrict]
----*/
-
-        var _11_4_1_5 = "abc";
-assert.throws(SyntaxError, function() {
-            eval("delete _11_4_1_5;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-7-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-7-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable of
-    type Object
-flags: [onlyStrict]
----*/
-
-        var obj = new Object();
-assert.throws(SyntaxError, function() {
-            eval("delete obj;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-8-s-strict.js
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-8-s
-description: Strict Mode - SyntaxError is thrown when deleting a function object
-flags: [onlyStrict]
----*/
-
-        var funObj = function () { };
-assert.throws(SyntaxError, function() {
-            eval("delete funObj;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/11.4.1-5-a-9-s-strict.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.4.1-5-a-9-s
-description: >
-    Strict Mode - SyntaxError is thrown when deleting a variable of
-    type function (declaration)
-flags: [onlyStrict]
----*/
-
-        function funObj () { };
-assert.throws(SyntaxError, function() {
-            eval("delete funObj;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/delete/S11.4.1_A1.js
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: |
-    White Space and Line Terminator between "delete" and UnaryExpression are
-    allowed
-es5id: 11.4.1_A1
-description: Checking by using eval
----*/
-
-//CHECK#1
-if (eval("delete\u00090") !== true) {
-  $ERROR('#1: delete\\u00090 === true');
-}
-
-//CHECK#2
-if (eval("delete\u000B0") !== true) {
-  $ERROR('#2: delete\\u000B0 === true');  
-}
-
-//CHECK#3
-if (eval("delete\u000C0") !== true) {
-  $ERROR('#3: delete\\u000C0 === true');
-}
-
-//CHECK#4
-if (eval("delete\u00200") !== true) {
-  $ERROR('#4: delete\\u00200 === true');
-}
-
-//CHECK#5
-if (eval("delete\u00A00") !== true) {
-  $ERROR('#5: delete\\u00A00 === true');
-}
-
-//CHECK#6
-if (eval("delete\u000A0") !== true) {
-  $ERROR('#6: delete\\u000A0 === true');  
-}
-
-//CHECK#7
-if (eval("delete\u000D0") !== true) {
-  $ERROR('#7: delete\\u000D0 === true');
-}
-
-//CHECK#8
-if (eval("delete\u20280") !== true) {
-  $ERROR('#8: delete\\u20280 === true');
-}
-
-//CHECK#9
-if (eval("delete\u20290") !== true) {
-  $ERROR('#9: delete\\u20290 === true');
-}
-
-//CHECK#10
-if (eval("delete\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20290") !== true) {
-  $ERROR('#10: delete\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20290 === true');
-}
-
-reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/delete/identifier-strict-strict.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2018 Mike Pennisi.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-delete-operator-static-semantics-early-errors
+description: Parsing error when operand is an IdentifierReference
+info: |
+  It is a Syntax Error if the UnaryExpression is contained in strict mode code
+  and the derived UnaryExpression is PrimaryExpression:IdentifierReference.
+negative:
+  phase: parse
+  type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+delete test262identifier;
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/delete/white-space-line-terminator-between-delete-unaryexpression-allowed.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-delete-operator
+description: >
+  White Space and Line Terminator between "delete" and UnaryExpression are allowed
+info: |
+
+  UnaryExpression :
+      delete UnaryExpression
+
+---*/
+
+var result;
+
+result = delete	0;
+assert.sameValue(result, true, '\\u0009');
+
+result = delete0;
+assert.sameValue(result, true, '\\u000B');
+
+result = delete0;
+assert.sameValue(result, true, '\\u000C');
+
+result = delete 0;
+assert.sameValue(result, true, '\\u0020');
+
+result = delete 0;
+assert.sameValue(result, true, '\\u00A0');
+
+// Line Break is intentional
+result = delete
+0;
+assert.sameValue(result, true, '\\u000A');
+
+// Line Break is intentional
+result = delete
+0;
+assert.sameValue(result, true, '\\u000D');
+
+result = delete
0;
+assert.sameValue(result, true, '\\u2028');
+
+result = delete
0;
+assert.sameValue(result, true, '\\u2029');
+
+// Line Break is intentional
+result = delete	  
+

0;
+assert.sameValue(result, true, '\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029');
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/bigint-and-number.js
@@ -0,0 +1,35 @@
+// |reftest| skip -- BigInt is not supported
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+description: Mixing BigInt and Number produces a TypeError for division operator
+features: [BigInt]
+info: |
+  Let lnum be ? ToNumeric(leftValue).
+  Let rnum be ? ToNumeric(rightValue).
+  If Type(lnum) does not equal Type(rnum), throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() { 1n / 1; }, "1n / 1 throws TypeError");
+assert.throws(TypeError, function() { 1 / 1n; }, "1 / 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) / 1; }, "Object(1n) / 1 throws TypeError");
+assert.throws(TypeError, function() { 1 / Object(1n); }, "1 / Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n / Object(1); }, "1n / Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) / 1n; }, "Object(1) / 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) / Object(1); }, "Object(1n) / Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) / Object(1n); }, "Object(1) / Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n / NaN; }, "1n / NaN throws TypeError");
+assert.throws(TypeError, function() { NaN / 1n; }, "NaN / 1n throws TypeError");
+assert.throws(TypeError, function() { 1n / Infinity; }, "1n / Infinity throws TypeError");
+assert.throws(TypeError, function() { Infinity / 1n; }, "Infinity / 1n throws TypeError");
+assert.throws(TypeError, function() { 1n / true; }, "1n / true throws TypeError");
+assert.throws(TypeError, function() { true / 1n; }, "true / 1n throws TypeError");
+assert.throws(TypeError, function() { 1n / "1"; }, '1n / "1" throws TypeError');
+assert.throws(TypeError, function() { "1" / 1n; }, '"1" / 1n throws TypeError');
+assert.throws(TypeError, function() { 1n / null; }, "1n / null throws TypeError");
+assert.throws(TypeError, function() { null / 1n; }, "null / 1n throws TypeError");
+assert.throws(TypeError, function() { 1n / undefined; }, "1n / undefined throws TypeError");
+assert.throws(TypeError, function() { undefined / 1n; }, "undefined / 1n throws TypeError");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/order-of-evaluation.js
@@ -0,0 +1,140 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+description: Type coercion order of operations for division operator
+features: [Symbol]
+info: |
+  Evaluate lhs
+  Evaluate rhs
+  ToNumeric(lhs)
+  ToNumeric(rhs)
+---*/
+
+function MyError() {}
+var trace;
+
+// ?GetValue(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    throw new MyError();
+  })() / (function() {
+    trace += "2";
+    throw new Test262Error("should not be evaluated");
+  })();
+}, "?GetValue(lhs) throws.");
+assert.sameValue(trace, "1", "?GetValue(lhs) throws.");
+
+// ?GetValue(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })() / (function() {
+    trace += "2";
+    throw new MyError();
+  })();
+}, "?GetValue(rhs) throws.");
+assert.sameValue(trace, "12", "?GetValue(rhs) throws.");
+
+// ?ToPrimive(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new MyError();
+      }
+    };
+  })() / (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToPrimive(lhs) throws.");
+assert.sameValue(trace, "123", "?ToPrimive(lhs) throws.");
+
+// ?ToPrimive(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() / (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new MyError();
+      }
+    };
+  })();
+}, "?ToPrimive(rhs) throws.");
+assert.sameValue(trace, "1234", "?ToPrimive(rhs) throws.");
+
+// ?ToNumeric(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return Symbol("1");
+      }
+    };
+  })() / (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToNumeric(lhs) throws.");
+assert.sameValue(trace, "123", "?ToNumeric(lhs) throws.");
+
+// GetValue(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() / (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        return Symbol("1");
+      }
+    };
+  })();
+}, "GetValue(lhs) throws.");
+assert.sameValue(trace, "1234", "GetValue(lhs) throws.");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/exponentiation/bigint-and-number.js
@@ -0,0 +1,35 @@
+// |reftest| skip -- BigInt is not supported
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-exp-operator-runtime-semantics-evaluation
+description: Mixing BigInt and Number produces a TypeError for exponentiation operator
+features: [BigInt]
+info: |
+  Let base be ? ToNumeric(leftValue).
+  Let exponent be ? ToNumeric(rightValue).
+  If Type(base) does not equal Type(exponent), throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() { 1n ** 1; }, "1n ** 1 throws TypeError");
+assert.throws(TypeError, function() { 1 ** 1n; }, "1 ** 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) ** 1; }, "Object(1n) ** 1 throws TypeError");
+assert.throws(TypeError, function() { 1 ** Object(1n); }, "1 ** Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n ** Object(1); }, "1n ** Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) ** 1n; }, "Object(1) ** 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) ** Object(1); }, "Object(1n) ** Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) ** Object(1n); }, "Object(1) ** Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n ** NaN; }, "1n ** NaN throws TypeError");
+assert.throws(TypeError, function() { NaN ** 1n; }, "NaN ** 1n throws TypeError");
+assert.throws(TypeError, function() { 1n ** Infinity; }, "1n ** Infinity throws TypeError");
+assert.throws(TypeError, function() { Infinity ** 1n; }, "Infinity ** 1n throws TypeError");
+assert.throws(TypeError, function() { 1n ** true; }, "1n ** true throws TypeError");
+assert.throws(TypeError, function() { true ** 1n; }, "true ** 1n throws TypeError");
+assert.throws(TypeError, function() { 1n ** "1"; }, '1n ** "1" throws TypeError');
+assert.throws(TypeError, function() { "1" ** 1n; }, '"1" ** 1n throws TypeError');
+assert.throws(TypeError, function() { 1n ** null; }, "1n ** null throws TypeError");
+assert.throws(TypeError, function() { null ** 1n; }, "null ** 1n throws TypeError");
+assert.throws(TypeError, function() { 1n ** undefined; }, "1n ** undefined throws TypeError");
+assert.throws(TypeError, function() { undefined ** 1n; }, "undefined ** 1n throws TypeError");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/exponentiation/order-of-evaluation.js
@@ -0,0 +1,140 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-exp-operator-runtime-semantics-evaluation
+description: Type coercion order of operations for exponentiation operator
+features: [Symbol]
+info: |
+  Evaluate lhs
+  Evaluate rhs
+  ToNumeric(lhs)
+  ToNumeric(rhs)
+---*/
+
+function MyError() {}
+var trace;
+
+// ?GetValue(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    throw new MyError();
+  })() ** (function() {
+    trace += "2";
+    throw new Test262Error("should not be evaluated");
+  })();
+}, "?GetValue(lhs) throws.");
+assert.sameValue(trace, "1", "?GetValue(lhs) throws.");
+
+// ?GetValue(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })() ** (function() {
+    trace += "2";
+    throw new MyError();
+  })();
+}, "?GetValue(rhs) throws.");
+assert.sameValue(trace, "12", "?GetValue(rhs) throws.");
+
+// ?ToPrimive(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new MyError();
+      }
+    };
+  })() ** (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToPrimive(lhs) throws.");
+assert.sameValue(trace, "123", "?ToPrimive(lhs) throws.");
+
+// ?ToPrimive(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() ** (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new MyError();
+      }
+    };
+  })();
+}, "?ToPrimive(rhs) throws.");
+assert.sameValue(trace, "1234", "?ToPrimive(rhs) throws.");
+
+// ?ToNumeric(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return Symbol("1");
+      }
+    };
+  })() ** (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToNumeric(lhs) throws.");
+assert.sameValue(trace, "123", "?ToNumeric(lhs) throws.");
+
+// GetValue(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() ** (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        return Symbol("1");
+      }
+    };
+  })();
+}, "GetValue(lhs) throws.");
+assert.sameValue(trace, "1234", "GetValue(lhs) throws.");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/left-shift/bigint-and-number.js
@@ -0,0 +1,35 @@
+// |reftest| skip -- BigInt is not supported
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-left-shift-operator-runtime-semantics-evaluation
+description: Mixing BigInt and Number produces a TypeError for left-shift operator
+features: [BigInt]
+info: |
+  Let lnum be ? ToNumeric(leftValue).
+  Let rnum be ? ToNumeric(rightValue).
+  If Type(lnum) does not equal Type(rnum), throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() { 1n << 1; }, "1n << 1 throws TypeError");
+assert.throws(TypeError, function() { 1 << 1n; }, "1 << 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) << 1; }, "Object(1n) << 1 throws TypeError");
+assert.throws(TypeError, function() { 1 << Object(1n); }, "1 << Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n << Object(1); }, "1n << Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) << 1n; }, "Object(1) << 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) << Object(1); }, "Object(1n) << Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) << Object(1n); }, "Object(1) << Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n << NaN; }, "1n << NaN throws TypeError");
+assert.throws(TypeError, function() { NaN << 1n; }, "NaN << 1n throws TypeError");
+assert.throws(TypeError, function() { 1n << Infinity; }, "1n << Infinity throws TypeError");
+assert.throws(TypeError, function() { Infinity << 1n; }, "Infinity << 1n throws TypeError");
+assert.throws(TypeError, function() { 1n << true; }, "1n << true throws TypeError");
+assert.throws(TypeError, function() { true << 1n; }, "true << 1n throws TypeError");
+assert.throws(TypeError, function() { 1n << "1"; }, '1n << "1" throws TypeError');
+assert.throws(TypeError, function() { "1" << 1n; }, '"1" << 1n throws TypeError');
+assert.throws(TypeError, function() { 1n << null; }, "1n << null throws TypeError");
+assert.throws(TypeError, function() { null << 1n; }, "null << 1n throws TypeError");
+assert.throws(TypeError, function() { 1n << undefined; }, "1n << undefined throws TypeError");
+assert.throws(TypeError, function() { undefined << 1n; }, "undefined << 1n throws TypeError");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/left-shift/order-of-evaluation.js
@@ -0,0 +1,140 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-left-shift-operator-runtime-semantics-evaluation
+description: Type coercion order of operations for left-shift operator
+features: [Symbol]
+info: |
+  Evaluate lhs
+  Evaluate rhs
+  ToNumeric(lhs)
+  ToNumeric(rhs)
+---*/
+
+function MyError() {}
+var trace;
+
+// ?GetValue(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    throw new MyError();
+  })() << (function() {
+    trace += "2";
+    throw new Test262Error("should not be evaluated");
+  })();
+}, "?GetValue(lhs) throws.");
+assert.sameValue(trace, "1", "?GetValue(lhs) throws.");
+
+// ?GetValue(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })() << (function() {
+    trace += "2";
+    throw new MyError();
+  })();
+}, "?GetValue(rhs) throws.");
+assert.sameValue(trace, "12", "?GetValue(rhs) throws.");
+
+// ?ToPrimive(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new MyError();
+      }
+    };
+  })() << (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToPrimive(lhs) throws.");
+assert.sameValue(trace, "123", "?ToPrimive(lhs) throws.");
+
+// ?ToPrimive(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() << (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new MyError();
+      }
+    };
+  })();
+}, "?ToPrimive(rhs) throws.");
+assert.sameValue(trace, "1234", "?ToPrimive(rhs) throws.");
+
+// ?ToNumeric(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return Symbol("1");
+      }
+    };
+  })() << (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToNumeric(lhs) throws.");
+assert.sameValue(trace, "123", "?ToNumeric(lhs) throws.");
+
+// GetValue(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() << (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        return Symbol("1");
+      }
+    };
+  })();
+}, "GetValue(lhs) throws.");
+assert.sameValue(trace, "1234", "GetValue(lhs) throws.");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/modulus/bigint-and-number.js
@@ -0,0 +1,35 @@
+// |reftest| skip -- BigInt is not supported
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+description: Mixing BigInt and Number produces a TypeError for modulus operator
+features: [BigInt]
+info: |
+  Let lnum be ? ToNumeric(leftValue).
+  Let rnum be ? ToNumeric(rightValue).
+  If Type(lnum) does not equal Type(rnum), throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() { 1n % 1; }, "1n % 1 throws TypeError");
+assert.throws(TypeError, function() { 1 % 1n; }, "1 % 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) % 1; }, "Object(1n) % 1 throws TypeError");
+assert.throws(TypeError, function() { 1 % Object(1n); }, "1 % Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n % Object(1); }, "1n % Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) % 1n; }, "Object(1) % 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) % Object(1); }, "Object(1n) % Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) % Object(1n); }, "Object(1) % Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n % NaN; }, "1n % NaN throws TypeError");
+assert.throws(TypeError, function() { NaN % 1n; }, "NaN % 1n throws TypeError");
+assert.throws(TypeError, function() { 1n % Infinity; }, "1n % Infinity throws TypeError");
+assert.throws(TypeError, function() { Infinity % 1n; }, "Infinity % 1n throws TypeError");
+assert.throws(TypeError, function() { 1n % true; }, "1n % true throws TypeError");
+assert.throws(TypeError, function() { true % 1n; }, "true % 1n throws TypeError");
+assert.throws(TypeError, function() { 1n % "1"; }, '1n % "1" throws TypeError');
+assert.throws(TypeError, function() { "1" % 1n; }, '"1" % 1n throws TypeError');
+assert.throws(TypeError, function() { 1n % null; }, "1n % null throws TypeError");
+assert.throws(TypeError, function() { null % 1n; }, "null % 1n throws TypeError");
+assert.throws(TypeError, function() { 1n % undefined; }, "1n % undefined throws TypeError");
+assert.throws(TypeError, function() { undefined % 1n; }, "undefined % 1n throws TypeError");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/modulus/order-of-evaluation.js
@@ -0,0 +1,140 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+description: Type coercion order of operations for modulus operator
+features: [Symbol]
+info: |
+  Evaluate lhs
+  Evaluate rhs
+  ToNumeric(lhs)
+  ToNumeric(rhs)
+---*/
+
+function MyError() {}
+var trace;
+
+// ?GetValue(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    throw new MyError();
+  })() % (function() {
+    trace += "2";
+    throw new Test262Error("should not be evaluated");
+  })();
+}, "?GetValue(lhs) throws.");
+assert.sameValue(trace, "1", "?GetValue(lhs) throws.");
+
+// ?GetValue(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })() % (function() {
+    trace += "2";
+    throw new MyError();
+  })();
+}, "?GetValue(rhs) throws.");
+assert.sameValue(trace, "12", "?GetValue(rhs) throws.");
+
+// ?ToPrimive(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new MyError();
+      }
+    };
+  })() % (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToPrimive(lhs) throws.");
+assert.sameValue(trace, "123", "?ToPrimive(lhs) throws.");
+
+// ?ToPrimive(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() % (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new MyError();
+      }
+    };
+  })();
+}, "?ToPrimive(rhs) throws.");
+assert.sameValue(trace, "1234", "?ToPrimive(rhs) throws.");
+
+// ?ToNumeric(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return Symbol("1");
+      }
+    };
+  })() % (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToNumeric(lhs) throws.");
+assert.sameValue(trace, "123", "?ToNumeric(lhs) throws.");
+
+// GetValue(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() % (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        return Symbol("1");
+      }
+    };
+  })();
+}, "GetValue(lhs) throws.");
+assert.sameValue(trace, "1234", "GetValue(lhs) throws.");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/multiplication/bigint-and-number.js
@@ -0,0 +1,35 @@
+// |reftest| skip -- BigInt is not supported
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+description: Mixing BigInt and Number produces a TypeError for multiplication operator
+features: [BigInt]
+info: |
+  Let lnum be ? ToNumeric(leftValue).
+  Let rnum be ? ToNumeric(rightValue).
+  If Type(lnum) does not equal Type(rnum), throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() { 1n * 1; }, "1n * 1 throws TypeError");
+assert.throws(TypeError, function() { 1 * 1n; }, "1 * 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) * 1; }, "Object(1n) * 1 throws TypeError");
+assert.throws(TypeError, function() { 1 * Object(1n); }, "1 * Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n * Object(1); }, "1n * Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) * 1n; }, "Object(1) * 1n throws TypeError");
+assert.throws(TypeError, function() { Object(1n) * Object(1); }, "Object(1n) * Object(1) throws TypeError");
+assert.throws(TypeError, function() { Object(1) * Object(1n); }, "Object(1) * Object(1n) throws TypeError");
+assert.throws(TypeError, function() { 1n * NaN; }, "1n * NaN throws TypeError");
+assert.throws(TypeError, function() { NaN * 1n; }, "NaN * 1n throws TypeError");
+assert.throws(TypeError, function() { 1n * Infinity; }, "1n * Infinity throws TypeError");
+assert.throws(TypeError, function() { Infinity * 1n; }, "Infinity * 1n throws TypeError");
+assert.throws(TypeError, function() { 1n * true; }, "1n * true throws TypeError");
+assert.throws(TypeError, function() { true * 1n; }, "true * 1n throws TypeError");
+assert.throws(TypeError, function() { 1n * "1"; }, '1n * "1" throws TypeError');
+assert.throws(TypeError, function() { "1" * 1n; }, '"1" * 1n throws TypeError');
+assert.throws(TypeError, function() { 1n * null; }, "1n * null throws TypeError");
+assert.throws(TypeError, function() { null * 1n; }, "null * 1n throws TypeError");
+assert.throws(TypeError, function() { 1n * undefined; }, "1n * undefined throws TypeError");
+assert.throws(TypeError, function() { undefined * 1n; }, "undefined * 1n throws TypeError");
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/multiplication/order-of-evaluation.js
@@ -0,0 +1,140 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+description: Type coercion order of operations for multiplication operator
+features: [Symbol]
+info: |
+  Evaluate lhs
+  Evaluate rhs
+  ToNumeric(lhs)
+  ToNumeric(rhs)
+---*/
+
+function MyError() {}
+var trace;
+
+// ?GetValue(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    throw new MyError();
+  })() * (function() {
+    trace += "2";
+    throw new Test262Error("should not be evaluated");
+  })();
+}, "?GetValue(lhs) throws.");
+assert.sameValue(trace, "1", "?GetValue(lhs) throws.");
+
+// ?GetValue(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })() * (function() {
+    trace += "2";
+    throw new MyError();
+  })();
+}, "?GetValue(rhs) throws.");
+assert.sameValue(trace, "12", "?GetValue(rhs) throws.");
+
+// ?ToPrimive(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        throw new MyError();
+      }
+    };
+  })() * (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToPrimive(lhs) throws.");
+assert.sameValue(trace, "123", "?ToPrimive(lhs) throws.");
+
+// ?ToPrimive(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() * (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new MyError();
+      }
+    };
+  })();
+}, "?ToPrimive(rhs) throws.");
+assert.sameValue(trace, "1234", "?ToPrimive(rhs) throws.");
+
+// ?ToNumeric(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return Symbol("1");
+      }
+    };
+  })() * (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        throw new Test262Error("should not be evaluated");
+      }
+    };
+  })();
+}, "?ToNumeric(lhs) throws.");
+assert.sameValue(trace, "123", "?ToNumeric(lhs) throws.");
+
+// GetValue(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+  (function() {
+    trace += "1";
+    return {
+      valueOf: function() {
+        trace += "3";
+        return 1;
+      }
+    };
+  })() * (function() {
+    trace += "2";
+    return {
+      valueOf: function() {
+        trace += "4";
+        return Symbol("1");
+      }
+    };
+  })();
+}, "GetValue(lhs) throws.");
+assert.sameValue(trace, "1234", "GetValue(lhs) throws.");
+
+reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5-1-s-strict.js
+++ /dev/null
@@ -1,19 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5-1-s
-description: >
-    Strict Mode - SyntaxError is thrown when 'eval' occurs as the
-    Identifier in a PropertySetParameterList of a PropertyAssignment
-    that is contained in strict code
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("var obj = {set _11_1_5_1_fun(eval) {}};");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5-2-s-strict.js
+++ /dev/null
@@ -1,19 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5-2-s
-description: >
-    Strict Mode - SyntaxError is thrown when 'arguments' occurs as the
-    Identifier in a PropertySetParameterList of a PropertyAssignment
-    that is contained in strict code
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("var obj = {set _11_1_5_2_fun(arguments) {} };");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5-3-s.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5-3-s
-description: >
-    Strict Mode - SyntaxError is thrown when  'evals'  occurs as the
-    Identifier in a PropertySetParameterList of a PropertyAssignment
-    if its FunctionBody is strict code
-flags: [noStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("var obj = {set _11_1_5_3_fun(eval) { \"use strict\"; }};");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5-4-4-a-1-s.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5-4-4-a-1-s
-description: >
-    Object literal - No SyntaxError for duplicate data property names
----*/
-
-  eval("({foo:0,foo:1});");
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5-4-s.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5-4-s
-description: >
-    Strict Mode - SyntaxError is thrown when 'arguments'  occurs as
-    the Identifier in a PropertySetParameterList of a
-    PropertyAssignment  if its FunctionBody is strict code
-flags: [noStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("var obj = {set _11_1_5_4_fun(arguments) {\"use strict\";}};");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_4-4-a-2.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: |
-    Refer 11.1.5; 
-    The production
-    PropertyNameAndValueList :  PropertyNameAndValueList , PropertyAssignment
-    4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
-    a. This production is contained in strict code and IsDataDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true
-es5id: 11.1.5_4-4-a-2
-description: >
-    Object literal - Duplicate data property name allowed if not in
-    strict mode
----*/
-
-  eval("({foo:0,foo:1});");
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_4-4-b-2.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5_4-4-b-2
-description: >
-    Object literal - No SyntaxError if a data property definition is
-    followed by set accessor definition with the same name
----*/
-
-  eval("({foo : 1, set foo(x){}});");
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_4-4-c-1.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5_4-4-c-1
-description: >
-    Object literal - No SyntaxError if a get accessor property definition
-    is followed by a data property definition with the same name
----*/
-
-  eval("({get foo(){}, foo : 1});");
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_4-4-c-2.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5_4-4-c-2
-description: >
-    Object literal - No SyntaxError if a set accessor property definition
-    is followed by a data property definition with the same name
----*/
-
-  eval("({set foo(x){}, foo : 1});");
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_4-4-d-1.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5_4-4-d-1
-description: Object literal - No SyntaxError for duplicate property name (get,get)
----*/
-
-  eval("({get foo(){}, get foo(){}});");
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_4-4-d-2.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5_4-4-d-2
-description: Object literal - No SyntaxError for duplicate property name (set,set)
----*/
-
-  eval("({set foo(arg){}, set foo(arg1){}});");
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_4-4-d-3.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5_4-4-d-3
-description: >
-    Object literal - No SyntaxError for duplicate property name
-    (get,set,get)
----*/
-
-  eval("({get foo(){}, set foo(arg){}, get foo(){}});");
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_4-4-d-4.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5_4-4-d-4
-description: >
-    Object literal - No SyntaxError for duplicate property name
-    (set,get,set)
----*/
-
-  eval("({set foo(arg){}, get foo(){}, set foo(arg1){}});");
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_6-2-1-s-strict.js
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5_6-2-1-s
-description: >
-    Strict Mode - SyntaxError is thrown when an assignment to a
-    reserved word or a future reserved word is contained in strict code
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("var obj = {\
-                get _11_1_5_6_2_1() {\
-                   public = 42;\
-                   return public;\
-                }\
-            };");
-
-            var _11_1_5_6_2_1 = obj._11_1_5_6_2_1;
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_6-2-2-s.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5_6-2-2-s
-description: >
-    Strict Mode - SyntaxError is thrown when an assignment to a
-    reserved word or a future reserved word is made inside a strict
-    mode FunctionBody of a PropertyAssignment
-flags: [noStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("var obj = {\
-                get _11_1_5_6_2_2() {\
-                   \"use strict\";\
-                   public = 42;\
-                   return public;\
-                }\
-            };\
-            var _11_1_5_6_2_2 = obj._11_1_5_6_2_2;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_7-2-1-s-strict.js
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5_7-2-1-s
-description: >
-    Strict Mode - SyntaxError is thrown when an assignment to a
-    reserved word is contained in strict code
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("var data = \"data\";\
-            var obj = {\
-                set _11_1_5_7_2_1(value) {\
-                    public = 42;\
-                    data = value;\
-                }\
-            };\
-            obj._11_1_5_7_2_1 = 1;");
-});
-
-reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/language/expressions/object/11.1.5_7-2-2-s-strict.js
+++ /dev/null
@@ -1,26 +0,0 @@
-'use strict';
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.1.5_7-2-2-s
-description: >
-    Strict Mode - SyntaxError is thrown when an assignment to a
-    reserved word is made in  a strict FunctionBody of a
-    PropertyAssignment
-flags: [onlyStrict]
----*/
-
-
-assert.throws(SyntaxError, function() {
-            eval("var data = \"data\";\
-            var obj = {\
-                set _11_1_5_7_2_2(value) {\
-                    public = 42;\
-                    data = value;\
-                }\
-            };\
-            obj._11_1_5_7_2_2 = 1;");
-});
-
-reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/object/getter-body-strict-inside.js
@@ -0,0 +1,23 @@
+// |reftest| error:SyntaxError
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es5id: 11.1.5_6-2-2-s
+description: >
+    Strict Mode - SyntaxError is thrown when an assignment to a
+    reserved word or a future reserved word is made inside a strict
+    mode FunctionBody of a PropertyAssignment
+negative:
+  type: SyntaxError
+  phase: parse
+flags: [noStrict]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+void {
+  get x() {
+    "use strict";
+    public = 42;
+  }
+};
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/object/getter-body-strict-outside-strict.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es5id: 11.1.5_6-2-1-s
+description: >
+    Strict Mode - SyntaxError is thrown when an assignment to a
+    reserved word or a future reserved word is contained in strict code
+negative:
+  type: SyntaxError
+  phase: parse
+flags: [onlyStrict]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+void {
+  get x() {
+    public = 42;
+  }
+};
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/object/prop-dup-data-data.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+    Refer 11.1.5; 
+    The production
+    PropertyNameAndValueList :  PropertyNameAndValueList , PropertyAssignment
+    4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+    a. This production is contained in strict code and IsDataDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true
+es5id: 11.1.5_4-4-a-2
+description: >
+    Object literal - Duplicate data property name allowed if not in
+    strict mode
+---*/
+
+void {
+  foo: 0,
+  foo: 1
+};
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/object/prop-dup-data-set.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.1.5_4-4-b-2
+description: >
+    Object literal - No SyntaxError if a data property definition is
+    followed by set accessor definition with the same name
+---*/
+
+void {