merge mozilla-inbound to mozilla-central. r=merge a=merge
authorSebastian Hengst <archaeopteryx@coole-files.de>
Thu, 12 Oct 2017 12:40:23 +0300
changeset 385760 191c4f1b5992973a6910e4999081e46c5e5a2b56
parent 385739 a32c32d9631c0bf7c7c283c57c299cd056e85814 (current diff)
parent 385759 39d2b1b24e0ff48a828c89d6106ba18c0be745a8 (diff)
child 385761 bc7a5be76b723cf6aac1a919156e74997c5f4902
child 385790 0131dafb015b817ac0b2ae064f5a09e659b4d20e
child 385850 d60a291ede636b5b39020d3adba49a93c1f59852
push id32665
push userarchaeopteryx@coole-files.de
push dateThu, 12 Oct 2017 09:43:49 +0000
treeherdermozilla-central@191c4f1b5992 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge, merge
milestone58.0a1
first release with
nightly linux32
191c4f1b5992 / 58.0a1 / 20171012100228 / files
nightly linux64
191c4f1b5992 / 58.0a1 / 20171012100228 / files
nightly mac
191c4f1b5992 / 58.0a1 / 20171012100228 / files
nightly win32
191c4f1b5992 / 58.0a1 / 20171012100228 / files
nightly win64
191c4f1b5992 / 58.0a1 / 20171012100228 / 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 mozilla-inbound to mozilla-central. r=merge a=merge
js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T4.js
js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-13.js
js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-4.js
js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-8.js
js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-3.js
js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-7.js
js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-13.js
js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-17.js
js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-4.js
js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-8.js
js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-3.js
js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-7.js
js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/duplicate-keys.js
js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-6.js
js/src/tests/test262/built-ins/RegExp/prototype/flags/order.js
js/src/tests/test262/built-ins/RegExp/prototype/flags/s.js
js/src/tests/test262/built-ins/RegExp/prototype/flags/u-attr-err.js
js/src/tests/test262/built-ins/RegExp/prototype/flags/u-coercion.js
js/src/tests/test262/built-ins/RegExp/prototype/flags/u.js
js/src/tests/test262/built-ins/RegExp/prototype/flags/y-attr-err.js
js/src/tests/test262/built-ins/RegExp/prototype/flags/y.js
js/src/tests/test262/built-ins/RegExp/prototype/source/15.10.7.1-2.js
js/src/tests/test262/built-ins/RegExp/prototype/source/S15.10.7.1_A10.js
js/src/tests/test262/built-ins/RegExp/prototype/source/S15.10.7.1_A8.js
js/src/tests/test262/built-ins/RegExp/prototype/source/S15.10.7.1_A9.js
js/src/tests/test262/harness/error.js
js/src/tests/test262/harness/propertyhelper-verifywritable-not-writable-strict.js
js/src/tests/test262/intl402/6.2.3.js
js/src/tests/test262/language/expressions/array/spread-err-mult-err-obj-getter-throws.js
js/src/tests/test262/language/expressions/array/spread-err-sngl-err-obj-getter-throws.js
js/src/tests/test262/language/expressions/array/spread-mult-obj-base.js
js/src/tests/test262/language/expressions/array/spread-mult-obj-empty.js
js/src/tests/test262/language/expressions/array/spread-mult-obj-null-empty-undefined.js
js/src/tests/test262/language/expressions/array/spread-obj-setter-redef.js
js/src/tests/test262/language/expressions/array/spread-sngl-obj-base.js
js/src/tests/test262/language/expressions/array/spread-sngl-obj-empty.js
js/src/tests/test262/language/expressions/arrow-function/dstr-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/arrow-function/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/arrow-function/dstr-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/arrow-function/dstr-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/arrow-function/dstr-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/arrow-function/dstr-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/arrow-function/param-dflt-yield-id-non-strict-strict.js
js/src/tests/test262/language/expressions/assignment/dstr-obj-rest-nested-obj-nested-rest.js
js/src/tests/test262/language/expressions/assignment/dstr-obj-rest-nested-obj.js
js/src/tests/test262/language/expressions/assignment/dstr-obj-rest-obj-own-property.js
js/src/tests/test262/language/expressions/async-generator/dstr-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/async-generator/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/async-generator/dstr-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/async-generator/dstr-named-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/async-generator/dstr-named-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/async-generator/dstr-named-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/async-generator/dstr-named-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/async-generator/dstr-named-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/async-generator/dstr-named-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/async-generator/dstr-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/async-generator/dstr-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/async-generator/dstr-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/call/spread-err-mult-err-obj-getter-throws.js
js/src/tests/test262/language/expressions/call/spread-err-sngl-err-obj-getter-throws.js
js/src/tests/test262/language/expressions/call/spread-mult-obj-base.js
js/src/tests/test262/language/expressions/call/spread-mult-obj-empty.js
js/src/tests/test262/language/expressions/call/spread-mult-obj-null-empty-undefined.js
js/src/tests/test262/language/expressions/call/spread-obj-setter-redef.js
js/src/tests/test262/language/expressions/call/spread-sngl-obj-base.js
js/src/tests/test262/language/expressions/call/spread-sngl-obj-empty.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-static-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-static-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-gen-meth-static-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/class/dstr-meth-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-meth-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/class/dstr-meth-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-meth-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-meth-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/class/dstr-meth-static-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/class/dstr-meth-static-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/class/dstr-meth-static-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/function/dstr-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/function/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/function/dstr-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/function/dstr-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/function/dstr-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/function/dstr-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/generators/dstr-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/generators/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/generators/dstr-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/generators/dstr-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/generators/dstr-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/generators/dstr-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/new/spread-err-mult-err-obj-getter-throws.js
js/src/tests/test262/language/expressions/new/spread-err-sngl-err-obj-getter-throws.js
js/src/tests/test262/language/expressions/new/spread-mult-obj-base.js
js/src/tests/test262/language/expressions/new/spread-mult-obj-empty.js
js/src/tests/test262/language/expressions/new/spread-mult-obj-null-empty-undefined.js
js/src/tests/test262/language/expressions/new/spread-obj-setter-redef.js
js/src/tests/test262/language/expressions/new/spread-sngl-obj-base.js
js/src/tests/test262/language/expressions/new/spread-sngl-obj-empty.js
js/src/tests/test262/language/expressions/object/dstr-async-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/object/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/object/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/object/dstr-async-gen-meth-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/object/dstr-async-gen-meth-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/object/dstr-async-gen-meth-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/object/dstr-gen-meth-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/object/dstr-gen-meth-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/object/dstr-gen-meth-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/object/dstr-meth-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/object/dstr-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/object/dstr-meth-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/object/dstr-meth-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/expressions/object/dstr-meth-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/expressions/object/dstr-meth-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/expressions/super/call-spread-err-mult-err-obj-getter-throws.js
js/src/tests/test262/language/expressions/super/call-spread-err-sngl-err-obj-getter-throws.js
js/src/tests/test262/language/expressions/super/call-spread-mult-obj-base.js
js/src/tests/test262/language/expressions/super/call-spread-mult-obj-empty.js
js/src/tests/test262/language/expressions/super/call-spread-mult-obj-null-empty-undefined.js
js/src/tests/test262/language/expressions/super/call-spread-obj-setter-redef.js
js/src/tests/test262/language/expressions/super/call-spread-sngl-obj-base.js
js/src/tests/test262/language/expressions/super/call-spread-sngl-obj-empty.js
js/src/tests/test262/language/statements/async-generator/dstr-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/async-generator/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/async-generator/dstr-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/async-generator/dstr-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/async-generator/dstr-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/async-generator/dstr-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-static-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-static-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-gen-meth-static-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-meth-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-meth-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-meth-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-meth-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-meth-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-meth-static-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/class/dstr-meth-static-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/class/dstr-meth-static-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/class/dstr-meth-static-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/const/dstr-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/const/dstr-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/const/dstr-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-of/dstr-const-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-of/dstr-const-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-of/dstr-const-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-of/dstr-let-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-of/dstr-let-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-of/dstr-let-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-of/dstr-obj-rest-nested-obj-nested-rest.js
js/src/tests/test262/language/statements/for-of/dstr-obj-rest-nested-obj.js
js/src/tests/test262/language/statements/for-of/dstr-obj-rest-obj-own-property.js
js/src/tests/test262/language/statements/for-of/dstr-var-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for-of/dstr-var-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for-of/dstr-var-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for/dstr-const-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for/dstr-const-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for/dstr-const-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for/dstr-let-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for/dstr-let-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for/dstr-let-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/for/dstr-var-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/for/dstr-var-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/for/dstr-var-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/function/dstr-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/function/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/function/dstr-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/function/dstr-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/function/dstr-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/function/dstr-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/generators/dstr-dflt-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/generators/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/generators/dstr-dflt-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/generators/dstr-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/generators/dstr-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/generators/dstr-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/let/dstr-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/let/dstr-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/let/dstr-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/try/12.14.1-1-s-strict.js
js/src/tests/test262/language/statements/try/12.14.1-1gs-strict.js
js/src/tests/test262/language/statements/try/12.14.1-2-s-strict.js
js/src/tests/test262/language/statements/try/12.14.1-3-s-strict.js
js/src/tests/test262/language/statements/try/12.14.1-4-s.js
js/src/tests/test262/language/statements/try/12.14.1-5-s.js
js/src/tests/test262/language/statements/try/12.14.1-6-s.js
js/src/tests/test262/language/statements/try/S12.14_A16_T4.js
js/src/tests/test262/language/statements/try/dstr-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/try/dstr-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/try/dstr-obj-ptrn-rest-obj-own-property.js
js/src/tests/test262/language/statements/variable/dstr-obj-ptrn-rest-nested-obj.js
js/src/tests/test262/language/statements/variable/dstr-obj-ptrn-rest-obj-nested-rest.js
js/src/tests/test262/language/statements/variable/dstr-obj-ptrn-rest-obj-own-property.js
modules/libpref/nsPrefBranch.cpp
modules/libpref/nsPrefBranch.h
modules/libpref/nsPrefsFactory.cpp
modules/libpref/prefapi.cpp
modules/libpref/prefapi.h
modules/libpref/prefapi_private_data.h
modules/libpref/prefread.cpp
modules/libpref/prefread.h
--- a/build/unix/run-mozilla.sh
+++ b/build/unix/run-mozilla.sh
@@ -233,17 +233,17 @@ fi
 ## Make sure the program is executable
 ##
 if [ ! -x "$MOZ_PROGRAM" ]
 then
 	moz_bail "Cannot execute $MOZ_PROGRAM."
 fi
 #
 if [ -z "$MRE_HOME" ]; then
-    MRE_HOME=$MOZ_DIST_BIN"
+    MRE_HOME=$MOZ_DIST_BIN
 fi
 ##
 ## Set LD_LIBRARY_PATH
 ##
 ## On Solaris we use $ORIGIN (set in RUNPATH) instead of LD_LIBRARY_PATH 
 ## to locate shared libraries. 
 ##
 ## When a shared library is a symbolic link, $ORIGIN will be replaced with
new file mode 100644
--- /dev/null
+++ b/dom/base/crashtests/1396466.html
@@ -0,0 +1,20 @@
+<script>
+function addNew(i,t){
+  let n=document.createElement(t);
+  n.setAttribute('id', i);
+  document.getElementById('a').appendChild(n);
+}
+document.addEventListener("DOMContentLoaded", function(){
+  addNew('b','multicol');
+  addNew('c','marquee');
+  addNew('d','spacer');
+  document.getElementById('a').appendChild(document.createElement('iframe'));
+  document.getElementById('b').focus();
+  window.frames[0].document.body.appendChild(document.getElementById('c'));
+  let o=window.frames[0].document.body.childNodes[0];
+  document.getElementById('d').appendChild(o.parentNode.removeChild(o));
+  try{window.find('x')}catch(e){}
+  window.frames[0].document.body.appendChild(document.getElementById('c'));
+});
+</script>
+<body id='a'></body>
--- a/dom/base/crashtests/crashtests.list
+++ b/dom/base/crashtests/crashtests.list
@@ -221,12 +221,13 @@ load 1373750.html
 load 1377826.html
 skip-if(stylo&&isDebugBuild&&winWidget) load structured_clone_container_throws.html # Bug 1383845
 load xhr_empty_datauri.html
 load xhr_html_nullresponse.html
 load 1383478.html
 load 1383780.html
 pref(clipboard.autocopy,true) load 1385272-1.html
 load 1393806.html
+load 1396466.html
 load 1400701.html
 load 1403377.html
 load 1405771.html
 load 1406109-1.html
--- a/gfx/thebes/gfxCoreTextShaper.cpp
+++ b/gfx/thebes/gfxCoreTextShaper.cpp
@@ -14,17 +14,19 @@
 #include <algorithm>
 
 #include <dlfcn.h>
 
 using namespace mozilla;
 
 // standard font descriptors that we construct the first time they're needed
 CTFontDescriptorRef gfxCoreTextShaper::sDefaultFeaturesDescriptor = nullptr;
+CTFontDescriptorRef gfxCoreTextShaper::sSmallCapsDescriptor = nullptr;
 CTFontDescriptorRef gfxCoreTextShaper::sDisableLigaturesDescriptor = nullptr;
+CTFontDescriptorRef gfxCoreTextShaper::sSmallCapDisableLigDescriptor = nullptr;
 CTFontDescriptorRef gfxCoreTextShaper::sIndicFeaturesDescriptor = nullptr;
 CTFontDescriptorRef gfxCoreTextShaper::sIndicDisableLigaturesDescriptor = nullptr;
 
 // Helper to create a CFDictionary with the right attributes for shaping our
 // text, including imposing the given directionality.
 CFDictionaryRef
 gfxCoreTextShaper::CreateAttrDict(bool aRightToLeft)
 {
@@ -75,17 +77,19 @@ gfxCoreTextShaper::~gfxCoreTextShaper()
         ::CFRelease(mCTFont);
     }
 }
 
 static bool
 IsBuggyIndicScript(unicode::Script aScript)
 {
     return aScript == unicode::Script::BENGALI ||
-           aScript == unicode::Script::KANNADA;
+           aScript == unicode::Script::KANNADA ||
+           aScript == unicode::Script::ORIYA ||
+           aScript == unicode::Script::KHMER;
 }
 
 bool
 gfxCoreTextShaper::ShapeText(DrawTarget      *aDrawTarget,
                              const char16_t *aText,
                              uint32_t         aOffset,
                              uint32_t         aLength,
                              Script           aScript,
@@ -97,55 +101,82 @@ gfxCoreTextShaper::ShapeText(DrawTarget 
     bool isRightToLeft = aShapedText->IsRightToLeft();
     const UniChar* text = reinterpret_cast<const UniChar*>(aText);
 
     CFStringRef stringObj =
         ::CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault,
                                              text, aLength,
                                              kCFAllocatorNull);
 
+    // Figure out whether we should try to set the AAT small-caps feature:
+    // examine OpenType tags for the requested style, and see if 'smcp' is
+    // among them.
+    const gfxFontStyle *style = mFont->GetStyle();
+    gfxFontEntry *entry = mFont->GetFontEntry();
+    auto handleFeatureTag = [](const uint32_t& aTag, uint32_t& aValue,
+                               void *aUserArg) -> void {
+        if (aTag == HB_TAG('s','m','c','p') && aValue) {
+            *static_cast<bool*>(aUserArg) = true;
+        }
+    };
+    bool addSmallCaps = false;
+    MergeFontFeatures(style,
+                      entry->mFeatureSettings,
+                      false,
+                      entry->FamilyName(),
+                      false,
+                      handleFeatureTag,
+                      &addSmallCaps);
+
     // Get an attributes dictionary suitable for shaping text in the
     // current direction, creating it if necessary.
     CFDictionaryRef attrObj =
         isRightToLeft ? mAttributesDictRTL : mAttributesDictLTR;
     if (!attrObj) {
         attrObj = CreateAttrDict(isRightToLeft);
         (isRightToLeft ? mAttributesDictRTL : mAttributesDictLTR) = attrObj;
     }
 
     CTFontRef tempCTFont = nullptr;
     if (IsBuggyIndicScript(aScript)) {
         // To work around buggy Indic AAT fonts shipped with OS X,
         // we re-enable the Line Initial Smart Swashes feature that is needed
         // for "split vowels" to work in at least Bengali and Kannada fonts.
         // Affected fonts include Bangla MN, Bangla Sangam MN, Kannada MN,
         // Kannada Sangam MN. See bugs 686225, 728557, 953231, 1145515.
+        // Also applies to Oriya and Khmer, see bug 1370927 and bug 1403166.
         tempCTFont =
             CreateCTFontWithFeatures(::CTFontGetSize(mCTFont),
                                      aShapedText->DisableLigatures()
                                          ? GetIndicDisableLigaturesDescriptor()
                                          : GetIndicFeaturesDescriptor());
     } else if (aShapedText->DisableLigatures()) {
         // For letterspacing (or maybe other situations) we need to make
         // a copy of the CTFont with the ligature feature disabled.
         tempCTFont =
             CreateCTFontWithFeatures(::CTFontGetSize(mCTFont),
-                                     GetDisableLigaturesDescriptor());
+                                     addSmallCaps
+                                         ? GetSmallCapDisableLigDescriptor()
+                                         : GetDisableLigaturesDescriptor());
+    } else if (addSmallCaps) {
+        tempCTFont =
+            CreateCTFontWithFeatures(::CTFontGetSize(mCTFont),
+                                     GetSmallCapsDescriptor());
     }
 
-    // For the disabled-ligature or buggy-indic-font case, we need to replace
+    // For the disabled-ligature, buggy-indic-font or small-caps case, replace
     // the standard CTFont in the attribute dictionary with a tweaked version.
     CFMutableDictionaryRef mutableAttr = nullptr;
     if (tempCTFont) {
         mutableAttr = ::CFDictionaryCreateMutableCopy(kCFAllocatorDefault, 2,
                                                       attrObj);
         ::CFDictionaryReplaceValue(mutableAttr,
                                    kCTFontAttributeName, tempCTFont);
         // Having created the dict, we're finished with our temporary
-        // Indic and/or ligature-disabled CTFontRef.
+        // Indic and/or ligature-disabled or small-caps CTFontRef.
         ::CFRelease(tempCTFont);
         attrObj = mutableAttr;
     }
 
     // Now we can create an attributed string
     CFAttributedStringRef attrStringObj =
         ::CFAttributedStringCreate(kCFAllocatorDefault, stringObj, attrObj);
     ::CFRelease(stringObj);
@@ -537,17 +568,17 @@ gfxCoreTextShaper::SetGlyphsFromRun(gfxS
 
 // Construct the font attribute descriptor that we'll apply by default when
 // creating a CTFontRef. This will turn off line-edge swashes by default,
 // because we don't know the actual line breaks when doing glyph shaping.
 
 // We also cache feature descriptors for shaping with disabled ligatures, and
 // for buggy Indic AAT font workarounds, created on an as-needed basis.
 
-#define MAX_FEATURES  3 // max used by any of our Get*Descriptor functions
+#define MAX_FEATURES  5 // max used by any of our Get*Descriptor functions
 
 CTFontDescriptorRef
 gfxCoreTextShaper::CreateFontFeaturesDescriptor(
     const std::pair<SInt16,SInt16> aFeatures[],
     size_t aCount)
 {
     MOZ_ASSERT(aCount <= MAX_FEATURES);
 
@@ -608,61 +639,108 @@ gfxCoreTextShaper::CreateFontFeaturesDes
 CTFontDescriptorRef
 gfxCoreTextShaper::GetDefaultFeaturesDescriptor()
 {
     if (sDefaultFeaturesDescriptor == nullptr) {
         const std::pair<SInt16,SInt16> kDefaultFeatures[] = {
             { kSmartSwashType, kLineInitialSwashesOffSelector },
             { kSmartSwashType, kLineFinalSwashesOffSelector }
         };
+        static_assert(ArrayLength(kDefaultFeatures) <= MAX_FEATURES,
+                      "need to increase MAX_FEATURES");
         sDefaultFeaturesDescriptor =
             CreateFontFeaturesDescriptor(kDefaultFeatures,
                                          ArrayLength(kDefaultFeatures));
     }
     return sDefaultFeaturesDescriptor;
 }
 
 CTFontDescriptorRef
+gfxCoreTextShaper::GetSmallCapsDescriptor()
+{
+    if (sSmallCapsDescriptor == nullptr) {
+        const std::pair<SInt16,SInt16> kSmallCaps[] = {
+            { kSmartSwashType, kLineInitialSwashesOffSelector },
+            { kSmartSwashType, kLineFinalSwashesOffSelector },
+            { kLetterCaseType, kSmallCapsSelector },
+            { kLowerCaseType, kLowerCaseSmallCapsSelector }
+        };
+        static_assert(ArrayLength(kSmallCaps) <= MAX_FEATURES,
+                      "need to increase MAX_FEATURES");
+        sSmallCapsDescriptor =
+            CreateFontFeaturesDescriptor(kSmallCaps,
+                                         ArrayLength(kSmallCaps));
+    }
+    return sSmallCapsDescriptor;
+}
+
+CTFontDescriptorRef
 gfxCoreTextShaper::GetDisableLigaturesDescriptor()
 {
     if (sDisableLigaturesDescriptor == nullptr) {
         const std::pair<SInt16,SInt16> kDisableLigatures[] = {
             { kSmartSwashType, kLineInitialSwashesOffSelector },
             { kSmartSwashType, kLineFinalSwashesOffSelector },
             { kLigaturesType, kCommonLigaturesOffSelector }
         };
+        static_assert(ArrayLength(kDisableLigatures) <= MAX_FEATURES,
+                      "need to increase MAX_FEATURES");
         sDisableLigaturesDescriptor =
             CreateFontFeaturesDescriptor(kDisableLigatures,
                                          ArrayLength(kDisableLigatures));
     }
     return sDisableLigaturesDescriptor;
 }
 
 CTFontDescriptorRef
+gfxCoreTextShaper::GetSmallCapDisableLigDescriptor()
+{
+    if (sSmallCapDisableLigDescriptor == nullptr) {
+        const std::pair<SInt16,SInt16> kFeatures[] = {
+            { kSmartSwashType, kLineInitialSwashesOffSelector },
+            { kSmartSwashType, kLineFinalSwashesOffSelector },
+            { kLigaturesType, kCommonLigaturesOffSelector },
+            { kLetterCaseType, kSmallCapsSelector },
+            { kLowerCaseType, kLowerCaseSmallCapsSelector }
+        };
+        static_assert(ArrayLength(kFeatures) <= MAX_FEATURES,
+                      "need to increase MAX_FEATURES");
+        sSmallCapDisableLigDescriptor =
+            CreateFontFeaturesDescriptor(kFeatures,
+                                         ArrayLength(kFeatures));
+    }
+    return sSmallCapDisableLigDescriptor;
+}
+
+CTFontDescriptorRef
 gfxCoreTextShaper::GetIndicFeaturesDescriptor()
 {
     if (sIndicFeaturesDescriptor == nullptr) {
         const std::pair<SInt16,SInt16> kIndicFeatures[] = {
             { kSmartSwashType, kLineFinalSwashesOffSelector }
         };
+        static_assert(ArrayLength(kIndicFeatures) <= MAX_FEATURES,
+                      "need to increase MAX_FEATURES");
         sIndicFeaturesDescriptor =
             CreateFontFeaturesDescriptor(kIndicFeatures,
                                          ArrayLength(kIndicFeatures));
     }
     return sIndicFeaturesDescriptor;
 }
 
 CTFontDescriptorRef
 gfxCoreTextShaper::GetIndicDisableLigaturesDescriptor()
 {
     if (sIndicDisableLigaturesDescriptor == nullptr) {
         const std::pair<SInt16,SInt16> kIndicDisableLigatures[] = {
             { kSmartSwashType, kLineFinalSwashesOffSelector },
             { kLigaturesType, kCommonLigaturesOffSelector }
         };
+        static_assert(ArrayLength(kIndicDisableLigatures) <= MAX_FEATURES,
+                      "need to increase MAX_FEATURES");
         sIndicDisableLigaturesDescriptor =
             CreateFontFeaturesDescriptor(kIndicDisableLigatures,
                                          ArrayLength(kIndicDisableLigatures));
     }
     return sIndicDisableLigaturesDescriptor;
 }
 
 CTFontRef
--- a/gfx/thebes/gfxCoreTextShaper.h
+++ b/gfx/thebes/gfxCoreTextShaper.h
@@ -48,24 +48,28 @@ protected:
     CFDictionaryRef CreateAttrDict(bool aRightToLeft);
     CFDictionaryRef CreateAttrDictWithoutDirection();
 
     static CTFontDescriptorRef
     CreateFontFeaturesDescriptor(const std::pair<SInt16,SInt16> aFeatures[],
                                  size_t aCount);
 
     static CTFontDescriptorRef GetDefaultFeaturesDescriptor();
+    static CTFontDescriptorRef GetSmallCapsDescriptor();
     static CTFontDescriptorRef GetDisableLigaturesDescriptor();
+    static CTFontDescriptorRef GetSmallCapDisableLigDescriptor();
     static CTFontDescriptorRef GetIndicFeaturesDescriptor();
     static CTFontDescriptorRef GetIndicDisableLigaturesDescriptor();
 
     // cached font descriptor, created the first time it's needed
     static CTFontDescriptorRef    sDefaultFeaturesDescriptor;
+    static CTFontDescriptorRef    sSmallCapsDescriptor;
 
     // cached descriptor for adding disable-ligatures setting to a font
     static CTFontDescriptorRef    sDisableLigaturesDescriptor;
+    static CTFontDescriptorRef    sSmallCapDisableLigDescriptor;
 
     // feature descriptors for buggy Indic AAT font workaround
     static CTFontDescriptorRef    sIndicFeaturesDescriptor;
     static CTFontDescriptorRef    sIndicDisableLigaturesDescriptor;
 };
 
 #endif /* GFX_CORETEXTSHAPER_H */
--- a/gfx/thebes/gfxFont.cpp
+++ b/gfx/thebes/gfxFont.cpp
@@ -837,18 +837,26 @@ gfxFont::GetRoundOffsetsToPixels(DrawTar
   NS_ASSERTION(scaled_font, "null cairo scaled font should never be returned "
     "by cairo_get_scaled_font");
   if (!scaled_font) {
     result |= RoundingFlags::kRoundX; // default to the same as the fallback path below
     return result;
   }
 
   // Sometimes hint metrics gets set for us, most notably for printing.
+#ifdef MOZ_TREE_CAIRO
   cairo_hint_metrics_t hint_metrics =
     cairo_scaled_font_get_hint_metrics(scaled_font);
+#else
+  cairo_font_options_t* font_options = cairo_font_options_create();
+  cairo_scaled_font_get_font_options(scaled_font, font_options);
+  cairo_hint_metrics_t hint_metrics =
+    cairo_font_options_get_hint_metrics(font_options);
+  cairo_font_options_destroy(font_options);
+#endif
 
   switch (hint_metrics) {
   case CAIRO_HINT_METRICS_OFF:
     result &= ~RoundingFlags::kRoundY;
     return result;
   case CAIRO_HINT_METRICS_DEFAULT:
     // Here we mimic what cairo surface/font backends do.  Printing
     // surfaces have already been handled by hint_metrics.  The
@@ -3567,19 +3575,24 @@ gfxFont::InitMetricsFromSfntTables(Metri
         // this should always be present in any valid OS/2 of any version
         if (len >= offsetof(OS2Table, sTypoLineGap) + sizeof(int16_t)) {
             SET_SIGNED(aveCharWidth, os2->xAvgCharWidth);
             SET_SIGNED(strikeoutSize, os2->yStrikeoutSize);
             SET_SIGNED(strikeoutOffset, os2->yStrikeoutPosition);
 
             // for fonts with USE_TYPO_METRICS set in the fsSelection field,
             // let the OS/2 sTypo* metrics override those from the hhea table
-            // (see http://www.microsoft.com/typography/otspec/os2.htm#fss)
+            // (see http://www.microsoft.com/typography/otspec/os2.htm#fss).
+            //
+            // We also prefer OS/2 metrics if the hhea table gave us a negative
+            // value for maxDescent, which almost certainly indicates a sign
+            // error in the font. (See bug 1402413 for an example.)
             const uint16_t kUseTypoMetricsMask = 1 << 7;
-            if (uint16_t(os2->fsSelection) & kUseTypoMetricsMask) {
+            if ((uint16_t(os2->fsSelection) & kUseTypoMetricsMask) ||
+                aMetrics.maxDescent < 0) {
                 SET_SIGNED(maxAscent, os2->sTypoAscender);
                 SET_SIGNED(maxDescent, - int16_t(os2->sTypoDescender));
                 SET_SIGNED(externalLeading, os2->sTypoLineGap);
             }
         }
     }
 
 #undef SET_SIGNED
--- a/gfx/thebes/gfxFontEntry.h
+++ b/gfx/thebes/gfxFontEntry.h
@@ -140,17 +140,17 @@ public:
     bool IsOblique() const { return mStyle == NS_FONT_STYLE_OBLIQUE; }
     bool IsUpright() const { return mStyle == NS_FONT_STYLE_NORMAL; }
     bool IsBold() const { return mWeight >= 600; } // bold == weights 600 and above
     bool IgnoreGDEF() const { return mIgnoreGDEF; }
     bool IgnoreGSUB() const { return mIgnoreGSUB; }
 
     // whether a feature is supported by the font (limited to a small set
     // of features for which some form of fallback needs to be implemented)
-    bool SupportsOpenTypeFeature(Script aScript, uint32_t aFeatureTag);
+    virtual bool SupportsOpenTypeFeature(Script aScript, uint32_t aFeatureTag);
     bool SupportsGraphiteFeature(uint32_t aFeatureTag);
 
     // returns a set containing all input glyph ids for a given feature
     const hb_set_t*
     InputsForOpenTypeFeature(Script aScript, uint32_t aFeatureTag);
 
     virtual bool HasFontTable(uint32_t aTableTag);
 
--- a/gfx/thebes/gfxMacPlatformFontList.h
+++ b/gfx/thebes/gfxMacPlatformFontList.h
@@ -64,16 +64,18 @@ public:
     bool HasVariations();
     bool IsCFF();
 
     // Return true if the font has a 'trak' table (and we can successfully
     // interpret it), otherwise false. This will load and cache the table
     // the first time it is called.
     bool HasTrackingTable();
 
+    bool SupportsOpenTypeFeature(Script aScript, uint32_t aFeatureTag) override;
+
     // Return the tracking (in font units) to be applied for the given size.
     // (This is a floating-point number because of possible interpolation.)
     float TrackingForCSSPx(float aPointSize) const;
 
 protected:
     gfxFont* CreateFontInstance(const gfxFontStyle *aFontStyle,
                                 bool aNeedsBold) override;
 
@@ -91,16 +93,18 @@ protected:
     double mSizeHint;
 
     bool mFontRefInitialized;
     bool mRequiresAAT;
     bool mIsCFF;
     bool mIsCFFInitialized;
     bool mHasVariations;
     bool mHasVariationsInitialized;
+    bool mHasAATSmallCaps;
+    bool mHasAATSmallCapsInitialized;
     bool mCheckedForTracking;
     nsTHashtable<nsUint32HashKey> mAvailableTables;
 
     mozilla::WeakPtr<mozilla::gfx::UnscaledFont> mUnscaledFont;
 
     // For AAT font being shaped by Core Text, a strong reference to the 'trak'
     // table (if present).
     hb_blob_t* mTrakTable;
--- a/gfx/thebes/gfxMacPlatformFontList.mm
+++ b/gfx/thebes/gfxMacPlatformFontList.mm
@@ -308,16 +308,18 @@ MacOSFontEntry::MacOSFontEntry(const nsA
       mFontRef(NULL),
       mSizeHint(aSizeHint),
       mFontRefInitialized(false),
       mRequiresAAT(false),
       mIsCFF(false),
       mIsCFFInitialized(false),
       mHasVariations(false),
       mHasVariationsInitialized(false),
+      mHasAATSmallCaps(false),
+      mHasAATSmallCapsInitialized(false),
       mCheckedForTracking(false),
       mTrakTable(nullptr),
       mTrakValues(nullptr),
       mTrakSizeTable(nullptr)
 {
     mWeight = aWeight;
 }
 
@@ -331,16 +333,18 @@ MacOSFontEntry::MacOSFontEntry(const nsA
       mFontRef(NULL),
       mSizeHint(0.0),
       mFontRefInitialized(false),
       mRequiresAAT(false),
       mIsCFF(false),
       mIsCFFInitialized(false),
       mHasVariations(false),
       mHasVariationsInitialized(false),
+      mHasAATSmallCaps(false),
+      mHasAATSmallCapsInitialized(false),
       mCheckedForTracking(false),
       mTrakTable(nullptr),
       mTrakValues(nullptr),
       mTrakSizeTable(nullptr)
 {
     mFontRef = aFontRef;
     mFontRefInitialized = true;
     ::CFRetain(mFontRef);
@@ -603,16 +607,105 @@ MacOSFontEntry::TrackingForCSSPx(float a
     // Requested size falls between two entries: interpolate value.
     double s0 = Fix2X(mTrakSizeTable[sizeIndex - 1]);
     double s1 = Fix2X(mTrakSizeTable[sizeIndex]);
     double t = (aSize - s0) / (s1 - s0);
     return (1.0 - t) * int16_t(mTrakValues[sizeIndex - 1]) +
            t * int16_t(mTrakValues[sizeIndex]);
 }
 
+static bool
+CheckForAATSmallCaps(CFArrayRef aFeatures)
+{
+    // Walk the array of feature descriptors from the font, and see whether
+    // a small-caps feature setting is available.
+    // Just bail out (returning false) if at any point we fail to find the
+    // expected dictionary keys, etc; if the font has bad data, we don't even
+    // try to search the rest of it.
+    auto numFeatures = CFArrayGetCount(aFeatures);
+    for (auto f = 0; f < numFeatures; ++f) {
+        auto featureDict = (CFDictionaryRef)
+            CFArrayGetValueAtIndex(aFeatures, f);
+        if (!featureDict) {
+            return false;
+        }
+        auto featureNum = (CFNumberRef)
+            CFDictionaryGetValue(featureDict,
+                                 CFSTR("CTFeatureTypeIdentifier"));
+        if (!featureNum) {
+            return false;
+        }
+        int16_t featureType;
+        if (!CFNumberGetValue(featureNum, kCFNumberSInt16Type, &featureType)) {
+            return false;
+        }
+        if (featureType == kLetterCaseType || featureType == kLowerCaseType) {
+            // Which selector to look for, depending whether we've found the
+            // legacy LetterCase feature or the new LowerCase one.
+            const uint16_t smallCaps = (featureType == kLetterCaseType)
+                                       ? kSmallCapsSelector
+                                       : kLowerCaseSmallCapsSelector;
+            auto selectors = (CFArrayRef)
+                CFDictionaryGetValue(featureDict,
+                                     CFSTR("CTFeatureTypeSelectors"));
+            if (!selectors) {
+                return false;
+            }
+            auto numSelectors = CFArrayGetCount(selectors);
+            for (auto s = 0; s < numSelectors; s++) {
+                auto selectorDict =
+                    (CFDictionaryRef)CFArrayGetValueAtIndex(selectors, s);
+                if (!selectorDict) {
+                    return false;
+                }
+                auto selectorNum = (CFNumberRef)
+                    CFDictionaryGetValue(selectorDict,
+                                         CFSTR("CTFeatureSelectorIdentifier"));
+                if (!selectorNum) {
+                    return false;
+                }
+                int16_t selectorValue;
+                if (!CFNumberGetValue(selectorNum, kCFNumberSInt16Type,
+                                      &selectorValue)) {
+                    return false;
+                }
+                if (selectorValue == smallCaps) {
+                    return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+bool
+MacOSFontEntry::SupportsOpenTypeFeature(Script aScript, uint32_t aFeatureTag)
+{
+    // If we're going to shape with Core Text, we don't support added
+    // OpenType features (aside from any CT applies by default), except
+    // for 'smcp' which we map to an AAT feature selector.
+    if (RequiresAATLayout()) {
+        if (aFeatureTag != HB_TAG('s','m','c','p')) {
+            return false;
+        }
+        if (mHasAATSmallCapsInitialized) {
+            return mHasAATSmallCaps;
+        }
+        mHasAATSmallCapsInitialized = true;
+        CTFontRef ctFont =
+            CTFontCreateWithGraphicsFont(mFontRef, 0.0, nullptr, nullptr);
+        CFArrayRef features = CTFontCopyFeatures(ctFont);
+        CFRelease(ctFont);
+        mHasAATSmallCaps = CheckForAATSmallCaps(features);
+        CFRelease(features);
+        return mHasAATSmallCaps;
+    }
+    return gfxFontEntry::SupportsOpenTypeFeature(aScript, aFeatureTag);
+}
+
 void
 MacOSFontEntry::AddSizeOfIncludingThis(MallocSizeOf aMallocSizeOf,
                                        FontListSizes* aSizes) const
 {
     aSizes->mFontListSize += aMallocSizeOf(this);
     AddSizeOfExcludingThis(aMallocSizeOf, aSizes);
 }
 
--- a/js/public/WeakMapPtr.h
+++ b/js/public/WeakMapPtr.h
@@ -27,16 +27,17 @@ class JS_PUBLIC_API(WeakMapPtr)
     bool init(JSContext* cx);
     bool initialized() { return ptr != nullptr; }
     void destroy();
     virtual ~WeakMapPtr() { MOZ_ASSERT(!initialized()); }
     void trace(JSTracer* tracer);
 
     V lookup(const K& key);
     bool put(JSContext* cx, const K& key, const V& value);
+    V removeValue(const K& key);
 
   private:
     void* ptr;
 
     // WeakMapPtr is neither copyable nor assignable.
     WeakMapPtr(const WeakMapPtr& wmp) = delete;
     WeakMapPtr& operator=(const WeakMapPtr& wmp) = delete;
 };
--- a/js/src/jsapi-tests/moz.build
+++ b/js/src/jsapi-tests/moz.build
@@ -51,16 +51,17 @@ UNIFIED_SOURCES += [
     'testGCOutOfMemory.cpp',
     'testGCStoreBufferRemoval.cpp',
     'testGCUniqueId.cpp',
     'testGCWeakCache.cpp',
     'testGCWeakRef.cpp',
     'testGetPropertyDescriptor.cpp',
     'testHashTable.cpp',
     'testIndexToString.cpp',
+    'testInformalValueTypeName.cpp',
     'testIntern.cpp',
     'testIntlAvailableLocales.cpp',
     'testIntString.cpp',
     'testIntTypesABI.cpp',
     'testIsInsideNursery.cpp',
     'testIteratorObject.cpp',
     'testJSEvaluateScript.cpp',
     'testLookup.cpp',
new file mode 100644
--- /dev/null
+++ b/js/src/jsapi-tests/testInformalValueTypeName.cpp
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * vim: set ts=8 sts=4 et sw=4 tw=99:
+ */
+/* 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 "jsapi-tests/tests.h"
+
+BEGIN_TEST(testInformalValueTypeName)
+{
+    JS::RootedValue v1(cx, JS::ObjectOrNullValue(JS_NewPlainObject(cx)));
+    CHECK(strcmp(JS::InformalValueTypeName(v1), "Object") == 0);
+
+    JS::RootedValue v2(cx, JS::ObjectOrNullValue(JS_NewArrayObject(cx, 0)));
+    CHECK(strcmp(JS::InformalValueTypeName(v2), "Array") == 0);
+
+    JS::RootedValue v3(cx, JS::StringValue(JS_GetEmptyString(cx)));
+    CHECK(strcmp(JS::InformalValueTypeName(v3), "string") == 0);
+
+    JS::RootedValue v4(cx, JS::SymbolValue(JS::NewSymbol(cx, nullptr)));
+    CHECK(strcmp(JS::InformalValueTypeName(v4), "symbol") == 0);
+
+    JS::RootedValue v5(cx, JS::NumberValue(50.5));
+    CHECK(strcmp(JS::InformalValueTypeName(v5), "number") == 0);
+    JS::RootedValue v6(cx, JS::Int32Value(50));
+    CHECK(strcmp(JS::InformalValueTypeName(v6), "number") == 0);
+    JS::RootedValue v7(cx, JS::Float32Value(50.5));
+    CHECK(strcmp(JS::InformalValueTypeName(v7), "number") == 0);
+
+    JS::RootedValue v8(cx, JS::TrueValue());
+    CHECK(strcmp(JS::InformalValueTypeName(v8), "boolean") == 0);
+
+    JS::RootedValue v9(cx, JS::NullValue());
+    CHECK(strcmp(JS::InformalValueTypeName(v9), "null") == 0);
+
+    JS::RootedValue v10(cx, JS::UndefinedValue());
+    CHECK(strcmp(JS::InformalValueTypeName(v10), "undefined") == 0);
+
+    return true;
+}
+END_TEST(testInformalValueTypeName)
--- a/js/src/tests/jstests.list
+++ b/js/src/tests/jstests.list
@@ -4,22 +4,16 @@
 skip script ecma_6/String/normalize-generateddata-input.js # input data for other test
 
 # Skip intl402 tests when Intl isn't available.
 skip-if(!this.hasOwnProperty('Intl')) include test262/intl402/jstests.list
 
 # Skip built-ins/Simd tests when SIMD isn't available.
 skip-if(!this.hasOwnProperty('SIMD')) include test262/built-ins/Simd/jstests.list
 
-# Skip built-in/Atomics when Atomics isn't available
-skip-if(!this.hasOwnProperty('Atomics')) include test262/built-ins/Atomics/jstests.list
-
-# Skip built-in/SharedArrayBuffer
-skip-if(!this.hasOwnProperty('SharedArrayBuffer')) include test262/built-ins/SharedArrayBuffer/jstests.list
-
 # Times out on arm and cgc builds.
 slow script test262/built-ins/decodeURI/S15.1.3.1_A2.5_T1.js
 slow script test262/built-ins/decodeURIComponent/S15.1.3.2_A2.5_T1.js
 
 
 #################################################################
 # Tests disabled due to intentional alternative implementations #
 #################################################################
@@ -226,17 +220,16 @@ skip script test262/built-ins/Function/i
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1225839
 skip script test262/built-ins/Function/internals/Call/class-ctor-realm.js
 
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1297179
 skip script test262/built-ins/Proxy/apply/arguments-realm.js
 skip script test262/built-ins/Proxy/apply/trap-is-not-callable-realm.js
 skip script test262/built-ins/Proxy/construct/arguments-realm.js
 skip script test262/built-ins/Proxy/construct/trap-is-not-callable-realm.js
-skip script test262/built-ins/Proxy/construct/trap-is-undefined-proto-from-ctor-realm.js
 skip script test262/built-ins/Proxy/defineProperty/desc-realm.js
 skip script test262/built-ins/Proxy/defineProperty/null-handler-realm.js
 skip script test262/built-ins/Proxy/defineProperty/targetdesc-configurable-desc-not-configurable-realm.js
 skip script test262/built-ins/Proxy/defineProperty/targetdesc-not-compatible-descriptor-not-configurable-target-realm.js
 skip script test262/built-ins/Proxy/defineProperty/targetdesc-not-compatible-descriptor-realm.js
 skip script test262/built-ins/Proxy/defineProperty/targetdesc-undefined-not-configurable-descriptor-realm.js
 skip script test262/built-ins/Proxy/defineProperty/targetdesc-undefined-target-is-not-extensible-realm.js
 skip script test262/built-ins/Proxy/defineProperty/trap-is-not-callable-realm.js
@@ -291,27 +284,16 @@ skip script test262/built-ins/WeakSet/pr
 
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1317395
 skip script test262/built-ins/ArrayBuffer/prototype/byteLength/detached-buffer.js
 
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1317394
 skip-if(release_or_beta) script test262/built-ins/DataView/prototype/byteOffset/detached-buffer.js
 skip-if(release_or_beta) script test262/built-ins/DataView/prototype/byteLength/detached-buffer.js
 
-# We're still waiting for a final decision on https://github.com/tc39/ecma402/pull/84.
-skip script test262/intl402/Collator/10.1.1_1.js
-skip script test262/intl402/NumberFormat/11.1.1_1.js
-skip script test262/intl402/DateTimeFormat/12.1.1_1.js
-
-# Waiting on https://github.com/tc39/ecma402/issues/122
-skip script test262/intl402/DateTimeFormat/prototype/12.3_a.js
-skip script test262/intl402/Collator/prototype/10.3_a.js
-skip script test262/intl402/NumberFormat/prototype/11.3_a.js
-skip script test262/intl402/PluralRules/prototype/prototype.js
-
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1317378
 skip script test262/language/statements/do-while/cptn-abrupt-empty.js
 skip script test262/language/statements/do-while/cptn-normal.js
 skip script test262/language/statements/for-in/cptn-decl-abrupt-empty.js
 skip script test262/language/statements/for-in/cptn-decl-itr.js
 skip script test262/language/statements/for-in/cptn-decl-skip-itr.js
 skip script test262/language/statements/for-in/cptn-decl-zero-itr.js
 skip script test262/language/statements/for-in/cptn-expr-abrupt-empty.js
@@ -352,19 +334,16 @@ skip script test262/language/statements/
 skip script test262/language/statements/try/cptn-finally-wo-catch.js
 skip script test262/language/statements/try/cptn-try.js
 skip script test262/language/statements/while/cptn-abrupt-empty.js
 skip script test262/language/statements/while/cptn-iter.js
 skip script test262/language/statements/while/cptn-no-iter.js
 skip script test262/language/statements/with/cptn-abrupt-empty.js
 skip script test262/language/statements/with/cptn-nrml.js
 
-# https://bugzilla.mozilla.org/show_bug.cgi?id=1289882
-skip script test262/intl402/NumberFormat/prototype/formatToParts/length.js
-
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1296234
 skip script test262/intl402/Collator/prototype/compare/compare-function-name.js
 skip script test262/intl402/DateTimeFormat/prototype/format/format-function-name.js
 skip script test262/intl402/NumberFormat/prototype/format/format-function-name.js
 
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1317373
 skip script test262/annexB/language/eval-code/direct/global-if-stmt-else-decl-eval-global-existing-global-init.js
 skip script test262/annexB/language/eval-code/direct/global-switch-dflt-eval-global-existing-global-init.js
@@ -452,19 +431,16 @@ skip-if(!xulRuntime.shell) script test26
 skip script test262/built-ins/TypedArrays/buffer-arg-proto-from-ctor-realm-sab.js
 skip script test262/built-ins/SharedArrayBuffer/proto-from-ctor-realm.js
 skip script test262/built-ins/DataView/proto-from-ctor-realm-sab.js
 
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1346081
 skip script test262/intl402/NumberFormat/prototype/format/11.3.2_TRP.js
 skip script test262/intl402/NumberFormat/prototype/format/11.3.2_TRF.js
 
-# https://bugzilla.mozilla.org/show_bug.cgi?id=1346080
-skip script test262/intl402/PluralRules/prototype/select/tainting.js
-
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1340304
 skip-if(!xulRuntime.shell) script test262/language/module-code/instn-iee-err-circular.js
 skip-if(!xulRuntime.shell) script test262/language/module-code/instn-iee-err-circular-as.js
 
 # RegExp s (dotAll) flag
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1361856
 skip script test262/annexB/built-ins/RegExp/prototype/flags/order-after-compile.js
 skip include test262/built-ins/RegExp/dotall/jstests.list
@@ -483,260 +459,53 @@ skip include test262/built-ins/RegExp/pr
 # RegExp lookBehind
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1225665
 skip include test262/built-ins/RegExp/lookBehind/jstests.list
 
 # RegExp named groups
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1362154
 skip include test262/built-ins/RegExp/named-groups/jstests.list
 
-# Stash rval in AsyncIteratorClose
-# https://bugzilla.mozilla.org/show_bug.cgi?id=1364608
-skip script test262/language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elision-step-err.js
-skip script test262/language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id-iter-step-err.js
-skip script test262/language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elision-step-err.js
-skip script test262/language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id-iter-step-err.js
-skip script test262/language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elision-step-err.js
-skip script test262/language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id-iter-step-err.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elision-step-err.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id-iter-step-err.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elision-step-err.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id-iter-step-err.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elision-step-err.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id-iter-step-err.js
+# https://bugzilla.mozilla.org/show_bug.cgi?id=1398185
+skip script test262/intl402/Collator/default-options-object-prototype.js
+skip script test262/intl402/Number/prototype/toLocaleString/default-options-object-prototype.js
+skip script test262/intl402/String/prototype/localeCompare/default-options-object-prototype.js
+skip script test262/intl402/NumberFormat/default-options-object-prototype.js
+
+# https://bugzilla.mozilla.org/show_bug.cgi?id=1386146
+skip script test262/intl402/DateTimeFormat/prototype/resolvedOptions/hourCycle.js
+
+# https://bugzilla.mozilla.org/show_bug.cgi?id=1407587
+skip script test262/language/expressions/assignment/destructuring/keyed-destructuring-property-reference-target-evaluation-order.js
+skip script test262/language/expressions/assignment/destructuring/iterator-destructuring-property-reference-target-evaluation-order.js
 
-# Missing expression statement restriction for "async function"
-# https://bugzilla.mozilla.org/show_bug.cgi?id=1361143
-skip script test262/language/statements/for/decl-async-fun.js
-skip script test262/language/statements/for/decl-async-gen.js
-skip script test262/language/statements/for-in/decl-async-fun.js
-skip script test262/language/statements/for-in/decl-async-gen.js
-skip script test262/language/statements/for-of/decl-async-fun.js
-skip script test262/language/statements/for-of/decl-async-gen.js
-skip script test262/language/statements/labeled/decl-async-function.js
-skip script test262/language/statements/labeled/decl-async-generator.js
-skip script test262/language/statements/while/decl-async-fun.js
-skip script test262/language/statements/while/decl-async-gen.js
-skip script test262/language/statements/with/decl-async-fun.js
-skip script test262/language/statements/with/decl-async-gen.js
+# https://bugzilla.mozilla.org/show_bug.cgi?id=1407588
+skip script test262/language/statements/for-of/iterator-next-reference.js
+skip script test262/language/expressions/async-generator/yield-star-async-next.js
+skip script test262/language/expressions/async-generator/named-yield-star-async-next.js
+skip script test262/language/expressions/object/method-definition/async-gen-yield-star-async-next.js
+skip script test262/language/expressions/class/async-gen-method-yield-star-async-next.js
+skip script test262/language/expressions/class/async-gen-method-static-yield-star-async-next.js
+skip script test262/language/statements/async-generator/yield-star-async-next.js
+skip script test262/language/statements/class/async-gen-method-yield-star-async-next.js
+skip script test262/language/statements/class/async-gen-method-static-yield-star-async-next.js
+
+# https://bugzilla.mozilla.org/show_bug.cgi?id=1380881
+skip script test262/language/statements/try/optional-catch-binding-lexical.js
+skip script test262/language/statements/try/optional-catch-binding-throws.js
+skip script test262/language/statements/try/optional-catch-binding-finally.js
+skip script test262/language/statements/try/optional-catch-binding.js
+
+
+###########################################################
+# Tests disabled due to issues in test262 importer script #
+###########################################################
+
+# https://bugzilla.mozilla.org/show_bug.cgi?id=1346080
+skip script test262/intl402/PluralRules/prototype/select/tainting.js
+
+# test262 importer merges all includes in a per directory shell.js file, breaking this harness test case.
+skip script test262/harness/detachArrayBuffer.js
+
 
 ####################################################
 # Tests disabled due to invalid test expectations  #
 ####################################################
-
-# https://github.com/tc39/test262/pull/1072
-skip script test262/language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/generators/dstr-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/generators/dstr-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/generators/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/generators/dstr-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/generators/dstr-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/generators/dstr-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/let/dstr-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/let/dstr-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/let/dstr-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/const/dstr-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/const/dstr-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/const/dstr-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/async-generator/dstr-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/async-generator/dstr-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/async-generator/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/async-generator/dstr-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/async-generator/dstr-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/async-generator/dstr-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/variable/dstr-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/variable/dstr-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/variable/dstr-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/try/dstr-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/try/dstr-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/try/dstr-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/function/dstr-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/function/dstr-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/function/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/function/dstr-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/function/dstr-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/function/dstr-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for/dstr-let-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for/dstr-let-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for/dstr-const-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for/dstr-var-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for/dstr-var-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for/dstr-const-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for/dstr-const-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for/dstr-let-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for/dstr-var-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-of/dstr-let-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-of/dstr-obj-rest-nested-obj-nested-rest.js
-skip script test262/language/statements/for-of/dstr-let-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-of/dstr-const-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-of/dstr-var-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-of/dstr-var-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-of/dstr-obj-rest-nested-obj.js
-skip script test262/language/statements/for-of/dstr-obj-rest-obj-own-property.js
-skip script test262/language/statements/for-of/dstr-const-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/for-of/dstr-const-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/for-of/dstr-let-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/for-of/dstr-var-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-async-gen-meth-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-gen-meth-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-gen-meth-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/class/dstr-async-gen-meth-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/class/dstr-meth-static-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-meth-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-meth-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-async-gen-meth-static-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/class/dstr-meth-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-meth-static-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/class/dstr-gen-meth-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-meth-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-gen-meth-static-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-gen-meth-static-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/class/dstr-meth-static-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-async-gen-meth-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-meth-obj-ptrn-rest-nested-obj.js
-skip script test262/language/statements/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-meth-static-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/generators/dstr-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/generators/dstr-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/generators/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/generators/dstr-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/generators/dstr-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/generators/dstr-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/async-generator/dstr-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/async-generator/dstr-named-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/async-generator/dstr-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/async-generator/dstr-named-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/async-generator/dstr-named-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/async-generator/dstr-named-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/async-generator/dstr-named-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/async-generator/dstr-named-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/async-generator/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/async-generator/dstr-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/async-generator/dstr-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/async-generator/dstr-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/assignment/dstr-obj-rest-nested-obj-nested-rest.js
-skip script test262/language/expressions/assignment/dstr-obj-rest-nested-obj.js
-skip script test262/language/expressions/assignment/dstr-obj-rest-obj-own-property.js
-skip script test262/language/expressions/function/dstr-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/function/dstr-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/function/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/function/dstr-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/function/dstr-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/function/dstr-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/object/dstr-async-gen-meth-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/object/dstr-gen-meth-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/object/dstr-gen-meth-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/object/dstr-async-gen-meth-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/object/dstr-meth-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/object/dstr-meth-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/object/dstr-meth-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/object/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/object/dstr-gen-meth-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/object/dstr-meth-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/object/dstr-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/object/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/object/dstr-async-gen-meth-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/object/dstr-async-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/object/dstr-meth-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/arrow-function/dstr-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/arrow-function/dstr-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/arrow-function/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/arrow-function/dstr-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/arrow-function/dstr-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/arrow-function/dstr-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-gen-meth-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-gen-meth-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-meth-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-meth-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-static-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-meth-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-meth-static-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-gen-meth-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-meth-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-gen-meth-static-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-gen-meth-static-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-meth-static-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-meth-obj-ptrn-rest-nested-obj.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-meth-static-obj-ptrn-rest-obj-own-property.js
-skip script test262/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
-skip script test262/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js
-
-# https://github.com/tc39/test262/pull/1170
-skip script test262/language/module-code/namespace/internals/define-own-property.js
-skip script test262/language/module-code/namespace/internals/set.js
-
-# Not updated in https://github.com/tc39/test262/commit/a775c243bc36a9a4b5656824ef210c01dc6afffd
-skip script test262/built-ins/Object/getOwnPropertyDescriptors/duplicate-keys.js
--- a/js/src/tests/test262-update.py
+++ b/js/src/tests/test262-update.py
@@ -13,18 +13,26 @@ import os
 import tempfile
 import shutil
 import sys
 
 from functools import partial
 from itertools import chain, imap
 
 # Skip all tests which use features not supported in SpiderMonkey.
-UNSUPPORTED_FEATURES = set(["tail-call-optimization"])
-RELEASE_OR_BETA = set(["async-iteration"])
+UNSUPPORTED_FEATURES = set(["tail-call-optimization",
+                            "BigInt",
+                            "class-fields",
+                            "Promise.prototype.finally",
+                            "regexp-dotall",
+                            "regexp-lookbehind",
+                            "regexp-named-groups",
+                            "regexp-unicode-property-escapes",
+                       ])
+RELEASE_OR_BETA = set()
 
 @contextlib.contextmanager
 def TemporaryDirectory():
     tmpDir = tempfile.mkdtemp()
     try:
         yield tmpDir
     finally:
         shutil.rmtree(tmpDir)
@@ -234,21 +242,16 @@ def convertTestFile(test262parser, testS
         if unsupported:
             refTestSkip.append(
               "%s is not supported" % ",".join(list(unsupported)))
         elif releaseOrBeta:
             refTestSkipIf.append(
               ("release_or_beta",
                "%s is not released yet" % ",".join(list(releaseOrBeta)))
             )
-        elif "SharedArrayBuffer" in testRec["features"]:
-            refTestSkipIf.append(
-              ("!this.hasOwnProperty('SharedArrayBuffer')",
-               "SharedArrayBuffer not yet riding the trains")
-            )
 
     # Includes for every test file in a directory is collected in a single
     # shell.js file per directory level. This is done to avoid adding all
     # test harness files to the top level shell.js file.
     if "includes" in testRec:
         assert not raw, "Raw test with includes: %s" % testName
         includeSet.update(testRec["includes"])
 
--- a/js/src/tests/test262/GIT-INFO
+++ b/js/src/tests/test262/GIT-INFO
@@ -1,7 +1,7 @@
-commit 5c8f4db9d72385965ff8b4fa94536649279f1470
-Author: Rick Waldron <waldron.rick@gmail.com>
-Date:   Wed May 17 15:46:04 2017 -0400
+commit 1afb7c74fd8752072397259a3ddf6ab85afdf785
+Author: Leo Balter <leonardo.balter@gmail.com>
+Date:   Fri Oct 6 12:37:36 2017 -0400
 
-    Merge pull request #1040 from leobalter/remove-unnecessary-tests
+    Merge pull request #986 from dilijev/intl-gcl
     
-    Remove unnecessary tests
+    Add version of intl402/6.2.3.js which tests via Intl.getCanonicalLocales
--- a/js/src/tests/test262/annexB/built-ins/Date/prototype/getYear/B.2.4.js
+++ b/js/src/tests/test262/annexB/built-ins/Date/prototype/getYear/B.2.4.js
@@ -4,13 +4,15 @@
 /*---
 es5id: B.2.4
 description: >
     Object.getOwnPropertyDescriptor returns data desc for functions on
     built-ins (Date.prototype.getYear)
 includes: [propertyHelper.js]
 ---*/
 
-verifyWritable(Date.prototype, "getYear");
-verifyNotEnumerable(Date.prototype, "getYear");
-verifyConfigurable(Date.prototype, "getYear");
+verifyProperty(Date.prototype, "getYear", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Date/prototype/getYear/length.js
+++ b/js/src/tests/test262/annexB/built-ins/Date/prototype/getYear/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Date.prototype.getYear.length, 0);
-
-verifyNotEnumerable(Date.prototype.getYear, "length");
-verifyNotWritable(Date.prototype.getYear, "length");
-verifyConfigurable(Date.prototype.getYear, "length");
+verifyProperty(Date.prototype.getYear, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 0
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Date/prototype/getYear/name.js
+++ b/js/src/tests/test262/annexB/built-ins/Date/prototype/getYear/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Date.prototype.getYear.name, "getYear");
-
-verifyNotEnumerable(Date.prototype.getYear, "name");
-verifyNotWritable(Date.prototype.getYear, "name");
-verifyConfigurable(Date.prototype.getYear, "name");
+verifyProperty(Date.prototype.getYear, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "getYear"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Date/prototype/setYear/B.2.5.js
+++ b/js/src/tests/test262/annexB/built-ins/Date/prototype/setYear/B.2.5.js
@@ -4,13 +4,15 @@
 /*---
 es5id: B.2.5
 description: >
     Object.getOwnPropertyDescriptor returns data desc for functions on
     built-ins (Date.prototype.setYear)
 includes: [propertyHelper.js]
 ---*/
 
-verifyWritable(Date.prototype, "setYear");
-verifyNotEnumerable(Date.prototype, "setYear");
-verifyConfigurable(Date.prototype, "setYear");
+verifyProperty(Date.prototype, "setYear", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Date/prototype/setYear/length.js
+++ b/js/src/tests/test262/annexB/built-ins/Date/prototype/setYear/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Date.prototype.setYear.length, 1);
-
-verifyNotEnumerable(Date.prototype.setYear, "length");
-verifyNotWritable(Date.prototype.setYear, "length");
-verifyConfigurable(Date.prototype.setYear, "length");
+verifyProperty(Date.prototype.setYear, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 1
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Date/prototype/setYear/name.js
+++ b/js/src/tests/test262/annexB/built-ins/Date/prototype/setYear/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Date.prototype.setYear.name, "setYear");
-
-verifyNotEnumerable(Date.prototype.setYear, "name");
-verifyNotWritable(Date.prototype.setYear, "name");
-verifyConfigurable(Date.prototype.setYear, "name");
+verifyProperty(Date.prototype.setYear, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "setYear"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Date/prototype/toGMTString/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/Date/prototype/toGMTString/prop-desc.js
@@ -5,13 +5,15 @@
 es5id: B.2.6
 description: >
     Object.getOwnPropertyDescriptor returns data desc for functions on
     built-ins (Date.prototype.toGMTString)
 includes: [propertyHelper.js]
 
 ---*/
 
-verifyWritable(Date.prototype, "toGMTString");
-verifyNotEnumerable(Date.prototype, "toGMTString");
-verifyConfigurable(Date.prototype, "toGMTString");
+verifyProperty(Date.prototype, "toGMTString", {
+  enumerable: false,
+  writable: true,
+  configurable: true,
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineGetter__/define-existing.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineGetter__/define-existing.js
@@ -24,18 +24,21 @@ Object.defineProperty(subject, 'stringAc
   set: originalSet,
   enumerable: false,
   configurable: true
 });
 
 result = subject.__defineGetter__('stringAcsr', newGet);
 
 desc = Object.getOwnPropertyDescriptor(subject, 'stringAcsr');
-verifyEnumerable(subject, 'stringAcsr');
-verifyConfigurable(subject, 'stringAcsr');
+
+verifyProperty(subject, "stringAcsr", {
+  enumerable: true,
+  configurable: true
+});
 
 assert.sameValue(desc.get, newGet, 'descriptor `get` method');
 assert.sameValue(desc.set, originalSet, 'descriptor `set` method');
 assert.sameValue(desc.value, undefined, 'descriptor `value` property');
 
 assert.sameValue(result, undefined, 'method return value');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineGetter__/define-new.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineGetter__/define-new.js
@@ -15,18 +15,21 @@ includes: [propertyHelper.js]
 
 var subject = {};
 var get = function() {};
 var desc, result;
 
 result = subject.__defineGetter__('stringAcsr', get);
 
 desc = Object.getOwnPropertyDescriptor(subject, 'stringAcsr');
-verifyEnumerable(subject, 'stringAcsr');
-verifyConfigurable(subject, 'stringAcsr');
+
+verifyProperty(subject, "stringAcsr", {
+  enumerable: true,
+  configurable: true
+});
 
 assert.sameValue(desc.get, get, 'descriptor `get` method');
 assert.sameValue(desc.set, undefined, 'descriptor `set` method');
 assert.sameValue(desc.value, undefined, 'descriptor `value` property');
 
 assert.sameValue(result, undefined, 'method return value');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineGetter__/length.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineGetter__/length.js
@@ -13,15 +13,16 @@ info: >
     [...]
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Object.prototype.__defineGetter__.length, 2);
-
-verifyNotEnumerable(Object.prototype.__defineGetter__, 'length');
-verifyNotWritable(Object.prototype.__defineGetter__, 'length');
-verifyConfigurable(Object.prototype.__defineGetter__, 'length');
+verifyProperty(Object.prototype.__defineGetter__, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 2
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineGetter__/name.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineGetter__/name.js
@@ -14,15 +14,16 @@ info: >
     [...]
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Object.prototype.__defineGetter__.name, '__defineGetter__');
-
-verifyNotEnumerable(Object.prototype.__defineGetter__, 'name');
-verifyNotWritable(Object.prototype.__defineGetter__, 'name');
-verifyConfigurable(Object.prototype.__defineGetter__, 'name');
+verifyProperty(Object.prototype.__defineGetter__, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "__defineGetter__"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineGetter__/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineGetter__/prop-desc.js
@@ -5,13 +5,15 @@ esid: sec-additional-properties-of-the-o
 description: Property descriptor for Object.prototype.__defineGetter__
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(Object.prototype, '__defineGetter__');
-verifyWritable(Object.prototype, '__defineGetter__');
-verifyConfigurable(Object.prototype, '__defineGetter__');
+verifyProperty(Object.prototype, "__defineGetter__", {
+  enumerable: false,
+  writable: true,
+  configurable: true,
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineSetter__/define-existing.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineSetter__/define-existing.js
@@ -24,18 +24,21 @@ Object.defineProperty(subject, 'stringAc
   set: originalSet,
   enumerable: false,
   configurable: true
 });
 
 result = subject.__defineSetter__('stringAcsr', newSet);
 
 desc = Object.getOwnPropertyDescriptor(subject, 'stringAcsr');
-verifyEnumerable(subject, 'stringAcsr');
-verifyConfigurable(subject, 'stringAcsr');
+
+verifyProperty(subject, "stringAcsr", {
+  enumerable: true,
+  configurable: true
+});
 
 assert.sameValue(desc.get, originalGet, 'descriptor `get` method');
 assert.sameValue(desc.set, newSet, 'descriptor `set` method');
 assert.sameValue(desc.value, undefined, 'descriptor `value` property');
 
 assert.sameValue(result, undefined, 'method return value');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineSetter__/define-new.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineSetter__/define-new.js
@@ -15,18 +15,21 @@ includes: [propertyHelper.js]
 
 var subject = {};
 var set = function() {};
 var desc, result;
 
 result = subject.__defineSetter__('stringAcsr', set);
 
 desc = Object.getOwnPropertyDescriptor(subject, 'stringAcsr');
-verifyEnumerable(subject, 'stringAcsr');
-verifyConfigurable(subject, 'stringAcsr');
+
+verifyProperty(subject, "stringAcsr", {
+  enumerable: true,
+  configurable: true,
+});
 
 assert.sameValue(desc.get, undefined, 'descriptor `get` method');
 assert.sameValue(desc.set, set, 'descriptor `set` method');
 assert.sameValue(desc.value, undefined, 'descriptor `value` property');
 
 assert.sameValue(result, undefined, 'method return value');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineSetter__/length.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineSetter__/length.js
@@ -13,15 +13,16 @@ info: >
     [...]
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Object.prototype.__defineSetter__.length, 2);
-
-verifyNotEnumerable(Object.prototype.__defineSetter__, 'length');
-verifyNotWritable(Object.prototype.__defineSetter__, 'length');
-verifyConfigurable(Object.prototype.__defineSetter__, 'length');
+verifyProperty(Object.prototype.__defineSetter__, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 2
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineSetter__/name.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineSetter__/name.js
@@ -14,15 +14,16 @@ info: >
     [...]
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Object.prototype.__defineSetter__.name, '__defineSetter__');
-
-verifyNotEnumerable(Object.prototype.__defineSetter__, 'name');
-verifyNotWritable(Object.prototype.__defineSetter__, 'name');
-verifyConfigurable(Object.prototype.__defineSetter__, 'name');
+verifyProperty(Object.prototype.__defineSetter__, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "__defineSetter__"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineSetter__/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__defineSetter__/prop-desc.js
@@ -5,13 +5,15 @@ esid: sec-additional-properties-of-the-o
 description: Property descriptor for Object.prototype.__defineSetter__
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(Object.prototype, '__defineSetter__');
-verifyWritable(Object.prototype, '__defineSetter__');
-verifyConfigurable(Object.prototype, '__defineSetter__');
+verifyProperty(Object.prototype, "__defineSetter__", {
+  enumerable: false,
+  writable: true,
+  configurable: true,
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupGetter__/length.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupGetter__/length.js
@@ -13,15 +13,16 @@ info: >
     [...]
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Object.prototype.__lookupGetter__.length, 1);
-
-verifyNotEnumerable(Object.prototype.__lookupGetter__, 'length');
-verifyNotWritable(Object.prototype.__lookupGetter__, 'length');
-verifyConfigurable(Object.prototype.__lookupGetter__, 'length');
+verifyProperty(Object.prototype.__lookupGetter__, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 1
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupGetter__/name.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupGetter__/name.js
@@ -14,15 +14,16 @@ info: >
     [...]
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Object.prototype.__lookupGetter__.name, '__lookupGetter__');
-
-verifyNotEnumerable(Object.prototype.__lookupGetter__, 'name');
-verifyNotWritable(Object.prototype.__lookupGetter__, 'name');
-verifyConfigurable(Object.prototype.__lookupGetter__, 'name');
+verifyProperty(Object.prototype.__lookupGetter__, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "__lookupGetter__"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupGetter__/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupGetter__/prop-desc.js
@@ -5,13 +5,15 @@ esid: sec-additional-properties-of-the-o
 description: Property descriptor for Object.prototype.__lookupGetter__
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(Object.prototype, '__lookupGetter__');
-verifyWritable(Object.prototype, '__lookupGetter__');
-verifyConfigurable(Object.prototype, '__lookupGetter__');
+verifyProperty(Object.prototype, "__lookupGetter__", {
+  enumerable: false,
+  writable: true,
+  configurable: true,
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupSetter__/length.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupSetter__/length.js
@@ -13,15 +13,16 @@ info: >
     [...]
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Object.prototype.__lookupSetter__.length, 1);
-
-verifyNotEnumerable(Object.prototype.__lookupSetter__, 'length');
-verifyNotWritable(Object.prototype.__lookupSetter__, 'length');
-verifyConfigurable(Object.prototype.__lookupSetter__, 'length');
+verifyProperty(Object.prototype.__lookupSetter__, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 1
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupSetter__/name.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupSetter__/name.js
@@ -14,15 +14,16 @@ info: >
     [...]
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Object.prototype.__lookupSetter__.name, '__lookupSetter__');
-
-verifyNotEnumerable(Object.prototype.__lookupSetter__, 'name');
-verifyNotWritable(Object.prototype.__lookupSetter__, 'name');
-verifyConfigurable(Object.prototype.__lookupSetter__, 'name');
+verifyProperty(Object.prototype.__lookupSetter__, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "__lookupSetter__"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupSetter__/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__lookupSetter__/prop-desc.js
@@ -5,13 +5,15 @@ esid: sec-additional-properties-of-the-o
 description: Property descriptor for Object.prototype.__lookupSetter__
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(Object.prototype, '__lookupSetter__');
-verifyWritable(Object.prototype, '__lookupSetter__');
-verifyConfigurable(Object.prototype, '__lookupSetter__');
+verifyProperty(Object.prototype, "__lookupSetter__", {
+  enumerable: false,
+  writable: true,
+  configurable: true,
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__proto__/get-fn-name.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__proto__/get-fn-name.js
@@ -8,21 +8,18 @@ description: >
     17 ECMAScript Standard Built-in Objects
 
     Functions that are specified as get or set accessor functions of built-in
     properties have "get " or "set " prepended to the property name string.
 
 includes: [propertyHelper.js]
 ---*/
 
-var descriptor = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__');
-
+var descriptor = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__");
 
-assert.sameValue(
-  descriptor.get.name, 'get __proto__',
-  'The value of `descriptor.get.name` is `"get __proto__"`'
-);
-
-verifyNotEnumerable(descriptor.get, 'name');
-verifyNotWritable(descriptor.get, 'name');
-verifyConfigurable(descriptor.get, 'name');
+verifyProperty(descriptor.get, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "get __proto__"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__proto__/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__proto__/prop-desc.js
@@ -8,16 +8,18 @@ info: >
     Object.prototype.__proto__ is an accessor property with attributes {
     [[Enumerable]]: false, [[Configurable]]: true }. The [[Get]] and [[Set]]
     attributes are defined as follows:
 includes: [propertyHelper.js]
 ---*/
 
 var desc = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__');
 
-verifyNotEnumerable(Object.prototype, '__proto__');
-verifyConfigurable(Object.prototype, '__proto__');
-
 assert.sameValue(desc.value, undefined, '`value` property');
 assert.sameValue(typeof desc.get, 'function', '`get` property');
 assert.sameValue(typeof desc.set, 'function', '`set` property');
 
+verifyProperty(Object.prototype, "__proto__", {
+  enumerable: false,
+  configurable: true
+});
+
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/Object/prototype/__proto__/set-fn-name.js
+++ b/js/src/tests/test262/annexB/built-ins/Object/prototype/__proto__/set-fn-name.js
@@ -10,19 +10,16 @@ description: >
     Functions that are specified as get or set accessor functions of built-in
     properties have "get " or "set " prepended to the property name string.
 
 includes: [propertyHelper.js]
 ---*/
 
 var descriptor = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__');
 
-
-assert.sameValue(
-  descriptor.set.name, 'set __proto__',
-  'The value of `descriptor.set.name` is `"set __proto__"`'
-);
-
-verifyNotEnumerable(descriptor.set, 'name');
-verifyNotWritable(descriptor.set, 'name');
-verifyConfigurable(descriptor.set, 'name');
+verifyProperty(descriptor.set, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "set __proto__"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/RegExp/RegExp-control-escape-russian-letter.js
+++ b/js/src/tests/test262/annexB/built-ins/RegExp/RegExp-control-escape-russian-letter.js
@@ -1,25 +1,54 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 info: "CharacterEscape :: c ControlLetter"
 es5id: 15.10.2.10_A2.1_T3
 es6id: B.1.4
-description: "ControlLetter :: RUSSIAN ALPHABET is incorrect"
+description: >
+  "ControlLetter :: RUSSIAN ALPHABET is incorrect"
+  Instead, fall back to semantics to match literal "\\c"
 ---*/
 
-//CHECK#0410-042F
-for (var alpha = 0x0410; alpha <= 0x042F; alpha++) {
-  var str = String.fromCharCode(alpha % 32);
-  var arr = (new RegExp("\\c" + String.fromCharCode(alpha))).exec(str);
-  assert.sameValue(arr, null, 'RUSSIAN CAPITAL ALPHABET: ' + alpha);
+function* invalidControls() {
+  // Check upper case Cyrillic
+  for (var alpha = 0x0410; alpha <= 0x042F; alpha++) {
+    yield String.fromCharCode(alpha);
+  }
+
+  // Check lower case Cyrillic
+  for (alpha = 0x0430; alpha <= 0x044F; alpha++) {
+    yield String.fromCharCode(alpha);
+  }
+
+  // Check ASCII characters which are not in the extended range or syntax
+  // characters
+  for (alpha = 0x00; alpha <= 0x7F; alpha++) {
+    let letter = String.fromCharCode(alpha);
+    if (!letter.match(/[0-9A-Za-z_\$(|)\[\]\/\\^]/)) {
+      yield letter;
+    }
+  }
+
+  // Check for end of string
+  yield "";
 }
 
-//CHECK#0430-044F
-for (alpha = 0x0430; alpha <= 0x044F; alpha++) {
-  str = String.fromCharCode(alpha % 32);
-  arr = (new RegExp("\\c" + String.fromCharCode(alpha))).exec(str);
-  assert.sameValue(arr, null, 'russian small alphabet: ' + alpha);
+for (let letter of invalidControls()) {
+  var source = "\\c" + letter;
+  var re = new RegExp(source);
+
+  if (letter.length > 0) {
+    var char = letter.charCodeAt(0);
+    var str = String.fromCharCode(char % 32);
+    var arr = re.exec(str);
+    assert.sameValue(arr, null, `Character ${letter} unreasonably wrapped around as a control character`);
+  }
+  arr = re.exec(source.substring(1));
+  assert.sameValue(arr, null, `invalid \\c escape matched c rather than \\c when followed by ${letter}`);
+
+  arr = re.exec(source);
+  assert.notSameValue(arr, null, `invalid \\c escape failed to match \\c when followed by ${letter}`);
 }
 
 reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/RegExp/RegExp-invalid-control-escape-character-class-range.js
@@ -0,0 +1,26 @@
+// Copyright 2017 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-annexB-ClassAtomNoDash
+description: >
+  Invalid \c in a range behaves like [\\c-_]
+info: >
+  ClassAtomNoDash :: `\`
+
+  The production ClassAtomNoDash :: `\` evaluates as follows:
+    1. Return the CharSet containing the single character `\`.
+---*/
+
+let re = /[\\c-f]/
+
+assert(re.test("\\"))
+assert(!re.test("b"))
+assert(re.test("c"))
+assert(re.test("d"))
+assert(re.test("e"))
+assert(re.test("f"))
+assert(!re.test("g"))
+assert(!re.test("-"))
+
+reportCompare(0, 0);
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/RegExp/RegExp-invalid-control-escape-character-class.js
@@ -0,0 +1,55 @@
+// Copyright 2017 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-annexB-ClassAtomNoDash
+description: >
+  Character classes containing an invalid control escape behave like [\\c]
+info: >
+  ClassAtomNoDash :: `\`
+
+  The production ClassAtomNoDash :: `\` evaluates as follows:
+    1. Return the CharSet containing the single character `\`.
+---*/
+
+function* invalidControls() {
+  // Check ASCII characters which are not in the extended range or syntax
+  // characters
+  for (let alpha = 0x00; alpha <= 0x7F; alpha++) {
+    let letter = String.fromCharCode(alpha);
+    if (!letter.match(/[0-9A-Za-z_\$(|)\[\]\/\\^]/)) {
+      yield letter;
+    }
+  }
+  yield "";
+}
+
+for (let letter of invalidControls()) {
+  var source = "[\\c" + letter + "]";
+  var re = new RegExp(source);
+
+  if (letter.length > 0) {
+    var char = letter.charCodeAt(0);
+    var str = String.fromCharCode(char % 32);
+    var arr = re.exec(str);
+    if (str !== letter && arr !== null) {
+      $ERROR(`Character ${letter} unreasonably wrapped around as a control character`);
+    }
+
+    arr = re.exec(letter);
+    if (arr === null) {
+      $ERROR(`Character ${letter} missing from character class ${source}`);
+    }
+  }
+  arr = re.exec("\\")
+  if (arr === null) {
+    $ERROR(`Character \\ missing from character class ${source}`);
+  }
+  arr = re.exec("c")
+  if (arr === null) {
+    $ERROR(`Character c missing from character class ${source}`);
+  }
+}
+
+
+reportCompare(0, 0);
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/RegExp/named-groups/non-unicode-malformed.js
@@ -0,0 +1,30 @@
+// |reftest| skip -- regexp-named-groups,regexp-lookbehind 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, regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert(/\k<a>/.test("k<a>"));
+assert(/\k<4>/.test("k<4>"));
+assert(/\k<a/.test("k<a"));
+assert(/\k/.test("k"));
+
+assert(/(?<a>\a)/.test("a"));
+
+assert(compareArray(["k<a>"], "xxxk<a>xxx".match(/\k<a>/)));
+assert(compareArray(["k<a"], "xxxk<a>xxx".match(/\k<a/)));
+
+// A couple of corner cases around '\k' as named back-references vs. identity
+// escapes.
+assert(/\k<a>(?<=>)a/.test("k<a>a"));
+assert(/\k<a>(?<!a)a/.test("k<a>a"));
+assert(/\k<a>(<a>x)/.test("k<a><a>x"));
+
+reportCompare(0, 0);
new file mode 100644
--- a/js/src/tests/test262/annexB/built-ins/RegExp/prototype/compile/B.RegExp.prototype.compile.js
+++ b/js/src/tests/test262/annexB/built-ins/RegExp/prototype/compile/B.RegExp.prototype.compile.js
@@ -4,13 +4,15 @@
 /*---
 es6id: B.2.5.1
 description: >
     Object.getOwnPropertyDescriptor returns data desc for functions on
     built-ins (RegExp.prototype.compile)
 includes: [propertyHelper.js]
 ---*/
 
-verifyWritable(RegExp.prototype, "compile");
-verifyNotEnumerable(RegExp.prototype, "compile");
-verifyConfigurable(RegExp.prototype, "compile");
+verifyProperty(RegExp.prototype, "compile", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/RegExp/prototype/compile/length.js
+++ b/js/src/tests/test262/annexB/built-ins/RegExp/prototype/compile/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(RegExp.prototype.compile.length, 2);
-
-verifyNotEnumerable(RegExp.prototype.compile, "length");
-verifyNotWritable(RegExp.prototype.compile, "length");
-verifyConfigurable(RegExp.prototype.compile, "length");
+verifyProperty(RegExp.prototype.compile, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 2
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/RegExp/prototype/compile/name.js
+++ b/js/src/tests/test262/annexB/built-ins/RegExp/prototype/compile/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(RegExp.prototype.compile.name, "compile");
-
-verifyNotEnumerable(RegExp.prototype.compile, "name");
-verifyNotWritable(RegExp.prototype.compile, "name");
-verifyConfigurable(RegExp.prototype.compile, "name");
+verifyProperty(RegExp.prototype.compile, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "compile"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/RegExp/prototype/flags/order-after-compile.js
+++ b/js/src/tests/test262/annexB/built-ins/RegExp/prototype/flags/order-after-compile.js
@@ -1,8 +1,9 @@
+// |reftest| skip -- regexp-dotall is not supported
 // Copyright (C) 2017 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
 esid: sec-get-regexp.prototype.flags
 description: >
   The flags come in the same order in a new instance produced by RegExp.prototype.compile
 info: |
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/anchor/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/anchor/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.anchor.length, 1);
-
-verifyNotEnumerable(String.prototype.anchor, "length");
-verifyNotWritable(String.prototype.anchor, "length");
-verifyConfigurable(String.prototype.anchor, "length");
+verifyProperty(String.prototype.anchor, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 1
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/anchor/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/anchor/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.anchor.name, "anchor");
-
-verifyNotEnumerable(String.prototype.anchor, "name");
-verifyNotWritable(String.prototype.anchor, "name");
-verifyConfigurable(String.prototype.anchor, "name");
+verifyProperty(String.prototype.anchor, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "anchor"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/anchor/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/anchor/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.2
 description: Property descriptor for String.prototype.anchor
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'anchor');
-verifyWritable(String.prototype, 'anchor');
-verifyConfigurable(String.prototype, 'anchor');
+verifyProperty(String.prototype, "anchor", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/big/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/big/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.big.length, 0);
-
-verifyNotEnumerable(String.prototype.big, "length");
-verifyNotWritable(String.prototype.big, "length");
-verifyConfigurable(String.prototype.big, "length");
+verifyProperty(String.prototype.big, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 0
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/big/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/big/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.big.name, "big");
-
-verifyNotEnumerable(String.prototype.big, "name");
-verifyNotWritable(String.prototype.big, "name");
-verifyConfigurable(String.prototype.big, "name");
+verifyProperty(String.prototype.big, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "big"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/big/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/big/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.3
 description: Property descriptor for String.prototype.big
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'big');
-verifyWritable(String.prototype, 'big');
-verifyConfigurable(String.prototype, 'big');
+verifyProperty(String.prototype, "big", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/blink/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/blink/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.blink.length, 0);
-
-verifyNotEnumerable(String.prototype.blink, "length");
-verifyNotWritable(String.prototype.blink, "length");
-verifyConfigurable(String.prototype.blink, "length");
+verifyProperty(String.prototype.blink, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 0
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/blink/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/blink/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.blink.name, "blink");
-
-verifyNotEnumerable(String.prototype.blink, "name");
-verifyNotWritable(String.prototype.blink, "name");
-verifyConfigurable(String.prototype.blink, "name");
+verifyProperty(String.prototype.blink, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "blink"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/blink/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/blink/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.4
 description: Property descriptor for String.prototype.blink
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'blink');
-verifyWritable(String.prototype, 'blink');
-verifyConfigurable(String.prototype, 'blink');
+verifyProperty(String.prototype, "blink", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/bold/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/bold/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.bold.length, 0);
-
-verifyNotEnumerable(String.prototype.bold, "length");
-verifyNotWritable(String.prototype.bold, "length");
-verifyConfigurable(String.prototype.bold, "length");
+verifyProperty(String.prototype.bold, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 0
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/bold/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/bold/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.bold.name, "bold");
-
-verifyNotEnumerable(String.prototype.bold, "name");
-verifyNotWritable(String.prototype.bold, "name");
-verifyConfigurable(String.prototype.bold, "name");
+verifyProperty(String.prototype.bold, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "bold"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/bold/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/bold/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.5
 description: Property descriptor for String.prototype.bold
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'bold');
-verifyWritable(String.prototype, 'bold');
-verifyConfigurable(String.prototype, 'bold');
+verifyProperty(String.prototype, "bold", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/fixed/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/fixed/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.fixed.length, 0);
-
-verifyNotEnumerable(String.prototype.fixed, "length");
-verifyNotWritable(String.prototype.fixed, "length");
-verifyConfigurable(String.prototype.fixed, "length");
+verifyProperty(String.prototype.fixed, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 0
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/fixed/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/fixed/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.fixed.name, "fixed");
-
-verifyNotEnumerable(String.prototype.fixed, "name");
-verifyNotWritable(String.prototype.fixed, "name");
-verifyConfigurable(String.prototype.fixed, "name");
+verifyProperty(String.prototype.fixed, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "fixed"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/fixed/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/fixed/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.6
 description: Property descriptor for String.prototype.fixed
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'fixed');
-verifyWritable(String.prototype, 'fixed');
-verifyConfigurable(String.prototype, 'fixed');
+verifyProperty(String.prototype, "fixed", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/fontcolor/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/fontcolor/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.fontcolor.length, 1);
-
-verifyNotEnumerable(String.prototype.fontcolor, "length");
-verifyNotWritable(String.prototype.fontcolor, "length");
-verifyConfigurable(String.prototype.fontcolor, "length");
+verifyProperty(String.prototype.fontcolor, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 1
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/fontcolor/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/fontcolor/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.fontcolor.name, "fontcolor");
-
-verifyNotEnumerable(String.prototype.fontcolor, "name");
-verifyNotWritable(String.prototype.fontcolor, "name");
-verifyConfigurable(String.prototype.fontcolor, "name");
+verifyProperty(String.prototype.fontcolor, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "fontcolor"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/fontcolor/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/fontcolor/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.7
 description: Property descriptor for String.prototype.fontcolor
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'fontcolor');
-verifyWritable(String.prototype, 'fontcolor');
-verifyConfigurable(String.prototype, 'fontcolor');
+verifyProperty(String.prototype, "fontcolor", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/fontsize/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/fontsize/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.fontsize.length, 1);
-
-verifyNotEnumerable(String.prototype.fontsize, "length");
-verifyNotWritable(String.prototype.fontsize, "length");
-verifyConfigurable(String.prototype.fontsize, "length");
+verifyProperty(String.prototype.fontsize, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 1
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/fontsize/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/fontsize/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.fontsize.name, "fontsize");
-
-verifyNotEnumerable(String.prototype.fontsize, "name");
-verifyNotWritable(String.prototype.fontsize, "name");
-verifyConfigurable(String.prototype.fontsize, "name");
+verifyProperty(String.prototype.fontsize, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "fontsize"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/fontsize/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/fontsize/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.8
 description: Property descriptor for String.prototype.fontsize
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'fontsize');
-verifyWritable(String.prototype, 'fontsize');
-verifyConfigurable(String.prototype, 'fontsize');
+verifyProperty(String.prototype, "fontsize", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/italics/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/italics/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.italics.length, 0);
-
-verifyNotEnumerable(String.prototype.italics, "length");
-verifyNotWritable(String.prototype.italics, "length");
-verifyConfigurable(String.prototype.italics, "length");
+verifyProperty(String.prototype.italics, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 0
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/italics/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/italics/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.italics.name, "italics");
-
-verifyNotEnumerable(String.prototype.italics, "name");
-verifyNotWritable(String.prototype.italics, "name");
-verifyConfigurable(String.prototype.italics, "name");
+verifyProperty(String.prototype.italics, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "italics"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/italics/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/italics/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.9
 description: Property descriptor for String.prototype.italics
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'italics');
-verifyWritable(String.prototype, 'italics');
-verifyConfigurable(String.prototype, 'italics');
+verifyProperty(String.prototype, "italics", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/link/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/link/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.link.length, 1);
-
-verifyNotEnumerable(String.prototype.link, "length");
-verifyNotWritable(String.prototype.link, "length");
-verifyConfigurable(String.prototype.link, "length");
+verifyProperty(String.prototype.link, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 1
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/link/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/link/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.link.name, "link");
-
-verifyNotEnumerable(String.prototype.link, "name");
-verifyNotWritable(String.prototype.link, "name");
-verifyConfigurable(String.prototype.link, "name");
+verifyProperty(String.prototype.link, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "link"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/link/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/link/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.10
 description: Property descriptor for String.prototype.link
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'link');
-verifyWritable(String.prototype, 'link');
-verifyConfigurable(String.prototype, 'link');
+verifyProperty(String.prototype, "link", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/small/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/small/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.small.length, 0);
-
-verifyNotEnumerable(String.prototype.small, "length");
-verifyNotWritable(String.prototype.small, "length");
-verifyConfigurable(String.prototype.small, "length");
+verifyProperty(String.prototype.small, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 0
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/small/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/small/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.small.name, "small");
-
-verifyNotEnumerable(String.prototype.small, "name");
-verifyNotWritable(String.prototype.small, "name");
-verifyConfigurable(String.prototype.small, "name");
+verifyProperty(String.prototype.small, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "small"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/small/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/small/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.11
 description: Property descriptor for String.prototype.small
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'small');
-verifyWritable(String.prototype, 'small');
-verifyConfigurable(String.prototype, 'small');
+verifyProperty(String.prototype, "small", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/strike/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/strike/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.strike.length, 0);
-
-verifyNotEnumerable(String.prototype.strike, "length");
-verifyNotWritable(String.prototype.strike, "length");
-verifyConfigurable(String.prototype.strike, "length");
+verifyProperty(String.prototype.strike, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 0
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/strike/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/strike/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.strike.name, "strike");
-
-verifyNotEnumerable(String.prototype.strike, "name");
-verifyNotWritable(String.prototype.strike, "name");
-verifyConfigurable(String.prototype.strike, "name");
+verifyProperty(String.prototype.strike, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "strike"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/strike/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/strike/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.12
 description: Property descriptor for String.prototype.strike
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'strike');
-verifyWritable(String.prototype, 'strike');
-verifyConfigurable(String.prototype, 'strike');
+verifyProperty(String.prototype, "strike", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/sub/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/sub/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.sub.length, 0);
-
-verifyNotEnumerable(String.prototype.sub, "length");
-verifyNotWritable(String.prototype.sub, "length");
-verifyConfigurable(String.prototype.sub, "length");
+verifyProperty(String.prototype.sub, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 0
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/sub/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/sub/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.sub.name, "sub");
-
-verifyNotEnumerable(String.prototype.sub, "name");
-verifyNotWritable(String.prototype.sub, "name");
-verifyConfigurable(String.prototype.sub, "name");
+verifyProperty(String.prototype.sub, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "sub"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/sub/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/sub/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.13
 description: Property descriptor for String.prototype.sub
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'sub');
-verifyWritable(String.prototype, 'sub');
-verifyConfigurable(String.prototype, 'sub');
+verifyProperty(String.prototype, "sub", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/substr/B.2.3.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/substr/B.2.3.js
@@ -4,13 +4,15 @@
 /*---
 es5id: B.2.3
 description: >
     Object.getOwnPropertyDescriptor returns data desc for functions on
     built-ins (String.prototype.substr)
 includes: [propertyHelper.js]
 ---*/
 
-verifyWritable(String.prototype, "substr");
-verifyNotEnumerable(String.prototype, "substr");
-verifyConfigurable(String.prototype, "substr");
+verifyProperty(String.prototype, "substr", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/substr/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/substr/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.substr.length, 2);
-
-verifyNotEnumerable(String.prototype.substr, "length");
-verifyNotWritable(String.prototype.substr, "length");
-verifyConfigurable(String.prototype.substr, "length");
+verifyProperty(String.prototype.substr, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 2
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/substr/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/substr/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.substr.name, "substr");
-
-verifyNotEnumerable(String.prototype.substr, "name");
-verifyNotWritable(String.prototype.substr, "name");
-verifyConfigurable(String.prototype.substr, "name");
+verifyProperty(String.prototype.substr, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "substr"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/sup/length.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/sup/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.sup.length, 0);
-
-verifyNotEnumerable(String.prototype.sup, "length");
-verifyNotWritable(String.prototype.sup, "length");
-verifyConfigurable(String.prototype.sup, "length");
+verifyProperty(String.prototype.sup, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 0
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/sup/name.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/sup/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(String.prototype.sup.name, "sup");
-
-verifyNotEnumerable(String.prototype.sup, "name");
-verifyNotWritable(String.prototype.sup, "name");
-verifyConfigurable(String.prototype.sup, "name");
+verifyProperty(String.prototype.sup, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "sup"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/String/prototype/sup/prop-desc.js
+++ b/js/src/tests/test262/annexB/built-ins/String/prototype/sup/prop-desc.js
@@ -6,13 +6,15 @@ es6id: B.2.3.14
 description: Property descriptor for String.prototype.sup
 info: >
     Every other data property described in clauses 18 through 26 and in Annex
     B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
     [[Configurable]]: true } unless otherwise specified.
 includes: [propertyHelper.js]
 ---*/
 
-verifyNotEnumerable(String.prototype, 'sup');
-verifyWritable(String.prototype, 'sup');
-verifyConfigurable(String.prototype, 'sup');
+verifyProperty(String.prototype, "sup", {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/escape/length.js
+++ b/js/src/tests/test262/annexB/built-ins/escape/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(escape.length, 1);
-
-verifyNotEnumerable(escape, "length");
-verifyNotWritable(escape, "length");
-verifyConfigurable(escape, "length");
+verifyProperty(escape, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 1
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/escape/name.js
+++ b/js/src/tests/test262/annexB/built-ins/escape/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(escape.name, "escape");
-
-verifyNotEnumerable(escape, "name");
-verifyNotWritable(escape, "name");
-verifyConfigurable(escape, "name");
+verifyProperty(escape, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "escape"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/unescape/length.js
+++ b/js/src/tests/test262/annexB/built-ins/unescape/length.js
@@ -17,15 +17,16 @@ info: >
     are not included in the default argument count.
 
     Unless otherwise specified, the length property of a built-in Function
     object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
     [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(unescape.length, 1);
-
-verifyNotEnumerable(unescape, "length");
-verifyNotWritable(unescape, "length");
-verifyConfigurable(unescape, "length");
+verifyProperty(unescape, "length", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: 1
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/built-ins/unescape/name.js
+++ b/js/src/tests/test262/annexB/built-ins/unescape/name.js
@@ -14,15 +14,16 @@ info: >
     is a String.
 
     Unless otherwise specified, the name property of a built-in Function
     object, if it exists, has the attributes { [[Writable]]: false,
     [[Enumerable]]: false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(unescape.name, "unescape");
-
-verifyNotEnumerable(unescape, "name");
-verifyNotWritable(unescape, "name");
-verifyConfigurable(unescape, "name");
+verifyProperty(unescape, "name", {
+  enumerable: false,
+  writable: false,
+  configurable: true,
+  value: "unescape"
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-block-decl-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-block-decl-eval-global-existing-global-init.js
@@ -32,14 +32,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");{ function f() {  } }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });{ function f() {  } }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-block-decl-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-block-decl-eval-global-init.js
@@ -16,15 +16,16 @@ info: |
     [...]
 
 ---*/
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-{ function f() {  } }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });{ function f() {  } }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-decl-a-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-decl-a-eval-global-existing-global-init.js
@@ -41,14 +41,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");if (true) function f() {  } else function _f() {}'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });if (true) function f() {  } else function _f() {}'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-decl-a-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-decl-a-eval-global-init.js
@@ -25,15 +25,16 @@ info: |
     [...]
 
 ---*/
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-if (true) function f() {  } else function _f() {}'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });if (true) function f() {  } else function _f() {}'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-decl-b-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-decl-b-eval-global-existing-global-init.js
@@ -41,14 +41,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");if (false) function _f() {} else function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });if (false) function _f() {} else function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-decl-b-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-decl-b-eval-global-init.js
@@ -25,15 +25,16 @@ info: |
     [...]
 
 ---*/
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-if (false) function _f() {} else function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });if (false) function _f() {} else function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-stmt-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-stmt-eval-global-existing-global-init.js
@@ -41,14 +41,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");if (true) function f() {  } else ;'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });if (true) function f() {  } else ;'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-stmt-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-else-stmt-eval-global-init.js
@@ -25,15 +25,16 @@ info: |
     [...]
 
 ---*/
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-if (true) function f() {  } else ;'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });if (true) function f() {  } else ;'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-no-else-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-no-else-eval-global-existing-global-init.js
@@ -41,14 +41,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");if (true) function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });if (true) function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-no-else-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-if-decl-no-else-eval-global-init.js
@@ -25,15 +25,16 @@ info: |
     [...]
 
 ---*/
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-if (true) function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });if (true) function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-if-stmt-else-decl-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-if-stmt-else-decl-eval-global-existing-global-init.js
@@ -41,14 +41,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");if (false) ; else function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });if (false) ; else function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-if-stmt-else-decl-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-if-stmt-else-decl-eval-global-init.js
@@ -25,15 +25,16 @@ info: |
     [...]
 
 ---*/
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-if (false) ; else function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });if (false) ; else function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-switch-case-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-switch-case-eval-global-existing-global-init.js
@@ -32,18 +32,20 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");switch (1) {' +
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });switch (1) {' +
   '  case 1:' +
   '    function f() {  }' +
   '}\
   '
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-switch-case-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-switch-case-eval-global-init.js
@@ -16,19 +16,20 @@ info: |
     [...]
 
 ---*/
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-switch (1) {' +
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });switch (1) {' +
   '  case 1:' +
   '    function f() {  }' +
   '}\
   '
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-switch-dflt-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-switch-dflt-eval-global-existing-global-init.js
@@ -32,18 +32,20 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");switch (1) {' +
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });switch (1) {' +
   '  default:' +
   '    function f() {  }' +
   '}\
   '
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/global-switch-dflt-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/global-switch-dflt-eval-global-init.js
@@ -16,19 +16,20 @@ info: |
     [...]
 
 ---*/
 
 eval(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-switch (1) {' +
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });switch (1) {' +
   '  default:' +
   '    function f() {  }' +
   '}\
   '
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/direct/shell.js
+++ b/js/src/tests/test262/annexB/language/eval-code/direct/shell.js
@@ -1,6 +1,12 @@
 // file: fnGlobalObject.js
-//-----------------------------------------------------------------------------
+// Copyright (C) 2017 Ecma International.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+    Produce a reliable global object
+---*/
+
 var __globalObject = Function("return this;")();
 function fnGlobalObject() {
   return __globalObject;
 }
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-block-decl-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-block-decl-eval-global-existing-global-init.js
@@ -32,14 +32,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");{ function f() {  } }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });{ function f() {  } }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-block-decl-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-block-decl-eval-global-init.js
@@ -16,15 +16,16 @@ info: |
     [...]
 
 ---*/
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-{ function f() {  } }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });{ function f() {  } }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-decl-a-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-decl-a-eval-global-existing-global-init.js
@@ -41,14 +41,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");if (true) function f() {  } else function _f() {}'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });if (true) function f() {  } else function _f() {}'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-decl-a-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-decl-a-eval-global-init.js
@@ -25,15 +25,16 @@ info: |
     [...]
 
 ---*/
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-if (true) function f() {  } else function _f() {}'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });if (true) function f() {  } else function _f() {}'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-decl-b-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-decl-b-eval-global-existing-global-init.js
@@ -41,14 +41,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");if (false) function _f() {} else function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });if (false) function _f() {} else function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-decl-b-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-decl-b-eval-global-init.js
@@ -25,15 +25,16 @@ info: |
     [...]
 
 ---*/
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-if (false) function _f() {} else function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });if (false) function _f() {} else function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-stmt-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-stmt-eval-global-existing-global-init.js
@@ -41,14 +41,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");if (true) function f() {  } else ;'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });if (true) function f() {  } else ;'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-stmt-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-else-stmt-eval-global-init.js
@@ -25,15 +25,16 @@ info: |
     [...]
 
 ---*/
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-if (true) function f() {  } else ;'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });if (true) function f() {  } else ;'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-no-else-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-no-else-eval-global-existing-global-init.js
@@ -41,14 +41,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");if (true) function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });if (true) function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-no-else-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-decl-no-else-eval-global-init.js
@@ -25,15 +25,16 @@ info: |
     [...]
 
 ---*/
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-if (true) function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });if (true) function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-stmt-else-decl-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-stmt-else-decl-eval-global-existing-global-init.js
@@ -41,14 +41,16 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");if (false) ; else function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });if (false) ; else function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-stmt-else-decl-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-if-stmt-else-decl-eval-global-init.js
@@ -25,15 +25,16 @@ info: |
     [...]
 
 ---*/
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-if (false) ; else function f() {  }'
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });if (false) ; else function f() {  }'
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-switch-case-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-switch-case-eval-global-existing-global-init.js
@@ -32,18 +32,20 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");switch (1) {' +
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });switch (1) {' +
   '  case 1:' +
   '    function f() {  }' +
   '}\
   '
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-switch-case-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-switch-case-eval-global-init.js
@@ -16,19 +16,20 @@ info: |
     [...]
 
 ---*/
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-switch (1) {' +
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });switch (1) {' +
   '  case 1:' +
   '    function f() {  }' +
   '}\
   '
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-switch-dflt-eval-global-existing-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-switch-dflt-eval-global-existing-global-init.js
@@ -32,18 +32,20 @@ Object.defineProperty(fnGlobalObject(), 
   writable: true,
   configurable: false
 });
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyNotConfigurable(global, "f");switch (1) {' +
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: false\
+  });switch (1) {' +
   '  default:' +
   '    function f() {  }' +
   '}\
   '
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/global-switch-dflt-eval-global-init.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/global-switch-dflt-eval-global-init.js
@@ -16,19 +16,20 @@ info: |
     [...]
 
 ---*/
 
 (0,eval)(
   'var global = fnGlobalObject();\
   assert.sameValue(f, undefined, "binding is initialized to `undefined`");\
   \
-  verifyEnumerable(global, "f");\
-  verifyWritable(global, "f");\
-  verifyConfigurable(global, "f");\
-switch (1) {' +
+  verifyProperty(global, "f", {\
+    enumerable: true,\
+    writable: true,\
+    configurable: true\
+  });switch (1) {' +
   '  default:' +
   '    function f() {  }' +
   '}\
   '
 );
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/eval-code/indirect/shell.js
+++ b/js/src/tests/test262/annexB/language/eval-code/indirect/shell.js
@@ -1,6 +1,12 @@
 // file: fnGlobalObject.js
-//-----------------------------------------------------------------------------
+// Copyright (C) 2017 Ecma International.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+    Produce a reliable global object
+---*/
+
 var __globalObject = Function("return this;")();
 function fnGlobalObject() {
   return __globalObject;
 }
--- 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,13 +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: early
   type: SyntaxError
 ---*/
 
+throw "Test262: This statement should not be evaluated.";
+
 ({
   __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,9 +10,11 @@ description: >
     The SV of EscapeSequence :: HexEscapeSequence is the SV of the
     HexEscapeSequence.
 negative:
   phase: early
   type: SyntaxError
 flags: [onlyStrict]
 ---*/
 
+throw "Test262: This statement should not be evaluated.";
+
 `${'\07'}`;
--- a/js/src/tests/test262/annexB/language/global-code/block-decl-global-init.js
+++ b/js/src/tests/test262/annexB/language/global-code/block-decl-global-init.js
@@ -15,17 +15,19 @@ info: |
        i. Perform ? envRec.CreateGlobalFunctionBinding(F, undefined, false).
        ii. Append F to declaredFunctionOrVarNames.
     [...]
 
 ---*/
 var global = fnGlobalObject();
 assert.sameValue(f, undefined, 'binding is initialized to `undefined`');
 
-verifyEnumerable(global, 'f');
-verifyWritable(global, 'f');
-verifyNotConfigurable(global, 'f');
+verifyProperty(global, "f", {
+  enumerable: true,
+  writable: true,
+  configurable: false
+});
 
 {
   function f() {  }
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/global-code/if-decl-else-decl-a-global-init.js
+++ b/js/src/tests/test262/annexB/language/global-code/if-decl-else-decl-a-global-init.js
@@ -24,15 +24,17 @@ info: |
        i. Perform ? envRec.CreateGlobalFunctionBinding(F, undefined, false).
        ii. Append F to declaredFunctionOrVarNames.
     [...]
 
 ---*/
 var global = fnGlobalObject();
 assert.sameValue(f, undefined, 'binding is initialized to `undefined`');
 
-verifyEnumerable(global, 'f');
-verifyWritable(global, 'f');
-verifyNotConfigurable(global, 'f');
+verifyProperty(global, "f", {
+  enumerable: true,
+  writable: true,
+  configurable: false
+});
 
 if (true) function f() {  } else function _f() {}
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/global-code/if-decl-else-decl-b-global-init.js
+++ b/js/src/tests/test262/annexB/language/global-code/if-decl-else-decl-b-global-init.js
@@ -24,15 +24,17 @@ info: |
        i. Perform ? envRec.CreateGlobalFunctionBinding(F, undefined, false).
        ii. Append F to declaredFunctionOrVarNames.
     [...]
 
 ---*/
 var global = fnGlobalObject();
 assert.sameValue(f, undefined, 'binding is initialized to `undefined`');
 
-verifyEnumerable(global, 'f');
-verifyWritable(global, 'f');
-verifyNotConfigurable(global, 'f');
+verifyProperty(global, "f", {
+  enumerable: true,
+  writable: true,
+  configurable: false
+});
 
 if (false) function _f() {} else function f() {  }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/global-code/if-decl-else-stmt-global-init.js
+++ b/js/src/tests/test262/annexB/language/global-code/if-decl-else-stmt-global-init.js
@@ -24,15 +24,17 @@ info: |
        i. Perform ? envRec.CreateGlobalFunctionBinding(F, undefined, false).
        ii. Append F to declaredFunctionOrVarNames.
     [...]
 
 ---*/
 var global = fnGlobalObject();
 assert.sameValue(f, undefined, 'binding is initialized to `undefined`');
 
-verifyEnumerable(global, 'f');
-verifyWritable(global, 'f');
-verifyNotConfigurable(global, 'f');
+verifyProperty(global, "f", {
+  enumerable: true,
+  writable: true,
+  configurable: false
+});
 
 if (true) function f() {  } else ;
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/global-code/if-decl-no-else-global-init.js
+++ b/js/src/tests/test262/annexB/language/global-code/if-decl-no-else-global-init.js
@@ -24,15 +24,17 @@ info: |
        i. Perform ? envRec.CreateGlobalFunctionBinding(F, undefined, false).
        ii. Append F to declaredFunctionOrVarNames.
     [...]
 
 ---*/
 var global = fnGlobalObject();
 assert.sameValue(f, undefined, 'binding is initialized to `undefined`');
 
-verifyEnumerable(global, 'f');
-verifyWritable(global, 'f');
-verifyNotConfigurable(global, 'f');
+verifyProperty(global, "f", {
+  enumerable: true,
+  writable: true,
+  configurable: false
+});
 
 if (true) function f() {  }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/global-code/if-stmt-else-decl-global-init.js
+++ b/js/src/tests/test262/annexB/language/global-code/if-stmt-else-decl-global-init.js
@@ -24,15 +24,17 @@ info: |
        i. Perform ? envRec.CreateGlobalFunctionBinding(F, undefined, false).
        ii. Append F to declaredFunctionOrVarNames.
     [...]
 
 ---*/
 var global = fnGlobalObject();
 assert.sameValue(f, undefined, 'binding is initialized to `undefined`');
 
-verifyEnumerable(global, 'f');
-verifyWritable(global, 'f');
-verifyNotConfigurable(global, 'f');
+verifyProperty(global, "f", {
+  enumerable: true,
+  writable: true,
+  configurable: false
+});
 
 if (false) ; else function f() {  }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/global-code/shell.js
+++ b/js/src/tests/test262/annexB/language/global-code/shell.js
@@ -1,6 +1,12 @@
 // file: fnGlobalObject.js
-//-----------------------------------------------------------------------------
+// Copyright (C) 2017 Ecma International.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+    Produce a reliable global object
+---*/
+
 var __globalObject = Function("return this;")();
 function fnGlobalObject() {
   return __globalObject;
 }
--- a/js/src/tests/test262/annexB/language/global-code/switch-case-global-init.js
+++ b/js/src/tests/test262/annexB/language/global-code/switch-case-global-init.js
@@ -15,18 +15,20 @@ info: |
        i. Perform ? envRec.CreateGlobalFunctionBinding(F, undefined, false).
        ii. Append F to declaredFunctionOrVarNames.
     [...]
 
 ---*/
 var global = fnGlobalObject();
 assert.sameValue(f, undefined, 'binding is initialized to `undefined`');
 
-verifyEnumerable(global, 'f');
-verifyWritable(global, 'f');
-verifyNotConfigurable(global, 'f');
+verifyProperty(global, "f", {
+  enumerable: true,
+  writable: true,
+  configurable: false
+});
 
 switch (1) {
   case 1:
     function f() {  }
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/annexB/language/global-code/switch-dflt-global-init.js
+++ b/js/src/tests/test262/annexB/language/global-code/switch-dflt-global-init.js
@@ -15,18 +15,20 @@ info: |
        i. Perform ? envRec.CreateGlobalFunctionBinding(F, undefined, false).
        ii. Append F to declaredFunctionOrVarNames.
     [...]
 
 ---*/
 var global = fnGlobalObject();
 assert.sameValue(f, undefined, 'binding is initialized to `undefined`');
 
-verifyEnumerable(global, 'f');
-verifyWritable(global, 'f');
-verifyNotConfigurable(global, 'f');
+verifyProperty(global, "f", {
+  enumerable: true,
+  writable: true,
+  configurable: false
+});
 
 switch (1) {
   default:
     function f() {  }
 }
 
 reportCompare(0, 0);
--- 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
@@ -4,12 +4,14 @@
 /*---
 esid: sec-initializers-in-forin-statement-heads
 description: >
     for-in heads prohibit AssignmentExpressions
 negative:
   phase: early
   type: SyntaxError
 ---*/
+
+throw "Test262: This statement should not be evaluated.";
 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
@@ -4,11 +4,13 @@
 /*---
 esid: sec-initializers-in-forin-statement-heads
 description: >
     for-in initializers with const are prohibited
 negative:
   phase: early
   type: SyntaxError
 ---*/
+
+throw "Test262: This statement should not be evaluated.";
 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
@@ -4,11 +4,13 @@
 /*---
 esid: sec-initializers-in-forin-statement-heads
 description: >
     for-in initializers with let are prohibited
 negative:
   phase: early
   type: SyntaxError
 ---*/
+
+throw "Test262: This statement should not be evaluated.";
 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
@@ -6,11 +6,13 @@
 esid: sec-initializers-in-forin-statement-heads
 description: >
     for-in initializers in strict mode are prohibited
 negative:
   phase: early
   type: SyntaxError
 flags: [onlyStrict]
 ---*/
+
+throw "Test262: This statement should not be evaluated.";
 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
@@ -4,11 +4,13 @@
 /*---
 esid: sec-initializers-in-forin-statement-heads
 description: >
     for-in initializers with ArrayBindingPatterns are always prohibited
 negative:
   phase: early
   type: SyntaxError
 ---*/
+
+throw "Test262: This statement should not be evaluated.";
 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
@@ -4,11 +4,13 @@
 /*---
 esid: sec-initializers-in-forin-statement-heads
 description: >
     for-in initializers with ObjectBindingPattern are always prohibited
 negative:
   phase: early
   type: SyntaxError
 ---*/
+
+throw "Test262: This statement should not be evaluated.";
 throw NotEarlyError;
 for (var {a} = 0 in {});
 
--- a/js/src/tests/test262/built-ins/Array/from/Array.from-descriptor.js
+++ b/js/src/tests/test262/built-ins/Array/from/Array.from-descriptor.js
@@ -1,15 +1,16 @@
 // Copyright 2015 Microsoft Corporation. All rights reserved.
 // This code is governed by the license found in the LICENSE file.
 
 /*---
 description: Testing descriptor property of Array.from
 includes:
     - propertyHelper.js
+esid: sec-array.from
 es6id: 22.1.2.1
 ---*/
 
 verifyWritable(Array, "from");
 verifyNotEnumerable(Array, "from");
 verifyConfigurable(Array, "from");
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/Array.from-name.js
+++ b/js/src/tests/test262/built-ins/Array/from/Array.from-name.js
@@ -1,11 +1,12 @@
 // Copyright 2015 Microsoft Corporation. All rights reserved.
 // This code is governed by the license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: '`name` property'
 info: >
     ES6 Section 17:
 
     Every built-in Function object, including constructors, that is not
     identified as an anonymous function has a name property whose value is a
     String. Unless otherwise specified, this value is the name that is given to
--- a/js/src/tests/test262/built-ins/Array/from/Array.from_arity.js
+++ b/js/src/tests/test262/built-ins/Array/from/Array.from_arity.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: >
   The length property of the Array.from method is 1.
 info: >
   22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
 
   ...
 
--- a/js/src/tests/test262/built-ins/Array/from/Array.from_forwards-length-for-array-likes.js
+++ b/js/src/tests/test262/built-ins/Array/from/Array.from_forwards-length-for-array-likes.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: >
   If this is a constructor, and items doesn't have an @@iterator,
   returns a new instance of this
 info: >
   22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
 
   4. Let usingIterator be GetMethod(items, @@iterator).
--- a/js/src/tests/test262/built-ins/Array/from/calling-from-valid-1-noStrict.js
+++ b/js/src/tests/test262/built-ins/Array/from/calling-from-valid-1-noStrict.js
@@ -1,67 +1,69 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-/*---
-es6id: 22.1.2.1
-description: Map function without thisArg on non strict mode
-info: >
-  22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
-
-  ...
-  10. Let len be ToLength(Get(arrayLike, "length")).
-  11. ReturnIfAbrupt(len).
-  12. If IsConstructor(C) is true, then
-    a. Let A be Construct(C, «len»).
-  13. Else,
-    b. Let A be ArrayCreate(len).
-  14. ReturnIfAbrupt(A).
-  15. Let k be 0.
-  16. Repeat, while k < len
-    a. Let Pk be ToString(k).
-    b. Let kValue be Get(arrayLike, Pk).
-    c. ReturnIfAbrupt(kValue).
-    d. If mapping is true, then
-      i. Let mappedValue be Call(mapfn, T, «kValue, k»).
-  ...
-flags: [noStrict]
----*/
-
-var list = {
-  '0': 41,
-  '1': 42,
-  '2': 43,
-  length: 3
-};
-var calls = [];
-
-function mapFn (value) {
-  calls.push({
-    args: arguments,
-    thisArg: this
-  });
-  return value * 2;
-}
-
-var result = Array.from(list, mapFn);
-
-assert.sameValue(result.length, 3, 'result.length');
-assert.sameValue(result[0], 82, 'result[0]');
-assert.sameValue(result[1], 84, 'result[1]');
-assert.sameValue(result[2], 86, 'result[2]');
-
-assert.sameValue(calls.length, 3, 'calls.length');
-
-assert.sameValue(calls[0].args.length, 2, 'calls[0].args.length');
-assert.sameValue(calls[0].args[0], 41, 'calls[0].args[0]');
-assert.sameValue(calls[0].args[1], 0, 'calls[0].args[1]');
-assert.sameValue(calls[0].thisArg, this, 'calls[0].thisArg');
-
-assert.sameValue(calls[1].args.length, 2, 'calls[1].args.length');
-assert.sameValue(calls[1].args[0], 42, 'calls[1].args[0]');
-assert.sameValue(calls[1].args[1], 1, 'calls[1].args[1]');
-assert.sameValue(calls[1].thisArg, this, 'calls[1].thisArg');
-
-assert.sameValue(calls[2].args.length, 2, 'calls[2].args.length');
-assert.sameValue(calls[2].args[0], 43, 'calls[2].args[0]');
-assert.sameValue(calls[2].args[1], 2, 'calls[2].args[1]');
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+/*---
+esid: sec-array.from
+es6id: 22.1.2.1
+description: Map function without thisArg on non strict mode
+info: >
+  22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
+
+  ...
+  10. Let len be ToLength(Get(arrayLike, "length")).
+  11. ReturnIfAbrupt(len).
+  12. If IsConstructor(C) is true, then
+    a. Let A be Construct(C, «len»).
+  13. Else,
+    b. Let A be ArrayCreate(len).
+  14. ReturnIfAbrupt(A).
+  15. Let k be 0.
+  16. Repeat, while k < len
+    a. Let Pk be ToString(k).
+    b. Let kValue be Get(arrayLike, Pk).
+    c. ReturnIfAbrupt(kValue).
+    d. If mapping is true, then
+      i. Let mappedValue be Call(mapfn, T, «kValue, k»).
+  ...
+flags: [noStrict]
+---*/
+
+var list = {
+  '0': 41,
+  '1': 42,
+  '2': 43,
+  length: 3
+};
+var calls = [];
+
+function mapFn (value) {
+  calls.push({
+    args: arguments,
+    thisArg: this
+  });
+  return value * 2;
+}
+
+var result = Array.from(list, mapFn);
+
+assert.sameValue(result.length, 3, 'result.length');
+assert.sameValue(result[0], 82, 'result[0]');
+assert.sameValue(result[1], 84, 'result[1]');
+assert.sameValue(result[2], 86, 'result[2]');
+
+assert.sameValue(calls.length, 3, 'calls.length');
+
+assert.sameValue(calls[0].args.length, 2, 'calls[0].args.length');
+assert.sameValue(calls[0].args[0], 41, 'calls[0].args[0]');
+assert.sameValue(calls[0].args[1], 0, 'calls[0].args[1]');
+assert.sameValue(calls[0].thisArg, this, 'calls[0].thisArg');
+
+assert.sameValue(calls[1].args.length, 2, 'calls[1].args.length');
+assert.sameValue(calls[1].args[0], 42, 'calls[1].args[0]');
+assert.sameValue(calls[1].args[1], 1, 'calls[1].args[1]');
+assert.sameValue(calls[1].thisArg, this, 'calls[1].thisArg');
+
+assert.sameValue(calls[2].args.length, 2, 'calls[2].args.length');
+assert.sameValue(calls[2].args[0], 43, 'calls[2].args[0]');
+assert.sameValue(calls[2].args[1], 2, 'calls[2].args[1]');
 assert.sameValue(calls[2].thisArg, this, 'calls[2].thisArg');
+
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/calling-from-valid-1-onlyStrict-strict.js
+++ b/js/src/tests/test262/built-ins/Array/from/calling-from-valid-1-onlyStrict-strict.js
@@ -1,68 +1,70 @@
 'use strict';
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-/*---
-es6id: 22.1.2.1
-description: Map function without thisArg on strict mode
-info: >
-  22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
-
-  ...
-  10. Let len be ToLength(Get(arrayLike, "length")).
-  11. ReturnIfAbrupt(len).
-  12. If IsConstructor(C) is true, then
-    a. Let A be Construct(C, «len»).
-  13. Else,
-    b. Let A be ArrayCreate(len).
-  14. ReturnIfAbrupt(A).
-  15. Let k be 0.
-  16. Repeat, while k < len
-    a. Let Pk be ToString(k).
-    b. Let kValue be Get(arrayLike, Pk).
-    c. ReturnIfAbrupt(kValue).
-    d. If mapping is true, then
-      i. Let mappedValue be Call(mapfn, T, «kValue, k»).
-  ...
-flags: [onlyStrict]
----*/
-
-var list = {
-  '0': 41,
-  '1': 42,
-  '2': 43,
-  length: 3
-};
-var calls = [];
-
-function mapFn (value) {
-  calls.push({
-    args: arguments,
-    thisArg: this
-  });
-  return value * 2;
-}
-
-var result = Array.from(list, mapFn);
-
-assert.sameValue(result.length, 3, 'result.length');
-assert.sameValue(result[0], 82, 'result[0]');
-assert.sameValue(result[1], 84, 'result[1]');
-assert.sameValue(result[2], 86, 'result[2]');
-
-assert.sameValue(calls.length, 3, 'calls.length');
-
-assert.sameValue(calls[0].args.length, 2, 'calls[0].args.length');
-assert.sameValue(calls[0].args[0], 41, 'calls[0].args[0]');
-assert.sameValue(calls[0].args[1], 0, 'calls[0].args[1]');
-assert.sameValue(calls[0].thisArg, undefined, 'calls[0].thisArg');
-
-assert.sameValue(calls[1].args.length, 2, 'calls[1].args.length');
-assert.sameValue(calls[1].args[0], 42, 'calls[1].args[0]');
-assert.sameValue(calls[1].args[1], 1, 'calls[1].args[1]');
-assert.sameValue(calls[1].thisArg, undefined, 'calls[1].thisArg');
-
-assert.sameValue(calls[2].args.length, 2, 'calls[2].args.length');
-assert.sameValue(calls[2].args[0], 43, 'calls[2].args[0]');
-assert.sameValue(calls[2].args[1], 2, 'calls[2].args[1]');
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+/*---
+esid: sec-array.from
+es6id: 22.1.2.1
+description: Map function without thisArg on strict mode
+info: >
+  22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
+
+  ...
+  10. Let len be ToLength(Get(arrayLike, "length")).
+  11. ReturnIfAbrupt(len).
+  12. If IsConstructor(C) is true, then
+    a. Let A be Construct(C, «len»).
+  13. Else,
+    b. Let A be ArrayCreate(len).
+  14. ReturnIfAbrupt(A).
+  15. Let k be 0.
+  16. Repeat, while k < len
+    a. Let Pk be ToString(k).
+    b. Let kValue be Get(arrayLike, Pk).
+    c. ReturnIfAbrupt(kValue).
+    d. If mapping is true, then
+      i. Let mappedValue be Call(mapfn, T, «kValue, k»).
+  ...
+flags: [onlyStrict]
+---*/
+
+var list = {
+  '0': 41,
+  '1': 42,
+  '2': 43,
+  length: 3
+};
+var calls = [];
+
+function mapFn (value) {
+  calls.push({
+    args: arguments,
+    thisArg: this
+  });
+  return value * 2;
+}
+
+var result = Array.from(list, mapFn);
+
+assert.sameValue(result.length, 3, 'result.length');
+assert.sameValue(result[0], 82, 'result[0]');
+assert.sameValue(result[1], 84, 'result[1]');
+assert.sameValue(result[2], 86, 'result[2]');
+
+assert.sameValue(calls.length, 3, 'calls.length');
+
+assert.sameValue(calls[0].args.length, 2, 'calls[0].args.length');
+assert.sameValue(calls[0].args[0], 41, 'calls[0].args[0]');
+assert.sameValue(calls[0].args[1], 0, 'calls[0].args[1]');
+assert.sameValue(calls[0].thisArg, undefined, 'calls[0].thisArg');
+
+assert.sameValue(calls[1].args.length, 2, 'calls[1].args.length');
+assert.sameValue(calls[1].args[0], 42, 'calls[1].args[0]');
+assert.sameValue(calls[1].args[1], 1, 'calls[1].args[1]');
+assert.sameValue(calls[1].thisArg, undefined, 'calls[1].thisArg');
+
+assert.sameValue(calls[2].args.length, 2, 'calls[2].args.length');
+assert.sameValue(calls[2].args[0], 43, 'calls[2].args[0]');
+assert.sameValue(calls[2].args[1], 2, 'calls[2].args[1]');
 assert.sameValue(calls[2].thisArg, undefined, 'calls[2].thisArg');
+
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/calling-from-valid-2.js
+++ b/js/src/tests/test262/built-ins/Array/from/calling-from-valid-2.js
@@ -1,69 +1,70 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-es6id: 22.1.2.1
-description: Calling from with a valid map function with thisArg
-info: >
-  22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
-
-  ...
-  10. Let len be ToLength(Get(arrayLike, "length")).
-  11. ReturnIfAbrupt(len).
-  12. If IsConstructor(C) is true, then
-    a. Let A be Construct(C, «len»).
-  13. Else,
-    b. Let A be ArrayCreate(len).
-  14. ReturnIfAbrupt(A).
-  15. Let k be 0.
-  16. Repeat, while k < len
-    a. Let Pk be ToString(k).
-    b. Let kValue be Get(arrayLike, Pk).
-    c. ReturnIfAbrupt(kValue).
-    d. If mapping is true, then
-      i. Let mappedValue be Call(mapfn, T, «kValue, k»).
-  ...
----*/
-
-var list = {
-  '0': 41,
-  '1': 42,
-  '2': 43,
-  length: 3
-};
-var calls = [];
-var thisArg = {};
-
-function mapFn (value) {
-  calls.push({
-    args: arguments,
-    thisArg: this
-  });
-  return value * 2;
-}
-
-var result = Array.from(list, mapFn, thisArg);
-
-assert.sameValue(result.length, 3, 'result.length');
-assert.sameValue(result[0], 82, 'result[0]');
-assert.sameValue(result[1], 84, 'result[1]');
-assert.sameValue(result[2], 86, 'result[2]');
-
-assert.sameValue(calls.length, 3, 'calls.length');
-
-assert.sameValue(calls[0].args.length, 2, 'calls[0].args.length');
-assert.sameValue(calls[0].args[0], 41, 'calls[0].args[0]');
-assert.sameValue(calls[0].args[1], 0, 'calls[0].args[1]');
-assert.sameValue(calls[0].thisArg, thisArg, 'calls[0].thisArg');
-
-assert.sameValue(calls[1].args.length, 2, 'calls[1].args.length');
-assert.sameValue(calls[1].args[0], 42, 'calls[1].args[0]');
-assert.sameValue(calls[1].args[1], 1, 'calls[1].args[1]');
-assert.sameValue(calls[1].thisArg, thisArg, 'calls[1].thisArg');
-
-assert.sameValue(calls[2].args.length, 2, 'calls[2].args.length');
-assert.sameValue(calls[2].args[0], 43, 'calls[2].args[0]');
-assert.sameValue(calls[2].args[1], 2, 'calls[2].args[1]');
-assert.sameValue(calls[2].thisArg, thisArg, 'calls[2].thisArg');
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-array.from
+es6id: 22.1.2.1
+description: Calling from with a valid map function with thisArg
+info: >
+  22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
+
+  ...
+  10. Let len be ToLength(Get(arrayLike, "length")).
+  11. ReturnIfAbrupt(len).
+  12. If IsConstructor(C) is true, then
+    a. Let A be Construct(C, «len»).
+  13. Else,
+    b. Let A be ArrayCreate(len).
+  14. ReturnIfAbrupt(A).
+  15. Let k be 0.
+  16. Repeat, while k < len
+    a. Let Pk be ToString(k).
+    b. Let kValue be Get(arrayLike, Pk).
+    c. ReturnIfAbrupt(kValue).
+    d. If mapping is true, then
+      i. Let mappedValue be Call(mapfn, T, «kValue, k»).
+  ...
+---*/
+
+var list = {
+  '0': 41,
+  '1': 42,
+  '2': 43,
+  length: 3
+};
+var calls = [];
+var thisArg = {};
+
+function mapFn (value) {
+  calls.push({
+    args: arguments,
+    thisArg: this
+  });
+  return value * 2;
+}
+
+var result = Array.from(list, mapFn, thisArg);
+
+assert.sameValue(result.length, 3, 'result.length');
+assert.sameValue(result[0], 82, 'result[0]');
+assert.sameValue(result[1], 84, 'result[1]');
+assert.sameValue(result[2], 86, 'result[2]');
+
+assert.sameValue(calls.length, 3, 'calls.length');
+
+assert.sameValue(calls[0].args.length, 2, 'calls[0].args.length');
+assert.sameValue(calls[0].args[0], 41, 'calls[0].args[0]');
+assert.sameValue(calls[0].args[1], 0, 'calls[0].args[1]');
+assert.sameValue(calls[0].thisArg, thisArg, 'calls[0].thisArg');
+
+assert.sameValue(calls[1].args.length, 2, 'calls[1].args.length');
+assert.sameValue(calls[1].args[0], 42, 'calls[1].args[0]');
+assert.sameValue(calls[1].args[1], 1, 'calls[1].args[1]');
+assert.sameValue(calls[1].thisArg, thisArg, 'calls[1].thisArg');
+
+assert.sameValue(calls[2].args.length, 2, 'calls[2].args.length');
+assert.sameValue(calls[2].args[0], 43, 'calls[2].args[0]');
+assert.sameValue(calls[2].args[1], 2, 'calls[2].args[1]');
+assert.sameValue(calls[2].thisArg, thisArg, 'calls[2].thisArg');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/elements-added-after.js
+++ b/js/src/tests/test262/built-ins/Array/from/elements-added-after.js
@@ -1,39 +1,40 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: Elements added after the call to from
-es6id: 22.1.2.1
----*/
-
-var arrayIndex = -1;
-var originalLength = 7;
-var obj = {
-    length: originalLength,
-    0: 2,
-    1: 4,
-    2: 8,
-    3: 16,
-    4: 32,
-    5: 64,
-    6: 128
-};
-var array = [ 2, 4, 8, 16, 32, 64, 128 ];
-function mapFn(value, index) {
-    arrayIndex++;
-    assert.sameValue(value, obj[arrayIndex], "Value mismatch in mapFn at index " + index + ".");
-    assert.sameValue(index, arrayIndex, "Index mismatch in mapFn.");
-    obj[originalLength + arrayIndex] = 2 * arrayIndex + 1;
-
-    return obj[arrayIndex];
-}
-
-
-var a = Array.from(obj, mapFn);
-assert.sameValue(a.length, array.length, "Length mismatch.");
-
-for (var j = 0; j < a.length; j++) {
-    assert.sameValue(a[j], array[j], "Element mismatch for array at index " + j + ".");
-}
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: Elements added after the call to from
+esid: sec-array.from
+es6id: 22.1.2.1
+---*/
+
+var arrayIndex = -1;
+var originalLength = 7;
+var obj = {
+    length: originalLength,
+    0: 2,
+    1: 4,
+    2: 8,
+    3: 16,
+    4: 32,
+    5: 64,
+    6: 128
+};
+var array = [ 2, 4, 8, 16, 32, 64, 128 ];
+function mapFn(value, index) {
+    arrayIndex++;
+    assert.sameValue(value, obj[arrayIndex], "Value mismatch in mapFn at index " + index + ".");
+    assert.sameValue(index, arrayIndex, "Index mismatch in mapFn.");
+    obj[originalLength + arrayIndex] = 2 * arrayIndex + 1;
+
+    return obj[arrayIndex];
+}
+
+
+var a = Array.from(obj, mapFn);
+assert.sameValue(a.length, array.length, "Length mismatch.");
+
+for (var j = 0; j < a.length; j++) {
+    assert.sameValue(a[j], array[j], "Element mismatch for array at index " + j + ".");
+}
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/elements-deleted-after.js
+++ b/js/src/tests/test262/built-ins/Array/from/elements-deleted-after.js
@@ -1,33 +1,34 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: >
-    Elements deleted after the call started and before visited are not
-    visited
-es6id: 22.1.2.1
----*/
-
-var originalArray = [ 0, 1, -2, 4, -8, 16 ];
-var array = [ 0, 1, -2, 4, -8, 16 ];
-var a = [];
-var arrayIndex = -1;
-function mapFn(value, index) {
-    this.arrayIndex++;
-    assert.sameValue(value, array[this.arrayIndex], "Value mismatch in mapFn at index " + index + ".");
-    assert.sameValue(index, this.arrayIndex, "Index mismatch in mapFn.");
-
-    array.splice(array.length - 1, 1);
-    return 127;
-}
-
-
-a = Array.from(array, mapFn, this);
-
-assert.sameValue(a.length, originalArray.length / 2, "Length mismatch. Old array : " + (originalArray.length / 2) + ". array : " + a.length + ".");
-
-for (var j = 0; j < originalArray.length / 2; j++) {
-    assert.sameValue(a[j], 127, "Element mismatch for mapped array at index " + j + ".");
-}
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+    Elements deleted after the call started and before visited are not
+    visited
+esid: sec-array.from
+es6id: 22.1.2.1
+---*/
+
+var originalArray = [ 0, 1, -2, 4, -8, 16 ];
+var array = [ 0, 1, -2, 4, -8, 16 ];
+var a = [];
+var arrayIndex = -1;
+function mapFn(value, index) {
+    this.arrayIndex++;
+    assert.sameValue(value, array[this.arrayIndex], "Value mismatch in mapFn at index " + index + ".");
+    assert.sameValue(index, this.arrayIndex, "Index mismatch in mapFn.");
+
+    array.splice(array.length - 1, 1);
+    return 127;
+}
+
+
+a = Array.from(array, mapFn, this);
+
+assert.sameValue(a.length, originalArray.length / 2, "Length mismatch. Old array : " + (originalArray.length / 2) + ". array : " + a.length + ".");
+
+for (var j = 0; j < originalArray.length / 2; j++) {
+    assert.sameValue(a[j], 127, "Element mismatch for mapped array at index " + j + ".");
+}
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/elements-updated-after.js
+++ b/js/src/tests/test262/built-ins/Array/from/elements-updated-after.js
@@ -1,28 +1,29 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: Elements are updated after the call to from
-es6id: 22.1.2.1
----*/
-
-var array = [ 127, 4, 8, 16, 32, 64, 128 ];
-var arrayIndex = -1;
-function mapFn(value, index) {
-    arrayIndex++;
-    if (index + 1 < array.length) {
-        array[index + 1] = 127;
-    }
-    assert.sameValue(value, 127, "Value mismatch in mapFn at index " + index + ".");
-    assert.sameValue(index, arrayIndex, "Index mismatch in mapFn.");
-
-    return value;
-}
-
-var a = Array.from(array, mapFn);
-assert.sameValue(a.length, array.length, "Length mismatch.");
-for (var j = 0; j < a.length; j++) {
-    assert.sameValue(a[j], 127, "Element mismatch for mapped array.");
-}
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: Elements are updated after the call to from
+esid: sec-array.from
+es6id: 22.1.2.1
+---*/
+
+var array = [ 127, 4, 8, 16, 32, 64, 128 ];
+var arrayIndex = -1;
+function mapFn(value, index) {
+    arrayIndex++;
+    if (index + 1 < array.length) {
+        array[index + 1] = 127;
+    }
+    assert.sameValue(value, 127, "Value mismatch in mapFn at index " + index + ".");
+    assert.sameValue(index, arrayIndex, "Index mismatch in mapFn.");
+
+    return value;
+}
+
+var a = Array.from(array, mapFn);
+assert.sameValue(a.length, array.length, "Length mismatch.");
+for (var j = 0; j < a.length; j++) {
+    assert.sameValue(a[j], 127, "Element mismatch for mapped array.");
+}
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/from-array.js
+++ b/js/src/tests/test262/built-ins/Array/from/from-array.js
@@ -1,25 +1,26 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: Passing a valid array
-es6id: 22.1.2.1
----*/
-
-var array = [0, 'foo', , Infinity];
-var result = Array.from(array);
-
-assert.sameValue(result.length, 4, 'result.length');
-assert.sameValue(result[0], 0, 'result[0]');
-assert.sameValue(result[1], 'foo', 'result[1]');
-assert.sameValue(result[2], undefined, 'result[2]');
-assert.sameValue(result[3], Infinity, 'result[3]');
-
-assert.notSameValue(
-  result, array,
-  'result is not the object from items argument'
-);
-
-assert(result instanceof Array, 'result instanceof Array');
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: Passing a valid array
+esid: sec-array.from
+es6id: 22.1.2.1
+---*/
+
+var array = [0, 'foo', , Infinity];
+var result = Array.from(array);
+
+assert.sameValue(result.length, 4, 'result.length');
+assert.sameValue(result[0], 0, 'result[0]');
+assert.sameValue(result[1], 'foo', 'result[1]');
+assert.sameValue(result[2], undefined, 'result[2]');
+assert.sameValue(result[3], Infinity, 'result[3]');
+
+assert.notSameValue(
+  result, array,
+  'result is not the object from items argument'
+);
+
+assert(result instanceof Array, 'result instanceof Array');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/from-string.js
+++ b/js/src/tests/test262/built-ins/Array/from/from-string.js
@@ -1,13 +1,14 @@
 // Copyright (c) 2014 Hank Yates. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-es6id: 22.1.2.1_T1
+esid: sec-array.from
+es6id: 22.1.2.1
 description: Testing Array.from when passed a String
 author: Hank Yates (hankyates@gmail.com)
 ---*/
 
 var arrLikeSource = 'Test';
 var result = Array.from(arrLikeSource);
 
 assert.sameValue(result.length, 4, 'result.length');
--- a/js/src/tests/test262/built-ins/Array/from/get-iter-method-err.js
+++ b/js/src/tests/test262/built-ins/Array/from/get-iter-method-err.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Error accessing items' `Symbol.iterator` attribute
 info: >
     [...]
     4. Let usingIterator be GetMethod(items, @@iterator).
     5. ReturnIfAbrupt(usingIterator).
 features: [Symbol.iterator]
 ---*/
--- a/js/src/tests/test262/built-ins/Array/from/items-is-arraybuffer.js
+++ b/js/src/tests/test262/built-ins/Array/from/items-is-arraybuffer.js
@@ -1,11 +1,12 @@
 // Copyright 2015 Leonardo Balter. All rights reserved.
 // This code is governed by the license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Return empty array if items argument is an ArrayBuffer
 info: >
   22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
 
   ...
   4. Let usingIterator be GetMethod(items, @@iterator).
   5. ReturnIfAbrupt(usingIterator).
--- a/js/src/tests/test262/built-ins/Array/from/items-is-null-throws.js
+++ b/js/src/tests/test262/built-ins/Array/from/items-is-null-throws.js
@@ -1,11 +1,12 @@
 // Copyright 2015 Leonardo Balter. All rights reserved.
 // This code is governed by the license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Throws a TypeError if items argument is null
 info: >
   22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
 
   ...
   4. Let usingIterator be GetMethod(items, @@iterator).
   5. ReturnIfAbrupt(usingIterator).
--- a/js/src/tests/test262/built-ins/Array/from/iter-adv-err.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-adv-err.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Error advancing iterator
 info: >
     [...]
     6. If usingIterator is not undefined, then
        [...]
        g. Repeat
           i. Let Pk be ToString(k).
--- a/js/src/tests/test262/built-ins/Array/from/iter-cstm-ctor-err.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-cstm-ctor-err.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: >
     Error creating object with custom constructor (traversed via iterator)
 info: >
     [...]
     6. If usingIterator is not undefined, then
        a. If IsConstructor(C) is true, then
           i. Let A be Construct(C).
--- a/js/src/tests/test262/built-ins/Array/from/iter-cstm-ctor.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-cstm-ctor.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Creating object with custom constructor (traversed via iterator)
 info: >
     [...]
     6. If usingIterator is not undefined, then
        a. If IsConstructor(C) is true, then
           i. Let A be Construct(C).
        b. Else,
--- a/js/src/tests/test262/built-ins/Array/from/iter-get-iter-err.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-get-iter-err.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Error creating iterator object
 info: >
     [...]
     6. If usingIterator is not undefined, then
        [...]
        d. Let iterator be GetIterator(items, usingIterator).
        e. ReturnIfAbrupt(iterator).
--- a/js/src/tests/test262/built-ins/Array/from/iter-get-iter-val-err.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-get-iter-val-err.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Error retrieving value of iterator result
 info: >
     [...]
     6. If usingIterator is not undefined, then
        [...]
        g. Repeat
           [...]
--- a/js/src/tests/test262/built-ins/Array/from/iter-map-fn-args.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-map-fn-args.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: >
     Arguments of mapping function (traversed via iterator)
 info: >
     [...]
     2. If mapfn is undefined, let mapping be false.
     3. else
        a. If IsCallable(mapfn) is false, throw a TypeError exception.
--- a/js/src/tests/test262/built-ins/Array/from/iter-map-fn-err.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-map-fn-err.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Error invoking map function (traversed via iterator)
 info: >
     [...]
     6. If usingIterator is not undefined, then
        [...]
        g. Repeat
           [...]
--- a/js/src/tests/test262/built-ins/Array/from/iter-map-fn-return.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-map-fn-return.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Value returned by mapping function (traversed via iterator)
 info: >
     [...]
     2. If mapfn is undefined, let mapping be false.
     3. else
        a. If IsCallable(mapfn) is false, throw a TypeError exception.
        b. If thisArg was supplied, let T be thisArg; else let T be undefined.
--- a/js/src/tests/test262/built-ins/Array/from/iter-map-fn-this-arg.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-map-fn-this-arg.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: >
     `this` value of mapping function with custom `this` argument (traversed via iterator)
 info: >
     [...]
     2. If mapfn is undefined, let mapping be false.
     3. else
        a. If IsCallable(mapfn) is false, throw a TypeError exception.
--- a/js/src/tests/test262/built-ins/Array/from/iter-map-fn-this-non-strict.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-map-fn-this-non-strict.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: >
     `this` value of mapping function in non-strict mode (traversed via iterator)
 info: >
     [...]
     2. If mapfn is undefined, let mapping be false.
     3. else
        a. If IsCallable(mapfn) is false, throw a TypeError exception.
--- a/js/src/tests/test262/built-ins/Array/from/iter-map-fn-this-strict-strict.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-map-fn-this-strict-strict.js
@@ -1,12 +1,13 @@
 'use strict';
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: >
     `this` value of mapping function in strict mode (traversed via iterator)
 info: >
     [...]
     2. If mapfn is undefined, let mapping be false.
     3. else
        a. If IsCallable(mapfn) is false, throw a TypeError exception.
--- a/js/src/tests/test262/built-ins/Array/from/iter-set-elem-prop-err.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-set-elem-prop-err.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Error setting property on result value (traversed via iterator)
 info: >
     [...]
     6. If usingIterator is not undefined, then
        [...]
        g. Repeat
           [...]
--- a/js/src/tests/test262/built-ins/Array/from/iter-set-elem-prop.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-set-elem-prop.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Setting property on result value (traversed via iterator)
 info: >
     [...]
     6. If usingIterator is not undefined, then
        [...]
        g. Repeat
           [...]
--- a/js/src/tests/test262/built-ins/Array/from/iter-set-length-err.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-set-length-err.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Error setting length of object (traversed via iterator)
 info: >
     [...]
     6. If usingIterator is not undefined, then
        [...]
        g. Repeat
           [...]
--- a/js/src/tests/test262/built-ins/Array/from/iter-set-length.js
+++ b/js/src/tests/test262/built-ins/Array/from/iter-set-length.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Setting length of object (traversed via iterator)
 info: >
     [...]
     6. If usingIterator is not undefined, then
        [...]
        g. Repeat
           [...]
--- a/js/src/tests/test262/built-ins/Array/from/mapfn-is-not-callable-typeerror.js
+++ b/js/src/tests/test262/built-ins/Array/from/mapfn-is-not-callable-typeerror.js
@@ -1,36 +1,37 @@
-// Copyright 2015 Leonardo Balter. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-/*---
-es6id: 22.1.2.1
-description: Throws a TypeError if mapFn is not callable
-info: >
-  22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
-
-  ...
-  2. If mapfn is undefined, let mapping be false.
-  3. else
-    a. If IsCallable(mapfn) is false, throw a TypeError exception.
-    ...
----*/
-
-assert.throws(TypeError, function() {
-  Array.from([], null);
-});
-
-assert.throws(TypeError, function() {
-  Array.from([], {});
-});
-
-assert.throws(TypeError, function() {
-  Array.from([], 'string');
-});
-
-assert.throws(TypeError, function() {
-  Array.from([], true);
-});
-
-assert.throws(TypeError, function() {
-  Array.from([], 42);
-});
+// Copyright 2015 Leonardo Balter. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+/*---
+esid: sec-array.from
+es6id: 22.1.2.1
+description: Throws a TypeError if mapFn is not callable
+info: >
+  22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
+
+  ...
+  2. If mapfn is undefined, let mapping be false.
+  3. else
+    a. If IsCallable(mapfn) is false, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Array.from([], null);
+});
+
+assert.throws(TypeError, function() {
+  Array.from([], {});
+});
+
+assert.throws(TypeError, function() {
+  Array.from([], 'string');
+});
+
+assert.throws(TypeError, function() {
+  Array.from([], true);
+});
+
+assert.throws(TypeError, function() {
+  Array.from([], 42);
+});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/mapfn-is-symbol-throws.js
+++ b/js/src/tests/test262/built-ins/Array/from/mapfn-is-symbol-throws.js
@@ -1,11 +1,12 @@
 // Copyright 2015 Leonardo Balter. All rights reserved.
 // This code is governed by the license found in the LICENSE file.
 /*---
+esid: sec-array.from
 es6id: 22.1.2.1
 description: Throws a TypeError if mapFn is not callable (Symbol)
 info: >
   22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
 
   ...
   2. If mapfn is undefined, let mapping be false.
   3. else
--- a/js/src/tests/test262/built-ins/Array/from/mapfn-throws-exception.js
+++ b/js/src/tests/test262/built-ins/Array/from/mapfn-throws-exception.js
@@ -1,16 +1,17 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: mapFn throws an exception
-es6id: 22.1.2.1
----*/
-
-var array = [ 2, 4, 8, 16, 32, 64, 128 ];
-function mapFn(value, index, obj) {
-    throw new Test262Error();
-}
-
-assert.throws(Test262Error, function(){Array.from(array, mapFn);});
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: mapFn throws an exception
+esid: sec-array.from
+es6id: 22.1.2.1
+---*/
+
+var array = [ 2, 4, 8, 16, 32, 64, 128 ];
+function mapFn(value, index, obj) {
+    throw new Test262Error();
+}
+
+assert.throws(Test262Error, function(){Array.from(array, mapFn);});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/proto-from-ctor-realm.js
+++ b/js/src/tests/test262/built-ins/Array/from/proto-from-ctor-realm.js
@@ -14,16 +14,17 @@ info: |
     9.1.14 GetPrototypeFromConstructor
 
     [...]
     3. Let proto be ? Get(constructor, "prototype").
     4. If Type(proto) is not Object, then
        a. Let realm be ? GetFunctionRealm(constructor).
        b. Let proto be realm's intrinsic object named intrinsicDefaultProto.
     [...]
+features: [cross-realm]
 ---*/
 
 var other = $262.createRealm().global;
 var C = new other.Function();
 C.prototype = null;
 
 var a = Array.from.call(C, []);
 
--- a/js/src/tests/test262/built-ins/Array/from/source-array-boundary.js
+++ b/js/src/tests/test262/built-ins/Array/from/source-array-boundary.js
@@ -1,28 +1,29 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: Source array with boundary values
-es6id: 22.1.2.1
----*/
-
-var array = [ Number.MAX_VALUE, Number.MIN_VALUE, Number.NaN, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY ];
-var arrayIndex = -1;
-function mapFn(value, index) {
-    this.arrayIndex++;
-    assert.sameValue(value, array[this.arrayIndex], "Value mismatch in mapFn at index " + index + ".");
-    assert.sameValue(index, this.arrayIndex, "Index mismatch in mapFn.");
-
-    return value;
-}
-
-var a = Array.from(array, mapFn, this);
-
-assert.sameValue(a.length, array.length, "Length mismatch.");
-assert.sameValue(a[0], Number.MAX_VALUE, "Element mismatch for mapped array at index 0.");
-assert.sameValue(a[1], Number.MIN_VALUE, "Element mismatch for mapped array at index 1.");
-assert.sameValue(a[2], Number.NaN, "Element mismatch for mapped array at index 2.");
-assert.sameValue(a[3], Number.NEGATIVE_INFINITY, "Element mismatch for mapped array at index 3.");
-assert.sameValue(a[4], Number.POSITIVE_INFINITY, "Element mismatch for mapped array at index 4.");
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: Source array with boundary values
+esid: sec-array.from
+es6id: 22.1.2.1
+---*/
+
+var array = [ Number.MAX_VALUE, Number.MIN_VALUE, Number.NaN, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY ];
+var arrayIndex = -1;
+function mapFn(value, index) {
+    this.arrayIndex++;
+    assert.sameValue(value, array[this.arrayIndex], "Value mismatch in mapFn at index " + index + ".");
+    assert.sameValue(index, this.arrayIndex, "Index mismatch in mapFn.");
+
+    return value;
+}
+
+var a = Array.from(array, mapFn, this);
+
+assert.sameValue(a.length, array.length, "Length mismatch.");
+assert.sameValue(a[0], Number.MAX_VALUE, "Element mismatch for mapped array at index 0.");
+assert.sameValue(a[1], Number.MIN_VALUE, "Element mismatch for mapped array at index 1.");
+assert.sameValue(a[2], Number.NaN, "Element mismatch for mapped array at index 2.");
+assert.sameValue(a[3], Number.NEGATIVE_INFINITY, "Element mismatch for mapped array at index 3.");
+assert.sameValue(a[4], Number.POSITIVE_INFINITY, "Element mismatch for mapped array at index 4.");
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/source-object-constructor.js
+++ b/js/src/tests/test262/built-ins/Array/from/source-object-constructor.js
@@ -1,12 +1,13 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: >
-    Array.from uses a constructor other than Array.
-es6id: 22.1.2.1
----*/
-
-assert.sameValue(Array.from.call(Object, []).constructor, Object);
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+    Array.from uses a constructor other than Array.
+esid: sec-array.from
+es6id: 22.1.2.1
+---*/
+
+assert.sameValue(Array.from.call(Object, []).constructor, Object);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/source-object-iterator-1.js
+++ b/js/src/tests/test262/built-ins/Array/from/source-object-iterator-1.js
@@ -1,30 +1,32 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: Source object has iterator which throws
-es6id: 22.1.2.1
----*/
-
-var array = [ 2, 4, 8, 16, 32, 64, 128 ];
-var obj = {
-    [Symbol.iterator]() {
-        return {
-            index: 0,
-            next() {
-                throw new Test262Error();
-            },
-            isDone : false,
-            get val() {
-                this.index++;
-                if (this.index > 7) {
-                    this.isDone = true;
-                }
-                return 1 << this.index;
-            }
-        };
-    }
-};
-assert.throws(Test262Error, function(){Array.from(obj);});
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: Source object has iterator which throws
+esid: sec-array.from
+es6id: 22.1.2.1
+features: [Symbol.iterator]
+---*/
+
+var array = [ 2, 4, 8, 16, 32, 64, 128 ];
+var obj = {
+    [Symbol.iterator]() {
+        return {
+            index: 0,
+            next() {
+                throw new Test262Error();
+            },
+            isDone : false,
+            get val() {
+                this.index++;
+                if (this.index > 7) {
+                    this.isDone = true;
+                }
+                return 1 << this.index;
+            }
+        };
+    }
+};
+assert.throws(Test262Error, function(){Array.from(obj);});
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/source-object-iterator-2.js
+++ b/js/src/tests/test262/built-ins/Array/from/source-object-iterator-2.js
@@ -1,37 +1,39 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: Source object has iterator
-es6id: 22.1.2.1
----*/
-
-var array = [ 2, 4, 8, 16, 32, 64, 128 ];
-var obj = {
-    [Symbol.iterator]() {
-        return {
-            index: 0,
-            next() {
-                return {
-                    value: this.val,
-                    done: this.isDone
-                };
-            },
-            isDone : false,
-            get val() {
-                this.index++;
-                if (this.index > 7) {
-                    this.isDone = true;
-                }
-                return 1 << this.index;
-            }
-        };
-    }
-};
-var a = Array.from.call(Object, obj);
-assert.sameValue(typeof a, typeof {}, "The returned type is expected to be object.");
-for (var j = 0; j < a.length; j++) {
-    assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
-}
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: Source object has iterator
+esid: sec-array.from
+es6id: 22.1.2.1
+features: [Symbol.iterator]
+---*/
+
+var array = [ 2, 4, 8, 16, 32, 64, 128 ];
+var obj = {
+    [Symbol.iterator]() {
+        return {
+            index: 0,
+            next() {
+                return {
+                    value: this.val,
+                    done: this.isDone
+                };
+            },
+            isDone : false,
+            get val() {
+                this.index++;
+                if (this.index > 7) {
+                    this.isDone = true;
+                }
+                return 1 << this.index;
+            }
+        };
+    }
+};
+var a = Array.from.call(Object, obj);
+assert.sameValue(typeof a, typeof {}, "The returned type is expected to be object.");
+for (var j = 0; j < a.length; j++) {
+    assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
+}
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/source-object-length.js
+++ b/js/src/tests/test262/built-ins/Array/from/source-object-length.js
@@ -1,26 +1,27 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: >
-    Source is an object with length property and one item is deleted
-    from the source
-es6id: 22.1.2.1
----*/
-
-var array = [2, 4, 0, 16];
-var expectedArray = [2, 4, , 16];
-var obj = {
-    length : 4,
-    0 : 2,
-    1 : 4,
-    2 : 0,
-    3 : 16
-};
-delete obj[2];
-var a = Array.from(obj);
-for (var j = 0; j < expectedArray.length; j++) {
-    assert.sameValue(a[j], expectedArray[j], "Elements mismatch at " + j + ".");
-}
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+    Source is an object with length property and one item is deleted
+    from the source
+esid: sec-array.from
+es6id: 22.1.2.1
+---*/
+
+var array = [2, 4, 0, 16];
+var expectedArray = [2, 4, , 16];
+var obj = {
+    length : 4,
+    0 : 2,
+    1 : 4,
+    2 : 0,
+    3 : 16
+};
+delete obj[2];
+var a = Array.from(obj);
+for (var j = 0; j < expectedArray.length; j++) {
+    assert.sameValue(a[j], expectedArray[j], "Elements mismatch at " + j + ".");
+}
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/source-object-missing.js
+++ b/js/src/tests/test262/built-ins/Array/from/source-object-missing.js
@@ -1,23 +1,24 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: Source is an object with missing values
-es6id: 22.1.2.1
----*/
-
-var array = [2, 4, , 16];
-var obj = {
-    length: 4,
-    0: 2,
-    1: 4,
-    3: 16
-};
-
-var a = Array.from.call(Object, obj);
-assert.sameValue(typeof a, "object", "The returned type is expected to be object.");
-for (var j = 0; j < a.length; j++) {
-    assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
-}
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: Source is an object with missing values
+esid: sec-array.from
+es6id: 22.1.2.1
+---*/
+
+var array = [2, 4, , 16];
+var obj = {
+    length: 4,
+    0: 2,
+    1: 4,
+    3: 16
+};
+
+var a = Array.from.call(Object, obj);
+assert.sameValue(typeof a, "object", "The returned type is expected to be object.");
+for (var j = 0; j < a.length; j++) {
+    assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
+}
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/source-object-without.js
+++ b/js/src/tests/test262/built-ins/Array/from/source-object-without.js
@@ -1,19 +1,20 @@
-// Copyright 2015 Microsoft Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-description: Source is an object without length property
-es6id: 22.1.2.1
----*/
-
-var obj = {
-    0: 2,
-    1: 4,
-    2: 8,
-    3: 16
-}
-
-var a = Array.from(obj);
-assert.sameValue(a.length, 0, "Expected an array of length 0.");
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: Source is an object without length property
+esid: sec-array.from
+es6id: 22.1.2.1
+---*/
+
+var obj = {
+    0: 2,
+    1: 4,
+    2: 8,
+    3: 16
+}
+
+var a = Array.from(obj);
+assert.sameValue(a.length, 0, "Expected an array of length 0.");
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/from/this-null.js
+++ b/js/src/tests/test262/built-ins/Array/from/this-null.js
@@ -1,13 +1,14 @@
-// Copyright 2015 Leonardo Balter. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-/*---
-es6id: 22.1.2.1
-description: Does not throw if this is null
----*/
-
-var result = Array.from.call(null, []);
-
-assert(result instanceof Array, 'Does not throw if this is null');
-assert.sameValue(result.length, 0, 'result.length');
+// Copyright 2015 Leonardo Balter. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+/*---
+esid: sec-array.from
+es6id: 22.1.2.1
+description: Does not throw if this is null
+---*/
+
+var result = Array.from.call(null, []);
+
+assert(result instanceof Array, 'Does not throw if this is null');
+assert.sameValue(result.length, 0, 'result.length');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-1.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-1.js
@@ -1,13 +1,14 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-0-1
 description: Array.isArray must exist as a function
 ---*/
 
-  var f = Array.isArray;
+var f = Array.isArray;
 
 assert.sameValue(typeof(f), "function", 'typeof(f)');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-2.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-2.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-0-2
 description: Array.isArray must exist as a function taking 1 parameter
 ---*/
 
 assert.sameValue(Array.isArray.length, 1, 'Array.isArray.length');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-3.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-3.js
@@ -1,14 +1,15 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-0-3
 description: Array.isArray return true if its argument is an Array
 ---*/
 
-  var a = [];
-  var b = Array.isArray(a);
+var a = [];
+var b = Array.isArray(a);
 
 assert.sameValue(b, true, 'b');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-4.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-4.js
@@ -1,23 +1,24 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-0-4
 description: Array.isArray return false if its argument is not an Array
 ---*/
 
-  var b_num   = Array.isArray(42);
-  var b_undef = Array.isArray(undefined);
-  var b_bool  = Array.isArray(true);
-  var b_str   = Array.isArray("abc");
-  var b_obj   = Array.isArray({});
-  var b_null  = Array.isArray(null);
-  
+var b_num   = Array.isArray(42);
+var b_undef = Array.isArray(undefined);
+var b_bool  = Array.isArray(true);
+var b_str   = Array.isArray("abc");
+var b_obj   = Array.isArray({});
+var b_null  = Array.isArray(null);
+
 
 assert.sameValue(b_num, false, 'b_num');
 assert.sameValue(b_undef, false, 'b_undef');
 assert.sameValue(b_bool, false, 'b_bool');
 assert.sameValue(b_str, false, 'b_str');
 assert.sameValue(b_obj, false, 'b_obj');
 assert.sameValue(b_null, false, 'b_null');
 
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-5.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-5.js
@@ -1,15 +1,16 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-0-5
 description: >
     Array.isArray return true if its argument is an Array
     (Array.prototype)
 ---*/
 
-  var b = Array.isArray(Array.prototype);
+var b = Array.isArray(Array.prototype);
 
 assert.sameValue(b, true, 'b');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-6.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-6.js
@@ -1,14 +1,15 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-0-6
 description: Array.isArray return true if its argument is an Array (new Array())
 ---*/
 
-  var a = new Array(10);
-  var b = Array.isArray(a);
+var a = new Array(10);
+var b = Array.isArray(a);
 
 assert.sameValue(b, true, 'b');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-7.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-0-7.js
@@ -1,15 +1,16 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-0-7
 description: Array.isArray returns false if its argument is not an Array
 ---*/
 
-  var o = new Object();
-  o[12] = 13;
-  var b = Array.isArray(o);
+var o = new Object();
+o[12] = 13;
+var b = Array.isArray(o);
 
 assert.sameValue(b, false, 'b');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-1.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-1.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-1
 description: Array.isArray applied to boolean primitive
 ---*/
 
 assert.sameValue(Array.isArray(true), false, 'Array.isArray(true)');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-10.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-10.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-10
 description: Array.isArray applied to RegExp object
 ---*/
 
 assert.sameValue(Array.isArray(new RegExp()), false, 'Array.isArray(new RegExp())');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-11.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-11.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-11
 description: Array.isArray applied to the JSON object
 ---*/
 
 assert.sameValue(Array.isArray(JSON), false, 'Array.isArray(JSON)');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-12.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-12.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-12
 description: Array.isArray applied to Error object
 ---*/
 
 assert.sameValue(Array.isArray(new SyntaxError()), false, 'Array.isArray(new SyntaxError())');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-13.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-13.js
@@ -1,17 +1,18 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-13
 description: Array.isArray applied to Arguments object
 ---*/
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }(1, 2, 3));
+(function fun() {
+    arg = arguments;
+}(1, 2, 3));
 
 assert.sameValue(Array.isArray(arg), false, 'Array.isArray(arg)');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-15.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-15.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-15
 description: Array.isArray applied to the global object
 ---*/
 
 assert.sameValue(Array.isArray(this), false, 'Array.isArray(this)');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-2.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-2.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-2
 description: Array.isArray applied to Boolean Object
 ---*/
 
 assert.sameValue(Array.isArray(new Boolean(false)), false, 'Array.isArray(new Boolean(false))');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-3.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-3.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-3
 description: Array.isArray applied to number primitive
 ---*/
 
 assert.sameValue(Array.isArray(5), false, 'Array.isArray(5)');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-4.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-4.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-4
 description: Array.isArray applied to Number object
 ---*/
 
 assert.sameValue(Array.isArray(new Number(-3)), false, 'Array.isArray(new Number(-3))');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-5.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-5.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-5
 description: Array.isArray applied to string primitive
 ---*/
 
 assert.sameValue(Array.isArray("abc"), false, 'Array.isArray("abc")');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-6.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-6.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-6
 description: Array.isArray applied to String object
 ---*/
 
 assert.sameValue(Array.isArray(new String("hello\nworld\\!")), false, 'Array.isArray(new String("hello\nworld\\!"))');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-7.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-7.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-7
 description: Array.isArray applied to Function object
 ---*/
 
 assert.sameValue(Array.isArray(function () { }), false, 'Array.isArray(function () { })');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-8.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-8.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-8
 description: Array.isArray applied to the Math object
 ---*/
 
 assert.sameValue(Array.isArray(Math), false, 'Array.isArray(Math)');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-9.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-1-9.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-1-9
 description: Array.isArray applied to Date object
 ---*/
 
 assert.sameValue(Array.isArray(new Date()), false, 'Array.isArray(new Date())');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-2-1.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-2-1.js
@@ -1,17 +1,18 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-2-1
 description: Array.isArray applied to an object with an array as the prototype
 ---*/
 
-        var proto = [];
-        var Con = function () { };
-        Con.prototype = proto;
+var proto = [];
+var Con = function () { };
+Con.prototype = proto;
 
-        var child = new Con();
+var child = new Con();
 
 assert.sameValue(Array.isArray(child), false, 'Array.isArray(child)');
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-2-2.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-2-2.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-2-2
 description: >
     Array.isArray applied to an object with Array.prototype as the
     prototype
 ---*/
 
         var proto = Array.prototype;
         var Con = function () { };
--- a/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-2-3.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/15.4.3.2-2-3.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es5id: 15.4.3.2-2-3
 description: >
     Array.isArray applied to an Array-like object with length and some
     indexed properties
 ---*/
 
 assert.sameValue(Array.isArray({ 0: 12, 1: 9, length: 2 }), false, 'Array.isArray({ 0: 12, 1: 9, length: 2 })');
 
--- a/js/src/tests/test262/built-ins/Array/isArray/name.js
+++ b/js/src/tests/test262/built-ins/Array/isArray/name.js
@@ -1,12 +1,13 @@
 // Copyright (C) 2015 André Bargull. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.isarray
 es6id: 22.1.2.2
 description: >
   Array.isArray.name is "isArray".
 info: >
   Array.isArray ( arg )
 
   17 ECMAScript Standard Built-in Objects:
     Every built-in Function object, including constructors, that is not
--- a/js/src/tests/test262/built-ins/Array/length/15.4.5.1-3.d-1.js
+++ b/js/src/tests/test262/built-ins/Array/length/15.4.5.1-3.d-1.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-properties-of-array-instances-length
 es5id: 15.4.5.1-3.d-1
 description: >
     Throw RangeError if attempt to set array length property to
     4294967296 (2**32)
 ---*/
 
 
 assert.throws(RangeError, function() {
--- a/js/src/tests/test262/built-ins/Array/length/15.4.5.1-3.d-2.js
+++ b/js/src/tests/test262/built-ins/Array/length/15.4.5.1-3.d-2.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-properties-of-array-instances-length
 es5id: 15.4.5.1-3.d-2
 description: >
     Throw RangeError if attempt to set array length property to
     4294967297 (1+2**32)
 ---*/
 
 
 assert.throws(RangeError, function() {
--- a/js/src/tests/test262/built-ins/Array/length/15.4.5.1-3.d-3.js
+++ b/js/src/tests/test262/built-ins/Array/length/15.4.5.1-3.d-3.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-properties-of-array-instances-length
 es5id: 15.4.5.1-3.d-3
 description: Set array length property to max value 4294967295 (2**32-1,)
 ---*/
 
   var a =[];
   a.length = 4294967295 ;
 
 assert.sameValue(a.length, 4294967295, 'a.length');
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A1.1_T1.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A1.1_T1.js
@@ -1,22 +1,23 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     The [[Prototype]] property of the newly constructed object
     is set to the original Array prototype object, the one that
     is the initial value of Array.prototype
 es5id: 15.4.2.2_A1.1_T1
 description: >
     Create new property of Array.prototype. When new Array object has
     this property
 ---*/
 
 //CHECK#1
 Array.prototype.myproperty = 1;
-var x = new Array(0); 
+var x = new Array(0);
 if (x.myproperty !== 1) {
   $ERROR('#1: Array.prototype.myproperty = 1; var x = new Array(0); x.myproperty === 1. Actual: ' + (x.myproperty));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A1.1_T2.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A1.1_T2.js
@@ -1,20 +1,21 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     The [[Prototype]] property of the newly constructed object
     is set to the original Array prototype object, the one that
     is the initial value of Array.prototype
 es5id: 15.4.2.2_A1.1_T2
 description: Array.prototype.toString = Object.prototype.toString
 ---*/
 
 //CHECK#1
 Array.prototype.toString = Object.prototype.toString;
-var x = new Array(0); 
+var x = new Array(0);
 if (x.toString() !== "[object " + "Array" + "]") {
   $ERROR('#1: Array.prototype.toString = Object.prototype.toString; var x = new Array(0); x.toString() === "[object " + "Array" + "]". Actual: ' + (x.toString()));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A1.1_T3.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A1.1_T3.js
@@ -1,12 +1,13 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     The [[Prototype]] property of the newly constructed object
     is set to the original Array prototype object, the one that
     is the initial value of Array.prototype
 es5id: 15.4.2.2_A1.1_T3
 description: Checking use isPrototypeOf
 ---*/
 
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A1.2_T1.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A1.2_T1.js
@@ -1,17 +1,18 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: The [[Class]] property of the newly constructed object is set to "Array"
 es5id: 15.4.2.2_A1.2_T1
 description: Checking use Object.prototype.toString
 ---*/
 
 //CHECK#1
-var x = new Array(0); 
+var x = new Array(0);
 x.getClass = Object.prototype.toString;
 if (x.getClass() !== "[object " + "Array" + "]") {
   $ERROR('#1: var x = new Array(0); x.getClass = Object.prototype.toString; x is Array object. Actual: ' + (x.getClass()));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.1_T1.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.1_T1.js
@@ -1,30 +1,31 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     If the argument len is a Number and ToUint32(len) is equal to len,
     then the length property of the newly constructed object is set to ToUint32(len)
 es5id: 15.4.2.2_A2.1_T1
 description: Array constructor is given one argument
 ---*/
 
 //CHECK#1
-var x = new Array(0); 
+var x = new Array(0);
 if (x.length !== 0) {
   $ERROR('#1: var x = new Array(0); x.length === 0. Actual: ' + (x.length));
 }
 
 //CHECK#2
-var x = new Array(1); 
+var x = new Array(1);
 if (x.length !== 1) {
   $ERROR('#2: var x = new Array(1); x.length === 1. Actual: ' + (x.length));
-}   
+}
 
 //CHECK#3
-var x = new Array(4294967295); 
+var x = new Array(4294967295);
 if (x.length !== 4294967295) {
   $ERROR('#3: var x = new Array(4294967295); x.length === 4294967295. Actual: ' + (x.length));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.2_T1.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.2_T1.js
@@ -1,42 +1,43 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     If the argument len is a Number and ToUint32(len) is not equal to len,
     a RangeError exception is thrown
 es5id: 15.4.2.2_A2.2_T1
 description: Use try statement. len = -1, 4294967296, 4294967297
 ---*/
 
 //CHECK#1
-try {  
-  new Array(-1);   
+try {
+  new Array(-1);
   $ERROR('#1.1: new Array(-1) throw RangeError. Actual: ' + (new Array(-1)));
 } catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#1.2: new Array(-1) throw RangeError. Actual: ' + (e));
   }
 }
 
 //CHECK#2
-try {  
-  new Array(4294967296);   
+try {
+  new Array(4294967296);
   $ERROR('#2.1: new Array(4294967296) throw RangeError. Actual: ' + (new Array(4294967296)));
 } catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#2.2: new Array(4294967296) throw RangeError. Actual: ' + (e));
   }
 }
 
 //CHECK#3
-try {  
-  new Array(4294967297);   
+try {
+  new Array(4294967297);
   $ERROR('#3.1: new Array(4294967297) throw RangeError. Actual: ' + (new Array(4294967297)));
 } catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#3.2: new Array(4294967297) throw RangeError. Actual: ' + (e));
   }
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.2_T2.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.2_T2.js
@@ -1,42 +1,43 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     If the argument len is a Number and ToUint32(len) is not equal to len,
     a RangeError exception is thrown
 es5id: 15.4.2.2_A2.2_T2
 description: Use try statement. len = NaN, +/-Infinity
 ---*/
 
 //CHECK#1
-try {  
-  new Array(NaN);   
+try {
+  new Array(NaN);
   $ERROR('#1.1: new Array(NaN) throw RangeError. Actual: ' + (new Array(NaN)));
 } catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#1.2: new Array(NaN) throw RangeError. Actual: ' + (e));
   }
 }
 
 //CHECK#2
-try {  
-  new Array(Number.POSITIVE_INFINITY);   
+try {
+  new Array(Number.POSITIVE_INFINITY);
   $ERROR('#2.1: new Array(Number.POSITIVE_INFINITY) throw RangeError. Actual: ' + (new Array(Number.POSITIVE_INFINITY)));
 } catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#2.2: new Array(Number.POSITIVE_INFINITY) throw RangeError. Actual: ' + (e));
   }
 }
 
 //CHECK#3
-try {  
-  new Array(Number.NEGATIVE_INFINITY);   
+try {
+  new Array(Number.NEGATIVE_INFINITY);
   $ERROR('#3.1: new Array(Number.NEGATIVE_INFINITY) throw RangeError. Actual: ' + (new Array(Number.NEGATIVE_INFINITY)));
 } catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#3.2: new Array(Number.NEGATIVE_INFINITY) throw RangeError. Actual: ' + (e));
   }
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.2_T3.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.2_T3.js
@@ -1,42 +1,43 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     If the argument len is a Number and ToUint32(len) is not equal to len,
     a RangeError exception is thrown
 es5id: 15.4.2.2_A2.2_T3
 description: Use try statement. len = 1.5, Number.MAX_VALUE, Number.MIN_VALUE
 ---*/
 
 //CHECK#1
-try {  
-  new Array(1.5);   
+try {
+  new Array(1.5);
   $ERROR('#1.1: new Array(1.5) throw RangeError. Actual: ' + (new Array(1.5)));
 } catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#1.2: new Array(1.5) throw RangeError. Actual: ' + (e));
   }
 }
 
 //CHECK#2
-try {  
-  new Array(Number.MAX_VALUE);   
+try {
+  new Array(Number.MAX_VALUE);
   $ERROR('#2.1: new Array(Number.MAX_VALUE) throw RangeError. Actual: ' + (new Array(Number.MAX_VALUE)));
 } catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#2.2: new Array(Number.MAX_VALUE) throw RangeError. Actual: ' + (e));
   }
 }
 
 //CHECK#3
-try {  
-  new Array(Number.MIN_VALUE);   
+try {
+  new Array(Number.MIN_VALUE);
   $ERROR('#3.1: new Array(Number.MIN_VALUE) throw RangeError. Actual: ' + (new Array(Number.MIN_VALUE)));
 } catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#3.2: new Array(Number.MIN_VALUE) throw RangeError. Actual: ' + (e));
   }
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.3_T1.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.3_T1.js
@@ -1,35 +1,36 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     If the argument len is not a Number, then the length property of
     the newly constructed object is set to 1 and the 0 property of
     the newly constructed object is set to len
 es5id: 15.4.2.2_A2.3_T1
 description: Checking for null and undefined
 ---*/
 
 var x = new Array(null);
 
-//CHECK#1 
+//CHECK#1
 if (x.length !== 1) {
   $ERROR('#1: var x = new Array(null); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#2
 if (x[0] !== null) {
   $ERROR('#2: var x = new Array(null); x[0] === null. Actual: ' + (x[0]));
 }
 
 var x = new Array(undefined);
 
-//CHECK#3 
+//CHECK#3
 if (x.length !== 1) {
   $ERROR('#3: var x = new Array(undefined); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#4
 if (x[0] !== undefined) {
   $ERROR('#4: var x = new Array(undefined); x[0] === undefined. Actual: ' + (x[0]));
 }
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.3_T2.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.3_T2.js
@@ -1,36 +1,37 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     If the argument len is not a Number, then the length property of
     the newly constructed object is set to 1 and the 0 property of
     the newly constructed object is set to len
 es5id: 15.4.2.2_A2.3_T2
 description: Checking for boolean primitive and Boolean object
 ---*/
 
 var x = new Array(true);
 
-//CHECK#1 
+//CHECK#1
 if (x.length !== 1) {
   $ERROR('#1: var x = new Array(true); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#2
 if (x[0] !== true) {
   $ERROR('#2: var x = new Array(true); x[0] === true. Actual: ' + (x[0]));
 }
 
 var obj = new Boolean(false);
 var x = new Array(obj);
 
-//CHECK#3 
+//CHECK#3
 if (x.length !== 1) {
   $ERROR('#3: var obj = new Boolean(false); var x = new Array(obj); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#4
 if (x[0] !== obj) {
   $ERROR('#4: var obj = new Boolean(false); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0]));
 }
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.3_T3.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.3_T3.js
@@ -1,36 +1,37 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     If the argument len is not a Number, then the length property of
     the newly constructed object is set to 1 and the 0 property of
     the newly constructed object is set to len
 es5id: 15.4.2.2_A2.3_T3
 description: Checking for boolean primitive and Boolean object
 ---*/
 
 var x = new Array("1");
 
-//CHECK#1 
+//CHECK#1
 if (x.length !== 1) {
   $ERROR('#1: var x = new Array("1"); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#2
 if (x[0] !== "1") {
   $ERROR('#2: var x = new Array("1"); x[0] === "1". Actual: ' + (x[0]));
 }
 
 var obj = new String("0");
 var x = new Array(obj);
 
-//CHECK#3 
+//CHECK#3
 if (x.length !== 1) {
   $ERROR('#3: var obj = new String("0"); var x = new Array(obj); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#4
 if (x[0] !== obj) {
   $ERROR('#4: var obj = new String("0"); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0]));
 }
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.3_T4.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.3_T4.js
@@ -1,50 +1,51 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     If the argument len is not a Number, then the length property of
     the newly constructed object is set to 1 and the 0 property of
     the newly constructed object is set to len
 es5id: 15.4.2.2_A2.3_T4
 description: Checking for Number object
 ---*/
 
 var obj = new Number(0);
 var x = new Array(obj);
 
-//CHECK#1 
+//CHECK#1
 if (x.length !== 1) {
   $ERROR('#1: var obj = new Number(0); var x = new Array(obj); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#2
 if (x[0] !== obj) {
   $ERROR('#2: var obj = new Number(0); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0]));
 }
 
 var obj = new Number(1);
 var x = new Array(obj);
 
-//CHECK#3 
+//CHECK#3
 if (x.length !== 1) {
   $ERROR('#3: var obj = new Number(1); var x = new Array(obj); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#4
 if (x[0] !== obj) {
   $ERROR('#4: var obj = new Number(1); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0]));
 }
 
 var obj = new Number(4294967295);
 var x = new Array(obj);
 
-//CHECK#5 
+//CHECK#5
 if (x.length !== 1) {
   $ERROR('#5: var obj = new Number(4294967295); var x = new Array(obj); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#6
 if (x[0] !== obj) {
   $ERROR('#6: var obj = new Number(4294967295); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0]));
 }
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.3_T5.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.2.2_A2.3_T5.js
@@ -1,50 +1,51 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-len
 info: >
     If the argument len is not a Number, then the length property of
     the newly constructed object is set to 1 and the 0 property of
     the newly constructed object is set to len
 es5id: 15.4.2.2_A2.3_T5
 description: Checking for Number object
 ---*/
 
 var obj = new Number(-1);
 var x = new Array(obj);
 
-//CHECK#1 
+//CHECK#1
 if (x.length !== 1) {
   $ERROR('#1: var obj = new Number(-1); var x = new Array(obj); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#2
 if (x[0] !== obj) {
   $ERROR('#2: var obj = new Number(-1); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0]));
 }
 
 var obj = new Number(4294967296);
 var x = new Array(obj);
 
-//CHECK#3 
+//CHECK#3
 if (x.length !== 1) {
   $ERROR('#3: var obj = new Number(4294967296); var x = new Array(obj); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#4
 if (x[0] !== obj) {
   $ERROR('#4: var obj = new Number(4294967296); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0]));
 }
 
 var obj = new Number(4294967297);
 var x = new Array(obj);
 
-//CHECK#5 
+//CHECK#5
 if (x.length !== 1) {
   $ERROR('#5: var obj = new Number(4294967297); var x = new Array(obj); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#6
 if (x[0] !== obj) {
   $ERROR('#6: var obj = new Number(4294967297); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0]));
 }
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.4_A1.3_T1.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.4_A1.3_T1.js
@@ -1,12 +1,13 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-properties-of-the-array-prototype-object
 info: Array prototype object has a length property
 es5id: 15.4.4_A1.3_T1
 description: Array.prototype.length === 0
 ---*/
 
 //CHECK#1
 if (Array.prototype.length !== 0) {
   $ERROR('#1.1: Array.prototype.length === 0. Actual: ' + (Array.prototype.length));
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.1_T1.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.1_T1.js
@@ -1,43 +1,44 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-exotic-objects-defineownproperty-p-desc
 info: If ToUint32(length) !== ToNumber(length), throw RangeError
 es5id: 15.4.5.1_A1.1_T1
 description: length in [4294967296, -1, 1.5]
 ---*/
 
 //CHECK#1
 try {
   var x = [];
   x.length = 4294967296;
   $ERROR('#1.1: x = []; x.length = 4294967296 throw RangeError. Actual: x.length === ' + (x.length));
-} catch(e) {    
+} catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#1.2: x = []; x.length = 4294967296 throw RangeError. Actual: ' + (e));
-  }    
+  }
 }
 
 //CHECK#2
 try {
   x = [];
   x.length = -1;
   $ERROR('#2.1: x = []; x.length = -1 throw RangeError. Actual: x.length === ' + (x.length));
-} catch(e) {    
+} catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#2.2: x = []; x.length = -1 throw RangeError. Actual: ' + (e));
-  }    
+  }
 }
 
 //CHECK#3
 try {
   x = [];
   x.length = 1.5;
   $ERROR('#3.1: x = []; x.length = 1.5 throw RangeError. Actual: x.length === ' + (x.length));
-} catch(e) {    
+} catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#3.2: x = []; x.length = 1.5 throw RangeError. Actual: ' + (e));
-  }    
+  }
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.1_T2.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.1_T2.js
@@ -1,54 +1,55 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-exotic-objects-defineownproperty-p-desc
 info: If ToUint32(length) !== ToNumber(length), throw RangeError
 es5id: 15.4.5.1_A1.1_T2
 description: length in [NaN, Infinity, -Infinity, undefined]
 ---*/
 
 //CHECK#1
 try {
   var x = [];
   x.length = NaN;
   $ERROR('#1.1: x = []; x.length = NaN throw RangeError. Actual: x.length === ' + (x.length));
-} catch(e) {    
+} catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#1.2: x = []; x.length = NaN throw RangeError. Actual: ' + (e));
-  }    
+  }
 }
 
 //CHECK#2
 try {
   x = [];
   x.length = Number.POSITIVE_INFINITY;
   $ERROR('#2.1: x = []; x.length = Number.POSITIVE_INFINITY throw RangeError. Actual: x.length === ' + (x.length));
-} catch(e) {    
+} catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#2.2: x = []; x.length = Number.POSITIVE_INFINITY throw RangeError. Actual: ' + (e));
-  }    
+  }
 }
 
 //CHECK#3
 try {
   x = [];
   x.length = Number.NEGATIVE_INFINITY;
   $ERROR('#3.1: x = []; x.length = Number.NEGATIVE_INFINITY throw RangeError. Actual: x.length === ' + (x.length));
-} catch(e) {    
+} catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#3.2: x = []; x.length = Number.NEGATIVE_INFINITY throw RangeError. Actual: ' + (e));
-  }    
+  }
 }
 
 //CHECK#4
 try {
   x = [];
   x.length = undefined;
   $ERROR('#4.1: x = []; x.length = undefined throw RangeError. Actual: x.length === ' + (x.length));
-} catch(e) {    
+} catch(e) {
   if ((e instanceof RangeError) !== true) {
     $ERROR('#4.2: x = []; x.length = undefined throw RangeError. Actual: ' + (e));
-  }    
+  }
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.2_T1.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.2_T1.js
@@ -1,32 +1,33 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-exotic-objects-defineownproperty-p-desc
 info: >
     For every integer k that is less than the value of
     the length property of A but not less than ToUint32(length),
     if A itself has a property (not an inherited property) named ToString(k),
     then delete that property
 es5id: 15.4.5.1_A1.2_T1
 description: Change length of array
 ---*/
 
 //CHECK#1
 var x = [0,,2,,4];
 x.length = 4;
-if (x[4] !== undefined) {  
-  $ERROR('#1: x = [0,,2,,4]; x.length = 4; x[4] === undefined. Actual: ' + (x[4]));    
+if (x[4] !== undefined) {
+  $ERROR('#1: x = [0,,2,,4]; x.length = 4; x[4] === undefined. Actual: ' + (x[4]));
 }
 
 //CHECK#2
 x.length = 3;
-if (x[3] !== undefined) {  
-  $ERROR('#2: x = [0,,2,,4]; x.length = 4; x.length = 3; x[3] === undefined. Actual: ' + (x[3]));    
+if (x[3] !== undefined) {
+  $ERROR('#2: x = [0,,2,,4]; x.length = 4; x.length = 3; x[3] === undefined. Actual: ' + (x[3]));
 }
 
 //CHECK#3
-if (x[2] !== 2) {  
-  $ERROR('#3: x = [0,,2,,4]; x.length = 4; x.length = 3; x[2] === 2. Actual: ' + (x[2]));    
+if (x[2] !== 2) {
+  $ERROR('#3: x = [0,,2,,4]; x.length = 4; x.length = 3; x[2] === 2. Actual: ' + (x[2]));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.2_T3.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.2_T3.js
@@ -1,28 +1,29 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-exotic-objects-defineownproperty-p-desc
 info: >
     For every integer k that is less than the value of
     the length property of A but not less than ToUint32(length),
     if A itself has a property (not an inherited property) named ToString(k),
     then delete that property
 es5id: 15.4.5.1_A1.2_T3
 description: Checking an inherited property
 ---*/
 
 //CHECK#1
 Array.prototype[2] = 2;
 var x = [0,1];
 x.length = 3;
-if (x.hasOwnProperty('2') !== false) {  
-  $ERROR('#1: Array.prototype[2] = 2; x = [0,1]; x.length = 3; x.hasOwnProperty(\'2\') === false. Actual: ' + (x.hasOwnProperty('2')));    
+if (x.hasOwnProperty('2') !== false) {
+  $ERROR('#1: Array.prototype[2] = 2; x = [0,1]; x.length = 3; x.hasOwnProperty(\'2\') === false. Actual: ' + (x.hasOwnProperty('2')));
 }
 
 //CHECK#2
 x.length = 2;
-if (x[2] !== 2) {  
-  $ERROR('#2: Array.prototype[2] = 2; x = [0,1]; x.length = 3; x.length = 2; x[2] === 2. Actual: ' + (x[2]));    
+if (x[2] !== 2) {
+  $ERROR('#2: Array.prototype[2] = 2; x = [0,1]; x.length = 3; x.length = 2; x[2] === 2. Actual: ' + (x[2]));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.3_T1.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.3_T1.js
@@ -1,52 +1,53 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-exotic-objects-defineownproperty-p-desc
 info: Set the value of property length of A to Uint32(length)
 es5id: 15.4.5.1_A1.3_T1
 description: length is object or primitve
 ---*/
 
 //CHECK#1
 var x = [];
 x.length = true;
-if (x.length !== 1) {  
-  $ERROR('#1: x = []; x.length = true; x.length === 1. Actual: ' + (x.length));    
+if (x.length !== 1) {
+  $ERROR('#1: x = []; x.length = true; x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#2
 x = [0];
 x.length = null;
-if (x.length !== 0) {  
-  $ERROR('#2: x = [0]; x.length = null; x.length === 0. Actual: ' + (x.length));    
+if (x.length !== 0) {
+  $ERROR('#2: x = [0]; x.length = null; x.length === 0. Actual: ' + (x.length));
 }
 
 //CHECK#3
 x = [0];
 x.length = new Boolean(false);
-if (x.length !== 0) {  
-  $ERROR('#3: x = [0]; x.length = new Boolean(false); x.length === 0. Actual: ' + (x.length));    
+if (x.length !== 0) {
+  $ERROR('#3: x = [0]; x.length = new Boolean(false); x.length === 0. Actual: ' + (x.length));
 }
 
 //CHECK#4
 x = [];
 x.length = new Number(1);
-if (x.length !== 1) {  
-  $ERROR('#4: x = []; x.length = new Number(1); x.length === 1. Actual: ' + (x.length));    
+if (x.length !== 1) {
+  $ERROR('#4: x = []; x.length = new Number(1); x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#5
 x = [];
 x.length = "1";
-if (x.length !== 1) {  
-  $ERROR('#5: x = []; x.length = "1"; x.length === 1. Actual: ' + (x.length));    
+if (x.length !== 1) {
+  $ERROR('#5: x = []; x.length = "1"; x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#6
 x = [];
 x.length = new String("1");
-if (x.length !== 1) {  
-  $ERROR('#6: x = []; x.length = new String("1"); x.length === 1. Actual: ' + (x.length));    
+if (x.length !== 1) {
+  $ERROR('#6: x = []; x.length = new String("1"); x.length === 1. Actual: ' + (x.length));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.3_T2.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.5.1_A1.3_T2.js
@@ -1,12 +1,13 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array-exotic-objects-defineownproperty-p-desc
 info: Set the value of property length of A to Uint32(length)
 es5id: 15.4.5.1_A1.3_T2
 description: Uint32 use ToNumber and ToPrimitve
 ---*/
 
 //CHECK#1
 var x = [];
 x.length = {valueOf: function() {return 2}};
@@ -14,29 +15,29 @@ if (x.length !== 2) {
   $ERROR('#1: x = []; x.length = {valueOf: function() {return 2}};  x.length === 2. Actual: ' + (x.length));
 }
 
 //CHECK#2
 x = [];
 x.length = {valueOf: function() {return 2}, toString: function() {return 1}};
 if (x.length !== 2) {
   $ERROR('#0: x = []; x.length = {valueOf: function() {return 2}, toString: function() {return 1}};  x.length === 2. Actual: ' + (x.length));
-} 
+}
 
 //CHECK#3
 x = [];
 x.length = {valueOf: function() {return 2}, toString: function() {return {}}};
 if (x.length !== 2) {
   $ERROR('#3: x = []; x.length = {valueOf: function() {return 2}, toString: function() {return {}}};  x.length === 2. Actual: ' + (x.length));
 }
 
 //CHECK#4
-try {  
+try {
   x = [];
-  x.length = {valueOf: function() {return 2}, toString: function() {throw "error"}};  
+  x.length = {valueOf: function() {return 2}, toString: function() {throw "error"}};
   if (x.length !== 2) {
     $ERROR('#4.1: x = []; x.length = {valueOf: function() {return 2}, toString: function() {throw "error"}}; x.length === ",". Actual: ' + (x.length));
   }
 }
 catch (e) {
   if (e === "error") {
     $ERROR('#4.2: x = []; x.length = {valueOf: function() {return 2}, toString: function() {throw "error"}}; x.length not throw "error"');
   } else {
@@ -56,32 +57,32 @@ x = [];
 x.length = {valueOf: function() {return {}}, toString: function() {return 1}}
 if (x.length !== 1) {
   $ERROR('#6: x = []; x.length = {valueOf: function() {return {}}, toString: function() {return 1}};  x.length === 1. Actual: ' + (x.length));
 }
 
 //CHECK#7
 try {
   x = [];
-  x.length = {valueOf: function() {throw "error"}, toString: function() {return 1}};  
+  x.length = {valueOf: function() {throw "error"}, toString: function() {return 1}};
   x.length;
   $ERROR('#7.1: x = []; x.length = {valueOf: function() {throw "error"}, toString: function() {return 1}}; x.length throw "error". Actual: ' + (x.length));
-}  
+}
 catch (e) {
   if (e !== "error") {
     $ERROR('#7.2: x = []; x.length = {valueOf: function() {throw "error"}, toString: function() {return 1}}; x.length throw "error". Actual: ' + (e));
-  } 
+  }
 }
 
 //CHECK#8
 try {
   x = [];
   x.length = {valueOf: function() {return {}}, toString: function() {return {}}};
   x.length;
   $ERROR('#8.1: x = []; x.length = {valueOf: function() {return {}}, toString: function() {return {}}}  x.length throw TypeError. Actual: ' + (x.length));
-}  
+}
 catch (e) {
   if ((e instanceof TypeError) !== true) {
     $ERROR('#8.2: x = []; x.length = {valueOf: function() {return {}}, toString: function() {return {}}}  x.length throw TypeError. Actual: ' + (e));
-  } 
+  }
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/S15.4.5.2_A3_T4.js
+++ b/js/src/tests/test262/built-ins/Array/length/S15.4.5.2_A3_T4.js
@@ -1,39 +1,40 @@
 // Copyright 2009 the Sputnik authors.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-properties-of-array-instances-length
 info: >
     If the length property is changed, every property whose name
     is an array index whose value is not smaller than the new length is automatically deleted
 es5id: 15.4.5.2_A3_T4
 description: >
     If new length greater than the name of every property whose name
     is an array index
 ---*/
 
 //CHECK#1
-var x = [0,1,2]; 
-x[4294967294] = 4294967294; 
+var x = [0,1,2];
+x[4294967294] = 4294967294;
 x.length = 2;
 
 //CHECK#1
-if (x[0] !== 0) {  
-  $ERROR('#1: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[0] === 0. Actual: ' + (x[0]));    
+if (x[0] !== 0) {
+  $ERROR('#1: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[0] === 0. Actual: ' + (x[0]));
 }
 
 //CHECK#2
-if (x[1] !== 1) {  
-  $ERROR('#2: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[1] === 1. Actual: ' + (x[1]));    
+if (x[1] !== 1) {
+  $ERROR('#2: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[1] === 1. Actual: ' + (x[1]));
 }
 
 //CHECK#3
-if (x[2] !== undefined) {  
-  $ERROR('#3: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[2] === undefined. Actual: ' + (x[2]));    
+if (x[2] !== undefined) {
+  $ERROR('#3: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[2] === undefined. Actual: ' + (x[2]));
 }
 
 //CHECK#4
-if (x[4294967294] !== undefined) {  
-  $ERROR('#4: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[4294967294] === undefined. Actual: ' + (x[4294967294]));    
+if (x[4294967294] !== undefined) {
+  $ERROR('#4: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[4294967294] === undefined. Actual: ' + (x[4294967294]));
 }
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/length/define-own-prop-length-overflow-realm.js
+++ b/js/src/tests/test262/built-ins/Array/length/define-own-prop-length-overflow-realm.js
@@ -5,16 +5,17 @@ esid: sec-array-exotic-objects-defineown
 es6id: 9.4.2.1
 description: >
   Error when setting a length larger than 2**32 (honoring the Realm of the
   current execution context)
 info: |
   [...]
   2. If P is "length", then
      a. Return ? ArraySetLength(A, Desc).
+features: [cross-realm]
 ---*/
 
 var OArray = $262.createRealm().global.Array;
 var array = new OArray();
 
 assert.throws(RangeError, function() {
   array.length = 4294967296;
 });
--- a/js/src/tests/test262/built-ins/Array/of/construct-this-with-the-number-of-arguments.js
+++ b/js/src/tests/test262/built-ins/Array/of/construct-this-with-the-number-of-arguments.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: Passes the number of arguments to the constructor it calls.
 info: >
   Array.of ( ...items )
 
   1. Let len be the actual number of arguments passed to this function.
   2. Let items be the List of arguments passed to this function.
   3. Let C be the this value.
--- a/js/src/tests/test262/built-ins/Array/of/creates-a-new-array-from-arguments.js
+++ b/js/src/tests/test262/built-ins/Array/of/creates-a-new-array-from-arguments.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2015 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Array.of method creates a new Array with a variable number of arguments.
 info: >
   22.1.2.3 Array.of ( ...items )
 
   ...
   7. Let k be 0.
--- a/js/src/tests/test262/built-ins/Array/of/does-not-use-prototype-properties.js
+++ b/js/src/tests/test262/built-ins/Array/of/does-not-use-prototype-properties.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2015 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: Array.of does not use prototype properties for arguments.
 info: >
   It defines elements rather than assigning to them.
 ---*/
 
 Object.defineProperty(Array.prototype, "0", {
   set: function(v) {
--- a/js/src/tests/test262/built-ins/Array/of/length.js
+++ b/js/src/tests/test262/built-ins/Array/of/length.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Array.of.length value and property descriptor
 info: >
   Array.of ( ...items )
 
   The length property of the of function is 0.
 includes: [propertyHelper.js]
--- a/js/src/tests/test262/built-ins/Array/of/name.js
+++ b/js/src/tests/test262/built-ins/Array/of/name.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Array.of.name value and property descriptor
 info: >
   Array.of ( ...items )
 
   17 ECMAScript Standard Built-in Objects
 
--- a/js/src/tests/test262/built-ins/Array/of/not-a-constructor.js
+++ b/js/src/tests/test262/built-ins/Array/of/not-a-constructor.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Array.of is not a constructor.
 ---*/
 
 assert.throws(TypeError, function() {
   new Array.of();
 });
--- a/js/src/tests/test262/built-ins/Array/of/of.js
+++ b/js/src/tests/test262/built-ins/Array/of/of.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Array.of property descriptor
 info: >
   Array.of ( ...items )
 
   17 ECMAScript Standard Built-in Objects
 
--- a/js/src/tests/test262/built-ins/Array/of/proto-from-ctor-realm.js
+++ b/js/src/tests/test262/built-ins/Array/of/proto-from-ctor-realm.js
@@ -13,16 +13,17 @@ info: |
     9.1.14 GetPrototypeFromConstructor
 
     [...]
     3. Let proto be ? Get(constructor, "prototype").
     4. If Type(proto) is not Object, then
        a. Let realm be ? GetFunctionRealm(constructor).
        b. Let proto be realm's intrinsic object named intrinsicDefaultProto.
     [...]
+features: [cross-realm]
 ---*/
 
 var other = $262.createRealm().global;
 var C = new other.Function();
 C.prototype = null;
 
 var a = Array.of.call(C, 1, 2, 3);
 
--- a/js/src/tests/test262/built-ins/Array/of/return-a-custom-instance.js
+++ b/js/src/tests/test262/built-ins/Array/of/return-a-custom-instance.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Returns an instance from a custom constructor.
 info: >
   Array.of ( ...items )
 
   ...
   4. If IsConstructor(C) is true, then
--- a/js/src/tests/test262/built-ins/Array/of/return-a-new-array-object.js
+++ b/js/src/tests/test262/built-ins/Array/of/return-a-new-array-object.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Returns a new Array.
 info: >
   Array.of ( ...items )
 
   1. Let len be the actual number of arguments passed to this function.
   2. Let items be the List of arguments passed to this function.
--- a/js/src/tests/test262/built-ins/Array/of/return-abrupt-from-contructor.js
+++ b/js/src/tests/test262/built-ins/Array/of/return-abrupt-from-contructor.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Return abrupt from this' constructor
 info: >
   Array.of ( ...items )
 
   1. Let len be the actual number of arguments passed to this function.
   2. Let items be the List of arguments passed to this function.
--- a/js/src/tests/test262/built-ins/Array/of/return-abrupt-from-data-property-using-proxy.js
+++ b/js/src/tests/test262/built-ins/Array/of/return-abrupt-from-data-property-using-proxy.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Return abrupt from Data Property creation
 info: >
   Array.of ( ...items )
 
   ...
   7. Let k be 0.
--- a/js/src/tests/test262/built-ins/Array/of/return-abrupt-from-data-property.js
+++ b/js/src/tests/test262/built-ins/Array/of/return-abrupt-from-data-property.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Return abrupt from Data Property creation
 info: >
   Array.of ( ...items )
 
   ...
   7. Let k be 0.
--- a/js/src/tests/test262/built-ins/Array/of/return-abrupt-from-setting-length.js
+++ b/js/src/tests/test262/built-ins/Array/of/return-abrupt-from-setting-length.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Return abrupt from setting the length property.
 info: >
   Array.of ( ...items )
 
   ...
   9. Let setStatus be Set(A, "length", len, true).
--- a/js/src/tests/test262/built-ins/Array/of/sets-length.js
+++ b/js/src/tests/test262/built-ins/Array/of/sets-length.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.of
 es6id: 22.1.2.3
 description: >
   Calls the length setter if available
 info: >
   Array.of ( ...items )
 
   ...
   9. Let setStatus be Set(A, "length", len, true).
--- a/js/src/tests/test262/built-ins/Array/proto-from-ctor-realm.js
+++ b/js/src/tests/test262/built-ins/Array/proto-from-ctor-realm.js
@@ -13,17 +13,17 @@ info: |
     9.1.14 GetPrototypeFromConstructor
 
     [...]
     3. Let proto be ? Get(constructor, "prototype").
     4. If Type(proto) is not Object, then
        a. Let realm be ? GetFunctionRealm(constructor).
        b. Let proto be realm's intrinsic object named intrinsicDefaultProto.
     [...]
-features: [Reflect]
+features: [cross-realm, Reflect]
 ---*/
 
 var other = $262.createRealm().global;
 var C = new other.Function();
 C.prototype = null;
 
 var o = Reflect.construct(Array, [], C);
 
--- a/js/src/tests/test262/built-ins/Array/prototype/Symbol.iterator.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/Symbol.iterator.js
@@ -7,16 +7,17 @@ info: >
     The initial value of the @@iterator property is the same function object as
     the initial value of the Array.prototype.values property.
 
     Per ES6 section 17, the method should exist on the Array prototype, and it
     should be writable and configurable, but not enumerable.
 includes: [propertyHelper.js]
 features: [Symbol.iterator]
 es6id: 22.1.3.30
+esid: sec-array.prototype-@@iterator
 ---*/
 
 assert.sameValue(Array.prototype[Symbol.iterator], Array.prototype.values);
 verifyNotEnumerable(Array.prototype, Symbol.iterator);
 verifyWritable(Array.prototype, Symbol.iterator);
 verifyConfigurable(Array.prototype, Symbol.iterator);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/prototype/Symbol.unscopables/prop-desc.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/Symbol.unscopables/prop-desc.js
@@ -1,11 +1,12 @@
 // Copyright (C) 2015 Mike Pennisi. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
+esid: sec-array.prototype-@@unscopables
 es6id: 22.1.3.31
 description: >
     Property descriptor for initial value of `Symbol.unscopables` property
 info: >
     This property has the attributes { [[Writable]]: false, [[Enumerable]]:
     false, [[Configurable]]: true }.
 includes: [propertyHelper.js]
 features: [Symbol.unscopables]
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/15.4.4.4-5-b-iii-3-b-1.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/15.4.4.4-5-b-iii-3-b-1.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.prototype.concat
 es5id: 15.4.4.4-5-b-iii-3-b-1
 description: >
     Array.prototype.concat will concat an Array when index property
     (read-only) exists in Array.prototype (Step 5.b.iii.3.b)
 ---*/
 
             Object.defineProperty(Array.prototype, "0", {
                 value: 100,
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/15.4.4.4-5-c-i-1.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/15.4.4.4-5-c-i-1.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-array.prototype.concat
 es5id: 15.4.4.4-5-c-i-1
 description: >
     Array.prototype.concat will concat an Array when index property
     (read-only) exists in Array.prototype (Step 5.c.i)
 ---*/
 
             Object.defineProperty(Array.prototype, "0", {
                 value: 100,
@@ -14,17 +15,17 @@ description: >
                 configurable: true
             });
 
             var newArr = Array.prototype.concat.call(101);
 
             var hasProperty = newArr.hasOwnProperty("0");
 
 	    var instanceOfVerify = typeof newArr[0]==="object";
-            
+
             var verifyValue = false;
             verifyValue = newArr[0] == 101;
 
             var verifyEnumerable = false;
             for (var p in newArr) {
                 if (p === "0" && newArr.hasOwnProperty("0")) {
                     verifyEnumerable = true;
                 }
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-length-to-string-throws.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-length-to-string-throws.js
@@ -1,15 +1,17 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat array like length to string throws
+features: [Symbol.isConcatSpreadable]
 ---*/
 function MyError() {}
 var obj = {
   "length": { toString: function() {
       throw new MyError();
     }, valueOf: null
   },
   "1": "A",
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-length-value-of-throws.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-length-value-of-throws.js
@@ -1,16 +1,17 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat array like length valueOf throws
+features: [Symbol.isConcatSpreadable]
 ---*/
 function MyError() {}
 var obj = {
   "length": {
     valueOf: function() {
       throw new MyError();
     },
     toString: null
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-negative-length.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-negative-length.js
@@ -1,17 +1,18 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat array like negative length
 includes: [compareArray.js]
+features: [Symbol.isConcatSpreadable]
 ---*/
 var obj = {
   "length": -4294967294,
   "1": "A",
   "3": "B",
   "5": "C"
 };
 obj[Symbol.isConcatSpreadable] = true;
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-primitive-non-number-length.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-primitive-non-number-length.js
@@ -1,17 +1,18 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat array like primitive non number length
 includes: [compareArray.js]
+features: [Symbol.isConcatSpreadable]
 ---*/
 var obj = {
   "1": "A",
   "3": "B",
   "5": "C"
 };
 obj[Symbol.isConcatSpreadable] = true;
 obj.length = {toString: function() { return "SIX"; }, valueOf: null };
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-string-length.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-string-length.js
@@ -1,17 +1,18 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat array like string length
 includes: [compareArray.js]
+features: [Symbol.isConcatSpreadable]
 ---*/
 var obj = {
   "length": "6",
   "1": "A",
   "3": "B",
   "5": "C"
 };
 obj[Symbol.isConcatSpreadable] = true;
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-to-length-throws.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like-to-length-throws.js
@@ -1,16 +1,17 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat array like to length throws
+features: [Symbol.isConcatSpreadable]
 ---*/
 var obj = {
   "length": {valueOf: null, toString: null},
   "1": "A",
   "3": "B",
   "5": "C"
 };
 obj[Symbol.isConcatSpreadable] = true;
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_array-like.js
@@ -1,17 +1,19 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat array like
 includes: [compareArray.js]
+features: [Symbol.isConcatSpreadable]
 ---*/
 var obj = {
   "length": 6,
   "1": "A",
   "3": "B",
   "5": "C"
 };
 obj[Symbol.isConcatSpreadable] = true;
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_holey-sloppy-arguments.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_holey-sloppy-arguments.js
@@ -1,16 +1,18 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat holey sloppy arguments
 includes: [compareArray.js]
+features: [Symbol.isConcatSpreadable]
 ---*/
 var args = (function(a) { return arguments; })(1,2,3);
 delete args[1];
 args[Symbol.isConcatSpreadable] = true;
 assert(compareArray([1, void 0, 3, 1, void 0, 3], [].concat(args, args)));
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_large-typed-array.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_large-typed-array.js
@@ -1,17 +1,19 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat large typed array
 includes: [compareArray.js]
+features: [Symbol.isConcatSpreadable]
 ---*/
 function concatTypedArray(type, elems, modulo) {
   var items = new Array(elems);
   var ta_by_len = new type(elems);
   for (var i = 0; i < elems; ++i) {
     ta_by_len[i] = items[i] = modulo === false ? i : elems % modulo;
   }
   var ta = new type(items);
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_length-throws.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_length-throws.js
@@ -1,16 +1,18 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat length throws
+features: [Symbol.isConcatSpreadable]
 ---*/
 function MyError() {}
 var obj = {};
 obj[Symbol.isConcatSpreadable] = true;
 Object.defineProperty(obj, "length", {
   get: function() { throw new MyError(); }
 });
 
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_no-prototype.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_no-prototype.js
@@ -1,12 +1,13 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat no prototype
 ---*/
 assert.sameValue(Array.prototype.concat.prototype, void 0);
 
 reportCompare(0, 0);
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_non-array.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_non-array.js
@@ -1,14 +1,15 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: array-concat-non-array
 includes: [compareArray.js]
 ---*/
 
 //
 // test262 --command "v8 --harmony-classes  --harmony_object_literals" array-concat-non-array
 //
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_sloppy-arguments-throws.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_sloppy-arguments-throws.js
@@ -1,16 +1,18 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat sloppy arguments throws
+features: [Symbol.isConcatSpreadable]
 ---*/
 function MyError() {}
 var args = (function(a) { return arguments; })(1,2,3);
 Object.defineProperty(args, 0, {
   get: function() { throw new MyError(); }
 });
 args[Symbol.isConcatSpreadable] = true;
 assert.throws(MyError, function() {
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_sloppy-arguments-with-dupes.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_sloppy-arguments-with-dupes.js
@@ -1,18 +1,20 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat sloppy arguments with dupes
 flags: [noStrict]
 includes: [compareArray.js]
+features: [Symbol.isConcatSpreadable]
 ---*/
 var args = (function(a, a, a) { return arguments; })(1,2,3);
 args[Symbol.isConcatSpreadable] = true;
 assert(compareArray([].concat(args, args), [1, 2, 3, 1, 2, 3]));
 
 Object.defineProperty(args, "length", { value: 6 });
 assert(compareArray([].concat(args), [1, 2, 3, void 0, void 0, void 0]));
 
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_sloppy-arguments.js
+++ b/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_sloppy-arguments.js
@@ -1,17 +1,19 @@
 // Copyright (c) 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 
 /*---
+esid: sec-array.prototype.concat
 es6id: 22.1.3.1_3
 description: Array.prototype.concat sloppy arguments
 includes: [compareArray.js]
+features: [Symbol.isConcatSpreadable]
 ---*/
 var args = (function(a, b, c) { return arguments; })(1,2,3);
 args[Symbol.isConcatSpreadable] = true;
 assert(compareArray([].concat(args, args), [1, 2, 3, 1, 2, 3]));
 
 Object.defineProperty(args, "length", { value: 6 });
 assert(compareArray([].concat(args), [1, 2, 3, void 0, void 0, void 0]));
 
--- a/js/src/tests/test262/built-ins/Array/prototype/concat/Array.prototype.concat_small-typed-array.js
+++ b/js/src/