Merge inbound to mozilla-central a=merge
authorCoroiu Cristina <ccoroiu@mozilla.com>
Wed, 21 Nov 2018 23:43:13 +0200
changeset 447604 fbd97100c83cc07705244725a3245e6d14bbe9cf
parent 447603 e52cc97768090b2950a788912c62bea45505b96b (current diff)
parent 447548 ce2a09aa5bc086a522f770e251c609c91e66d3e7 (diff)
child 447605 e92b86330728c5e78343d092d074762c34423540
child 447629 9b6242ab169a1ba89acedac1bd978661d97decce
push id110060
push userccoroiu@mozilla.com
push dateWed, 21 Nov 2018 21:51:33 +0000
treeherdermozilla-inbound@e92b86330728 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone65.0a1
first release with
nightly linux32
fbd97100c83c / 65.0a1 / 20181121220101 / files
nightly linux64
fbd97100c83c / 65.0a1 / 20181121220101 / files
nightly mac
fbd97100c83c / 65.0a1 / 20181121220101 / files
nightly win32
fbd97100c83c / 65.0a1 / 20181121220101 / files
nightly win64
fbd97100c83c / 65.0a1 / 20181121220101 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge inbound to mozilla-central a=merge
dom/base/nsContentPermissionHelper.cpp
js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-malformed.js
js/src/tests/test262/built-ins/RegExp/named-groups/unicode-malformed.js
js/src/tests/test262/language/expressions/class/err-field-delete-covered-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-covered-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-covered-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-covered-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-covered-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-covered-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-covered-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-covered-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-covered-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-covered-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-twice-covered-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-twice-covered-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-twice-covered-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-twice-covered-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-twice-covered-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-twice-covered-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-twice-covered-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-twice-covered-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-twice-covered-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-field-delete-twice-covered-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-covered-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-covered-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-covered-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-covered-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-covered-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-covered-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-covered-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-covered-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-covered-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-covered-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-twice-covered-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-twice-covered-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-twice-covered-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-twice-covered-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-twice-covered-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-twice-covered-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-twice-covered-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-twice-covered-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-twice-covered-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/expressions/class/err-method-delete-twice-covered-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/line-terminators/7.3-11.js
js/src/tests/test262/language/line-terminators/7.3-12.js
js/src/tests/test262/language/line-terminators/7.3-13.js
js/src/tests/test262/language/line-terminators/7.3-14.js
js/src/tests/test262/language/module-code/dynamic-import/assign-expr-get-value-abrupt-throws.js
js/src/tests/test262/language/module-code/dynamic-import/browser.js
js/src/tests/test262/language/module-code/dynamic-import/catch/browser.js
js/src/tests/test262/language/module-code/dynamic-import/catch/eval-rqstd-abrupt-err-type_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/catch/eval-rqstd-abrupt-err-uri_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/catch/instn-iee-err-ambiguous-1_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/catch/instn-iee-err-ambiguous-2_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/catch/instn-iee-err-ambiguous-export_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/catch/instn-iee-err-ambiguous_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/catch/instn-iee-err-circular-1_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/catch/instn-iee-err-circular-2_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-arrow-import-catch-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-arrow-import-catch-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-arrow-import-catch-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-arrow-import-catch-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-arrow-import-catch-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-arrow-import-catch-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-arrow-import-catch-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-await-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-await-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-await-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-await-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-await-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-await-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-await-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-return-await-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-return-await-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-return-await-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-return-await-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-return-await-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-return-await-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-return-await-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-async-function-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-import-catch-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-import-catch-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-import-catch-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-import-catch-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-import-catch-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-import-catch-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-import-catch-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-labeled-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-labeled-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-labeled-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-labeled-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-labeled-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-labeled-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-block-labeled-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-do-while-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-do-while-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-do-while-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-do-while-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-do-while-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-do-while-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-do-while-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-else-import-catch-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-else-import-catch-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-else-import-catch-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-else-import-catch-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-else-import-catch-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-else-import-catch-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-else-import-catch-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-function-import-catch-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-function-import-catch-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-function-import-catch-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-function-import-catch-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-function-import-catch-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-function-import-catch-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-function-import-catch-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-if-import-catch-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-if-import-catch-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-if-import-catch-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-if-import-catch-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-if-import-catch-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-if-import-catch-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-if-import-catch-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-while-import-catch-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-while-import-catch-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-while-import-catch-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-while-import-catch-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-while-import-catch-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-while-import-catch-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/nested-while-import-catch-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/catch/script-code_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/catch/shell.js
js/src/tests/test262/language/module-code/dynamic-import/catch/top-level-import-catch-eval-rqstd-abrupt-typeerror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/top-level-import-catch-eval-rqstd-abrupt-urierror.js
js/src/tests/test262/language/module-code/dynamic-import/catch/top-level-import-catch-eval-script-code-target.js
js/src/tests/test262/language/module-code/dynamic-import/catch/top-level-import-catch-file-does-not-exist.js
js/src/tests/test262/language/module-code/dynamic-import/catch/top-level-import-catch-instn-iee-err-ambiguous-import.js
js/src/tests/test262/language/module-code/dynamic-import/catch/top-level-import-catch-instn-iee-err-circular.js
js/src/tests/test262/language/module-code/dynamic-import/catch/top-level-import-catch-specifier-tostring-abrupt-rejects.js
js/src/tests/test262/language/module-code/dynamic-import/dynamic-import-module_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/eval-export-dflt-cls-anon.js
js/src/tests/test262/language/module-code/dynamic-import/eval-export-dflt-cls-name-meth.js
js/src/tests/test262/language/module-code/dynamic-import/eval-export-dflt-cls-named.js
js/src/tests/test262/language/module-code/dynamic-import/eval-export-dflt-expr-cls-anon.js
js/src/tests/test262/language/module-code/dynamic-import/eval-export-dflt-expr-cls-name-meth.js
js/src/tests/test262/language/module-code/dynamic-import/eval-export-dflt-expr-cls-named.js
js/src/tests/test262/language/module-code/dynamic-import/eval-export-dflt-expr-fn-anon.js
js/src/tests/test262/language/module-code/dynamic-import/eval-export-dflt-expr-fn-named.js
js/src/tests/test262/language/module-code/dynamic-import/eval-export-dflt-expr-gen-anon.js
js/src/tests/test262/language/module-code/dynamic-import/eval-export-dflt-expr-gen-named.js
js/src/tests/test262/language/module-code/dynamic-import/eval-export-dflt-expr-in.js
js/src/tests/test262/language/module-code/dynamic-import/eval-rqstd-once.js
js/src/tests/test262/language/module-code/dynamic-import/eval-rqstd-once_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/eval-self-once-module.js
js/src/tests/test262/language/module-code/dynamic-import/eval-self-once-script.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-Symbol-toStringTag.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-define-own-property.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-delete-exported-init-no-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-delete-exported-init-strict-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-delete-non-exported-no-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-delete-non-exported-strict-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-extensible.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-get-nested-namespace-dflt-direct.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-get-nested-namespace-dflt-indirect.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-get-nested-namespace-props-nrml.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-get-own-property-str-found-init.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-get-own-property-str-not-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-get-own-property-sym.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-get-str-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-get-str-not-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-get-sym-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-get-sym-not-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-has-property-str-found-init.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-has-property-str-not-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-has-property-sym-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-has-property-sym-not-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-no-iterator.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-own-property-keys-sort.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-prevent-extensions-object.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-prevent-extensions-reflect.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-prop-descs.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-prototype.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-set-no-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-set-prototype-of-null.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-set-prototype-of.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-set-same-values-no-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-set-same-values-strict-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/await-ns-set-strict-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/browser.js
js/src/tests/test262/language/module-code/dynamic-import/ns/define-own-property_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/ns/empty_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/ns/get-nested-namespace-dflt-skip-named-end_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/ns/get-nested-namespace-dflt-skip-named_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/ns/get-nested-namespace-dflt-skip-prod-end_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/ns/get-nested-namespace-dflt-skip-prod_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/ns/get-nested-namespace-props-nrml-1_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/ns/get-nested-namespace-props-nrml-2_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/ns/get-nested-namespace-props-nrml-3_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/ns/module-code_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/ns/own-keys-sort_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-Symbol-toStringTag.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-define-own-property.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-delete-exported-init-no-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-delete-exported-init-strict-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-delete-non-exported-no-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-delete-non-exported-strict-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-extensible.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-get-nested-namespace-dflt-direct.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-get-nested-namespace-dflt-indirect.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-get-nested-namespace-props-nrml.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-get-own-property-str-found-init.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-get-own-property-str-not-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-get-own-property-sym.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-get-str-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-get-str-not-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-get-sym-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-get-sym-not-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-has-property-str-found-init.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-has-property-str-not-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-has-property-sym-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-has-property-sym-not-found.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-no-iterator.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-own-property-keys-sort.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-prevent-extensions-object.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-prevent-extensions-reflect.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-prop-descs.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-prototype.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-set-no-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-set-prototype-of-null.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-set-prototype-of.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-set-same-values-no-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-set-same-values-strict-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/promise-then-ns-set-strict-strict.js
js/src/tests/test262/language/module-code/dynamic-import/ns/shell.js
js/src/tests/test262/language/module-code/dynamic-import/returns-promise.js
js/src/tests/test262/language/module-code/dynamic-import/shell.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/browser.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/browser.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-arrow-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-arrow-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-async-function-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-async-function-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-async-function-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-block-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-block-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-block-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-do-while-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-do-while-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-do-while-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-else-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-else-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-else-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-function-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-function-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-function-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-function-return-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-function-return-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-function-return-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-if-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-if-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-if-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-while-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-while-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-while-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-with-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-with-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/nested-with-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/shell.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/top-level-assignment-expr-not-optional.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/top-level-not-extensible-args.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/invalid/top-level-not-extensible-no-trailing-comma.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/shell.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/browser.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/empty_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-arrow-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-arrow-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-arrow-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-async-function-await-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-async-function-await-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-async-function-await-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-async-function-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-async-function-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-async-function-return-await-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-async-function-return-await-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-async-function-return-await-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-async-function-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-block-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-block-labeled-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-block-labeled-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-block-labeled-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-block-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-block-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-do-while-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-do-while-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-do-while-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-else-braceless-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-else-braceless-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-else-braceless-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-else-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-else-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-else-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-function-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-function-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-function-return-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-function-return-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-function-return-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-function-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-if-braceless-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-if-braceless-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-if-braceless-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-if-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-if-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-if-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-while-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-while-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-while-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-with-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-with-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/nested-with-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/shell.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/top-level-empty-str-is-valid-assign-expr.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/top-level-nested-imports.js
js/src/tests/test262/language/module-code/dynamic-import/syntax/valid/top-level-script-code-valid.js
js/src/tests/test262/language/module-code/dynamic-import/usage/browser.js
js/src/tests/test262/language/module-code/dynamic-import/usage/dynamic-import-module_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/usage/eval-gtbndng-indirect-update-dflt_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/usage/eval-gtbndng-indirect-update_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/usage/module-code_FIXTURE.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-assignment-expression-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-assignment-expression-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-assignment-expression-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-assignment-expression-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-assignment-expression-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-assignment-expression-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-import-then-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-import-then-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-import-then-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-import-then-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-import-then-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-arrow-import-then-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-await-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-await-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-await-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-await-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-await-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-await-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-return-await-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-return-await-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-return-await-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-return-await-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-return-await-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-return-await-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-async-function-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-block-import-then-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-block-import-then-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-block-import-then-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-block-import-then-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-block-import-then-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-block-import-then-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-do-while-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-do-while-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-do-while-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-do-while-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-do-while-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-do-while-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-else-import-then-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-else-import-then-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-else-import-then-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-else-import-then-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-else-import-then-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-else-import-then-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-function-import-then-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-function-import-then-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-function-import-then-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-function-import-then-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-function-import-then-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-function-import-then-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-braceless-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-braceless-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-braceless-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-braceless-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-braceless-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-braceless-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-import-then-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-import-then-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-import-then-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-import-then-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-import-then-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-if-import-then-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-while-import-then-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-while-import-then-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-while-import-then-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-while-import-then-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-while-import-then-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/nested-while-import-then-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/shell.js
js/src/tests/test262/language/module-code/dynamic-import/usage/syntax-nested-block-labeled-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/syntax-nested-block-labeled-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/syntax-nested-block-labeled-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/syntax-nested-block-labeled-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/syntax-nested-block-labeled-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/syntax-nested-block-labeled-specifier-tostring.js
js/src/tests/test262/language/module-code/dynamic-import/usage/top-level-import-then-eval-gtbndng-indirect-update-dflt.js
js/src/tests/test262/language/module-code/dynamic-import/usage/top-level-import-then-eval-gtbndng-indirect-update.js
js/src/tests/test262/language/module-code/dynamic-import/usage/top-level-import-then-eval-script-code-host-resolves-module-code.js
js/src/tests/test262/language/module-code/dynamic-import/usage/top-level-import-then-is-call-expression-square-brackets.js
js/src/tests/test262/language/module-code/dynamic-import/usage/top-level-import-then-returns-thenable.js
js/src/tests/test262/language/module-code/dynamic-import/usage/top-level-import-then-specifier-tostring.js
js/src/tests/test262/language/statements/class/err-field-delete-covered-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-covered-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-covered-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-covered-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-covered-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-covered-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-covered-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-covered-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-covered-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-covered-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-twice-covered-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-twice-covered-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-twice-covered-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-twice-covered-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-twice-covered-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-twice-covered-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-twice-covered-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-twice-covered-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-twice-covered-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-field-delete-twice-covered-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-covered-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-covered-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-covered-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-covered-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-covered-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-covered-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-covered-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-covered-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-covered-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-covered-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-twice-covered-err-delete-call-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-twice-covered-err-delete-call-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-twice-covered-err-delete-call-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-twice-covered-err-delete-call-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-twice-covered-err-delete-call-expression-privatename-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-twice-covered-err-delete-member-expression-private-method-async-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-twice-covered-err-delete-member-expression-private-method-async-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-twice-covered-err-delete-member-expression-private-method-gen-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-twice-covered-err-delete-member-expression-private-method-strict.js
js/src/tests/test262/language/statements/class/err-method-delete-twice-covered-err-delete-member-expression-privatename-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-1-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-12-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-12.js
js/src/tests/test262/language/statements/variable/12.2.1-13-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-14-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-15-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-23-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-24-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-25-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-26-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-27-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-28-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-29-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-30-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-31-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-32-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-33-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-34-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-35-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-36-s-strict.js
js/src/tests/test262/language/statements/variable/12.2.1-37-s-strict.js
testing/web-platform/meta/css/selectors/invalidation/matches.html.ini
testing/web-platform/meta/css/selectors/matches-nested.html.ini
testing/web-platform/meta/css/selectors/matches-specificity.html.ini
testing/web-platform/meta/fetch/api/basic/request-headers.any.js.ini
testing/web-platform/meta/fetch/api/cors/cors-cookies-redirect.any.js.ini
testing/web-platform/meta/fetch/api/cors/cors-redirect.any.js.ini
testing/web-platform/meta/fetch/api/redirect/redirect-origin.any.js.ini
testing/web-platform/meta/infrastructure/testdriver/actions/elementPosition.html.ini
testing/web-platform/meta/infrastructure/testdriver/actions/eventOrder.html.ini
testing/web-platform/meta/webrtc/RTCQuicStream.https.html.ini
testing/web-platform/meta/webrtc/RTCQuicTransport.https.html.ini
testing/web-platform/tests/css/selectors/invalidation/matches.html
testing/web-platform/tests/css/selectors/matches-nested.html
testing/web-platform/tests/css/selectors/matches-specificity.html
testing/web-platform/tests/pointerevents/pointerevent_pointermove.html
testing/web-platform/tests/webrtc/RTCQuicStream-helper.js
testing/web-platform/tests/webrtc/RTCQuicStream.https.html
testing/web-platform/tests/webrtc/RTCQuicTransport-helper.js
testing/web-platform/tests/webrtc/RTCQuicTransport.https.html
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/bootstrap_1/bootstrap.js
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/bootstrap_1/install.rdf
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/bootstrap_1/test.txt
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/bootstrap_2/bootstrap.js
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/bootstrap_2/install.rdf
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/bootstrap_2/test.txt
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/long_63_hash.xpi
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/long_63_plain.xpi
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/long_64_hash.xpi
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/long_64_plain.xpi
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/long_65_hash.xpi
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/preliminary_bootstrap_2.xpi
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/privileged_bootstrap_2.xpi
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/signed_bootstrap_1.xpi
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/signed_bootstrap_2.xpi
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/signed_bootstrap_badid_2.xpi
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/signed_bootstrap_sha256_1.xpi
toolkit/mozapps/extensions/test/xpcshell/data/signing_checks/unsigned_bootstrap_2.xpi
--- a/accessible/xul/XULElementAccessibles.cpp
+++ b/accessible/xul/XULElementAccessibles.cpp
@@ -89,19 +89,21 @@ Relation
 XULLabelAccessible::RelationByType(RelationType aType) const
 {
   Relation rel = HyperTextAccessibleWrap::RelationByType(aType);
 
   // The label for xul:groupbox is generated from the first xul:label
   if (aType == RelationType::LABEL_FOR) {
     Accessible* parent = Parent();
     if (parent && parent->Role() == roles::GROUPING &&
-        parent->GetContent()->IsXULElement(nsGkAtoms::groupbox) &&
         parent->GetChildAt(0) == this) {
-      rel.AppendTarget(parent);
+      nsIContent* parentContent = parent->GetContent();
+      if (parentContent && parentContent->IsXULElement(nsGkAtoms::groupbox)) {
+        rel.AppendTarget(parent);
+      }
     }
   }
 
   return rel;
 }
 
 void
 XULLabelAccessible::UpdateLabelValue(const nsString& aValue)
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -1887,17 +1887,17 @@
           return;
 
         this._tabDropIndicator.collapsed = true;
         event.stopPropagation();
       ]]></handler>
     </handlers>
   </binding>
 
-  <binding id="tabbrowser-tab" display="xul:hbox"
+  <binding id="tabbrowser-tab"
            extends="chrome://global/content/bindings/tabbox.xml#tab">
     <content context="tabContextMenu">
       <xul:stack class="tab-stack" flex="1">
         <xul:vbox xbl:inherits="selected=visuallyselected,fadein"
                   class="tab-background">
           <xul:hbox xbl:inherits="selected=visuallyselected,multiselected,before-multiselected"
                     class="tab-line"/>
           <xul:spacer flex="1"/>
--- a/devtools/client/preferences/devtools-client.js
+++ b/devtools/client/preferences/devtools-client.js
@@ -49,18 +49,23 @@ pref("devtools.inspector.showUserAgentSt
 // Show all native anonymous content
 pref("devtools.inspector.showAllAnonymousContent", false);
 // Show user agent shadow roots
 pref("devtools.inspector.showUserAgentShadowRoots", false);
 // Enable the CSS shapes highlighter
 pref("devtools.inspector.shapesHighlighter.enabled", true);
 // Enable the font highlight-on-hover feature
 pref("devtools.inspector.fonthighlighter.enabled", true);
+
 // Enable tracking of style changes and the Changes panel in the Inspector
+#if defined(NIGHTLY_BUILD)
+pref("devtools.inspector.changes.enabled", true);
+#else
 pref("devtools.inspector.changes.enabled", false);
+#endif
 
 // Flexbox preferences
 // Enable the Flexbox highlighter and inspector panel in Nightly and DevEdition
 #if defined(NIGHTLY_BUILD) || defined(MOZ_DEV_EDITION)
 pref("devtools.inspector.flexboxHighlighter.enabled", true);
 pref("devtools.flexboxinspector.enabled", true);
 #else
 pref("devtools.inspector.flexboxHighlighter.enabled", false);
--- a/devtools/server/actors/thread.js
+++ b/devtools/server/actors/thread.js
@@ -559,18 +559,22 @@ const ThreadActor = ActorClassWithSpec(t
         if (parentFrame && parentFrame.script) {
           // We can't use the completion value in stepping hooks if we're
           // replaying, as we can't use its contents after resuming.
           const ncompletion = thread.dbg.replaying ? null : completion;
           const { onStep, onPop } = thread._makeSteppingHooks(
             originalLocation, "next", false, ncompletion
           );
           if (thread.dbg.replaying) {
+            const parentGeneratedLocation = thread.sources.getFrameLocation(parentFrame);
+            const parentOriginalLocation = thread.unsafeSynchronize(
+              thread.sources.getOriginalLocation(parentGeneratedLocation)
+            );
             const offsets =
-              thread._findReplayingStepOffsets(originalLocation, parentFrame,
+              thread._findReplayingStepOffsets(parentOriginalLocation, parentFrame,
                                                /* rewinding = */ false);
             parentFrame.setReplayingOnStep(onStep, offsets);
           } else {
             parentFrame.onStep = onStep;
           }
           // We need the onPop alongside the onStep because it is possible that
           // the parent frame won't have any steppable offsets, and we want to
           // make sure that we always pause in the parent _somewhere_.
--- a/dom/base/nsContentPermissionHelper.cpp
+++ b/dom/base/nsContentPermissionHelper.cpp
@@ -719,16 +719,63 @@ ContentPermissionRequestBase::RequestDel
   default:
     r = new RequestPromptEvent(this, mWindow);
     break;
   }
 
   aTarget->Dispatch(r.forget());
 }
 
+nsresult
+TranslateChoices(JS::HandleValue aChoices,
+                 const nsTArray<PermissionRequest>& aPermissionRequests,
+                 nsTArray<PermissionChoice>& aTranslatedChoices)
+{
+  if (aChoices.isNullOrUndefined()) {
+    // No choice is specified.
+  } else if (aChoices.isObject()) {
+    // Iterate through all permission types.
+    for (uint32_t i = 0; i < aPermissionRequests.Length(); ++i) {
+      nsCString type = aPermissionRequests[i].type();
+
+      JS::Rooted<JSObject*> obj(RootingCx(), &aChoices.toObject());
+      obj = CheckedUnwrap(obj);
+      if (!obj) {
+        return NS_ERROR_FAILURE;
+      }
+
+      AutoJSAPI jsapi;
+      jsapi.Init();
+
+      JSContext* cx = jsapi.cx();
+      JSAutoRealm ar(cx, obj);
+
+      JS::Rooted<JS::Value> val(cx);
+
+      if (!JS_GetProperty(cx, obj, type.BeginReading(), &val) ||
+          !val.isString()) {
+        // no setting for the permission type, clear exception and skip it
+        jsapi.ClearException();
+      } else {
+        nsAutoJSString choice;
+        if (!choice.init(cx, val)) {
+          jsapi.ClearException();
+          return NS_ERROR_FAILURE;
+        }
+        aTranslatedChoices.AppendElement(PermissionChoice(type, choice));
+      }
+    }
+  } else {
+    MOZ_ASSERT(false, "SelectedChoices should be undefined or an JS object");
+    return NS_ERROR_FAILURE;
+  }
+
+  return NS_OK;
+}
+
 } // namespace dom
 } // namespace mozilla
 
 NS_IMPL_ISUPPORTS(nsContentPermissionRequestProxy::nsContentPermissionRequesterProxy,
                   nsIContentPermissionRequester)
 
 NS_IMETHODIMP
 nsContentPermissionRequestProxy::nsContentPermissionRequesterProxy
@@ -778,19 +825,17 @@ nsContentPermissionRequestProxy::nsConte
 }
 
 nsContentPermissionRequestProxy::nsContentPermissionRequestProxy(ContentPermissionRequestParent* parent)
   : mParent(parent)
 {
     NS_ASSERTION(mParent, "null parent");
 }
 
-nsContentPermissionRequestProxy::~nsContentPermissionRequestProxy()
-{
-}
+nsContentPermissionRequestProxy::~nsContentPermissionRequestProxy() = default;
 
 nsresult
 nsContentPermissionRequestProxy::Init(const nsTArray<PermissionRequest>& requests)
 {
   mPermissionRequests = requests;
   mRequester = new nsContentPermissionRequesterProxy(mParent);
 
   nsCOMPtr<nsIContentPermissionPrompt> prompt = do_GetService(NS_CONTENT_PERMISSION_PROMPT_CONTRACTID);
@@ -906,53 +951,19 @@ nsContentPermissionRequestProxy::Allow(J
 
   // Don't send out the delete message when the managing protocol (PBrowser) is
   // being destroyed and PContentPermissionRequest will soon be.
   if (mParent->IsBeingDestroyed()) {
     return NS_ERROR_FAILURE;
   }
 
   nsTArray<PermissionChoice> choices;
-  if (aChoices.isNullOrUndefined()) {
-    // No choice is specified.
-  } else if (aChoices.isObject()) {
-    // Iterate through all permission types.
-    for (uint32_t i = 0; i < mPermissionRequests.Length(); ++i) {
-      nsCString type = mPermissionRequests[i].type();
-
-      JS::Rooted<JSObject*> obj(RootingCx(), &aChoices.toObject());
-      obj = CheckedUnwrap(obj);
-      if (!obj) {
-        return NS_ERROR_FAILURE;
-      }
-
-      AutoJSAPI jsapi;
-      jsapi.Init();
-
-      JSContext* cx = jsapi.cx();
-      JSAutoRealm ar(cx, obj);
-
-      JS::Rooted<JS::Value> val(cx);
-
-      if (!JS_GetProperty(cx, obj, type.BeginReading(), &val) ||
-          !val.isString()) {
-        // no setting for the permission type, clear exception and skip it
-        jsapi.ClearException();
-      } else {
-        nsAutoJSString choice;
-        if (!choice.init(cx, val)) {
-          jsapi.ClearException();
-          return NS_ERROR_FAILURE;
-        }
-        choices.AppendElement(PermissionChoice(type, choice));
-      }
-    }
-  } else {
-    MOZ_ASSERT(false, "SelectedChoices should be undefined or an JS object");
-    return NS_ERROR_FAILURE;
+  nsresult rv = TranslateChoices(aChoices, mPermissionRequests, choices);
+  if (NS_FAILED(rv)) {
+    return rv;
   }
 
   Unused << mParent->SendNotifyResult(true, choices);
   return NS_OK;
 }
 
 void
 nsContentPermissionRequestProxy::NotifyVisibility(const bool& aIsVisible)
--- a/dom/base/nsContentPermissionHelper.h
+++ b/dom/base/nsContentPermissionHelper.h
@@ -108,16 +108,21 @@ public:
 
 private:
   virtual ~nsContentPermissionRequester();
 
   nsWeakPtr mWindow;
   RefPtr<VisibilityChangeListener> mListener;
 };
 
+nsresult
+TranslateChoices(JS::HandleValue aChoices,
+                 const nsTArray<PermissionRequest>& aPermissionRequests,
+                 nsTArray<PermissionChoice>& aTranslatedChoices);
+
 class ContentPermissionRequestBase : public nsIContentPermissionRequest
 {
 public:
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_CYCLE_COLLECTION_CLASS(ContentPermissionRequestBase)
 
   NS_IMETHOD GetTypes(nsIArray **aTypes) override;
   NS_IMETHOD GetPrincipal(nsIPrincipal **aPrincipal) override;
--- a/dom/fetch/FetchDriver.cpp
+++ b/dom/fetch/FetchDriver.cpp
@@ -1472,17 +1472,19 @@ FetchDriver::SetRequestHeaders(nsIHttpCh
   if (!hasAccept) {
     DebugOnly<nsresult> rv =
       aChannel->SetRequestHeader(NS_LITERAL_CSTRING("accept"),
                                  NS_LITERAL_CSTRING("*/*"),
                                  false /* merge */);
     MOZ_ASSERT(NS_SUCCEEDED(rv));
   }
 
-  if (mRequest->ForceOriginHeader()) {
+  nsAutoCString method;
+  mRequest->GetMethod(method);
+  if (!method.EqualsLiteral("GET") && !method.EqualsLiteral("HEAD")) {
     nsAutoString origin;
     if (NS_SUCCEEDED(nsContentUtils::GetUTFOrigin(mPrincipal, origin))) {
       DebugOnly<nsresult> rv =
         aChannel->SetRequestHeader(nsDependentCString(net::nsHttp::Origin),
                                    NS_ConvertUTF16toUTF8(origin),
                                    false /* merge */);
       MOZ_ASSERT(NS_SUCCEEDED(rv));
     }
--- a/dom/fetch/InternalRequest.cpp
+++ b/dom/fetch/InternalRequest.cpp
@@ -26,17 +26,16 @@ InternalRequest::GetRequestConstructorCo
   MOZ_RELEASE_ASSERT(!mURLList.IsEmpty(), "Internal Request's urlList should not be empty when copied from constructor.");
   RefPtr<InternalRequest> copy = new InternalRequest(mURLList.LastElement(),
                                                      mFragment);
   copy->SetMethod(mMethod);
   copy->mHeaders = new InternalHeaders(*mHeaders);
   copy->SetUnsafeRequest();
   copy->mBodyStream = mBodyStream;
   copy->mBodyLength = mBodyLength;
-  copy->mForceOriginHeader = true;
   // The "client" is not stored in our implementation. Fetch API users should
   // use the appropriate window/document/principal and other Gecko security
   // mechanisms as appropriate.
   copy->mSameOriginDataURL = true;
   copy->mPreserveContentCodings = true;
   copy->mReferrer = mReferrer;
   copy->mReferrerPolicy = mReferrerPolicy;
   copy->mEnvironmentReferrerPolicy = mEnvironmentReferrerPolicy;
@@ -90,17 +89,16 @@ InternalRequest::InternalRequest(const n
   , mEnvironmentReferrerPolicy(net::RP_Unset)
   , mMode(RequestMode::No_cors)
   , mCredentialsMode(RequestCredentials::Omit)
   , mResponseTainting(LoadTainting::Basic)
   , mCacheMode(RequestCache::Default)
   , mRedirectMode(RequestRedirect::Follow)
   , mMozErrors(false)
   , mAuthenticationFlag(false)
-  , mForceOriginHeader(false)
   , mPreserveContentCodings(false)
     // FIXME(nsm): This should be false by default, but will lead to the
     // algorithm never loading data: URLs right now. See Bug 1018872 about
     // how certain contexts will override it to set it to true. Fetch
     // specification does not handle this yet.
   , mSameOriginDataURL(true)
   , mSkipServiceWorker(false)
   , mSynchronous(false)
@@ -132,17 +130,16 @@ InternalRequest::InternalRequest(const n
   , mMode(aMode)
   , mCredentialsMode(aRequestCredentials)
   , mResponseTainting(LoadTainting::Basic)
   , mCacheMode(aCacheMode)
   , mRedirectMode(aRequestRedirect)
   , mIntegrity(aIntegrity)
   , mMozErrors(false)
   , mAuthenticationFlag(false)
-  , mForceOriginHeader(false)
   , mPreserveContentCodings(false)
     // FIXME See the above comment in the default constructor.
   , mSameOriginDataURL(true)
   , mSkipServiceWorker(false)
   , mSynchronous(false)
   , mUnsafeRequest(false)
   , mUseURLCredentials(false)
 {
@@ -162,17 +159,16 @@ InternalRequest::InternalRequest(const I
   , mCredentialsMode(aOther.mCredentialsMode)
   , mResponseTainting(aOther.mResponseTainting)
   , mCacheMode(aOther.mCacheMode)
   , mRedirectMode(aOther.mRedirectMode)
   , mIntegrity(aOther.mIntegrity)
   , mMozErrors(aOther.mMozErrors)
   , mFragment(aOther.mFragment)
   , mAuthenticationFlag(aOther.mAuthenticationFlag)
-  , mForceOriginHeader(aOther.mForceOriginHeader)
   , mPreserveContentCodings(aOther.mPreserveContentCodings)
   , mSameOriginDataURL(aOther.mSameOriginDataURL)
   , mSkipServiceWorker(aOther.mSkipServiceWorker)
   , mSynchronous(aOther.mSynchronous)
   , mUnsafeRequest(aOther.mUnsafeRequest)
   , mUseURLCredentials(aOther.mUseURLCredentials)
   , mCreatedByFetchEvent(aOther.mCreatedByFetchEvent)
   , mContentPolicyTypeOverridden(aOther.mContentPolicyTypeOverridden)
--- a/dom/fetch/InternalRequest.h
+++ b/dom/fetch/InternalRequest.h
@@ -446,22 +446,16 @@ public:
 
   InternalHeaders*
   Headers()
   {
     return mHeaders;
   }
 
   bool
-  ForceOriginHeader()
-  {
-    return mForceOriginHeader;
-  }
-
-  bool
   SameOriginDataURL() const
   {
     return mSameOriginDataURL;
   }
 
   void
   UnsetSameOriginDataURL()
   {
@@ -645,17 +639,16 @@ private:
   RequestCredentials mCredentialsMode;
   MOZ_INIT_OUTSIDE_CTOR LoadTainting mResponseTainting;
   RequestCache mCacheMode;
   RequestRedirect mRedirectMode;
   nsString mIntegrity;
   bool mMozErrors;
   nsCString mFragment;
   MOZ_INIT_OUTSIDE_CTOR bool mAuthenticationFlag;
-  MOZ_INIT_OUTSIDE_CTOR bool mForceOriginHeader;
   MOZ_INIT_OUTSIDE_CTOR bool mPreserveContentCodings;
   MOZ_INIT_OUTSIDE_CTOR bool mSameOriginDataURL;
   MOZ_INIT_OUTSIDE_CTOR bool mSkipServiceWorker;
   MOZ_INIT_OUTSIDE_CTOR bool mSynchronous;
   MOZ_INIT_OUTSIDE_CTOR bool mUnsafeRequest;
   MOZ_INIT_OUTSIDE_CTOR bool mUseURLCredentials;
   // This is only set when a Request object is created by a fetch event.  We
   // use it to check if Service Workers are simply fetching intercepted Request
--- a/dom/media/tests/mochitest/mochitest.ini
+++ b/dom/media/tests/mochitest/mochitest.ini
@@ -63,17 +63,17 @@ skip-if = os == 'mac' || os == 'win' || 
 [test_getUserMedia_audioConstraints_concurrentStreams.html]
 skip-if = os == 'mac' || os == 'win' || toolkit == 'android' # Bug 1404995, no loopback devices on some platforms
 [test_getUserMedia_basicAudio_loopback.html]
 skip-if = os == 'mac' || os == 'win' || toolkit == 'android' # Bug 1404995, no loopback devices on some platforms
 [test_getUserMedia_basicAudio.html]
 [test_getUserMedia_basicVideo.html]
 [test_getUserMedia_basicVideo_playAfterLoadedmetadata.html]
 [test_getUserMedia_basicScreenshare.html]
-skip-if = toolkit == 'android' # no screenshare on android
+skip-if = toolkit == 'android' || (os == 'win' && webrender) # no screenshare on android, see bug 1504162 for webrender on windows
 [test_getUserMedia_basicTabshare.html]
 skip-if = toolkit == 'android' # no windowshare on android
 [test_getUserMedia_basicWindowshare.html]
 skip-if = toolkit == 'android' # no windowshare on android
 [test_getUserMedia_basicVideoAudio.html]
 [test_getUserMedia_bug1223696.html]
 [test_getUserMedia_constraints.html]
 [test_getUserMedia_callbacks.html]
--- a/dom/script/ScriptLoader.cpp
+++ b/dom/script/ScriptLoader.cpp
@@ -2431,20 +2431,16 @@ ScriptLoader::EvaluateScript(ScriptLoadR
                                               aRequest->ScriptBinASTData().begin(),
                                               aRequest->ScriptBinASTData().length(),
                                               &script);
               } else {
                 MOZ_ASSERT(aRequest->IsTextSource());
                 auto srcBuf = GetScriptSource(cx, aRequest);
 
                 if (srcBuf) {
-                  if (recordreplay::IsRecordingOrReplaying()) {
-                    recordreplay::NoteContentParse16(this, options.filename(), "application/javascript",
-                                                     srcBuf->get(), srcBuf->length());
-                  }
                   rv = exec.CompileAndExec(options, *srcBuf, &script);
                 } else {
                   rv = NS_ERROR_OUT_OF_MEMORY;
                 }
               }
             }
           }
 
--- a/gfx/2d/2D.h
+++ b/gfx/2d/2D.h
@@ -398,17 +398,18 @@ public:
 
   /**
    * This function will return true if the surface type matches that of a
    * DataSourceSurface and if GetDataSurface will return the same object.
    */
   bool IsDataSourceSurface() const {
     SurfaceType type = GetType();
     return type == SurfaceType::DATA ||
-           type == SurfaceType::DATA_SHARED;
+           type == SurfaceType::DATA_SHARED ||
+           type == SurfaceType::DATA_RECYCLING_SHARED;
   }
 
   /**
    * This function will get a DataSourceSurface for this surface, a
    * DataSourceSurface's data can be accessed directly.
    */
   virtual already_AddRefed<DataSourceSurface> GetDataSurface() = 0;
 
--- a/gfx/2d/Types.h
+++ b/gfx/2d/Types.h
@@ -28,17 +28,18 @@ enum class SurfaceType : int8_t {
   COREGRAPHICS_IMAGE, /* Surface wrapping a CoreGraphics Image */
   COREGRAPHICS_CGCONTEXT, /* Surface wrapping a CG context */
   SKIA, /* Surface wrapping a Skia bitmap */
   DUAL_DT, /* Snapshot of a dual drawtarget */
   D2D1_1_IMAGE, /* A D2D 1.1 ID2D1Image SourceSurface */
   RECORDING, /* Surface used for recording */
   TILED, /* Surface from a tiled DrawTarget */
   DATA_SHARED, /* Data surface using shared memory */
-  CAPTURE /* Data from a DrawTargetCapture */
+  CAPTURE, /* Data from a DrawTargetCapture */
+  DATA_RECYCLING_SHARED /* Data surface using shared memory */
 };
 
 enum class SurfaceFormat : int8_t {
   // The following values are named to reflect layout of colors in memory, from
   // lowest byte to highest byte. The 32-bit value layout depends on machine
   // endianness.
   //               in-memory            32-bit LE value   32-bit BE value
   B8G8R8A8,     // [BB, GG, RR, AA]     0xAARRGGBB        0xBBGGRRAA
--- a/gfx/layers/ImageContainer.cpp
+++ b/gfx/layers/ImageContainer.cpp
@@ -240,16 +240,19 @@ ImageContainer::~ImageContainer()
   if (mNotifyCompositeListener) {
     mNotifyCompositeListener->ClearImageContainer();
   }
   if (mAsyncContainerHandle) {
     if (RefPtr<ImageBridgeChild> imageBridge = ImageBridgeChild::GetSingleton()) {
       imageBridge->ForgetImageContainer(mAsyncContainerHandle);
     }
   }
+  if (mSharedAnimation) {
+    mSharedAnimation->Destroy();
+  }
 }
 
 RefPtr<PlanarYCbCrImage>
 ImageContainer::CreatePlanarYCbCrImage()
 {
   RecursiveMutexAutoLock lock(mRecursiveMutex);
   EnsureImageClient();
   if (mImageClient && mImageClient->AsImageClientSingle()) {
--- a/gfx/layers/ImageContainer.h
+++ b/gfx/layers/ImageContainer.h
@@ -704,17 +704,17 @@ private:
   // sucessfully created with ENABLE_ASYNC, or points to null otherwise.
   // 'unsuccessful' in this case only means that the ImageClient could not
   // be created, most likely because off-main-thread compositing is not enabled.
   // In this case the ImageContainer is perfectly usable, but it will forward
   // frames to the compositor through transactions in the main thread rather than
   // asynchronusly using the ImageBridge IPDL protocol.
   RefPtr<ImageClient> mImageClient;
 
-  nsAutoPtr<SharedSurfacesAnimation> mSharedAnimation;
+  RefPtr<SharedSurfacesAnimation> mSharedAnimation;
 
   bool mIsAsync;
   CompositableHandle mAsyncContainerHandle;
 
   // ProducerID for last current image(s)
   ProducerID mCurrentProducerID;
 
   RefPtr<ImageContainerListener> mNotifyCompositeListener;
--- a/gfx/layers/ipc/PWebRenderBridge.ipdl
+++ b/gfx/layers/ipc/PWebRenderBridge.ipdl
@@ -18,16 +18,17 @@ using mozilla::layers::APZTestData from 
 using mozilla::layers::ScrollUpdatesMap from "FrameMetrics.h";
 using struct mozilla::layers::ScrollableLayerGuid from "mozilla/layers/ScrollableLayerGuid.h";
 using struct mozilla::layers::TextureFactoryIdentifier from "mozilla/layers/CompositorTypes.h";
 using struct mozilla::layers::TextureInfo from "mozilla/layers/CompositorTypes.h";
 using mozilla::layers::CompositableHandle from "mozilla/layers/LayersTypes.h";
 using mozilla::wr::BuiltDisplayListDescriptor from "mozilla/webrender/webrender_ffi.h";
 using mozilla::wr::IdNamespace from "mozilla/webrender/WebRenderTypes.h";
 using mozilla::wr::MaybeIdNamespace from "mozilla/webrender/WebRenderTypes.h";
+using mozilla::wr::ExternalImageKeyPair from "mozilla/webrender/WebRenderTypes.h";
 using mozilla::layers::WebRenderScrollData from "mozilla/layers/WebRenderScrollData.h";
 using mozilla::layers::FocusTarget from "mozilla/layers/FocusTarget.h";
 using mozilla::layers::LayersObserverEpoch from "mozilla/layers/LayersTypes.h";
 using mozilla::layers::TransactionId from "mozilla/layers/LayersTypes.h";
 
 namespace mozilla {
 namespace layers {
 
@@ -79,13 +80,14 @@ parent:
   sync SetAsyncZoom(ViewID scrollId, float zoom);
   async FlushApzRepaints();
   sync GetAPZTestData() returns (APZTestData data);
 
   async Shutdown();
   sync ShutdownSync();
 child:
   async WrUpdated(IdNamespace aNewIdNamespace, TextureFactoryIdentifier textureFactoryIdentifier);
+  async WrReleasedImages(ExternalImageKeyPair[] pairs);
   async __delete__();
 };
 
 } // layers
 } // mozilla
--- a/gfx/layers/ipc/SharedSurfacesChild.cpp
+++ b/gfx/layers/ipc/SharedSurfacesChild.cpp
@@ -3,16 +3,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "SharedSurfacesChild.h"
 #include "SharedSurfacesParent.h"
 #include "CompositorManagerChild.h"
 #include "mozilla/gfx/gfxVars.h"
+#include "mozilla/image/RecyclingSourceSurface.h"
 #include "mozilla/layers/SourceSurfaceSharedData.h"
 #include "mozilla/layers/WebRenderBridgeChild.h"
 #include "mozilla/layers/WebRenderLayerManager.h"
 #include "mozilla/SystemGroup.h"        // for SystemGroup
 
 namespace mozilla {
 namespace layers {
 
@@ -151,16 +152,34 @@ SharedSurfacesChild::SharedUserData::Upd
     ImageKeyData data(aManager, key);
     mKeys.AppendElement(std::move(data));
     aResources.AddExternalImage(mId, key);
   }
 
   return key;
 }
 
+/* static */ SourceSurfaceSharedData*
+SharedSurfacesChild::AsSourceSurfaceSharedData(SourceSurface* aSurface)
+{
+  MOZ_ASSERT(aSurface);
+  switch (aSurface->GetType()) {
+    case SurfaceType::DATA_SHARED:
+      return static_cast<SourceSurfaceSharedData*>(aSurface);
+    case SurfaceType::DATA_RECYCLING_SHARED: {
+      auto recycleSurface =
+        static_cast<image::RecyclingSourceSurface*>(aSurface);
+      auto childSurface = recycleSurface->GetChildSurface();
+      return static_cast<SourceSurfaceSharedData*>(childSurface);
+    }
+    default:
+      return nullptr;
+  }
+}
+
 /* static */ void
 SharedSurfacesChild::DestroySharedUserData(void* aClosure)
 {
   MOZ_ASSERT(aClosure);
   auto data = static_cast<SharedUserData*>(aClosure);
   delete data;
 }
 
@@ -333,44 +352,44 @@ SharedSurfacesChild::Share(ImageContaine
     return NS_ERROR_NOT_AVAILABLE;
   }
 
   RefPtr<gfx::SourceSurface> surface = images[0].mImage->GetAsSourceSurface();
   if (!surface) {
     return NS_ERROR_NOT_IMPLEMENTED;
   }
 
-  if (surface->GetType() != SurfaceType::DATA_SHARED) {
+  auto sharedSurface = AsSourceSurfaceSharedData(surface);
+  if (!sharedSurface) {
     return NS_ERROR_NOT_IMPLEMENTED;
   }
 
-  auto sharedSurface = static_cast<SourceSurfaceSharedData*>(surface.get());
   SharedSurfacesAnimation* anim = aContainer->GetSharedSurfacesAnimation();
   if (anim) {
-    return anim->UpdateKey(sharedSurface, aManager, aResources, aKey);
+    return anim->UpdateKey(surface, sharedSurface, aManager, aResources, aKey);
   }
 
   return Share(sharedSurface, aManager, aResources, aKey);
 }
 
 /* static */ nsresult
 SharedSurfacesChild::Share(SourceSurface* aSurface,
                            wr::ExternalImageId& aId)
 {
   MOZ_ASSERT(NS_IsMainThread());
   MOZ_ASSERT(aSurface);
 
-  if (aSurface->GetType() != SurfaceType::DATA_SHARED) {
+  auto sharedSurface = AsSourceSurfaceSharedData(aSurface);
+  if (!sharedSurface) {
     return NS_ERROR_NOT_IMPLEMENTED;
   }
 
   // The external image ID does not change with the invalidation counter. The
   // caller of this should be aware of the invalidations of the surface through
   // another mechanism (e.g. imgRequestProxy listener notifications).
-  auto sharedSurface = static_cast<SourceSurfaceSharedData*>(aSurface);
   SharedUserData* data = nullptr;
   nsresult rv = ShareInternal(sharedSurface, &data);
   if (NS_SUCCEEDED(rv)) {
     MOZ_ASSERT(data);
     aId = data->Id();
   }
 
   return rv;
@@ -438,84 +457,242 @@ SharedSurfacesChild::UpdateAnimation(Ima
                                      const IntRect& aDirtyRect)
 {
   MOZ_ASSERT(NS_IsMainThread());
   MOZ_ASSERT(aContainer);
   MOZ_ASSERT(!aContainer->IsAsync());
   MOZ_ASSERT(aSurface);
 
   // If we aren't using shared surfaces, then is nothing to do.
-  if (aSurface->GetType() != SurfaceType::DATA_SHARED) {
+  auto sharedSurface = SharedSurfacesChild::AsSourceSurfaceSharedData(aSurface);
+  if (!sharedSurface) {
     MOZ_ASSERT(!aContainer->GetSharedSurfacesAnimation());
     return NS_ERROR_NOT_IMPLEMENTED;
   }
 
   SharedSurfacesAnimation* anim =
     aContainer->EnsureSharedSurfacesAnimation();
   MOZ_ASSERT(anim);
 
-  auto sharedSurface = static_cast<SourceSurfaceSharedData*>(aSurface);
-  return anim->SetCurrentFrame(sharedSurface, aDirtyRect);
+  return anim->SetCurrentFrame(aSurface, sharedSurface, aDirtyRect);
+}
+
+AnimationImageKeyData::AnimationImageKeyData(WebRenderLayerManager* aManager,
+                                             const wr::ImageKey& aImageKey)
+  : SharedSurfacesChild::ImageKeyData(aManager, aImageKey)
+  , mRecycling(false)
+{ }
+
+AnimationImageKeyData::AnimationImageKeyData(AnimationImageKeyData&& aOther)
+  : SharedSurfacesChild::ImageKeyData(std::move(aOther))
+  , mPendingRelease(std::move(aOther.mPendingRelease))
+  , mRecycling(aOther.mRecycling)
+{ }
+
+AnimationImageKeyData&
+AnimationImageKeyData::operator=(AnimationImageKeyData&& aOther)
+{
+  mPendingRelease = std::move(aOther.mPendingRelease);
+  mRecycling = aOther.mRecycling;
+  SharedSurfacesChild::ImageKeyData::operator=(std::move(aOther));
+  return *this;
+}
+
+AnimationImageKeyData::~AnimationImageKeyData() = default;
+
+SharedSurfacesAnimation::~SharedSurfacesAnimation()
+{
+  MOZ_ASSERT(mKeys.IsEmpty());
+}
+
+void
+SharedSurfacesAnimation::Destroy()
+{
+  if (!NS_IsMainThread()) {
+    nsCOMPtr<nsIRunnable> task =
+      NewRunnableMethod("SharedSurfacesAnimation::Destroy",
+                        this, &SharedSurfacesAnimation::Destroy);
+    SystemGroup::Dispatch(TaskCategory::Other, task.forget());
+    return;
+  }
+
+  if (mKeys.IsEmpty()) {
+    return;
+  }
+
+  for (const auto& entry : mKeys) {
+    MOZ_ASSERT(!entry.mManager->IsDestroyed());
+    if (entry.mRecycling) {
+      entry.mManager->DeregisterAsyncAnimation(entry.mImageKey);
+    }
+    entry.mManager->AddImageKeyForDiscard(entry.mImageKey);
+  }
+
+  mKeys.Clear();
+}
+
+void
+SharedSurfacesAnimation::HoldSurfaceForRecycling(AnimationImageKeyData& aEntry,
+                                                 SourceSurface* aParentSurface,
+                                                 SourceSurfaceSharedData* aSurface)
+{
+  if (aParentSurface == static_cast<SourceSurface*>(aSurface)) {
+    return;
+  }
+
+  if (!aEntry.mRecycling) {
+    aEntry.mManager->RegisterAsyncAnimation(aEntry.mImageKey, this);
+    aEntry.mRecycling = true;
+  }
+
+  aEntry.mPendingRelease.AppendElement(aParentSurface);
 }
 
 nsresult
-SharedSurfacesAnimation::SetCurrentFrame(SourceSurfaceSharedData* aSurface,
+SharedSurfacesAnimation::SetCurrentFrame(SourceSurface* aParentSurface,
+                                         SourceSurfaceSharedData* aSurface,
                                          const gfx::IntRect& aDirtyRect)
 {
   MOZ_ASSERT(aSurface);
 
-  SharedUserData* data = nullptr;
+  SharedSurfacesChild::SharedUserData* data = nullptr;
   nsresult rv = SharedSurfacesChild::ShareInternal(aSurface, &data);
   if (NS_FAILED(rv)) {
     return rv;
   }
 
   MOZ_ASSERT(data);
   mId = data->Id();
 
   auto i = mKeys.Length();
   while (i > 0) {
     --i;
-    SharedSurfacesChild::ImageKeyData& entry = mKeys[i];
-    if (entry.mManager->IsDestroyed()) {
-      mKeys.RemoveElementAt(i);
-      continue;
-    }
+    AnimationImageKeyData& entry = mKeys[i];
+    MOZ_ASSERT(!entry.mManager->IsDestroyed());
 
     entry.MergeDirtyRect(Some(aDirtyRect));
-
     Maybe<IntRect> dirtyRect = entry.TakeDirtyRect();
     if (dirtyRect) {
+      HoldSurfaceForRecycling(entry, aParentSurface, aSurface);
       auto& resourceUpdates = entry.mManager->AsyncResourceUpdates();
       resourceUpdates.UpdateExternalImage(mId, entry.mImageKey,
                                           ViewAs<ImagePixel>(dirtyRect.ref()));
     }
   }
 
   return NS_OK;
 }
 
 nsresult
-SharedSurfacesAnimation::UpdateKey(SourceSurfaceSharedData* aSurface,
+SharedSurfacesAnimation::UpdateKey(SourceSurface* aParentSurface,
+                                   SourceSurfaceSharedData* aSurface,
                                    WebRenderLayerManager* aManager,
                                    wr::IpcResourceUpdateQueue& aResources,
                                    wr::ImageKey& aKey)
 {
-  SharedUserData* data = nullptr;
+  SharedSurfacesChild::SharedUserData* data = nullptr;
   nsresult rv = SharedSurfacesChild::ShareInternal(aSurface, &data);
   if (NS_FAILED(rv)) {
     return rv;
   }
 
   MOZ_ASSERT(data);
   if (mId.mHandle != data->Id().mHandle) {
     mKeys.Clear();
     mId = data->Id();
   }
 
-  aKey = SharedSurfacesChild::SharedUserData::UpdateKey(aManager,
-                                                        aResources,
-                                                        Nothing());
+  // We iterate through all of the items to ensure we clean up the old
+  // WebRenderLayerManager references. Most of the time there will be few
+  // entries and this should not be particularly expensive compared to the
+  // cost of duplicating image keys. In an ideal world, we would generate a
+  // single key for the surface, and it would be usable on all of the
+  // renderer instances. For now, we must allocate a key for each WR bridge.
+  bool found = false;
+  auto i = mKeys.Length();
+  while (i > 0) {
+    --i;
+    AnimationImageKeyData& entry = mKeys[i];
+    MOZ_ASSERT(!entry.mManager->IsDestroyed());
+    if (entry.mManager == aManager) {
+      WebRenderBridgeChild* wrBridge = aManager->WrBridge();
+      MOZ_ASSERT(wrBridge);
+
+      // Even if the manager is the same, its underlying WebRenderBridgeChild
+      // can change state. If our namespace differs, then our old key has
+      // already been discarded.
+      bool ownsKey = wrBridge->GetNamespace() == entry.mImageKey.mNamespace;
+      if (!ownsKey) {
+        entry.mImageKey = wrBridge->GetNextImageKey();
+        HoldSurfaceForRecycling(entry, aParentSurface, aSurface);
+        aResources.AddExternalImage(mId, entry.mImageKey);
+      } else {
+        MOZ_ASSERT(entry.mDirtyRect.isNothing());
+      }
+
+      aKey = entry.mImageKey;
+      found = true;
+      break;
+    }
+  }
+
+  if (!found) {
+    aKey = aManager->WrBridge()->GetNextImageKey();
+    AnimationImageKeyData data(aManager, aKey);
+    HoldSurfaceForRecycling(data, aParentSurface, aSurface);
+    mKeys.AppendElement(std::move(data));
+    aResources.AddExternalImage(mId, aKey);
+  }
+
   return NS_OK;
 }
 
+void
+SharedSurfacesAnimation::ReleasePreviousFrame(WebRenderLayerManager* aManager,
+                                              const wr::ExternalImageId& aId)
+{
+  MOZ_ASSERT(aManager);
+
+  auto i = mKeys.Length();
+  while (i > 0) {
+    --i;
+    AnimationImageKeyData& entry = mKeys[i];
+    MOZ_ASSERT(!entry.mManager->IsDestroyed());
+    if (entry.mManager == aManager) {
+      size_t k;
+      for (k = 0; k < entry.mPendingRelease.Length(); ++k) {
+        auto sharedSurface =
+          SharedSurfacesChild::AsSourceSurfaceSharedData(entry.mPendingRelease[k]);
+        MOZ_ASSERT(sharedSurface);
+
+        Maybe<wr::ExternalImageId> extId =
+          SharedSurfacesChild::GetExternalId(sharedSurface);
+        if (extId && extId.ref() == aId) {
+          break;
+        }
+      }
+
+      if (k == entry.mPendingRelease.Length()) {
+        continue;
+      }
+
+      entry.mPendingRelease.RemoveElementsAt(0, k + 1);
+      break;
+    }
+  }
+}
+
+void
+SharedSurfacesAnimation::Invalidate(WebRenderLayerManager* aManager)
+{
+  auto i = mKeys.Length();
+  while (i > 0) {
+    --i;
+    AnimationImageKeyData& entry = mKeys[i];
+    if (entry.mManager == aManager) {
+      mKeys.RemoveElementAt(i);
+      break;
+    }
+  }
+}
+
 } // namespace layers
 } // namespace mozilla
--- a/gfx/layers/ipc/SharedSurfacesChild.h
+++ b/gfx/layers/ipc/SharedSurfacesChild.h
@@ -12,16 +12,28 @@
 #include "mozilla/Maybe.h"              // for Maybe
 #include "mozilla/RefPtr.h"             // for already_AddRefed
 #include "mozilla/StaticPtr.h"          // for StaticRefPtr
 #include "mozilla/gfx/UserData.h"       // for UserDataKey
 #include "mozilla/webrender/WebRenderTypes.h" // for wr::ImageKey
 #include "nsTArray.h"                   // for AutoTArray
 
 namespace mozilla {
+namespace layers {
+class AnimationImageKeyData;
+} // namespace mozilla
+} // namespace layers
+
+template<>
+struct nsTArray_CopyChooser<mozilla::layers::AnimationImageKeyData>
+{
+  typedef nsTArray_CopyWithConstructors<mozilla::layers::AnimationImageKeyData> Type;
+};
+
+namespace mozilla {
 namespace gfx {
 class SourceSurfaceSharedData;
 } // namespace gfx
 
 namespace wr {
 class IpcResourceUpdateQueue;
 } // namespace wr
 
@@ -75,27 +87,28 @@ public:
 
   /**
    * Get the external ID, if any, bound to the shared surface. Used for memory
    * reporting purposes.
    */
   static Maybe<wr::ExternalImageId>
   GetExternalId(const gfx::SourceSurfaceSharedData* aSurface);
 
+  /**
+   * Get the surface (or its underlying surface) as a SourceSurfaceSharedData
+   * pointer, if valid.
+   */
+  static gfx::SourceSurfaceSharedData*
+  AsSourceSurfaceSharedData(gfx::SourceSurface* aSurface);
+
   static nsresult UpdateAnimation(ImageContainer* aContainer,
                                   gfx::SourceSurface* aSurface,
                                   const gfx::IntRect& aDirtyRect);
 
-private:
-  SharedSurfacesChild() = delete;
-  ~SharedSurfacesChild() = delete;
-
-  friend class SharedSurfacesAnimation;
-
-  class ImageKeyData final {
+  class ImageKeyData {
   public:
     ImageKeyData(WebRenderLayerManager* aManager,
                  const wr::ImageKey& aImageKey);
     ~ImageKeyData();
 
     ImageKeyData(ImageKeyData&& aOther);
     ImageKeyData& operator=(ImageKeyData&& aOther);
     ImageKeyData(const ImageKeyData&) = delete;
@@ -108,17 +121,23 @@ private:
       return std::move(mDirtyRect);
     }
 
     RefPtr<WebRenderLayerManager> mManager;
     Maybe<gfx::IntRect> mDirtyRect;
     wr::ImageKey mImageKey;
   };
 
-  class SharedUserData {
+private:
+  SharedSurfacesChild() = delete;
+  ~SharedSurfacesChild() = delete;
+
+  friend class SharedSurfacesAnimation;
+
+  class SharedUserData final {
   public:
     SharedUserData()
       : mShared(false)
     { }
 
     explicit SharedUserData(const wr::ExternalImageId& aId)
       : mId(aId)
       , mShared(false)
@@ -172,44 +191,94 @@ private:
                       bool aReleaseId,
                       nsTArray<ImageKeyData>& aKeys);
 
   static void DestroySharedUserData(void* aClosure);
 
   static gfx::UserDataKey sSharedKey;
 };
 
+class AnimationImageKeyData final : public SharedSurfacesChild::ImageKeyData
+{
+public:
+  AnimationImageKeyData(WebRenderLayerManager* aManager,
+               const wr::ImageKey& aImageKey);
+
+  ~AnimationImageKeyData();
+
+  AnimationImageKeyData(AnimationImageKeyData&& aOther);
+  AnimationImageKeyData& operator=(AnimationImageKeyData&& aOther);
+
+  AutoTArray<RefPtr<gfx::SourceSurface>, 2> mPendingRelease;
+  bool mRecycling;
+};
+
 /**
  * This helper class owns a single ImageKey which will map to different external
  * image IDs representing different frames in an animation.
  */
-class SharedSurfacesAnimation final : private SharedSurfacesChild::SharedUserData
+class SharedSurfacesAnimation final
 {
 public:
+  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(SharedSurfacesAnimation)
+
   SharedSurfacesAnimation()
   { }
 
+  void Destroy();
+
   /**
    * Set the animation to display the given frame.
+   * @param aParentSurface The owning surface of aSurface. This may be the same
+   *                       or it may be a wrapper surface such as
+   *                       RecyclingSourceSurface.
    * @param aSurface    The current frame.
    * @param aDirtyRect  Dirty rect representing the change between the new frame
    *                    and the previous frame. We will request only the delta
    *                    be reuploaded by WebRender.
    */
-  nsresult SetCurrentFrame(gfx::SourceSurfaceSharedData* aSurface,
+  nsresult SetCurrentFrame(gfx::SourceSurface* aParentSurface,
+                           gfx::SourceSurfaceSharedData* aSurface,
                            const gfx::IntRect& aDirtyRect);
 
   /**
    * Generate an ImageKey for the given frame.
+   * @param aParentSurface The owning surface of aSurface. This may be the same
+   *                       or it may be a wrapper surface such as
+   *                       RecyclingSourceSurface.
    * @param aSurface  The current frame. This should match what was cached via
    *                  SetCurrentFrame, but if it does not, it will need to
    *                  regenerate the cached ImageKey.
    */
-  nsresult UpdateKey(gfx::SourceSurfaceSharedData* aSurface,
+  nsresult UpdateKey(gfx::SourceSurface* aParentSurface,
+                     gfx::SourceSurfaceSharedData* aSurface,
                      WebRenderLayerManager* aManager,
                      wr::IpcResourceUpdateQueue& aResources,
                      wr::ImageKey& aKey);
+
+  /**
+   * Release our reference to all frames up to and including the frame which
+   * has an external image ID which matches aId.
+   */
+  void ReleasePreviousFrame(WebRenderLayerManager* aManager,
+                            const wr::ExternalImageId& aId);
+
+  /**
+   * Destroy any state information bound for the given layer manager. Any
+   * image keys are already invalid.
+   */
+  void Invalidate(WebRenderLayerManager* aManager);
+
+private:
+  ~SharedSurfacesAnimation();
+
+  void HoldSurfaceForRecycling(AnimationImageKeyData& aEntry,
+                               gfx::SourceSurface* aParentSurface,
+                               gfx::SourceSurfaceSharedData* aSurface);
+
+  AutoTArray<AnimationImageKeyData, 1> mKeys;
+  wr::ExternalImageId mId;
 };
 
 } // namespace layers
 } // namespace mozilla
 
 #endif
--- a/gfx/layers/wr/WebRenderBridgeChild.cpp
+++ b/gfx/layers/wr/WebRenderBridgeChild.cpp
@@ -566,16 +566,25 @@ WebRenderBridgeChild::RecvWrUpdated(cons
   // Since usage of invalid keys could cause crash in webrender.
   mIdNamespace = aNewIdNamespace;
   // Just clear FontInstaceKeys/FontKeys, they are removed during WebRenderAPI destruction.
   mFontInstanceKeys.Clear();
   mFontKeys.Clear();
   return IPC_OK();
 }
 
+mozilla::ipc::IPCResult
+WebRenderBridgeChild::RecvWrReleasedImages(nsTArray<wr::ExternalImageKeyPair>&& aPairs)
+{
+  if (mManager) {
+    mManager->WrReleasedImages(aPairs);
+  }
+  return IPC_OK();
+}
+
 void
 WebRenderBridgeChild::BeginClearCachedResources()
 {
   mIsInClearCachedResources = true;
   // Clear display list and animtaions at parent side before clearing cached
   // resources on client side. It prevents to clear resources before clearing
   // display list at parent side.
   SendClearCachedResources();
--- a/gfx/layers/wr/WebRenderBridgeChild.h
+++ b/gfx/layers/wr/WebRenderBridgeChild.h
@@ -206,16 +206,17 @@ private:
   bool InForwarderThread() override;
 
   void ActorDestroy(ActorDestroyReason why) override;
 
   void DoDestroy();
 
   mozilla::ipc::IPCResult RecvWrUpdated(const wr::IdNamespace& aNewIdNamespace,
                                         const TextureFactoryIdentifier& textureFactoryIdentifier) override;
+  mozilla::ipc::IPCResult RecvWrReleasedImages(nsTArray<wr::ExternalImageKeyPair>&& aPairs) override;
 
   void AddIPDLReference() {
     MOZ_ASSERT(mIPCOpen == false);
     mIPCOpen = true;
     AddRef();
   }
   void ReleaseIPDLReference() {
     MOZ_ASSERT(mIPCOpen == true);
--- a/gfx/layers/wr/WebRenderBridgeParent.cpp
+++ b/gfx/layers/wr/WebRenderBridgeParent.cpp
@@ -249,33 +249,42 @@ protected:
   TimeStamp mTxnStartTime;
 };
 
 
 class WebRenderBridgeParent::ScheduleSharedSurfaceRelease final
   : public wr::NotificationHandler
 {
 public:
-  ScheduleSharedSurfaceRelease()
+  explicit ScheduleSharedSurfaceRelease(WebRenderBridgeParent* aWrBridge)
+    : mWrBridge(aWrBridge)
+    , mSurfaces(20)
   { }
 
-  void Add(const wr::ExternalImageId& aId)
+  void Add(const wr::ImageKey& aKey,
+           const wr::ExternalImageId& aId)
   {
-    mSurfaces.AppendElement(aId);
+    mSurfaces.AppendElement(wr::ExternalImageKeyPair { aKey, aId });
   }
 
   void Notify(wr::Checkpoint) override
   {
-    for (const auto& id : mSurfaces) {
-      SharedSurfacesParent::Release(id);
-    }
+    CompositorThreadHolder::Loop()->PostTask(
+      NewRunnableMethod<nsTArray<wr::ExternalImageKeyPair>>(
+        "ObserveSharedSurfaceRelease",
+        mWrBridge,
+        &WebRenderBridgeParent::ObserveSharedSurfaceRelease,
+        std::move(mSurfaces)
+      )
+    );
   }
 
 private:
-  AutoTArray<wr::ExternalImageId, 20> mSurfaces;
+  RefPtr<WebRenderBridgeParent> mWrBridge;
+  nsTArray<wr::ExternalImageKeyPair> mSurfaces;
 };
 
 class MOZ_STACK_CLASS AutoWebRenderBridgeParentAsyncMessageSender
 {
 public:
   explicit AutoWebRenderBridgeParentAsyncMessageSender(WebRenderBridgeParent* aWebRenderBridgeParent,
                                                        InfallibleTArray<OpDestroy>* aDestroyActors = nullptr)
     : mWebRenderBridgeParent(aWebRenderBridgeParent)
@@ -535,17 +544,18 @@ WebRenderBridgeParent::UpdateResources(c
         aUpdates.DeleteFontInstance(op.key());
         break;
       }
       case OpUpdateResource::T__None: break;
     }
   }
 
   if (scheduleRelease) {
-    aUpdates.Notify(wr::Checkpoint::FrameRendered, std::move(scheduleRelease));
+    aUpdates.Notify(wr::Checkpoint::FrameTexturesUpdated,
+                    std::move(scheduleRelease));
   }
   return true;
 }
 
 bool
 WebRenderBridgeParent::AddExternalImage(wr::ExternalImageId aExtId, wr::ImageKey aKey,
                                         wr::TransactionBuilder& aResources)
 {
@@ -690,19 +700,19 @@ WebRenderBridgeParent::UpdateExternalIma
     return false;
   }
 
   if (!(it->second == aExtId)) {
     // We already have a mapping for this image key, so ensure we release the
     // previous external image ID. This can happen when an image is animated,
     // and it is changing the external image that the animation points to.
     if (!aScheduleRelease) {
-      aScheduleRelease = MakeUnique<ScheduleSharedSurfaceRelease>();
+      aScheduleRelease = MakeUnique<ScheduleSharedSurfaceRelease>(this);
     }
-    aScheduleRelease->Add(it->second);
+    aScheduleRelease->Add(aKey, it->second);
     it->second = aExtId;
   }
 
   if (!gfxEnv::EnableWebRenderRecording()) {
     wr::ImageDescriptor descriptor(dSurf->GetSize(), dSurf->Stride(),
                                    dSurf->GetFormat());
     aResources.UpdateExternalImageWithDirtyRect(aKey, descriptor, aExtId,
                                                 wr::WrExternalImageBufferType::ExternalBuffer,
@@ -720,16 +730,27 @@ WebRenderBridgeParent::UpdateExternalIma
   IntSize size = dSurf->GetSize();
   wr::ImageDescriptor descriptor(size, map.GetStride(), dSurf->GetFormat());
   wr::Vec<uint8_t> data;
   data.PushBytes(Range<uint8_t>(map.GetData(), size.height * map.GetStride()));
   aResources.UpdateImageBuffer(keys[0], descriptor, data);
   return true;
 }
 
+void
+WebRenderBridgeParent::ObserveSharedSurfaceRelease(const nsTArray<wr::ExternalImageKeyPair>& aPairs)
+{
+  if (!mDestroyed) {
+    Unused << SendWrReleasedImages(aPairs);
+  }
+  for (const auto& pair : aPairs) {
+    SharedSurfacesParent::Release(pair.id);
+  }
+}
+
 mozilla::ipc::IPCResult
 WebRenderBridgeParent::RecvUpdateResources(nsTArray<OpUpdateResource>&& aResourceUpdates,
                                            nsTArray<RefCountedShmem>&& aSmallShmems,
                                            nsTArray<ipc::Shmem>&& aLargeShmems,
                                            const bool& aScheduleComposite)
 {
   if (mDestroyed) {
     wr::IpcResourceUpdateQueue::ReleaseShmems(this, aSmallShmems);
--- a/gfx/layers/wr/WebRenderBridgeParent.h
+++ b/gfx/layers/wr/WebRenderBridgeParent.h
@@ -250,16 +250,17 @@ private:
                        const nsTArray<ipc::Shmem>& aLargeShmems,
                        wr::TransactionBuilder& aUpdates);
   bool AddExternalImage(wr::ExternalImageId aExtId, wr::ImageKey aKey,
                         wr::TransactionBuilder& aResources);
   bool UpdateExternalImage(wr::ExternalImageId aExtId, wr::ImageKey aKey,
                            const ImageIntRect& aDirtyRect,
                            wr::TransactionBuilder& aResources,
                            UniquePtr<ScheduleSharedSurfaceRelease>& aScheduleRelease);
+  void ObserveSharedSurfaceRelease(const nsTArray<wr::ExternalImageKeyPair>& aPairs);
 
   bool PushExternalImageForTexture(wr::ExternalImageId aExtId,
                                    wr::ImageKey aKey,
                                    TextureHost* aTexture,
                                    bool aIsUpdate,
                                    wr::TransactionBuilder& aResources);
 
   void AddPipelineIdForCompositable(const wr::PipelineId& aPipelineIds,
--- a/gfx/layers/wr/WebRenderLayerManager.cpp
+++ b/gfx/layers/wr/WebRenderLayerManager.cpp
@@ -115,16 +115,18 @@ WebRenderLayerManager::DoDestroy(bool aI
   }
 
   // Clear this before calling RemoveUnusedAndResetWebRenderUserData(),
   // otherwise that function might destroy some WebRenderAnimationData instances
   // which will put stuff back into mDiscardedCompositorAnimationsIds. If
   // mActiveCompositorAnimationIds is empty that won't happen.
   mActiveCompositorAnimationIds.clear();
 
+  ClearAsyncAnimations();
+
   mWebRenderCommandBuilder.Destroy();
 
   if (mTransactionIdAllocator) {
     // Make sure to notify the refresh driver just in case it's waiting on a
     // pending transaction. Do this at the top of the event loop so we don't
     // cause a paint to occur during compositor shutdown.
     RefPtr<TransactionIdAllocator> allocator = mTransactionIdAllocator;
     TransactionId id = mLatestTransactionId;
@@ -588,16 +590,17 @@ WebRenderLayerManager::ClearCachedResour
   mActiveCompositorAnimationIds.clear();
   mDiscardedCompositorAnimationsIds.Clear();
   WrBridge()->EndClearCachedResources();
 }
 
 void
 WebRenderLayerManager::WrUpdated()
 {
+  ClearAsyncAnimations();
   mWebRenderCommandBuilder.ClearCachedResources();
   DiscardLocalImages();
 
   if (mWidget) {
     if (dom::TabChild* tabChild = mWidget->GetOwningTabChild()) {
       tabChild->SchedulePaint();
     }
   }
@@ -760,10 +763,53 @@ WebRenderLayerManager::FlushAsyncResourc
   if (!IsDestroyed() && WrBridge()) {
     WrBridge()->UpdateResources(mAsyncResourceUpdates.ref(),
                                 /* aScheduleComposite */ true);
   }
 
   mAsyncResourceUpdates.reset();
 }
 
+void
+WebRenderLayerManager::RegisterAsyncAnimation(const wr::ImageKey& aKey,
+                                              SharedSurfacesAnimation* aAnimation)
+{
+  mAsyncAnimations.insert(std::make_pair(wr::AsUint64(aKey), aAnimation));
+}
+
+void
+WebRenderLayerManager::DeregisterAsyncAnimation(const wr::ImageKey& aKey)
+{
+  mAsyncAnimations.erase(wr::AsUint64(aKey));
+}
+
+void
+WebRenderLayerManager::ClearAsyncAnimations()
+{
+  for (const auto& i : mAsyncAnimations) {
+    i.second->Invalidate(this);
+  }
+  mAsyncAnimations.clear();
+}
+
+void
+WebRenderLayerManager::WrReleasedImages(const nsTArray<wr::ExternalImageKeyPair>& aPairs)
+{
+  // A SharedSurfaceAnimation object's lifetime is tied to its owning
+  // ImageContainer. When the ImageContainer is released,
+  // SharedSurfaceAnimation::Destroy is called which should ensure it is removed
+  // from the layer manager. Whenever the namespace for the
+  // WebRenderLayerManager itself is invalidated (e.g. we changed windows, or
+  // were destroyed ourselves), we callback into the SharedSurfaceAnimation
+  // object to remove its image key for us and any bound surfaces. If, for any
+  // reason, we somehow missed an WrReleasedImages call before the animation
+  // was bound to the layer manager, it will free those associated surfaces on
+  // the next ReleasePreviousFrame call.
+  for (const auto& pair : aPairs) {
+    auto i = mAsyncAnimations.find(wr::AsUint64(pair.key));
+    if (i != mAsyncAnimations.end()) {
+      i->second->ReleasePreviousFrame(this, pair.id);
+    }
+  }
+}
+
 } // namespace layers
 } // namespace mozilla
--- a/gfx/layers/wr/WebRenderLayerManager.h
+++ b/gfx/layers/wr/WebRenderLayerManager.h
@@ -3,25 +3,27 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef GFX_WEBRENDERLAYERMANAGER_H
 #define GFX_WEBRENDERLAYERMANAGER_H
 
 #include <unordered_set>
+#include <unordered_map>
 #include <vector>
 
 #include "gfxPrefs.h"
 #include "Layers.h"
 #include "mozilla/Maybe.h"
 #include "mozilla/MozPromise.h"
 #include "mozilla/layers/APZTestData.h"
 #include "mozilla/layers/FocusTarget.h"
 #include "mozilla/layers/IpcResourceUpdateQueue.h"
+#include "mozilla/layers/SharedSurfacesChild.h"
 #include "mozilla/layers/StackingContextHelper.h"
 #include "mozilla/layers/TransactionIdAllocator.h"
 #include "mozilla/layers/WebRenderCommandBuilder.h"
 #include "mozilla/layers/WebRenderScrollData.h"
 #include "mozilla/layers/WebRenderUserData.h"
 #include "mozilla/webrender/WebRenderAPI.h"
 #include "mozilla/webrender/WebRenderTypes.h"
 #include "nsDisplayList.h"
@@ -133,16 +135,21 @@ public:
   // transaction or destruction
   void AddImageKeyForDiscard(wr::ImageKey);
   void DiscardImages();
   void DiscardLocalImages();
 
   wr::IpcResourceUpdateQueue& AsyncResourceUpdates();
   void FlushAsyncResourceUpdates();
 
+  void RegisterAsyncAnimation(const wr::ImageKey& aKey, SharedSurfacesAnimation* aAnimation);
+  void DeregisterAsyncAnimation(const wr::ImageKey& aKey);
+  void ClearAsyncAnimations();
+  void WrReleasedImages(const nsTArray<wr::ExternalImageKeyPair>& aPairs);
+
   // Methods to manage the compositor animation ids. Active animations are still
   // going, and when they end we discard them and remove them from the active
   // list.
   void AddActiveCompositorAnimationId(uint64_t aId);
   void AddCompositorAnimationsIdForDiscard(uint64_t aId);
   void DiscardCompositorAnimations();
 
   WebRenderBridgeChild* WrBridge() const { return mWrChild; }
@@ -222,14 +229,15 @@ private:
 
   TimeStamp mTransactionStart;
   nsCString mURL;
   WebRenderCommandBuilder mWebRenderCommandBuilder;
 
   size_t mLastDisplayListSize;
 
   Maybe<wr::IpcResourceUpdateQueue> mAsyncResourceUpdates;
+  std::unordered_map<uint64_t, RefPtr<SharedSurfacesAnimation>> mAsyncAnimations;
 };
 
 } // namespace layers
 } // namespace mozilla
 
 #endif /* GFX_WEBRENDERLAYERMANAGER_H */
--- a/gfx/layers/wr/WebRenderMessageUtils.h
+++ b/gfx/layers/wr/WebRenderMessageUtils.h
@@ -184,11 +184,17 @@ struct ParamTraits<mozilla::wr::MemoryRe
 };
 
 template<>
 struct ParamTraits<mozilla::wr::OpacityType>
   : public PlainOldDataSerializer<mozilla::wr::OpacityType>
 {
 };
 
+template<>
+struct ParamTraits<mozilla::wr::ExternalImageKeyPair>
+  : public PlainOldDataSerializer<mozilla::wr::ExternalImageKeyPair>
+{
+};
+
 } // namespace IPC
 
 #endif // GFX_WEBRENDERMESSAGEUTILS_H
--- a/gfx/webrender_bindings/WebRenderTypes.h
+++ b/gfx/webrender_bindings/WebRenderTypes.h
@@ -45,16 +45,22 @@ typedef wr::WrDebugFlags DebugFlags;
 
 typedef mozilla::Maybe<mozilla::wr::IdNamespace> MaybeIdNamespace;
 typedef mozilla::Maybe<mozilla::wr::WrImageMask> MaybeImageMask;
 typedef Maybe<ExternalImageId> MaybeExternalImageId;
 
 typedef Maybe<FontInstanceOptions> MaybeFontInstanceOptions;
 typedef Maybe<FontInstancePlatformOptions> MaybeFontInstancePlatformOptions;
 
+struct ExternalImageKeyPair
+{
+  ImageKey key;
+  ExternalImageId id;
+};
+
 /* Generate a brand new window id and return it. */
 WindowId NewWindowId();
 
 inline DebugFlags NewDebugFlags(uint32_t aFlags) {
   DebugFlags flags;
   flags.mBits = aFlags;
   return flags;
 }
--- a/image/AnimationFrameBuffer.cpp
+++ b/image/AnimationFrameBuffer.cpp
@@ -216,21 +216,20 @@ AnimationFrameDiscardingQueue::MarkCompl
 void
 AnimationFrameDiscardingQueue::AdvanceInternal()
 {
   // We only want to change the current frame index if we have advanced. This
   // means either a higher frame index, or going back to the beginning.
   // We should never have advanced beyond the frame buffer.
   MOZ_ASSERT(mGetIndex < mSize);
 
-  // Unless we are recycling, we should have the current frame still in the
-  // display queue. Either way, we should at least have an entry in the queue
-  // which we need to consume.
-  MOZ_ASSERT(mRecycling || bool(mDisplay.front()));
+  // We should have the current frame still in the display queue. Either way,
+  // we should at least have an entry in the queue which we need to consume.
   MOZ_ASSERT(!mDisplay.empty());
+  MOZ_ASSERT(mDisplay.front());
   mDisplay.pop_front();
   MOZ_ASSERT(!mDisplay.empty());
   MOZ_ASSERT(mDisplay.front());
 
   if (mDisplay.size() + mPending - 1 < mBatch) {
     // If we have fewer frames than the batch size, then ask for more. If we
     // do not have any pending, then we know that there is no active decoding.
     mPending += mBatch;
@@ -349,16 +348,21 @@ AnimationFrameRecyclingQueue::AddSizeOfE
       );
     }
   }
 }
 
 void
 AnimationFrameRecyclingQueue::AdvanceInternal()
 {
+  // We only want to change the current frame index if we have advanced. This
+  // means either a higher frame index, or going back to the beginning.
+  // We should never have advanced beyond the frame buffer.
+  MOZ_ASSERT(mGetIndex < mSize);
+
   MOZ_ASSERT(!mDisplay.empty());
   MOZ_ASSERT(mDisplay.front());
 
   RefPtr<imgFrame>& front = mDisplay.front();
 
   // The first frame should always have a dirty rect that matches the frame
   // rect. As such, we should use mFirstFrameRefreshArea instead for recycle
   // rect calculations.
@@ -383,17 +387,40 @@ AnimationFrameRecyclingQueue::AdvanceInt
     }
 
     newEntry.mFrame = std::move(front);
   }
 
   // Even if the frame itself isn't saved, we want the dirty rect to calculate
   // the recycle rect for future recycled frames.
   mRecycle.push_back(std::move(newEntry));
-  AnimationFrameDiscardingQueue::AdvanceInternal();
+  mDisplay.pop_front();
+  MOZ_ASSERT(!mDisplay.empty());
+  MOZ_ASSERT(mDisplay.front());
+
+  if (mDisplay.size() + mPending - 1 < mBatch) {
+    // If we have fewer frames than the batch size, then ask for more. If we
+    // do not have any pending, then we know that there is no active decoding.
+    //
+    // We limit the batch to avoid using the frame we just added to the queue.
+    // This gives other parts of the system time to switch to the new current
+    // frame, and maximize buffer reuse. In particular this is useful for
+    // WebRender which holds onto the previous frame for much longer.
+    size_t newPending = std::min(mPending + mBatch, mRecycle.size() - 1);
+    if (newPending == 0 && (mDisplay.size() <= 1 || mPending > 0)) {
+      // If we already have pending frames, then the decoder is active and we
+      // cannot go below one. If we are displaying the only frame we have, and
+      // there are none pending, then we must request at least one more frame to
+      // continue to animation, because we won't advance again without a new
+      // frame. This may cause us to skip recycling because the previous frame
+      // is still in use.
+      newPending = 1;
+    }
+    mPending = newPending;
+  }
 }
 
 bool
 AnimationFrameRecyclingQueue::ResetInternal()
 {
   mRecycle.clear();
   return AnimationFrameDiscardingQueue::ResetInternal();
 }
--- a/image/AnimationSurfaceProvider.cpp
+++ b/image/AnimationSurfaceProvider.cpp
@@ -421,18 +421,17 @@ AnimationSurfaceProvider::RequestFrameDi
   auto oldFrameQueue = static_cast<AnimationFrameRetainedBuffer*>(mFrames.get());
 
   // We only recycle if it is a full frame. Partial frames may be sized
   // differently from each other. We do not support recycling with WebRender
   // and shared surfaces at this time as there is additional synchronization
   // required to know when it is safe to recycle.
   MOZ_ASSERT(!mDecoder->GetFrameRecycler());
   if (gfxPrefs::ImageAnimatedDecodeOnDemandRecycle() &&
-      mDecoder->ShouldBlendAnimation() &&
-      (!gfxVars::GetUseWebRenderOrDefault() || !gfxPrefs::ImageMemShared())) {
+      mDecoder->ShouldBlendAnimation()) {
     mFrames.reset(new AnimationFrameRecyclingQueue(std::move(*oldFrameQueue)));
     mDecoder->SetFrameRecycler(this);
   } else {
     mFrames.reset(new AnimationFrameDiscardingQueue(std::move(*oldFrameQueue)));
   }
 }
 
 void
--- a/image/imgFrame.cpp
+++ b/image/imgFrame.cpp
@@ -930,17 +930,18 @@ imgFrame::FinalizeSurface()
 }
 
 void
 imgFrame::FinalizeSurfaceInternal()
 {
   mMonitor.AssertCurrentThreadOwns();
 
   // Not all images will have mRawSurface to finalize (i.e. paletted images).
-  if (!mRawSurface || mRawSurface->GetType() != SurfaceType::DATA_SHARED) {
+  if (mShouldRecycle || !mRawSurface ||
+      mRawSurface->GetType() != SurfaceType::DATA_SHARED) {
     return;
   }
 
   auto sharedSurf = static_cast<SourceSurfaceSharedData*>(mRawSurface.get());
   sharedSurf->Finalize();
 }
 
 already_AddRefed<SourceSurface>
@@ -1075,16 +1076,20 @@ imgFrame::AddSizeOfExcludingThis(MallocS
 
 RecyclingSourceSurface::RecyclingSourceSurface(imgFrame* aParent, DataSourceSurface* aSurface)
   : mParent(aParent)
   , mSurface(aSurface)
   , mType(SurfaceType::DATA)
 {
   mParent->mMonitor.AssertCurrentThreadOwns();
   ++mParent->mRecycleLockCount;
+
+  if (aSurface->GetType() == SurfaceType::DATA_SHARED) {
+    mType = SurfaceType::DATA_RECYCLING_SHARED;
+  }
 }
 
 RecyclingSourceSurface::~RecyclingSourceSurface()
 {
   MonitorAutoLock lock(mParent->mMonitor);
   MOZ_ASSERT(mParent->mRecycleLockCount > 0);
   if (--mParent->mRecycleLockCount == 0) {
     mParent->mMonitor.NotifyAll();
--- a/image/test/gtest/TestAnimationFrameBuffer.cpp
+++ b/image/test/gtest/TestAnimationFrameBuffer.cpp
@@ -483,17 +483,25 @@ static void TestDiscardingQueueLoop(Anim
   EXPECT_EQ(size_t(3), aQueue.PendingDecode());
   VerifyDiscardingQueueContents(aQueue);
 
   // Make sure frames get removed as we advance.
   VerifyInsertAndAdvance(aQueue, 5, AnimationFrameBuffer::InsertStatus::CONTINUE);
   EXPECT_EQ(size_t(1), aQueue.Display().size());
   VerifyInsertAndAdvance(aQueue, 6, AnimationFrameBuffer::InsertStatus::CONTINUE);
   EXPECT_EQ(size_t(1), aQueue.Display().size());
-  VerifyInsertAndAdvance(aQueue, 7, AnimationFrameBuffer::InsertStatus::CONTINUE);
+
+  // We actually will yield if we are recycling instead of continuing because
+  // the pending calculation is slightly different. We will actually request one
+  // less frame than we have to recycle.
+  if (aQueue.IsRecycling()) {
+    VerifyInsertAndAdvance(aQueue, 7, AnimationFrameBuffer::InsertStatus::YIELD);
+  } else {
+    VerifyInsertAndAdvance(aQueue, 7, AnimationFrameBuffer::InsertStatus::CONTINUE);
+  }
   EXPECT_EQ(size_t(1), aQueue.Display().size());
 
   // We should get throttled if we insert too much.
   VerifyInsert(aQueue, AnimationFrameBuffer::InsertStatus::CONTINUE);
   EXPECT_EQ(size_t(2), aQueue.Display().size());
   EXPECT_EQ(size_t(1), aQueue.PendingDecode());
   VerifyInsert(aQueue, AnimationFrameBuffer::InsertStatus::YIELD);
   EXPECT_EQ(size_t(3), aQueue.Display().size());
--- a/js/src/frontend/BytecodeCompiler.cpp
+++ b/js/src/frontend/BytecodeCompiler.cpp
@@ -438,16 +438,23 @@ frontend::SourceAwareCompiler<Unit>::cre
     if (!info.createScriptSource(parameterListEnd)) {
         return false;
     }
 
     if (!info.assignSource(sourceBuffer_)) {
         return false;
     }
 
+    // Note the contents of any compiled scripts when recording/replaying.
+    if (mozilla::recordreplay::IsRecordingOrReplaying()) {
+        mozilla::recordreplay::NoteContentParse(this, info.options.filename(),
+                                                "application/javascript",
+                                                sourceBuffer_.units(), sourceBuffer_.length());
+    }
+
     info.createUsedNames();
 
     if (info.canLazilyParse()) {
         syntaxParser.emplace(info.cx, info.cx->tempLifoAlloc(), info.options,
                              sourceBuffer_.units(), sourceBuffer_.length(),
                              /* foldConstants = */ false, *info.usedNames, nullptr, nullptr,
                              info.sourceObject, goal);
         if (!syntaxParser->checkOptions()) {
--- a/js/src/tests/jstests.list
+++ b/js/src/tests/jstests.list
@@ -480,16 +480,26 @@ skip include test262/intl402/RelativeTim
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1483545
 skip script test262/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-always.js
 skip script test262/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js
 skip script test262/intl402/RelativeTimeFormat/prototype/format/en-us-style-short.js
 skip script test262/intl402/RelativeTimeFormat/prototype/format/pl-pl-style-long.js
 skip script test262/intl402/RelativeTimeFormat/prototype/format/pl-pl-style-narrow.js
 skip script test262/intl402/RelativeTimeFormat/prototype/format/pl-pl-style-short.js
 
+# https://bugzilla.mozilla.org/show_bug.cgi?id=1508684
+skip script test262/built-ins/RegExp/prototype/multiline/cross-realm.js
+skip script test262/built-ins/RegExp/prototype/global/cross-realm.js
+skip script test262/built-ins/RegExp/prototype/sticky/cross-realm.js
+skip script test262/built-ins/RegExp/prototype/ignoreCase/cross-realm.js
+skip script test262/built-ins/RegExp/prototype/unicode/cross-realm.js
+skip script test262/built-ins/RegExp/prototype/source/cross-realm.js
+
+# https://bugzilla.mozilla.org/show_bug.cgi?id=1508684
+skip script test262/language/expressions/import.meta/syntax/invalid-assignment-target-update-expr.js
 
 ###########################################################
 # Tests disabled due to issues in test262 importer script #
 ###########################################################
 
 # test262 importer merges all includes in a per directory shell.js file, breaking this harness test case.
 skip script test262/harness/detachArrayBuffer.js
 
--- a/js/src/tests/test262/GIT-INFO
+++ b/js/src/tests/test262/GIT-INFO
@@ -1,36 +1,6 @@
-commit b98c45ca5a46966bce1ac691d5f608beb36d5db7
-Author: Maya Lekova <apokalyptra@gmail.com>
-Date:   Wed Oct 17 22:10:09 2018 +0200
+commit 2726142bb97e4538703eda748c3b7300183bc66d
+Author: test262-automation <test262-automation@bocoup.com>
+Date:   Wed Nov 14 19:00:37 2018 +0000
 
-    AsyncFunction: Add tests ensuring the new 1-tick await behaviour (#1843)
-    
-    * AsyncFunction: Add tests ensuring the new 1-tick await behaviour
-    
-    This commit adds 3 tests ensuring the optimized behaviour of await
-    (see https://github.com/tc39/ecma262/pull/1250) in the following cases:
-    - async functions
-    - yielding from async generator functions
-    - for-await-of loops
-    
-    * AsyncFunction: Add tests ensuring the monkey-patched promises behaviour
-    
-    This commit adds 2 more tests ensuring the optimized behaviour of await
-    (see tc39/ecma262#1250) in the following cases:
-    - awaiting on a native promise with monkey-patched "then"
-    - awaiting on a non-native promise (a "thenable" object)
-    
-    * AsyncFunction: Add tests ensuring the non-native promises behaviour
-    
-    This commit adds 1 more tests ensuring the optimized behaviour of await
-    (see tc39/ecma262#1250) in the following cases:
-    - awaiting on a non-promise, non-thenable object
-    
-    It also renames the previous test for non-promise (a "thenable" object)
-    to distinguish from the new case.
-    
-    The commit adds checks for proper await/promises interleaving in the
-    aforementioned cases and includes a small code clean-up.
-    
-    * AsyncFunction: Refactor tests ensuring the new 1-tick await behaviour
-    
-    Gather all the tests to their appropriate folder and update copyright header.
+    [v8-test262-automation] Updated curation log with latest revision sha's from export and changed files.
+        sourceRevisionAtLastExport: ac250b9b targetRevisionAtLastExport: 6218e682b2
--- a/js/src/tests/test262/annexB/built-ins/escape/escape-below.js
+++ b/js/src/tests/test262/annexB/built-ins/escape/escape-below.js
@@ -21,17 +21,17 @@ assert.sameValue(
   escape('\x00\x01\x02\x03'),
   '%00%01%02%03',
   'characters: \\x00\\x01\\x02\\x03'
 );
 
 assert.sameValue(
   escape('!"#$%&\'()'),
   '%21%22%23%24%25%26%27%28%29',
-  'characters preceeding "*": !"#$%&\'()'
+  'characters preceding "*": !"#$%&\'()'
 );
 
 assert.sameValue(escape(','), '%2C', 'character between "+" and "-": ,');
 
 assert.sameValue(
   escape(':;<=>?'),
   '%3A%3B%3C%3D%3E%3F',
   'characters between "9" and "@": :;<=>?'
--- a/js/src/tests/test262/annexB/language/expressions/object/__proto__-duplicate.js
+++ b/js/src/tests/test262/annexB/language/expressions/object/__proto__-duplicate.js
@@ -10,15 +10,15 @@ info: |
     any duplicate entries for "__proto__" and at least two of those entries
     were obtained from productions of the form
     PropertyDefinition : PropertyName : AssignmentExpression .
 negative:
   phase: parse
   type: SyntaxError
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 
 ({
   __proto__: null,
   other: null,
   '__proto__': null
 });
--- a/js/src/tests/test262/annexB/language/expressions/template-literal/legacy-octal-escape-sequence-strict-strict.js
+++ b/js/src/tests/test262/annexB/language/expressions/template-literal/legacy-octal-escape-sequence-strict-strict.js
@@ -10,11 +10,11 @@ description: >
     The SV of EscapeSequence :: HexEscapeSequence is the SV of the
     HexEscapeSequence.
 negative:
   phase: parse
   type: SyntaxError
 flags: [onlyStrict]
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 
 `${'\07'}`;
--- a/js/src/tests/test262/annexB/language/statements/for-in/bare-initializer.js
+++ b/js/src/tests/test262/annexB/language/statements/for-in/bare-initializer.js
@@ -5,13 +5,13 @@
 esid: sec-initializers-in-forin-statement-heads
 description: >
     for-in heads prohibit AssignmentExpressions
 negative:
   phase: parse
   type: SyntaxError
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 var a;
 throw NotEarlyError;
 for (a = 0 in {});
 
--- a/js/src/tests/test262/annexB/language/statements/for-in/const-initializer.js
+++ b/js/src/tests/test262/annexB/language/statements/for-in/const-initializer.js
@@ -5,12 +5,12 @@
 esid: sec-initializers-in-forin-statement-heads
 description: >
     for-in initializers with const are prohibited
 negative:
   phase: parse
   type: SyntaxError
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 throw NotEarlyError;
 for (const a = 0 in {});
 
--- a/js/src/tests/test262/annexB/language/statements/for-in/let-initializer.js
+++ b/js/src/tests/test262/annexB/language/statements/for-in/let-initializer.js
@@ -5,12 +5,12 @@
 esid: sec-initializers-in-forin-statement-heads
 description: >
     for-in initializers with let are prohibited
 negative:
   phase: parse
   type: SyntaxError
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 throw NotEarlyError;
 for (let a = 0 in {});
 
--- a/js/src/tests/test262/annexB/language/statements/for-in/strict-initializer-strict.js
+++ b/js/src/tests/test262/annexB/language/statements/for-in/strict-initializer-strict.js
@@ -7,12 +7,12 @@ esid: sec-initializers-in-forin-statemen
 description: >
     for-in initializers in strict mode are prohibited
 negative:
   phase: parse
   type: SyntaxError
 flags: [onlyStrict]
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 throw NotEarlyError;
 for (var a = 0 in {});
 
--- a/js/src/tests/test262/annexB/language/statements/for-in/var-arraybindingpattern-initializer.js
+++ b/js/src/tests/test262/annexB/language/statements/for-in/var-arraybindingpattern-initializer.js
@@ -5,12 +5,12 @@
 esid: sec-initializers-in-forin-statement-heads
 description: >
     for-in initializers with ArrayBindingPatterns are always prohibited
 negative:
   phase: parse
   type: SyntaxError
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 throw NotEarlyError;
 for (var [a] = 0 in {});
 
--- a/js/src/tests/test262/annexB/language/statements/for-in/var-objectbindingpattern-initializer.js
+++ b/js/src/tests/test262/annexB/language/statements/for-in/var-objectbindingpattern-initializer.js
@@ -5,12 +5,12 @@
 esid: sec-initializers-in-forin-statement-heads
 description: >
     for-in initializers with ObjectBindingPattern are always prohibited
 negative:
   phase: parse
   type: SyntaxError
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 throw NotEarlyError;
 for (var {a} = 0 in {});
 
--- a/js/src/tests/test262/built-ins/AsyncGeneratorFunction/invoked-as-function-multiple-arguments.js
+++ b/js/src/tests/test262/built-ins/AsyncGeneratorFunction/invoked-as-function-multiple-arguments.js
@@ -1,17 +1,17 @@
 // Copyright (C) 2018 Valerie Young. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-asyncgeneratorfunction
 description: >
     When invoked via the function invocation pattern with multiple arguments,
     the AsyncGeneratorFunction intrinsic creates a valid generator whose body is the
     last argument evaluated as source code and whose formal parameters are
-    defined by the preceeding arguments.
+    defined by the preceding arguments.
 features: [async-iteration]
 flags: [async]
 ---*/
 
 var AsyncGeneratorFunction = Object.getPrototypeOf(async function* () {}).constructor;
 
 var g = AsyncGeneratorFunction('x', 'y', 'yield x + y;');
 var iter = g(2, 3);
--- a/js/src/tests/test262/built-ins/Date/prototype/setDate/this-value-non-date.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setDate/this-value-non-date.js
@@ -36,11 +36,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setDate.call([], arg);
 }, 'array exotic object');
 
 assert.throws(TypeError, function() {
   setDate.call(args, arg);
 }, 'arguments exotic object');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setDate/this-value-non-object.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setDate/this-value-non-object.js
@@ -46,11 +46,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setDate.call('', arg);
 }, 'string');
 
 assert.throws(TypeError, function() {
   setDate.call(symbol, arg);
 }, 'symbol');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setFullYear/this-value-non-date.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setFullYear/this-value-non-date.js
@@ -36,11 +36,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setFullYear.call([], arg);
 }, 'array exotic object');
 
 assert.throws(TypeError, function() {
   setFullYear.call(args, arg);
 }, 'arguments exotic object');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setFullYear/this-value-non-object.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setFullYear/this-value-non-object.js
@@ -46,11 +46,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setFullYear.call('', arg);
 }, 'string');
 
 assert.throws(TypeError, function() {
   setFullYear.call(symbol, arg);
 }, 'symbol');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setHours/this-value-non-date.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setHours/this-value-non-date.js
@@ -36,11 +36,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setHours.call([], arg);
 }, 'array exotic object');
 
 assert.throws(TypeError, function() {
   setHours.call(args, arg);
 }, 'arguments exotic object');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setHours/this-value-non-object.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setHours/this-value-non-object.js
@@ -46,11 +46,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setHours.call('', arg);
 }, 'string');
 
 assert.throws(TypeError, function() {
   setHours.call(symbol, arg);
 }, 'symbol');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setMilliseconds/this-value-non-date.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setMilliseconds/this-value-non-date.js
@@ -36,11 +36,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setMilliseconds.call([], arg);
 }, 'array exotic object');
 
 assert.throws(TypeError, function() {
   setMilliseconds.call(args, arg);
 }, 'arguments exotic object');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setMilliseconds/this-value-non-object.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setMilliseconds/this-value-non-object.js
@@ -46,11 +46,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setMilliseconds.call('', arg);
 }, 'string');
 
 assert.throws(TypeError, function() {
   setMilliseconds.call(symbol, arg);
 }, 'symbol');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setMinutes/this-value-non-date.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setMinutes/this-value-non-date.js
@@ -36,11 +36,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setMinutes.call([], arg);
 }, 'array exotic object');
 
 assert.throws(TypeError, function() {
   setMinutes.call(args, arg);
 }, 'arguments exotic object');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setMinutes/this-value-non-object.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setMinutes/this-value-non-object.js
@@ -46,11 +46,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setMinutes.call('', arg);
 }, 'string');
 
 assert.throws(TypeError, function() {
   setMinutes.call(symbol, arg);
 }, 'symbol');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setMonth/this-value-non-date.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setMonth/this-value-non-date.js
@@ -36,11 +36,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setMonth.call([], arg);
 }, 'array exotic object');
 
 assert.throws(TypeError, function() {
   setMonth.call(args, arg);
 }, 'arguments exotic object');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setMonth/this-value-non-object.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setMonth/this-value-non-object.js
@@ -46,11 +46,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setMonth.call('', arg);
 }, 'string');
 
 assert.throws(TypeError, function() {
   setMonth.call(symbol, arg);
 }, 'symbol');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setSeconds/this-value-non-date.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setSeconds/this-value-non-date.js
@@ -36,11 +36,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setSeconds.call([], arg);
 }, 'array exotic object');
 
 assert.throws(TypeError, function() {
   setSeconds.call(args, arg);
 }, 'arguments exotic object');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setSeconds/this-value-non-object.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setSeconds/this-value-non-object.js
@@ -46,11 +46,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setSeconds.call('', arg);
 }, 'string');
 
 assert.throws(TypeError, function() {
   setSeconds.call(symbol, arg);
 }, 'symbol');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setTime/this-value-non-date.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setTime/this-value-non-date.js
@@ -36,11 +36,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setTime.call([], arg);
 }, 'array exotic object');
 
 assert.throws(TypeError, function() {
   setTime.call(args, arg);
 }, 'arguments exotic object');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Date/prototype/setTime/this-value-non-object.js
+++ b/js/src/tests/test262/built-ins/Date/prototype/setTime/this-value-non-object.js
@@ -46,11 +46,11 @@ assert.throws(TypeError, function() {
 assert.throws(TypeError, function() {
   setTime.call('', arg);
 }, 'string');
 
 assert.throws(TypeError, function() {
   setTime.call(symbol, arg);
 }, 'symbol');
 
-assert.sameValue(callCount, 0, 'validation preceeds input coercion');
+assert.sameValue(callCount, 0, 'validation precedes input coercion');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Function/prototype/toString/proxy-async-generator-function.js
+++ b/js/src/tests/test262/built-ins/Function/prototype/toString/proxy-async-generator-function.js
@@ -9,16 +9,16 @@ info: |
   If Type(func) is Object and IsCallable(func) is true, then return an
   implementation-dependent String source code representation of func.
   The representation must have the syntax of a NativeFunction.
   ...
 
   NativeFunction:
     function IdentifierName_opt ( FormalParameters ) { [ native code ] }
 
-features: [async-functions, generators, Proxy]
+features: [async-iteration, Proxy]
 includes: [nativeFunctionMatcher.js]
 ---*/
 
 assertNativeFunction(new Proxy(async function * () {}, {}));
 assertNativeFunction(new Proxy(async function * () {}, { apply() {} }).apply);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Function/prototype/toString/proxy-async-generator-method-definition.js
+++ b/js/src/tests/test262/built-ins/Function/prototype/toString/proxy-async-generator-method-definition.js
@@ -9,16 +9,16 @@ info: |
   If Type(func) is Object and IsCallable(func) is true, then return an
   implementation-dependent String source code representation of func.
   The representation must have the syntax of a NativeFunction.
   ...
 
   NativeFunction:
     function IdentifierName_opt ( FormalParameters ) { [ native code ] }
 
-features: [async-functions, generators, Proxy]
+features: [async-iteration, Proxy]
 includes: [nativeFunctionMatcher.js]
 ---*/
 
 assertNativeFunction(new Proxy({ async * method() {} }.method, {}));
 assertNativeFunction(new Proxy({ async * method() {} }.method, { apply() {} }).apply);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Function/prototype/toString/proxy-async-method-definition.js
+++ b/js/src/tests/test262/built-ins/Function/prototype/toString/proxy-async-method-definition.js
@@ -9,16 +9,16 @@ info: |
   If Type(func) is Object and IsCallable(func) is true, then return an
   implementation-dependent String source code representation of func.
   The representation must have the syntax of a NativeFunction.
   ...
 
   NativeFunction:
     function IdentifierName_opt ( FormalParameters ) { [ native code ] }
 
-features: [async-functions, generators, Proxy]
+features: [async-functions, Proxy]
 includes: [nativeFunctionMatcher.js]
 ---*/
 
 assertNativeFunction(new Proxy({ async method() {} }.method, {}));
 assertNativeFunction(new Proxy({ async method() {} }.method, { apply() {} }).apply);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/GeneratorFunction/invoked-as-function-multiple-arguments.js
+++ b/js/src/tests/test262/built-ins/GeneratorFunction/invoked-as-function-multiple-arguments.js
@@ -1,17 +1,17 @@
 // Copyright (C) 2013 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 es6id: 25.2
 description: >
     When invoked via the function invocation pattern with multiple arguments,
     the GeneratorFunction intrinsic creates a valid generator whose body is the
     last argument evaluated as source code and whose formal parameters are
-    defined by the preceeding arguments.
+    defined by the preceding arguments.
 features: [generators]
 ---*/
 
 var GeneratorFunction = Object.getPrototypeOf(function*() {}).constructor;
 
 var g = GeneratorFunction('x', 'y', 'yield x + y;');
 var iter = g(2, 3);
 var result;
--- a/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-function.js
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-function.js
@@ -9,17 +9,17 @@ info: |
 
   9.5.14 ProxyCreate(target, handler)
 
   [...]
   7. If IsCallable(target) is true, then
     a. Set the [[Call]] internal method of P as specified in 9.5.12.
   [...]
 
-features: [Proxy, Symbol.toStringTag]
+features: [generators, Proxy, Symbol.toStringTag]
 ---*/
 
 var functionProxy = new Proxy(function() {}, {});
 var functionProxyProxy = new Proxy(functionProxy, {});
 
 assert.sameValue(
   Object.prototype.toString.call(functionProxy), '[object Function]', 'function proxy'
 );
--- a/js/src/tests/test262/built-ins/Promise/all/ctx-ctor.js
+++ b/js/src/tests/test262/built-ins/Promise/all/ctx-ctor.js
@@ -23,17 +23,17 @@ var callCount = 0;
 class SubPromise extends Promise {
   constructor(a) {
     super(a);
     executor = a;
     callCount += 1;
   }
 }
 
-var instance = Promise.all.call(SubPromise);
+var instance = Promise.all.call(SubPromise, []);
 
 assert.sameValue(instance.constructor, SubPromise);
 assert.sameValue(instance instanceof SubPromise, true);
 
 assert.sameValue(callCount, 1);
 assert.sameValue(typeof executor, 'function');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Promise/race/ctx-ctor.js
+++ b/js/src/tests/test262/built-ins/Promise/race/ctx-ctor.js
@@ -23,17 +23,17 @@ var callCount = 0;
 class SubPromise extends Promise {
   constructor(a) {
     super(a);
     executor = a;
     callCount += 1;
   }
 }
 
-var instance = Promise.race.call(SubPromise);
+var instance = Promise.race.call(SubPromise, []);
 
 assert.sameValue(instance.constructor, SubPromise);
 assert.sameValue(instance instanceof SubPromise, true);
 
 assert.sameValue(callCount, 1);
 assert.sameValue(typeof executor, 'function');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Digit class escape, \\d with flags ug
+    Compare range for digit class escape \d with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,31 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+    loneCodePoints: [],
+    ranges: [
+        [0x0030, 0x0039],
+    ],
+});
 
 const re = /\d/ug;
-const matchingRange = /[0-9]/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Digit class escape, \\d+ with flags ug
+    Compare range for digit class escape \d+ with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,31 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+    loneCodePoints: [],
+    ranges: [
+        [0x0030, 0x0039],
+    ],
+});
 
 const re = /\d+/ug;
-const matchingRange = /[0-9]+/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Digit class escape, \\d+ with flags g
+    Compare range for digit class escape \d+ with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,31 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+    loneCodePoints: [],
+    ranges: [
+        [0x0030, 0x0039],
+    ],
+});
 
 const re = /\d+/g;
-const matchingRange = /[0-9]+/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Digit class escape, \\d with flags g
+    Compare range for digit class escape \d with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,31 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+    loneCodePoints: [],
+    ranges: [
+        [0x0030, 0x0039],
+    ],
+});
 
 const re = /\d/g;
-const matchingRange = /[0-9]/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non Digit class escape, \\D with flags ug
+    Compare range for non-digit class escape \D with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,32 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+    loneCodePoints: [],
+    ranges: [
+        [0x000000, 0x00002F],
+        [0x00003A, 0x10FFFF],
+    ],
+});
 
 const re = /\D/ug;
-const matchingRange = /[\0-\/:-\u{10FFFF}]/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non Digit class escape, \\D+ with flags ug
+    Compare range for non-digit class escape \D+ with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,32 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+  loneCodePoints: [],
+  ranges: [
+      [0x000000, 0x00002F],
+      [0x00003A, 0x10FFFF],
+  ],
+});
 
 const re = /\D+/ug;
-const matchingRange = /[\0-\/:-\u{10FFFF}]+/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non Digit class escape, \\D+ with flags g
+    Compare range for non-digit class escape \D+ with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,32 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+  loneCodePoints: [],
+  ranges: [
+      [0x000000, 0x00002F],
+      [0x00003A, 0x00FFFF],
+  ],
+});
 
 const re = /\D+/g;
-const matchingRange = /[\0-\/:-\uFFFF]+/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non Digit class escape, \\D with flags g
+    Compare range for non-digit class escape \D with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,32 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+  loneCodePoints: [],
+  ranges: [
+      [0x000000, 0x00002F],
+      [0x00003A, 0x00FFFF],
+  ],
+});
 
 const re = /\D/g;
-const matchingRange = /[\0-\/:-\uFFFF]/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non whitespace class escape, \\S with flags ug
+    Compare range for non-whitespace class escape \S with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,43 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+    loneCodePoints: [],
+    ranges: [
+        [0x00DC00, 0x00DFFF],
+        [0x000000, 0x000008],
+        [0x00000E, 0x00001F],
+        [0x000021, 0x00009F],
+        [0x0000A1, 0x00167F],
+        [0x001681, 0x001FFF],
+        [0x00200B, 0x002027],
+        [0x00202A, 0x00202E],
+        [0x002030, 0x00205E],
+        [0x002060, 0x002FFF],
+        [0x003001, 0x00DBFF],
+        [0x00E000, 0x00FEFE],
+        [0x00FF00, 0x10FFFF],
+    ],
+});
 
 const re = /\S/ug;
-const matchingRange = /[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\u{10FFFF}]/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non whitespace class escape, \\S+ with flags ug
+    Compare range for non-whitespace class escape \S+ with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,43 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+    loneCodePoints: [],
+    ranges: [
+        [0x00DC00, 0x00DFFF],
+        [0x000000, 0x000008],
+        [0x00000E, 0x00001F],
+        [0x000021, 0x00009F],
+        [0x0000A1, 0x00167F],
+        [0x001681, 0x001FFF],
+        [0x00200B, 0x002027],
+        [0x00202A, 0x00202E],
+        [0x002030, 0x00205E],
+        [0x002060, 0x002FFF],
+        [0x003001, 0x00DBFF],
+        [0x00E000, 0x00FEFE],
+        [0x00FF00, 0x10FFFF],
+    ],
+});
 
 const re = /\S+/ug;
-const matchingRange = /[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\u{10FFFF}]+/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non whitespace class escape, \\S+ with flags g
+    Compare range for non-whitespace class escape \S+ with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,43 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+    loneCodePoints: [],
+    ranges: [
+        [0x00DC00, 0x00DFFF],
+        [0x000000, 0x000008],
+        [0x00000E, 0x00001F],
+        [0x000021, 0x00009F],
+        [0x0000A1, 0x00167F],
+        [0x001681, 0x001FFF],
+        [0x00200B, 0x002027],
+        [0x00202A, 0x00202E],
+        [0x002030, 0x00205E],
+        [0x002060, 0x002FFF],
+        [0x003001, 0x00DBFF],
+        [0x00E000, 0x00FEFE],
+        [0x00FF00, 0x00FFFF],
+    ],
+});
 
 const re = /\S+/g;
-const matchingRange = /[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\uFFFF]+/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non whitespace class escape, \\S with flags g
+    Compare range for non-whitespace class escape \S with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,43 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+    loneCodePoints: [],
+    ranges: [
+        [0x00DC00, 0x00DFFF],
+        [0x000000, 0x000008],
+        [0x00000E, 0x00001F],
+        [0x000021, 0x00009F],
+        [0x0000A1, 0x00167F],
+        [0x001681, 0x001FFF],
+        [0x00200B, 0x002027],
+        [0x00202A, 0x00202E],
+        [0x002030, 0x00205E],
+        [0x002060, 0x002FFF],
+        [0x003001, 0x00DBFF],
+        [0x00E000, 0x00FEFE],
+        [0x00FF00, 0x00FFFF],
+    ],
+});
 
 const re = /\S/g;
-const matchingRange = /[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\uFFFF]/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non Word class escape, \\W with flags ug
+    Compare range for non-word class escape \W with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,36 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+    loneCodePoints: [0x000060],
+    ranges: [
+        [0x00DC00, 0x00DFFF],
+        [0x000000, 0x00002F],
+        [0x00003A, 0x000040],
+        [0x00005B, 0x00005E],
+        [0x00007B, 0x00DBFF],
+        [0x00E000, 0x10FFFF],
+    ],
+});
 
 const re = /\W/ug;
-const matchingRange = /[\0-\/:-@\[-\^`\{-\u{10FFFF}]/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non Word class escape, \\W+ with flags ug
+    Compare range for non-word class escape \W+ with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,36 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+    loneCodePoints: [0x000060],
+    ranges: [
+        [0x00DC00, 0x00DFFF],
+        [0x000000, 0x00002F],
+        [0x00003A, 0x000040],
+        [0x00005B, 0x00005E],
+        [0x00007B, 0x00DBFF],
+        [0x00E000, 0x10FFFF],
+    ],
+});
 
 const re = /\W+/ug;
-const matchingRange = /[\0-\/:-@\[-\^`\{-\u{10FFFF}]+/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non Word class escape, \\W+ with flags g
+    Compare range for non-word class escape \W+ with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,36 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+    loneCodePoints: [0x000060],
+    ranges: [
+        [0x00DC00, 0x00DFFF],
+        [0x000000, 0x00002F],
+        [0x00003A, 0x000040],
+        [0x00005B, 0x00005E],
+        [0x00007B, 0x00DBFF],
+        [0x00E000, 0x00FFFF],
+    ],
+});
 
 const re = /\W+/g;
-const matchingRange = /[\0-\/:-@\[-\^`\{-\uFFFF]+/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Non Word class escape, \\W with flags g
+    Compare range for non-word class escape \W with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,36 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+    loneCodePoints: [0x000060],
+    ranges: [
+        [0x00DC00, 0x00DFFF],
+        [0x000000, 0x00002F],
+        [0x00003A, 0x000040],
+        [0x00005B, 0x00005E],
+        [0x00007B, 0x00DBFF],
+        [0x00E000, 0x00FFFF],
+    ],
+});
 
 const re = /\W/g;
-const matchingRange = /[\0-\/:-@\[-\^`\{-\uFFFF]/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Whitespace class escape, \\s with flags ug
+    Compare range for whitespace class escape \s with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,41 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+    loneCodePoints: [
+        0x000020,
+        0x0000A0,
+        0x001680,
+        0x00202F,
+        0x00205F,
+        0x003000,
+        0x00FEFF,
+    ],
+    ranges: [
+        [0x000009, 0x00000D],
+        [0x002000, 0x00200A],
+        [0x002028, 0x002029],
+    ],
+});
 
 const re = /\s/ug;
-const matchingRange = /[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Whitespace class escape, \\s+ with flags ug
+    Compare range for whitespace class escape \s+ with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,41 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+    loneCodePoints: [
+        0x000020,
+        0x0000A0,
+        0x001680,
+        0x00202F,
+        0x00205F,
+        0x003000,
+        0x00FEFF,
+    ],
+    ranges: [
+        [0x000009, 0x00000D],
+        [0x002000, 0x00200A],
+        [0x002028, 0x002029],
+    ],
+});
 
 const re = /\s+/ug;
-const matchingRange = /[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Whitespace class escape, \\s+ with flags g
+    Compare range for whitespace class escape \s+ with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,41 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+    loneCodePoints: [
+        0x000020,
+        0x0000A0,
+        0x001680,
+        0x00202F,
+        0x00205F,
+        0x003000,
+        0x00FEFF,
+    ],
+    ranges: [
+        [0x000009, 0x00000D],
+        [0x002000, 0x00200A],
+        [0x002028, 0x002029],
+    ],
+});
 
 const re = /\s+/g;
-const matchingRange = /[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Whitespace class escape, \\s with flags g
+    Compare range for whitespace class escape \s with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,41 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+    loneCodePoints: [
+        0x000020,
+        0x0000A0,
+        0x001680,
+        0x00202F,
+        0x00205F,
+        0x003000,
+        0x00FEFF,
+    ],
+    ranges: [
+        [0x000009, 0x00000D],
+        [0x002000, 0x00200A],
+        [0x002028, 0x002029],
+    ],
+});
 
 const re = /\s/g;
-const matchingRange = /[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Word class escape, \\w with flags ug
+    Compare range for word class escape \w with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,33 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+    loneCodePoints: [0x00005F],
+    ranges: [
+        [0x000030, 0x000039],
+        [0x000041, 0x00005A],
+        [0x000061, 0x00007A],
+    ],
+});
 
 const re = /\w/ug;
-const matchingRange = /[0-9A-Z_a-z]/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier-flags-u.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier-flags-u.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Word class escape, \\w+ with flags ug
+    Compare range for word class escape \w+ with flags ug
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,33 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]});
+const str = buildString({
+    loneCodePoints: [0x00005F],
+    ranges: [
+        [0x000030, 0x000039],
+        [0x000041, 0x00005A],
+        [0x000061, 0x00007A],
+    ],
+});
 
 const re = /\w+/ug;
-const matchingRange = /[0-9A-Z_a-z]+/ug;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Word class escape, \\w+ with flags g
+    Compare range for word class escape \w+ with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,33 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+    loneCodePoints: [0x00005F],
+    ranges: [
+        [0x000030, 0x000039],
+        [0x000041, 0x00005A],
+        [0x000061, 0x00007A],
+    ],
+});
 
 const re = /\w+/g;
-const matchingRange = /[0-9A-Z_a-z]+/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
--- a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape.js
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape.js
@@ -1,29 +1,30 @@
 // Copyright (C) 2018 Leo Balter.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: prod-CharacterClassEscape
 description: >
-    Compare range for Word class escape, \\w with flags g
+    Compare range for word class escape \w with flags g
 info: |
-    This is a generated test, please checkout https://github.com/bocoup/test262-regexp-generator
+    This is a generated test. Please check out
+    https://github.com/bocoup/test262-regexp-generator
     for any changes.
 
     CharacterClassEscape[U] ::
         d
         D
         s
         S
         w
         W
 
     21.2.2.12 CharacterClassEscape
-    
+
     The production CharacterClassEscape :: d evaluates as follows:
         Return the ten-element set of characters containing the characters 0 through 9 inclusive.
     The production CharacterClassEscape :: D evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
     The production CharacterClassEscape :: s evaluates as follows:
         Return the set of characters containing the characters that are on the right-hand side of
         the WhiteSpace or LineTerminator productions.
     The production CharacterClassEscape :: S evaluates as follows:
@@ -31,31 +32,33 @@ info: |
     The production CharacterClassEscape :: w evaluates as follows:
         Return the set of all characters returned by WordCharacters().
     The production CharacterClassEscape :: W evaluates as follows:
         Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
 features: [String.fromCodePoint]
 includes: [regExpUtils.js]
 ---*/
 
-const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]});
+const str = buildString({
+    loneCodePoints: [0x00005F],
+    ranges: [
+        [0x000030, 0x000039],
+        [0x000041, 0x00005A],
+        [0x000061, 0x00007A],
+    ],
+});
 
 const re = /\w/g;
-const matchingRange = /[0-9A-Z_a-z]/g;
 
 const errors = [];
 
-function matching(str) {
-    return str.replace(re, '') === str.replace(matchingRange, '');
-}
-
-if (!matching(str)) {
+if (!re.test(str)) {
     // Error, let's find out where
     for (const char of str) {
-        if (!matching(char)) {
+        if (!re.test(char)) {
             errors.push('0x' + char.codePointAt(0).toString(16));
         }
     }
 }
 
 assert.sameValue(
     errors.length,
     0,
deleted file mode 100644
--- a/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-malformed.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// |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: >
-  Named groups in Unicode RegExps have some syntax errors and some
-  compatibility escape fallback behavior.
-esid: prod-GroupSpecifier
-features: [regexp-named-groups]
-includes: [compareArray.js]
----*/
-
-assert.throws(SyntaxError, () => eval("/(?<>a)/"));
-assert.throws(SyntaxError, () => eval("/(?<aa)/"));
-assert.throws(SyntaxError, () => eval("/(?<42a>a)/"));
-assert.throws(SyntaxError, () => eval("/(?<:a>a)/"));
-assert.throws(SyntaxError, () => eval("/(?<a:>a)/"));
-assert.throws(SyntaxError, () => eval("/(?<a>a)(?<a>a)/"));
-assert.throws(SyntaxError, () => eval("/(?<a>a)(?<b>b)(?<a>a)/"));
-
-assert.throws(SyntaxError, () => eval("/(?<a>.)\\k/"));
-assert.throws(SyntaxError, () => eval("/(?<a>.)\\k<a/"));
-assert.throws(SyntaxError, () => eval("/(?<a>.)\\k<>/"));
-assert.throws(SyntaxError, () => eval("/(?<a>.)\\k<b>/"));
-assert.throws(SyntaxError, () => eval("/(?<a>a)\\k<ab>/"));
-assert.throws(SyntaxError, () => eval("/(?<ab>a)\\k<a>/"));
-assert.throws(SyntaxError, () => eval("/\\k<a>(?<ab>a)/"));
-assert.throws(SyntaxError, () => eval("/\\k<a(?<a>a)/"));
-
-// A couple of corner cases around '\k' as named back-references vs. identity
-// escapes.
-assert(/\k<a>(?<a>x)/.test("x"));
-assert.throws(SyntaxError, () => eval("/\\k<a>(?<b>x)/"));
-assert.throws(SyntaxError, () => eval("/\\k<a(?<a>.)/"));
-assert.throws(SyntaxError, () => eval("/\\k(?<a>.)/"));
-
-reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names.js
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names.js
@@ -1,47 +1,26 @@
 // |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: Exotic named group names in non-Unicode RegExps
 esid: prod-GroupSpecifier
 features: [regexp-named-groups]
-includes: [compareArray.js]
 ---*/
 
 assert.sameValue("a", /(?<π>a)/.exec("bab").groups.π);
-assert.throws(SyntaxError, () => eval('/(?<\\u{03C0}>a)/'), "\\u{} escapes allowed only in Unicode mode");
 assert.sameValue("a", /(?<π>a)/.exec("bab").groups.\u03C0);
 assert.sameValue("a", /(?<$>a)/.exec("bab").groups.$);
 assert.sameValue("a", /(?<_>a)/.exec("bab").groups._);
-assert.throws(SyntaxError, () => eval('/(?<$𐒤>a)/'), "Individual surrogates not in ID_Continue");
 assert.sameValue("a", /(?<_\u200C>a)/.exec("bab").groups._\u200C);
 assert.sameValue("a", /(?<_\u200D>a)/.exec("bab").groups._\u200D);
 assert.sameValue("a", /(?<ಠ_ಠ>a)/.exec("bab").groups.ಠ_ಠ);
-assert.throws(SyntaxError, () => eval('/(?<❤>a)/'));
-assert.throws(SyntaxError, () => eval('/(?<𐒤>a)/'), "Individual surrogate not in ID_Start.");
 
 // Unicode escapes in capture names.
-assert.throws(SyntaxError, () => eval("/(?<a\\uD801\uDCA4>.)/"));
-assert.throws(SyntaxError, () => eval("/(?<a\\uD801>.)/"));
-assert.throws(SyntaxError, () => eval("/(?<a\\uDCA4>.)/"));
 assert(/(?<\u0041>.)/.test("a"));
-assert.throws(SyntaxError, () => eval("/(?<a\\u{104A4}>.)/"));
-assert.throws(SyntaxError, () => eval("/(?<a\\u{10FFFF}>.)/"));
-assert.throws(SyntaxError, () => eval("/(?<a\uD801>.)/"), "Lea");
-assert.throws(SyntaxError, () => eval("/(?<a\uDCA4>.)/"), "Trai");
 assert(RegExp("(?<\u{0041}>.)").test("a"), "Non-surrogate");
 
-// Bracketed escapes are not allowed;
 // 4-char escapes must be the proper ID_Start/ID_Continue
-assert.throws(SyntaxError, () => eval("/(?<a\\uD801>.)/"), "Lead");
-assert.throws(SyntaxError, () => eval("/(?<a\\uDCA4>.)/"), "Trail");
-assert.throws(SyntaxError, () => eval("/(?<\\u{0041}>.)/"), "Non-surrogate");
-assert.throws(SyntaxError, () => eval("/(?<a\\u{104A4}>.)/"), "Surrogate, ID_Continue");
 assert(RegExp("(?<\\u0041>.)").test("a"), "Non-surrogate");
 
-// Backslash is not allowed as ID_Start and ID_Continue
-assert.throws(SyntaxError, () => eval("/(?<\\>.)/"), "'\' misclassified as ID_Start");
-assert.throws(SyntaxError, () => eval("/(?<a\\>.)/"), "'\' misclassified as ID_Continue");
-
 reportCompare(0, 0);
deleted file mode 100644
--- a/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-malformed.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// |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: Various syntax errors for Unicode RegExps containing named groups
-esid: prod-GroupSpecifier
-features: [regexp-named-groups]
----*/
-
-assert.throws(SyntaxError, () => eval("/(?<>a)/u"), "Empty name");
-assert.throws(SyntaxError, () => eval("/(?<aa)/u"), "Unterminated name");
-assert.throws(SyntaxError, () => eval("/(?<42a>a)/u"), "Name starting with digits");
-assert.throws(SyntaxError, () => eval("/(?<:a>a)/u"), "Name starting with invalid char");
-assert.throws(SyntaxError, () => eval("/(?<a:>a)/u"), "Name containing with invalid char");
-assert.throws(SyntaxError, () => eval("/(?<a>a)(?<a>a)/u"), "Duplicate name");
-assert.throws(SyntaxError, () => eval("/(?<a>a)(?<b>b)(?<a>a)/u"), "Duplicate name");
-assert.throws(SyntaxError, () => eval("/\\k<a>/u"), "Invalid reference");
-assert.throws(SyntaxError, () => eval("/\\k<a/u"), "Unterminated reference");
-assert.throws(SyntaxError, () => eval("/\\k<>/u"), "Empty reference");
-assert.throws(SyntaxError, () => eval("/\\k/u"), "Lone \k");
-assert.throws(SyntaxError, () => eval("/(?<a>.)\\k/u"), "Lone \k");
-assert.throws(SyntaxError, () => eval("/(?<a>.)\\k<a/u"), "Unterminated reference");
-assert.throws(SyntaxError, () => eval("/(?<a>.)\\k<>/u"), "Empty reference");
-assert.throws(SyntaxError, () => eval("/(?<a>.)\\k<b>/u"), "Invalid reference");
-assert.throws(SyntaxError, () => eval("/(?<a>a)\\k<ab>/u"), "Invalid reference");
-assert.throws(SyntaxError, () => eval("/(?<ab>a)\\k<a>/u"), "Invalid reference");
-assert.throws(SyntaxError, () => eval("/\\k<a>(?<ab>a)/u"), "Invalid reference");
-assert.throws(SyntaxError, () => eval("/(?<a>\\a)/u"), "Identity escape in capture");
-
-
-reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names.js
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names.js
@@ -13,37 +13,21 @@ assert.sameValue("a", /(?<\u{03C0}>a)/u.exec("bab").groups.π);
 assert.sameValue("a", /(?<π>a)/u.exec("bab").groups.\u03C0);
 assert.sameValue("a", /(?<\u{03C0}>a)/u.exec("bab").groups.\u03C0);
 assert.sameValue("a", /(?<$>a)/u.exec("bab").groups.$);
 assert.sameValue("a", /(?<_>a)/u.exec("bab").groups._);
 assert.sameValue("a", /(?<$𐒤>a)/u.exec("bab").groups.$𐒤);
 assert.sameValue("a", /(?<_\u200C>a)/u.exec("bab").groups._\u200C);
 assert.sameValue("a", /(?<_\u200D>a)/u.exec("bab").groups._\u200D);
 assert.sameValue("a", /(?<ಠ_ಠ>a)/u.exec("bab").groups.ಠ_ಠ);
-assert.throws(SyntaxError, () => eval('/(?<❤>a)/u'));
-assert.throws(SyntaxError, () => eval('/(?<𐒤>a)/u'), "ID_Continue but not ID_Start.");
 
 // Unicode escapes in capture names.
 assert(/(?<a\uD801\uDCA4>.)/u.test("a"), "\\u Lead \\u Trail");
-assert.throws(SyntaxError, () => eval("/(?<a\\uD801>.)/u"), "\\u Lea");
-assert.throws(SyntaxError, () => eval("/(?<a\\uDCA4>.)/u"), "\\u Trai");
 assert(/(?<\u0041>.)/u.test("a"), "\\u NonSurrogate");
 assert(/(?<\u{0041}>.)/u.test("a"), "\\u{ Non-surrogate }");
 assert(/(?<a\u{104A4}>.)/u.test("a"), "\\u{ Surrogate, ID_Continue }");
-assert.throws(SyntaxError, () => eval("/(?<a\\u{110000}>.)/u"), "\\u{ Out-of-bounds ");
-assert.throws(SyntaxError, () => eval("/(?<a\uD801>.)/u"), "Lea");
-assert.throws(SyntaxError, () => eval("/(?<a\uDCA4>.)/u"), "Trai");
 assert(RegExp("(?<\u{0041}>.)", "u").test("a"), "Non-surrogate");
 assert(RegExp("(?<a\u{104A4}>.)", "u").test("a"), "Surrogate,ID_Continue");
-
-// Bracketed escapes are not allowed;
-// 4-char escapes must be the proper ID_Start/ID_Continue
-assert.throws(SyntaxError, () => eval("/(?<a\\uD801>.)/u"), "Lead");
-assert.throws(SyntaxError, () => eval("/(?<a\\uDCA4>.)/u"), "Trail");
 assert((/(?<\u{0041}>.)/u).test("a"), "Non-surrogate");
 assert(/(?<a\u{104A4}>.)/u.test("a"), "Surrogate, ID_Continue");
 assert(RegExp("(?<\\u0041>.)", "u").test("a"), "Non-surrogate");
 
-// Backslash is not allowed as ID_Start and ID_Continue
-assert.throws(SyntaxError, () => eval("/(?<\\>.)/u"), "'\' misclassified as ID_Start");
-assert.throws(SyntaxError, () => eval("/(?<a\\>.)/u"), "'\' misclassified as ID_Continue");
-
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F-negated.js
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F-negated.js
@@ -9,11 +9,11 @@ description: >
   escapes (even if the value is valid).
 esid: sec-static-semantics-unicodematchproperty-p
 negative:
   phase: parse
   type: SyntaxError
 features: [regexp-unicode-property-escapes]
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 
 /\P{ASCII=F}/u;
--- a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F.js
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F.js
@@ -9,11 +9,11 @@ description: >
   escapes (even if the value is valid).
 esid: sec-static-semantics-unicodematchproperty-p
 negative:
   phase: parse
   type: SyntaxError
 features: [regexp-unicode-property-escapes]
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 
 /\p{ASCII=F}/u;
--- a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid-negated.js
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid-negated.js
@@ -9,11 +9,11 @@ description: >
   escapes (even if the value is valid).
 esid: sec-static-semantics-unicodematchproperty-p
 negative:
   phase: parse
   type: SyntaxError
 features: [regexp-unicode-property-escapes]
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 
 /\P{ASCII=Invalid}/u;
--- a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid.js
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid.js
@@ -9,11 +9,11 @@ description: >
   escapes (even if the value is valid).
 esid: sec-static-semantics-unicodematchproperty-p
 negative:
   phase: parse
   type: SyntaxError
 features: [regexp-unicode-property-escapes]
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 
 /\p{ASCII=Invalid}/u;
--- a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N-negated.js
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N-negated.js
@@ -9,11 +9,11 @@ description: >
   escapes (even if the value is valid).
 esid: sec-static-semantics-unicodematchproperty-p
 negative:
   phase: parse
   type: SyntaxError
 features: [regexp-unicode-property-escapes]
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 
 /\P{ASCII=N}/u;
--- a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N.js
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N.js
@@ -9,11 +9,11 @@ description: >
   escapes (even if the value is valid).
 esid: sec-static-semantics-unicodematchproperty-p
 negative:
   phase: parse
   type: SyntaxError
 features: [regexp-unicode-property-escapes]
 ---*/
 
-throw "Test262: This statement should not be evaluated.";
+$DONOTEVALUATE();
 
 /\p{ASCII=N}/u;
--- a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No-negated.js
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No-negated.js
@@ -9,11 +9,11 @@ description: >
   escapes (even if the value is valid).
 esid: sec-static-semantics-unicodematchproperty-p
 negative:
   phase: parse