Update test262
https://bugs.webkit.org/show_bug.cgi?id=199801

Rubber-stamped by Yusuke Suzuki.

* test262/expectations.yaml:
* test262/latest-changes-summary.txt:
* test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/Symbol.toStringTag.js: Added.
(fg.new.FinalizationGroup):
(callback):
* test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-job-not-active-throws.js: Added.
(fg.new.FinalizationGroup):
(callback):
* test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-length.js: Added.
(fg.new.FinalizationGroup):
(callback):
* test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-missing-internal-throws.js: Added.
(fg.new.FinalizationGroup):
(callback):
* test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-name.js: Added.
(fg.new.FinalizationGroup):
(callback):
* test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-not-object-throws.js: Added.
(fg.new.FinalizationGroup):
(callback):
* test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-prop-desc.js: Added.
(fg.new.FinalizationGroup):
(callback):
* test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/proto.js: Added.
(callback):
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/constructor.js: Added.
* test262/test/built-ins/FinalizationGroup/gc-has-one-chance-to-call-cleanupCallback.js: Added.
(cb):
(fg.new.FinalizationGroup):
(emptyCells):
(async.fn):
(fn.then.async):
* test262/test/built-ins/FinalizationGroup/instance-extensible.js: Added.
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/length.js: Added.
* test262/test/built-ins/FinalizationGroup/name.js: Added.
* test262/test/built-ins/FinalizationGroup/newtarget-prototype-is-not-object.js: Added.
(newTarget):
(fn):
* test262/test/built-ins/FinalizationGroup/prop-desc.js: Added.
* test262/test/built-ins/FinalizationGroup/proto-from-ctor-realm.js: Added.
(fn):
* test262/test/built-ins/FinalizationGroup/proto.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype-from-newtarget-abrupt.js: Added.
(newTarget):
* test262/test/built-ins/FinalizationGroup/prototype-from-newtarget-custom.js: Added.
(newTarget):
* test262/test/built-ins/FinalizationGroup/prototype-from-newtarget.js: Added.
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/prototype/Symbol.toStringTag.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-iterator-proto.js: Added.
(callback):
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-not-callable-throws.js: Added.
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-reference.js: Added.
(cb):
(fg.new.FinalizationGroup):
(emptyCells):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-unregister.js: Added.
(fg.new.FinalizationGroup):
(fg.cleanupSome.cb):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanupcallback-iterator-proto.js: Added.
(callback):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/custom-this.js: Added.
(fn):
(cb):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/gc-cleanup-not-prevented-with-wr-deref.js: Added.
(cb):
(fg.new.FinalizationGroup):
(emptyCells):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-dynamic.js: Added.
(fg.new.FinalizationGroup):
(callback):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-holdings-multiple-values.js: Added.
(fg.new.FinalizationGroup):
(callback):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/length.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/name.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-callback-throws.js: Added.
(poisoned):
(fg.new.FinalizationGroup):
(emptyCells):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-cleanup-callback-throws.js: Added.
(poisoned):
(emptyCells):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/prop-desc.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined-with-gc.js: Added.
(fn):
(cb):
(emptyCells):
(prototype.assert.sameValue.fg.cleanupSome):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined.js: Added.
(fn):
(cb):
(poisoned):
(assert.sameValue.fg.cleanupSome):
(prototype.assert.sameValue.fg.cleanupSome):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/this-does-not-have-internal-cells-throws.js: Added.
(cb):
* test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/this-not-object-throws.js: Added.
(cb):
* test262/test/built-ins/FinalizationGroup/prototype/constructor.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/prop-desc.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/proto.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/register/custom-this.js: Added.
(fn):
* test262/test/built-ins/FinalizationGroup/prototype/register/holdings-any-value-type.js: Added.
(fn):
* test262/test/built-ins/FinalizationGroup/prototype/register/holdings-same-as-target.js: Added.
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/prototype/register/length.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/register/name.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/register/prop-desc.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/register/return-undefined-register-itself.js: Added.
(fn):
* test262/test/built-ins/FinalizationGroup/prototype/register/return-undefined.js: Added.
(fn):
* test262/test/built-ins/FinalizationGroup/prototype/register/target-not-object-throws.js: Added.
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/prototype/register/this-does-not-have-internal-target-throws.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/register/this-not-object-throws.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-not-object-or-undefined-throws.js: Added.
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings-and-target.js: Added.
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings.js: Added.
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-target.js: Added.
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/prototype/unregister/custom-this.js: Added.
(fn):
* test262/test/built-ins/FinalizationGroup/prototype/unregister/length.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/unregister/name.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/unregister/prop-desc.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/unregister/this-does-not-have-internal-cells-throws.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/unregister/this-not-object-throws.js: Added.
* test262/test/built-ins/FinalizationGroup/prototype/unregister/unregister.js: Added.
(fn):
* test262/test/built-ins/FinalizationGroup/prototype/unregister/unregisterToken-not-object-throws.js: Added.
(fg.new.FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/returns-new-object-from-constructor.js: Added.
(cleanupCallback):
(let.key.of.Object.getOwnPropertyNames):
(set for):
* test262/test/built-ins/FinalizationGroup/target-not-callable-throws.js: Added.
* test262/test/built-ins/FinalizationGroup/undefined-newtarget-throws.js: Added.
(FinalizationGroup):
* test262/test/built-ins/FinalizationGroup/unnaffected-by-poisoned-cleanupCallback.js: Added.
(cleanupCallback):
(let.key.of.Object.getOwnPropertyNames):
(set for):
* test262/test/built-ins/Function/StrictFunction_restricted-properties.js:
* test262/test/built-ins/Function/prototype/bind/BoundFunction_restricted-properties.js:
* test262/test/built-ins/Function/prototype/restricted-property-arguments.js:
* test262/test/built-ins/Function/prototype/restricted-property-caller.js:
* test262/test/built-ins/Object/prototype/toString/proxy-function-async.js: Added.
(asyncProxy.new.Proxy.async):
* test262/test/built-ins/Object/prototype/toString/proxy-function.js:
(asyncProxy.new.Proxy.async):
* test262/test/built-ins/Object/prototype/toString/symbol-tag-non-str-builtin.js: Added.
(setIter.set Symbol):
(set defaultTag):
(gen):
(get return):
(set new):
* test262/test/built-ins/Object/prototype/toString/symbol-tag-non-str-proxy-function.js: Added.
(generatorProxy.new.Proxy):
(asyncProxy.new.Proxy.async):
* test262/test/built-ins/Object/subclass-object-arg.js:
* test262/test/built-ins/Promise/all/invoke-resolve-get-error-close.js:
* test262/test/built-ins/Promise/all/resolve-element-function-name.js:
* test262/test/built-ins/Promise/allSettled/invoke-resolve-get-error-close.js:
* test262/test/built-ins/Promise/allSettled/reject-element-function-name.js:
* test262/test/built-ins/Promise/allSettled/resolve-element-function-name.js:
* test262/test/built-ins/Promise/executor-function-name.js:
* test262/test/built-ins/Promise/race/invoke-resolve-get-error-close.js:
* test262/test/built-ins/Promise/reject-function-name.js:
* test262/test/built-ins/Promise/resolve-function-name.js:
* test262/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-weakset.js:
* test262/test/built-ins/WeakRef/constructor.js: Added.
* test262/test/built-ins/WeakRef/instance-extensible.js: Added.
* test262/test/built-ins/WeakRef/length.js: Added.
* test262/test/built-ins/WeakRef/name.js: Added.
* test262/test/built-ins/WeakRef/newtarget-prototype-is-not-object.js: Added.
(newTarget):
* test262/test/built-ins/WeakRef/prop-desc.js: Added.
* test262/test/built-ins/WeakRef/proto-from-ctor-realm.js: Added.
* test262/test/built-ins/WeakRef/proto.js: Added.
* test262/test/built-ins/WeakRef/prototype-from-newtarget-abrupt.js: Added.
(newTarget):
* test262/test/built-ins/WeakRef/prototype-from-newtarget-custom.js: Added.
(newTarget):
* test262/test/built-ins/WeakRef/prototype-from-newtarget.js: Added.
* test262/test/built-ins/WeakRef/prototype/Symbol.toStringTag.js: Added.
* test262/test/built-ins/WeakRef/prototype/constructor.js: Added.
* test262/test/built-ins/WeakRef/prototype/deref/custom-this.js: Added.
* test262/test/built-ins/WeakRef/prototype/deref/gc-cleanup-not-prevented-with-wr-deref.js: Added.
(emptyCells):
* test262/test/built-ins/WeakRef/prototype/deref/length.js: Added.
* test262/test/built-ins/WeakRef/prototype/deref/name.js: Added.
* test262/test/built-ins/WeakRef/prototype/deref/prop-desc.js: Added.
* test262/test/built-ins/WeakRef/prototype/deref/return-target.js: Added.
* test262/test/built-ins/WeakRef/prototype/deref/this-does-not-have-internal-target-throws.js: Added.
(fg.new.FinalizationGroup):
* test262/test/built-ins/WeakRef/prototype/deref/this-not-object-throws.js: Added.
* test262/test/built-ins/WeakRef/prototype/prop-desc.js: Added.
* test262/test/built-ins/WeakRef/prototype/proto.js: Added.
* test262/test/built-ins/WeakRef/returns-new-object-from-constructor.js: Added.
(let.key.of.Object.getOwnPropertyNames):
(set for):
* test262/test/built-ins/WeakRef/target-not-object-throws.js: Added.
* test262/test/built-ins/WeakRef/undefined-newtarget-throws.js: Added.
* test262/test/intl402/BigInt/prototype/toLocaleString/builtin.js:
* test262/test/intl402/BigInt/prototype/toLocaleString/default-options-object-prototype.js:
* test262/test/intl402/BigInt/prototype/toLocaleString/length.js:
* test262/test/intl402/BigInt/prototype/toLocaleString/returns-same-results-as-NumberFormat.js:
* test262/test/intl402/BigInt/prototype/toLocaleString/taint-Intl-NumberFormat.js:
* test262/test/intl402/BigInt/prototype/toLocaleString/this-value-invalid.js:
* test262/test/intl402/BigInt/prototype/toLocaleString/throws-same-exceptions-as-NumberFormat.js:
* test262/test/intl402/DateTimeFormat/constructor-options-order-quarter.js: Removed.
* test262/test/intl402/DateTimeFormat/constructor-options-quarter-invalid.js: Removed.
* test262/test/intl402/DateTimeFormat/constructor-options-quarter-valid.js: Removed.
* test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-long-en.js: Added.
* test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-narrow-en.js: Added.
* test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-short-en.js: Added.
* test262/test/intl402/DateTimeFormat/prototype/format/fractionalSecondDigits.js: Added.
* test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-date-string.js:
* test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-near-time-boundaries.js:
* test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-to-integer.js:
* test262/test/intl402/DateTimeFormat/prototype/formatRange/builtin.js:
* test262/test/intl402/DateTimeFormat/prototype/formatRange/prop-desc.js:
* test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-date-string.js:
* test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-near-time-boundaries.js:
* test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-to-integer.js:
* test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/builtin.js:
* test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/prop-desc.js:
* test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-long-en.js: Added.
(assertParts):
(assertPartsNumeric):
* test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-narrow-en.js: Added.
(assertParts):
(assertPartsNumeric):
* test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-short-en.js: Added.
(assertParts):
(assertPartsNumeric):
* test262/test/intl402/DateTimeFormat/prototype/formatToParts/fractionalSecondDigits.js: Added.
(assertParts):
* test262/test/intl402/DateTimeFormat/prototype/resolvedOptions/order-quarter.js: Removed.
* test262/test/intl402/DateTimeFormat/taint-Object-prototype-quarter.js: Removed.
* test262/test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js:
* test262/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js:
* test262/test/language/expressions/arrow-function/ArrowFunction_restricted-properties.js:
* test262/test/language/expressions/class/elements/private-field-access-on-inner-arrow-function.js: Added.
(C.prototype.method):
* test262/test/language/expressions/class/elements/private-field-access-on-inner-function.js: Added.
(C.prototype.method.innerFunction):
(C.prototype.method):
* test262/test/language/expressions/class/elements/private-getter-access-on-inner-arrow-function.js: Added.
(C):
(C.method):
* test262/test/language/expressions/class/elements/private-getter-access-on-inner-function.js: Added.
(C):
(C.method.innerFunction):
(C.method):
* test262/test/language/expressions/class/elements/private-getter-is-not-a-own-property.js: Added.
(C):
(C.checkPrivateGetter):
* test262/test/language/expressions/class/elements/private-method-access-on-inner-arrow-function.js: Added.
(C):
(C.method):
* test262/test/language/expressions/class/elements/private-method-access-on-inner-function.js: Added.
(C):
(C.method.innerFunction):
(C.method):
* test262/test/language/expressions/class/elements/private-method-is-not-a-own-property.js: Added.
(C):
(C.checkPrivateMethod):
* test262/test/language/expressions/class/elements/private-setter-access-on-inner-arrow-function.js: Added.
(C):
(C.method):
* test262/test/language/expressions/class/elements/private-setter-access-on-inner-function.js: Added.
(C):
(C.method.innerFunction):
(C.method):
* test262/test/language/expressions/class/elements/private-setter-is-not-a-own-property.js: Added.
(C):
(C.checkPrivateSetter):
* test262/test/language/expressions/class/elements/prod-private-getter-before-super-return-in-field-initializer.js:
* test262/test/language/expressions/class/elements/prod-private-method-before-super-return-in-field-initializer.js:
* test262/test/language/expressions/class/elements/prod-private-setter-before-super-return-in-field-initializer.js:
* test262/test/language/expressions/class/poisoned-underscore-proto.js: Added.
* test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval-indirect.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression):
(let.classStringExpression.access):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression):
(let.classStringExpression.access):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-factory.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(const.C):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression.return.prototype.m):
(let.classStringExpression.return.prototype.access):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression.return.prototype.m):
(let.classStringExpression.return.prototype.access):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression):
(let.classStringExpression.access):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval-indirect.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression.prototype.m):
(let.classStringExpression.prototype.access):
(let.classStringExpression):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression.prototype.m):
(let.classStringExpression.prototype.access):
(let.classStringExpression):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-factory.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(const.C):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression.return.C.prototype.m):
(let.classStringExpression.return.C.prototype.access):
(let.classStringExpression.return.C):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression.return.C.prototype.m):
(let.classStringExpression.return.C.prototype.access):
(let.classStringExpression.return.C):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression):
(let.classStringExpression.access):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval-indirect.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression):
(let.classStringExpression.access):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression):
(let.classStringExpression.access):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-factory.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(const.C):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression.return.prototype.m):
(let.classStringExpression.return.prototype.access):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression.return.prototype.m):
(let.classStringExpression.return.prototype.access):
(let.createAndInstantiateClass):
* test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
(let.classStringExpression):
(let.classStringExpression.access):
(let.createAndInstantiateClass):
* test262/test/language/expressions/new.target/unary-expr.js: Added.
(new):
(async):
* test262/test/language/expressions/super/call-poisoned-underscore-proto.js: Added.
(A):
* test262/test/language/expressions/super/prop-poisoned-underscore-proto.js: Added.
* test262/test/language/identifiers/vals-cjk-escaped.js: Added.
* test262/test/language/identifiers/vals-cjk.js: Added.
* test262/test/language/statements/class/elements/private-class-field-on-frozen-objects.js:
* test262/test/language/statements/class/elements/private-field-access-on-inner-arrow-function.js: Added.
(C.prototype.method):
(C):
* test262/test/language/statements/class/elements/private-field-access-on-inner-function.js: Added.
(C.prototype.method.innerFunction):
(C.prototype.method):
(C):
* test262/test/language/statements/class/elements/private-field-is-not-clobbered-by-computed-property.js: Added.
(C.prototype.checkPrivateField):
(C):
* test262/test/language/statements/class/elements/private-field-visible-to-direct-eval-on-initializer.js: Added.
(C):
* test262/test/language/statements/class/elements/private-field-visible-to-direct-eval.js: Added.
(C.prototype.getWithEval):
(C):
(D):
* test262/test/language/statements/class/elements/private-getter-access-on-inner-arrow-function.js: Added.
(C.prototype.get m):
(C.prototype.method):
(C):
* test262/test/language/statements/class/elements/private-getter-access-on-inner-function.js: Added.
(C.prototype.get m):
(C.prototype.method.innerFunction):
(C.prototype.method):
(C):
* test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js:
(let.createAndInstantiateClass):
* test262/test/language/statements/class/elements/private-getter-is-not-a-own-property.js: Added.
(C.prototype.get m):
(C.prototype.checkPrivateGetter):
(C):
* test262/test/language/statements/class/elements/private-getter-is-not-clobbered-by-computed-property.js: Added.
(C.prototype.get m):
(C.prototype.checkPrivateGetter):
(C):
* test262/test/language/statements/class/elements/private-getter-visible-to-direct-eval-on-initializer.js: Added.
(C.prototype.get m):
(C):
* test262/test/language/statements/class/elements/private-getter-visible-to-direct-eval.js: Added.
(C.prototype.get m):
(C.prototype.getWithEval):
(C):
(D.prototype.get m):
(D):
* test262/test/language/statements/class/elements/private-method-access-on-inner-arrow-function.js: Added.
(C.prototype.m):
(C.prototype.method):
(C):
* test262/test/language/statements/class/elements/private-method-access-on-inner-function.js: Added.
(C.prototype.m):
(C.prototype.method.innerFunction):
(C.prototype.method):
(C):
* test262/test/language/statements/class/elements/private-method-is-not-a-own-property.js: Added.
(C.prototype.m):
(C.prototype.checkPrivateMethod):
(C):
* test262/test/language/statements/class/elements/private-method-is-not-clobbered-by-computed-property.js: Added.
(C.prototype.m):
(C.prototype.checkPrivateMethod):
(C):
* test262/test/language/statements/class/elements/private-method-visible-to-direct-eval-on-initializer.js: Added.
(C.prototype.m):
(C):
* test262/test/language/statements/class/elements/private-method-visible-to-direct-eval.js: Added.
(C.prototype.m):
(C.prototype.getWithEval):
(C):
(D.prototype.m):
(D):
* test262/test/language/statements/class/elements/private-setter-access-on-inner-arrow-function.js: Added.
(C.prototype.set m):
(C.prototype.method):
(C):
* test262/test/language/statements/class/elements/private-setter-access-on-inner-function.js: Added.
(C.prototype.set m):
(C.prototype.method.innerFunction):
(C.prototype.method):
(C):
* test262/test/language/statements/class/elements/private-setter-is-not-a-own-property.js: Added.
(C.prototype.set m):
(C.prototype.checkPrivateSetter):
(C):
* test262/test/language/statements/class/elements/private-setter-is-not-clobbered-by-computed-property.js: Added.
(C.prototype.set m):
(C.prototype.checkPrivateSetter):
(C):
* test262/test/language/statements/class/elements/private-setter-visible-to-direct-eval-on-initializer.js: Added.
(C.prototype.set m):
(C):
* test262/test/language/statements/class/elements/private-setter-visible-to-direct-eval.js: Added.
(C.prototype.set m):
(C.prototype.setWithEval):
(C):
(D.prototype.set m):
(D):
* test262/test/language/statements/class/elements/prod-private-getter-before-super-return-in-field-initializer.js:
* test262/test/language/statements/class/elements/prod-private-method-before-super-return-in-field-initializer.js:
* test262/test/language/statements/class/elements/prod-private-setter-before-super-return-in-field-initializer.js:
* test262/test/language/statements/class/elements/super-access-inside-a-private-getter.js: Added.
(A.prototype.method):
(A):
(C.prototype.get m):
(C.prototype.access):
(C):
* test262/test/language/statements/class/elements/super-access-inside-a-private-method.js: Added.
(A.prototype.method):
(A):
(C.prototype.m):
(C.prototype.access):
(C):
* test262/test/language/statements/class/elements/super-access-inside-a-private-setter.js: Added.
(A.prototype.method):
(A):
(C.prototype.set m):
(C.prototype.access):
(C):
* test262/test/language/statements/class/poisoned-underscore-proto.js: Added.
(A):
* test262/test/language/statements/function/13.2-30-s.js:
* test262/test262-Revision.txt:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@247469 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/JSTests/ChangeLog b/JSTests/ChangeLog
index 204f284..0d2e94b 100644
--- a/JSTests/ChangeLog
+++ b/JSTests/ChangeLog
@@ -1,3 +1,507 @@
+2019-07-15  Keith Miller  <keith_miller@apple.com>
+
+        Update test262
+        https://bugs.webkit.org/show_bug.cgi?id=199801
+
+        Rubber-stamped by Yusuke Suzuki.
+
+        * test262/expectations.yaml:
+        * test262/latest-changes-summary.txt:
+        * test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/Symbol.toStringTag.js: Added.
+        (fg.new.FinalizationGroup):
+        (callback):
+        * test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-job-not-active-throws.js: Added.
+        (fg.new.FinalizationGroup):
+        (callback):
+        * test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-length.js: Added.
+        (fg.new.FinalizationGroup):
+        (callback):
+        * test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-missing-internal-throws.js: Added.
+        (fg.new.FinalizationGroup):
+        (callback):
+        * test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-name.js: Added.
+        (fg.new.FinalizationGroup):
+        (callback):
+        * test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-not-object-throws.js: Added.
+        (fg.new.FinalizationGroup):
+        (callback):
+        * test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-prop-desc.js: Added.
+        (fg.new.FinalizationGroup):
+        (callback):
+        * test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/proto.js: Added.
+        (callback):
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/constructor.js: Added.
+        * test262/test/built-ins/FinalizationGroup/gc-has-one-chance-to-call-cleanupCallback.js: Added.
+        (cb):
+        (fg.new.FinalizationGroup):
+        (emptyCells):
+        (async.fn):
+        (fn.then.async):
+        * test262/test/built-ins/FinalizationGroup/instance-extensible.js: Added.
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/length.js: Added.
+        * test262/test/built-ins/FinalizationGroup/name.js: Added.
+        * test262/test/built-ins/FinalizationGroup/newtarget-prototype-is-not-object.js: Added.
+        (newTarget):
+        (fn):
+        * test262/test/built-ins/FinalizationGroup/prop-desc.js: Added.
+        * test262/test/built-ins/FinalizationGroup/proto-from-ctor-realm.js: Added.
+        (fn):
+        * test262/test/built-ins/FinalizationGroup/proto.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype-from-newtarget-abrupt.js: Added.
+        (newTarget):
+        * test262/test/built-ins/FinalizationGroup/prototype-from-newtarget-custom.js: Added.
+        (newTarget):
+        * test262/test/built-ins/FinalizationGroup/prototype-from-newtarget.js: Added.
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/prototype/Symbol.toStringTag.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-iterator-proto.js: Added.
+        (callback):
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-not-callable-throws.js: Added.
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-reference.js: Added.
+        (cb):
+        (fg.new.FinalizationGroup):
+        (emptyCells):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-unregister.js: Added.
+        (fg.new.FinalizationGroup):
+        (fg.cleanupSome.cb):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanupcallback-iterator-proto.js: Added.
+        (callback):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/custom-this.js: Added.
+        (fn):
+        (cb):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/gc-cleanup-not-prevented-with-wr-deref.js: Added.
+        (cb):
+        (fg.new.FinalizationGroup):
+        (emptyCells):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-dynamic.js: Added.
+        (fg.new.FinalizationGroup):
+        (callback):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-holdings-multiple-values.js: Added.
+        (fg.new.FinalizationGroup):
+        (callback):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/length.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/name.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-callback-throws.js: Added.
+        (poisoned):
+        (fg.new.FinalizationGroup):
+        (emptyCells):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-cleanup-callback-throws.js: Added.
+        (poisoned):
+        (emptyCells):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/prop-desc.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined-with-gc.js: Added.
+        (fn):
+        (cb):
+        (emptyCells):
+        (prototype.assert.sameValue.fg.cleanupSome):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined.js: Added.
+        (fn):
+        (cb):
+        (poisoned):
+        (assert.sameValue.fg.cleanupSome):
+        (prototype.assert.sameValue.fg.cleanupSome):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/this-does-not-have-internal-cells-throws.js: Added.
+        (cb):
+        * test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/this-not-object-throws.js: Added.
+        (cb):
+        * test262/test/built-ins/FinalizationGroup/prototype/constructor.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/prop-desc.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/proto.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/register/custom-this.js: Added.
+        (fn):
+        * test262/test/built-ins/FinalizationGroup/prototype/register/holdings-any-value-type.js: Added.
+        (fn):
+        * test262/test/built-ins/FinalizationGroup/prototype/register/holdings-same-as-target.js: Added.
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/prototype/register/length.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/register/name.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/register/prop-desc.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/register/return-undefined-register-itself.js: Added.
+        (fn):
+        * test262/test/built-ins/FinalizationGroup/prototype/register/return-undefined.js: Added.
+        (fn):
+        * test262/test/built-ins/FinalizationGroup/prototype/register/target-not-object-throws.js: Added.
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/prototype/register/this-does-not-have-internal-target-throws.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/register/this-not-object-throws.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-not-object-or-undefined-throws.js: Added.
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings-and-target.js: Added.
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings.js: Added.
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-target.js: Added.
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/prototype/unregister/custom-this.js: Added.
+        (fn):
+        * test262/test/built-ins/FinalizationGroup/prototype/unregister/length.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/unregister/name.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/unregister/prop-desc.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/unregister/this-does-not-have-internal-cells-throws.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/unregister/this-not-object-throws.js: Added.
+        * test262/test/built-ins/FinalizationGroup/prototype/unregister/unregister.js: Added.
+        (fn):
+        * test262/test/built-ins/FinalizationGroup/prototype/unregister/unregisterToken-not-object-throws.js: Added.
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/returns-new-object-from-constructor.js: Added.
+        (cleanupCallback):
+        (let.key.of.Object.getOwnPropertyNames):
+        (set for):
+        * test262/test/built-ins/FinalizationGroup/target-not-callable-throws.js: Added.
+        * test262/test/built-ins/FinalizationGroup/undefined-newtarget-throws.js: Added.
+        (FinalizationGroup):
+        * test262/test/built-ins/FinalizationGroup/unnaffected-by-poisoned-cleanupCallback.js: Added.
+        (cleanupCallback):
+        (let.key.of.Object.getOwnPropertyNames):
+        (set for):
+        * test262/test/built-ins/Function/StrictFunction_restricted-properties.js:
+        * test262/test/built-ins/Function/prototype/bind/BoundFunction_restricted-properties.js:
+        * test262/test/built-ins/Function/prototype/restricted-property-arguments.js:
+        * test262/test/built-ins/Function/prototype/restricted-property-caller.js:
+        * test262/test/built-ins/Object/prototype/toString/proxy-function-async.js: Added.
+        (asyncProxy.new.Proxy.async):
+        * test262/test/built-ins/Object/prototype/toString/proxy-function.js:
+        (asyncProxy.new.Proxy.async):
+        * test262/test/built-ins/Object/prototype/toString/symbol-tag-non-str-builtin.js: Added.
+        (setIter.set Symbol):
+        (set defaultTag):
+        (gen):
+        (get return):
+        (set new):
+        * test262/test/built-ins/Object/prototype/toString/symbol-tag-non-str-proxy-function.js: Added.
+        (generatorProxy.new.Proxy):
+        (asyncProxy.new.Proxy.async):
+        * test262/test/built-ins/Object/subclass-object-arg.js:
+        * test262/test/built-ins/Promise/all/invoke-resolve-get-error-close.js:
+        * test262/test/built-ins/Promise/all/resolve-element-function-name.js:
+        * test262/test/built-ins/Promise/allSettled/invoke-resolve-get-error-close.js:
+        * test262/test/built-ins/Promise/allSettled/reject-element-function-name.js:
+        * test262/test/built-ins/Promise/allSettled/resolve-element-function-name.js:
+        * test262/test/built-ins/Promise/executor-function-name.js:
+        * test262/test/built-ins/Promise/race/invoke-resolve-get-error-close.js:
+        * test262/test/built-ins/Promise/reject-function-name.js:
+        * test262/test/built-ins/Promise/resolve-function-name.js:
+        * test262/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-weakset.js:
+        * test262/test/built-ins/WeakRef/constructor.js: Added.
+        * test262/test/built-ins/WeakRef/instance-extensible.js: Added.
+        * test262/test/built-ins/WeakRef/length.js: Added.
+        * test262/test/built-ins/WeakRef/name.js: Added.
+        * test262/test/built-ins/WeakRef/newtarget-prototype-is-not-object.js: Added.
+        (newTarget):
+        * test262/test/built-ins/WeakRef/prop-desc.js: Added.
+        * test262/test/built-ins/WeakRef/proto-from-ctor-realm.js: Added.
+        * test262/test/built-ins/WeakRef/proto.js: Added.
+        * test262/test/built-ins/WeakRef/prototype-from-newtarget-abrupt.js: Added.
+        (newTarget):
+        * test262/test/built-ins/WeakRef/prototype-from-newtarget-custom.js: Added.
+        (newTarget):
+        * test262/test/built-ins/WeakRef/prototype-from-newtarget.js: Added.
+        * test262/test/built-ins/WeakRef/prototype/Symbol.toStringTag.js: Added.
+        * test262/test/built-ins/WeakRef/prototype/constructor.js: Added.
+        * test262/test/built-ins/WeakRef/prototype/deref/custom-this.js: Added.
+        * test262/test/built-ins/WeakRef/prototype/deref/gc-cleanup-not-prevented-with-wr-deref.js: Added.
+        (emptyCells):
+        * test262/test/built-ins/WeakRef/prototype/deref/length.js: Added.
+        * test262/test/built-ins/WeakRef/prototype/deref/name.js: Added.
+        * test262/test/built-ins/WeakRef/prototype/deref/prop-desc.js: Added.
+        * test262/test/built-ins/WeakRef/prototype/deref/return-target.js: Added.
+        * test262/test/built-ins/WeakRef/prototype/deref/this-does-not-have-internal-target-throws.js: Added.
+        (fg.new.FinalizationGroup):
+        * test262/test/built-ins/WeakRef/prototype/deref/this-not-object-throws.js: Added.
+        * test262/test/built-ins/WeakRef/prototype/prop-desc.js: Added.
+        * test262/test/built-ins/WeakRef/prototype/proto.js: Added.
+        * test262/test/built-ins/WeakRef/returns-new-object-from-constructor.js: Added.
+        (let.key.of.Object.getOwnPropertyNames):
+        (set for):
+        * test262/test/built-ins/WeakRef/target-not-object-throws.js: Added.
+        * test262/test/built-ins/WeakRef/undefined-newtarget-throws.js: Added.
+        * test262/test/intl402/BigInt/prototype/toLocaleString/builtin.js:
+        * test262/test/intl402/BigInt/prototype/toLocaleString/default-options-object-prototype.js:
+        * test262/test/intl402/BigInt/prototype/toLocaleString/length.js:
+        * test262/test/intl402/BigInt/prototype/toLocaleString/returns-same-results-as-NumberFormat.js:
+        * test262/test/intl402/BigInt/prototype/toLocaleString/taint-Intl-NumberFormat.js:
+        * test262/test/intl402/BigInt/prototype/toLocaleString/this-value-invalid.js:
+        * test262/test/intl402/BigInt/prototype/toLocaleString/throws-same-exceptions-as-NumberFormat.js:
+        * test262/test/intl402/DateTimeFormat/constructor-options-order-quarter.js: Removed.
+        * test262/test/intl402/DateTimeFormat/constructor-options-quarter-invalid.js: Removed.
+        * test262/test/intl402/DateTimeFormat/constructor-options-quarter-valid.js: Removed.
+        * test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-long-en.js: Added.
+        * test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-narrow-en.js: Added.
+        * test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-short-en.js: Added.
+        * test262/test/intl402/DateTimeFormat/prototype/format/fractionalSecondDigits.js: Added.
+        * test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-date-string.js:
+        * test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-near-time-boundaries.js:
+        * test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-to-integer.js:
+        * test262/test/intl402/DateTimeFormat/prototype/formatRange/builtin.js:
+        * test262/test/intl402/DateTimeFormat/prototype/formatRange/prop-desc.js:
+        * test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-date-string.js:
+        * test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-near-time-boundaries.js:
+        * test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-to-integer.js:
+        * test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/builtin.js:
+        * test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/prop-desc.js:
+        * test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-long-en.js: Added.
+        (assertParts):
+        (assertPartsNumeric):
+        * test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-narrow-en.js: Added.
+        (assertParts):
+        (assertPartsNumeric):
+        * test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-short-en.js: Added.
+        (assertParts):
+        (assertPartsNumeric):
+        * test262/test/intl402/DateTimeFormat/prototype/formatToParts/fractionalSecondDigits.js: Added.
+        (assertParts):
+        * test262/test/intl402/DateTimeFormat/prototype/resolvedOptions/order-quarter.js: Removed.
+        * test262/test/intl402/DateTimeFormat/taint-Object-prototype-quarter.js: Removed.
+        * test262/test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js:
+        * test262/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js:
+        * test262/test/language/expressions/arrow-function/ArrowFunction_restricted-properties.js:
+        * test262/test/language/expressions/class/elements/private-field-access-on-inner-arrow-function.js: Added.
+        (C.prototype.method):
+        * test262/test/language/expressions/class/elements/private-field-access-on-inner-function.js: Added.
+        (C.prototype.method.innerFunction):
+        (C.prototype.method):
+        * test262/test/language/expressions/class/elements/private-getter-access-on-inner-arrow-function.js: Added.
+        (C):
+        (C.method):
+        * test262/test/language/expressions/class/elements/private-getter-access-on-inner-function.js: Added.
+        (C):
+        (C.method.innerFunction):
+        (C.method):
+        * test262/test/language/expressions/class/elements/private-getter-is-not-a-own-property.js: Added.
+        (C):
+        (C.checkPrivateGetter):
+        * test262/test/language/expressions/class/elements/private-method-access-on-inner-arrow-function.js: Added.
+        (C):
+        (C.method):
+        * test262/test/language/expressions/class/elements/private-method-access-on-inner-function.js: Added.
+        (C):
+        (C.method.innerFunction):
+        (C.method):
+        * test262/test/language/expressions/class/elements/private-method-is-not-a-own-property.js: Added.
+        (C):
+        (C.checkPrivateMethod):
+        * test262/test/language/expressions/class/elements/private-setter-access-on-inner-arrow-function.js: Added.
+        (C):
+        (C.method):
+        * test262/test/language/expressions/class/elements/private-setter-access-on-inner-function.js: Added.
+        (C):
+        (C.method.innerFunction):
+        (C.method):
+        * test262/test/language/expressions/class/elements/private-setter-is-not-a-own-property.js: Added.
+        (C):
+        (C.checkPrivateSetter):
+        * test262/test/language/expressions/class/elements/prod-private-getter-before-super-return-in-field-initializer.js:
+        * test262/test/language/expressions/class/elements/prod-private-method-before-super-return-in-field-initializer.js:
+        * test262/test/language/expressions/class/elements/prod-private-setter-before-super-return-in-field-initializer.js:
+        * test262/test/language/expressions/class/poisoned-underscore-proto.js: Added.
+        * test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval-indirect.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression):
+        (let.classStringExpression.access):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression):
+        (let.classStringExpression.access):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-factory.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (const.C):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression.return.prototype.m):
+        (let.classStringExpression.return.prototype.access):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression.return.prototype.m):
+        (let.classStringExpression.return.prototype.access):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression):
+        (let.classStringExpression.access):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval-indirect.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression.prototype.m):
+        (let.classStringExpression.prototype.access):
+        (let.classStringExpression):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression.prototype.m):
+        (let.classStringExpression.prototype.access):
+        (let.classStringExpression):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-factory.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (const.C):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression.return.C.prototype.m):
+        (let.classStringExpression.return.C.prototype.access):
+        (let.classStringExpression.return.C):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression.return.C.prototype.m):
+        (let.classStringExpression.return.C.prototype.access):
+        (let.classStringExpression.return.C):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression):
+        (let.classStringExpression.access):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval-indirect.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression):
+        (let.classStringExpression.access):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression):
+        (let.classStringExpression.access):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-factory.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (const.C):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression.return.prototype.m):
+        (let.classStringExpression.return.prototype.access):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression.return.prototype.m):
+        (let.classStringExpression.return.prototype.access):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm.js: Copied from JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js.
+        (let.classStringExpression):
+        (let.classStringExpression.access):
+        (let.createAndInstantiateClass):
+        * test262/test/language/expressions/new.target/unary-expr.js: Added.
+        (new):
+        (async):
+        * test262/test/language/expressions/super/call-poisoned-underscore-proto.js: Added.
+        (A):
+        * test262/test/language/expressions/super/prop-poisoned-underscore-proto.js: Added.
+        * test262/test/language/identifiers/vals-cjk-escaped.js: Added.
+        * test262/test/language/identifiers/vals-cjk.js: Added.
+        * test262/test/language/statements/class/elements/private-class-field-on-frozen-objects.js:
+        * test262/test/language/statements/class/elements/private-field-access-on-inner-arrow-function.js: Added.
+        (C.prototype.method):
+        (C):
+        * test262/test/language/statements/class/elements/private-field-access-on-inner-function.js: Added.
+        (C.prototype.method.innerFunction):
+        (C.prototype.method):
+        (C):
+        * test262/test/language/statements/class/elements/private-field-is-not-clobbered-by-computed-property.js: Added.
+        (C.prototype.checkPrivateField):
+        (C):
+        * test262/test/language/statements/class/elements/private-field-visible-to-direct-eval-on-initializer.js: Added.
+        (C):
+        * test262/test/language/statements/class/elements/private-field-visible-to-direct-eval.js: Added.
+        (C.prototype.getWithEval):
+        (C):
+        (D):
+        * test262/test/language/statements/class/elements/private-getter-access-on-inner-arrow-function.js: Added.
+        (C.prototype.get m):
+        (C.prototype.method):
+        (C):
+        * test262/test/language/statements/class/elements/private-getter-access-on-inner-function.js: Added.
+        (C.prototype.get m):
+        (C.prototype.method.innerFunction):
+        (C.prototype.method):
+        (C):
+        * test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js:
+        (let.createAndInstantiateClass):
+        * test262/test/language/statements/class/elements/private-getter-is-not-a-own-property.js: Added.
+        (C.prototype.get m):
+        (C.prototype.checkPrivateGetter):
+        (C):
+        * test262/test/language/statements/class/elements/private-getter-is-not-clobbered-by-computed-property.js: Added.
+        (C.prototype.get m):
+        (C.prototype.checkPrivateGetter):
+        (C):
+        * test262/test/language/statements/class/elements/private-getter-visible-to-direct-eval-on-initializer.js: Added.
+        (C.prototype.get m):
+        (C):
+        * test262/test/language/statements/class/elements/private-getter-visible-to-direct-eval.js: Added.
+        (C.prototype.get m):
+        (C.prototype.getWithEval):
+        (C):
+        (D.prototype.get m):
+        (D):
+        * test262/test/language/statements/class/elements/private-method-access-on-inner-arrow-function.js: Added.
+        (C.prototype.m):
+        (C.prototype.method):
+        (C):
+        * test262/test/language/statements/class/elements/private-method-access-on-inner-function.js: Added.
+        (C.prototype.m):
+        (C.prototype.method.innerFunction):
+        (C.prototype.method):
+        (C):
+        * test262/test/language/statements/class/elements/private-method-is-not-a-own-property.js: Added.
+        (C.prototype.m):
+        (C.prototype.checkPrivateMethod):
+        (C):
+        * test262/test/language/statements/class/elements/private-method-is-not-clobbered-by-computed-property.js: Added.
+        (C.prototype.m):
+        (C.prototype.checkPrivateMethod):
+        (C):
+        * test262/test/language/statements/class/elements/private-method-visible-to-direct-eval-on-initializer.js: Added.
+        (C.prototype.m):
+        (C):
+        * test262/test/language/statements/class/elements/private-method-visible-to-direct-eval.js: Added.
+        (C.prototype.m):
+        (C.prototype.getWithEval):
+        (C):
+        (D.prototype.m):
+        (D):
+        * test262/test/language/statements/class/elements/private-setter-access-on-inner-arrow-function.js: Added.
+        (C.prototype.set m):
+        (C.prototype.method):
+        (C):
+        * test262/test/language/statements/class/elements/private-setter-access-on-inner-function.js: Added.
+        (C.prototype.set m):
+        (C.prototype.method.innerFunction):
+        (C.prototype.method):
+        (C):
+        * test262/test/language/statements/class/elements/private-setter-is-not-a-own-property.js: Added.
+        (C.prototype.set m):
+        (C.prototype.checkPrivateSetter):
+        (C):
+        * test262/test/language/statements/class/elements/private-setter-is-not-clobbered-by-computed-property.js: Added.
+        (C.prototype.set m):
+        (C.prototype.checkPrivateSetter):
+        (C):
+        * test262/test/language/statements/class/elements/private-setter-visible-to-direct-eval-on-initializer.js: Added.
+        (C.prototype.set m):
+        (C):
+        * test262/test/language/statements/class/elements/private-setter-visible-to-direct-eval.js: Added.
+        (C.prototype.set m):
+        (C.prototype.setWithEval):
+        (C):
+        (D.prototype.set m):
+        (D):
+        * test262/test/language/statements/class/elements/prod-private-getter-before-super-return-in-field-initializer.js:
+        * test262/test/language/statements/class/elements/prod-private-method-before-super-return-in-field-initializer.js:
+        * test262/test/language/statements/class/elements/prod-private-setter-before-super-return-in-field-initializer.js:
+        * test262/test/language/statements/class/elements/super-access-inside-a-private-getter.js: Added.
+        (A.prototype.method):
+        (A):
+        (C.prototype.get m):
+        (C.prototype.access):
+        (C):
+        * test262/test/language/statements/class/elements/super-access-inside-a-private-method.js: Added.
+        (A.prototype.method):
+        (A):
+        (C.prototype.m):
+        (C.prototype.access):
+        (C):
+        * test262/test/language/statements/class/elements/super-access-inside-a-private-setter.js: Added.
+        (A.prototype.method):
+        (A):
+        (C.prototype.set m):
+        (C.prototype.access):
+        (C):
+        * test262/test/language/statements/class/poisoned-underscore-proto.js: Added.
+        (A):
+        * test262/test/language/statements/function/13.2-30-s.js:
+        * test262/test262-Revision.txt:
+
 2019-07-15  Yusuke Suzuki  <ysuzuki@apple.com>
 
         [JSC] Improve wasm wpt test results by fixing miscellaneous issues
diff --git a/JSTests/test262/expectations.yaml b/JSTests/test262/expectations.yaml
index 81c3b98..a815a9b 100644
--- a/JSTests/test262/expectations.yaml
+++ b/JSTests/test262/expectations.yaml
@@ -882,8 +882,201 @@
 test/built-ins/Error/proto-from-ctor-realm.js:
   default: 'Test262Error: Expected SameValue(«Error», «Error») to be true'
   strict mode: 'Test262Error: Expected SameValue(«Error», «Error») to be true'
-test/built-ins/Function/StrictFunction_restricted-properties.js:
-  default: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all'
+test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/Symbol.toStringTag.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-job-not-active-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-length.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-missing-internal-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-name.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-not-object-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-prop-desc.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/proto.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/constructor.js:
+  default: 'Test262Error: typeof FinalizationGroup is function Expected SameValue(«undefined», «function») to be true'
+  strict mode: 'Test262Error: typeof FinalizationGroup is function Expected SameValue(«undefined», «function») to be true'
+test/built-ins/FinalizationGroup/gc-has-one-chance-to-call-cleanupCallback.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/instance-extensible.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/length.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/name.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/newtarget-prototype-is-not-object.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prop-desc.js:
+  default: 'Test262Error: obj should have an own property FinalizationGroup'
+  strict mode: 'Test262Error: obj should have an own property FinalizationGroup'
+test/built-ins/FinalizationGroup/proto-from-ctor-realm.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/proto.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype-from-newtarget-abrupt.js:
+  default: 'Test262Error: Expected a Test262Error but got a ReferenceError'
+  strict mode: 'Test262Error: Expected a Test262Error but got a ReferenceError'
+test/built-ins/FinalizationGroup/prototype-from-newtarget-custom.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype-from-newtarget.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/Symbol.toStringTag.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-iterator-proto.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-not-callable-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-reference.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-unregister.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanupcallback-iterator-proto.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/custom-this.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/gc-cleanup-not-prevented-with-wr-deref.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-dynamic.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-holdings-multiple-values.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/length.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/name.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/prop-desc.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/this-does-not-have-internal-cells-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/cleanupSome/this-not-object-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/constructor.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/prop-desc.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/proto.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/custom-this.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/holdings-any-value-type.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/holdings-same-as-target.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/length.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/name.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/prop-desc.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/return-undefined-register-itself.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/return-undefined.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/target-not-object-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/this-does-not-have-internal-target-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/this-not-object-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/unregisterToken-not-object-or-undefined-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings-and-target.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-target.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/unregister/custom-this.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/unregister/length.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/unregister/name.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/unregister/prop-desc.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/unregister/this-does-not-have-internal-cells-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/unregister/this-not-object-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/unregister/unregister.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/prototype/unregister/unregisterToken-not-object-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/returns-new-object-from-constructor.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
+test/built-ins/FinalizationGroup/target-not-callable-throws.js:
+  default: 'Test262Error: typeof FinalizationGroup is function Expected SameValue(«undefined», «function») to be true'
+  strict mode: 'Test262Error: typeof FinalizationGroup is function Expected SameValue(«undefined», «function») to be true'
+test/built-ins/FinalizationGroup/undefined-newtarget-throws.js:
+  default: 'Test262Error: typeof FinalizationGroup is function Expected SameValue(«undefined», «function») to be true'
+  strict mode: 'Test262Error: typeof FinalizationGroup is function Expected SameValue(«undefined», «function») to be true'
+test/built-ins/FinalizationGroup/unnaffected-by-poisoned-cleanupCallback.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
 test/built-ins/Function/call-bind-this-realm-undef.js:
   default: 'Test262Error: implicit undefined Expected SameValue(«[object global]», «[object Undefined]») to be true'
   strict mode: 'Test262Error: implicit undefined Expected SameValue(«[object global]», «[object Undefined]») to be true'
@@ -911,12 +1104,6 @@
 test/built-ins/Function/prototype/bind/proto-from-ctor-realm.js:
   default: 'Test262Error: Expected SameValue(«[object Object]», «[object Object]») to be true'
   strict mode: 'Test262Error: Expected SameValue(«[object Object]», «[object Object]») to be true'
-test/built-ins/Function/prototype/restricted-property-arguments.js:
-  default: "ReferenceError: Can't find variable: verifyNotEnumerable"
-  strict mode: "ReferenceError: Can't find variable: verifyNotEnumerable"
-test/built-ins/Function/prototype/restricted-property-caller.js:
-  default: "ReferenceError: Can't find variable: verifyNotEnumerable"
-  strict mode: "ReferenceError: Can't find variable: verifyNotEnumerable"
 test/built-ins/Function/prototype/toString/AsyncFunction.js:
   default: "SyntaxError: Unexpected token ';'. Expected a ')' or a ',' after a parameter declaration."
   strict mode: "SyntaxError: Unexpected token ';'. Expected a ')' or a ',' after a parameter declaration."
@@ -1083,12 +1270,21 @@
 test/built-ins/Object/prototype/toString/proxy-function.js:
   default: 'Test262Error: function proxy Expected SameValue(«[object Object]», «[object Function]») to be true'
   strict mode: 'Test262Error: function proxy Expected SameValue(«[object Object]», «[object Function]») to be true'
-test/built-ins/Object/subclass-object-arg.js:
-  default: 'Test262Error: Expected SameValue(«undefined», «1») to be true'
-  strict mode: 'Test262Error: Expected SameValue(«undefined», «1») to be true'
+test/built-ins/Object/prototype/toString/symbol-tag-non-str-builtin.js:
+  default: 'Test262Error: Expected SameValue(«[object Math]», «[object Object]») to be true'
+  strict mode: 'Test262Error: Expected SameValue(«[object Math]», «[object Object]») to be true'
+test/built-ins/Object/prototype/toString/symbol-tag-non-str-proxy-function.js:
+  default: 'Test262Error: generator function proxy without Symbol.toStringTag Expected SameValue(«[object Object]», «[object Function]») to be true'
+  strict mode: 'Test262Error: generator function proxy without Symbol.toStringTag Expected SameValue(«[object Object]», «[object Function]») to be true'
+test/built-ins/Promise/all/invoke-resolve-get-error-close.js:
+  default: 'Test262Error: Expected SameValue(«0», «1») to be true'
+  strict mode: 'Test262Error: Expected SameValue(«0», «1») to be true'
 test/built-ins/Promise/all/resolve-element-function-nonconstructor.js:
   default: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all'
   strict mode: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all'
+test/built-ins/Promise/allSettled/invoke-resolve-get-error-close.js:
+  default: 'Test262Error: Expected SameValue(«0», «1») to be true'
+  strict mode: 'Test262Error: Expected SameValue(«0», «1») to be true'
 test/built-ins/Promise/allSettled/reject-element-function-nonconstructor.js:
   default: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all'
   strict mode: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all'
@@ -1101,6 +1297,9 @@
 test/built-ins/Promise/proto-from-ctor-realm.js:
   default: 'Test262Error: Expected SameValue(«[object Promise]», «[object Promise]») to be true'
   strict mode: 'Test262Error: Expected SameValue(«[object Promise]», «[object Promise]») to be true'
+test/built-ins/Promise/race/invoke-resolve-get-error-close.js:
+  default: 'Test262Error: Expected SameValue(«0», «1») to be true'
+  strict mode: 'Test262Error: Expected SameValue(«0», «1») to be true'
 test/built-ins/Promise/reject-function-nonconstructor.js:
   default: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all'
   strict mode: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all'
@@ -1787,6 +1986,15 @@
 test/built-ins/WeakMap/proto-from-ctor-realm.js:
   default: 'Test262Error: Expected SameValue(«[object WeakMap]», «[object WeakMap]») to be true'
   strict mode: 'Test262Error: Expected SameValue(«[object WeakMap]», «[object WeakMap]») to be true'
+test/built-ins/WeakRef/proto-from-ctor-realm.js:
+  default: 'Test262Error: newTarget.prototype is undefined Expected SameValue(«[object WeakRef]», «[object WeakRef]») to be true'
+  strict mode: 'Test262Error: newTarget.prototype is undefined Expected SameValue(«[object WeakRef]», «[object WeakRef]») to be true'
+test/built-ins/WeakRef/prototype/deref/gc-cleanup-not-prevented-with-wr-deref.js:
+  default: "TypeError: $262.gc is not a function. (In '$262.gc()', '$262.gc' is undefined)"
+  strict mode: "TypeError: $262.gc is not a function. (In '$262.gc()', '$262.gc' is undefined)"
+test/built-ins/WeakRef/prototype/deref/this-does-not-have-internal-target-throws.js:
+  default: "ReferenceError: Can't find variable: FinalizationGroup"
+  strict mode: "ReferenceError: Can't find variable: FinalizationGroup"
 test/built-ins/WeakSet/proto-from-ctor-realm.js:
   default: 'Test262Error: Expected SameValue(«[object WeakSet]», «[object WeakSet]») to be true'
   strict mode: 'Test262Error: Expected SameValue(«[object WeakSet]», «[object WeakSet]») to be true'
@@ -1817,15 +2025,6 @@
 test/intl402/DateTimeFormat/constructor-options-order-fractionalSecondDigits.js:
   default: 'Test262Error: Expected [second, localeMatcher, second, timeZoneName, formatMatcher] and [second, fractionalSecondDigits, localeMatcher, second, timeZoneName, fractionalSecondDigits, formatMatcher] to have the same contents. undefined'
   strict mode: 'Test262Error: Expected [second, localeMatcher, second, timeZoneName, formatMatcher] and [second, fractionalSecondDigits, localeMatcher, second, timeZoneName, fractionalSecondDigits, formatMatcher] to have the same contents. undefined'
-test/intl402/DateTimeFormat/constructor-options-order-quarter.js:
-  default: 'Test262Error: Expected [year, month, year, month] and [year, quarter, month, year, quarter, month] to have the same contents. undefined'
-  strict mode: 'Test262Error: Expected [year, month, year, month] and [year, quarter, month, year, quarter, month] to have the same contents. undefined'
-test/intl402/DateTimeFormat/constructor-options-quarter-invalid.js:
-  default: 'Test262Error: new Intl.DateTimeFormat("en", { quarter: "" }) throws RangeError Expected a RangeError to be thrown but no exception was thrown at all'
-  strict mode: 'Test262Error: new Intl.DateTimeFormat("en", { quarter: "" }) throws RangeError Expected a RangeError to be thrown but no exception was thrown at all'
-test/intl402/DateTimeFormat/constructor-options-quarter-valid.js:
-  default: 'Test262Error: Expected SameValue(«undefined», «long») to be true'
-  strict mode: 'Test262Error: Expected SameValue(«undefined», «long») to be true'
 test/intl402/DateTimeFormat/constructor-options-throwing-getters-dayPeriod.js:
   default: 'Test262Error: Exception from dayPeriod getter should be propagated Expected a CustomError to be thrown but no exception was thrown at all'
   strict mode: 'Test262Error: Exception from dayPeriod getter should be propagated Expected a CustomError to be thrown but no exception was thrown at all'
@@ -1838,18 +2037,39 @@
 test/intl402/DateTimeFormat/numbering-system-calendar-options.js:
   default: "Test262Error: Options value for property numberingSystem doesn't override locale extension key nu. Expected SameValue(«arab», «latn») to be true"
   strict mode: "Test262Error: Options value for property numberingSystem doesn't override locale extension key nu. Expected SameValue(«arab», «latn») to be true"
+test/intl402/DateTimeFormat/prototype/format/dayPeriod-long-en.js:
+  default: 'Test262Error: 00:00, long format Expected SameValue(«12/12/2017», «at night») to be true'
+  strict mode: 'Test262Error: 00:00, long format Expected SameValue(«12/12/2017», «at night») to be true'
+test/intl402/DateTimeFormat/prototype/format/dayPeriod-narrow-en.js:
+  default: 'Test262Error: 00:00, narrow format Expected SameValue(«12/12/2017», «at night») to be true'
+  strict mode: 'Test262Error: 00:00, narrow format Expected SameValue(«12/12/2017», «at night») to be true'
+test/intl402/DateTimeFormat/prototype/format/dayPeriod-short-en.js:
+  default: 'Test262Error: 00:00, short format Expected SameValue(«12/12/2017», «at night») to be true'
+  strict mode: 'Test262Error: 00:00, short format Expected SameValue(«12/12/2017», «at night») to be true'
 test/intl402/DateTimeFormat/prototype/format/format-function-name.js:
   default: 'Test262Error: Expected SameValue(«true», «false») to be true'
   strict mode: 'Test262Error: Expected SameValue(«true», «false») to be true'
+test/intl402/DateTimeFormat/prototype/format/fractionalSecondDigits.js:
+  default: 'Test262Error: 1 fractionalSecondDigits round down Expected SameValue(«02:03», «02:03.2») to be true'
+  strict mode: 'Test262Error: 1 fractionalSecondDigits round down Expected SameValue(«02:03», «02:03.2») to be true'
+test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-long-en.js:
+  default: 'Test262Error: length should be 1, 00:00, long format Expected SameValue(«5», «1») to be true'
+  strict mode: 'Test262Error: length should be 1, 00:00, long format Expected SameValue(«5», «1») to be true'
+test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-narrow-en.js:
+  default: 'Test262Error: length should be 1, 00:00, narrow format Expected SameValue(«5», «1») to be true'
+  strict mode: 'Test262Error: length should be 1, 00:00, narrow format Expected SameValue(«5», «1») to be true'
+test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-short-en.js:
+  default: 'Test262Error: length should be 1, 00:00, short format Expected SameValue(«5», «1») to be true'
+  strict mode: 'Test262Error: length should be 1, 00:00, short format Expected SameValue(«5», «1») to be true'
+test/intl402/DateTimeFormat/prototype/formatToParts/fractionalSecondDigits.js:
+  default: 'Test262Error: length should be 5, 1 fractionalSecondDigits round down Expected SameValue(«3», «5») to be true'
+  strict mode: 'Test262Error: length should be 5, 1 fractionalSecondDigits round down Expected SameValue(«3», «5») to be true'
 test/intl402/DateTimeFormat/prototype/resolvedOptions/order-dayPeriod.js:
   default: 'Test262Error: Expected [locale, calendar, numberingSystem, timeZone, hour, hourCycle, hour12, minute] and [locale, calendar, numberingSystem, timeZone, hourCycle, hour12, dayPeriod, hour, minute] to have the same contents. undefined'
   strict mode: 'Test262Error: Expected [locale, calendar, numberingSystem, timeZone, hour, hourCycle, hour12, minute] and [locale, calendar, numberingSystem, timeZone, hourCycle, hour12, dayPeriod, hour, minute] to have the same contents. undefined'
 test/intl402/DateTimeFormat/prototype/resolvedOptions/order-fractionalSecondDigits.js:
   default: 'Test262Error: Expected [locale, calendar, numberingSystem, timeZone, minute, second] and [locale, calendar, numberingSystem, timeZone, minute, second, fractionalSecondDigits] to have the same contents. undefined'
   strict mode: 'Test262Error: Expected [locale, calendar, numberingSystem, timeZone, minute, second] and [locale, calendar, numberingSystem, timeZone, minute, second, fractionalSecondDigits] to have the same contents. undefined'
-test/intl402/DateTimeFormat/prototype/resolvedOptions/order-quarter.js:
-  default: 'Test262Error: Expected [locale, calendar, numberingSystem, timeZone, year, month, day] and [locale, calendar, numberingSystem, timeZone, year, quarter, month, day] to have the same contents. undefined'
-  strict mode: 'Test262Error: Expected [locale, calendar, numberingSystem, timeZone, year, month, day] and [locale, calendar, numberingSystem, timeZone, year, quarter, month, day] to have the same contents. undefined'
 test/intl402/DateTimeFormat/prototype/resolvedOptions/order.js:
   default: 'Test262Error: Expected [locale, calendar, numberingSystem, timeZone, weekday, era, year, month, day, hour, hourCycle, hour12, minute, second, timeZoneName] and [locale, calendar, numberingSystem, timeZone, hourCycle, hour12, weekday, era, year, month, day, hour, minute, second, timeZoneName] to have the same contents. undefined'
   strict mode: 'Test262Error: Expected [locale, calendar, numberingSystem, timeZone, weekday, era, year, month, day, hour, hourCycle, hour12, minute, second, timeZoneName] and [locale, calendar, numberingSystem, timeZone, hourCycle, hour12, weekday, era, year, month, day, hour, minute, second, timeZoneName] to have the same contents. undefined'
@@ -1871,6 +2091,9 @@
 test/intl402/NumberFormat/prototype/resolvedOptions/order.js:
   default: 'Test262Error: Expected [locale, numberingSystem, style, currency, currencyDisplay, minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, minimumSignificantDigits, maximumSignificantDigits, useGrouping] and [locale, numberingSystem, style, currency, currencyDisplay, minimumIntegerDigits, minimumSignificantDigits, maximumSignificantDigits, useGrouping] to have the same contents. undefined'
   strict mode: 'Test262Error: Expected [locale, numberingSystem, style, currency, currencyDisplay, minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, minimumSignificantDigits, maximumSignificantDigits, useGrouping] and [locale, numberingSystem, style, currency, currencyDisplay, minimumIntegerDigits, minimumSignificantDigits, maximumSignificantDigits, useGrouping] to have the same contents. undefined'
+test/intl402/fallback-locales-are-supported.js:
+  default: "Test262Error: Locale zh-Hans-CN is supported, but fallback zh-Hans isn't. Expected SameValue(«-1», «-1») to be false (Testing with Collator.)"
+  strict mode: "Test262Error: Locale zh-Hans-CN is supported, but fallback zh-Hans isn't. Expected SameValue(«-1», «-1») to be false (Testing with Collator.)"
 test/intl402/supportedLocalesOf-returned-array-elements-are-not-frozen.js:
   default: 'Test262Error: Property 0 of object returned by SupportedLocales is not writable. Expected SameValue(«false», «true») to be true (Testing with Collator.)'
   strict mode: 'Test262Error: Property 0 of object returned by SupportedLocales is not writable. Expected SameValue(«false», «true») to be true (Testing with Collator.)'
@@ -2190,6 +2413,9 @@
 test/language/expressions/class/name.js:
   default: 'Test262Error: Expected SameValue(«true», «false») to be true'
   strict mode: 'Test262Error: Expected SameValue(«true», «false») to be true'
+test/language/expressions/class/poisoned-underscore-proto.js:
+  default: 'Test262Error: should not be called'
+  strict mode: 'Test262Error: should not be called'
 test/language/expressions/compound-assignment/S11.13.2_A5.10_T1.js:
   default: "ReferenceError: Can't find variable: x"
 test/language/expressions/compound-assignment/S11.13.2_A5.10_T2.js:
@@ -2472,9 +2698,15 @@
 test/language/expressions/prefix-increment/S11.4.4_A6_T3.js:
   default: 'Test262Error: Expected true but got false'
   strict mode: 'Test262Error: Expected true but got false'
+test/language/expressions/super/call-poisoned-underscore-proto.js:
+  default: 'Test262Error: should not be called'
+  strict mode: 'Test262Error: should not be called'
 test/language/expressions/super/call-proto-not-ctor.js:
   default: 'Test262Error: did not perform ArgumentsListEvaluation Expected SameValue(«true», «false») to be true'
   strict mode: 'Test262Error: did not perform ArgumentsListEvaluation Expected SameValue(«true», «false») to be true'
+test/language/expressions/super/prop-poisoned-underscore-proto.js:
+  default: 'Test262Error: should not be called'
+  strict mode: 'Test262Error: should not be called'
 test/language/expressions/yield/star-iterable.js:
   default: 'Test262Error: First result `done` flag Expected SameValue(«false», «undefined») to be true'
   strict mode: 'Test262Error: First result `done` flag Expected SameValue(«false», «undefined») to be true'
@@ -2639,6 +2871,9 @@
 test/language/statements/class/elements/syntax/valid/grammar-static-ctor-gen-meth-valid.js:
   default: "SyntaxError: Cannot declare a generator function named 'constructor'."
   strict mode: "SyntaxError: Cannot declare a generator function named 'constructor'."
+test/language/statements/class/poisoned-underscore-proto.js:
+  default: 'Test262Error: should not be called'
+  strict mode: 'Test262Error: should not be called'
 test/language/statements/class/subclass/bound-function.js:
   default: 'Test262Error: Expected SameValue(«[object Object]», «[object Object]») to be true'
   strict mode: 'Test262Error: Expected SameValue(«[object Object]», «[object Object]») to be true'
diff --git a/JSTests/test262/latest-changes-summary.txt b/JSTests/test262/latest-changes-summary.txt
index e1295da..bc04322 100644
--- a/JSTests/test262/latest-changes-summary.txt
+++ b/JSTests/test262/latest-changes-summary.txt
@@ -1,742 +1,218 @@
-M harness/propertyHelper.js
-A test/built-ins/Array/prop-desc.js
-D test/built-ins/Date/prototype/toJSON/15.9.5.44-0-1.js
-D test/built-ins/Date/prototype/toJSON/15.9.5.44-0-2.js
-A test/built-ins/Date/prototype/toJSON/builtin.js
-A test/built-ins/Date/prototype/toJSON/invoke-abrupt.js
-A test/built-ins/Date/prototype/toJSON/invoke-arguments.js
-A test/built-ins/Date/prototype/toJSON/invoke-result.js
-A test/built-ins/Date/prototype/toJSON/length.js
-M test/built-ins/Date/prototype/toJSON/name.js
-A test/built-ins/Date/prototype/toJSON/non-finite.js
-A test/built-ins/Date/prototype/toJSON/to-object.js
-A test/built-ins/Date/prototype/toJSON/to-primitive-abrupt.js
-A test/built-ins/Date/prototype/toJSON/to-primitive-symbol.js
-A test/built-ins/Date/prototype/toJSON/to-primitive-value-of.js
-D test/built-ins/Function/prototype/apply/S15.3.4.3_A10.js
-D test/built-ins/Function/prototype/apply/S15.3.4.3_A11.js
-D test/built-ins/Function/prototype/apply/S15.3.4.3_A13.js
-D test/built-ins/Function/prototype/apply/S15.3.4.3_A14.js
-D test/built-ins/Function/prototype/apply/S15.3.4.3_A15.js
-D test/built-ins/Function/prototype/apply/S15.3.4.3_A16.js
-D test/built-ins/Function/prototype/apply/S15.3.4.3_A2_T1.js
-D test/built-ins/Function/prototype/apply/S15.3.4.3_A2_T2.js
-D test/built-ins/Function/prototype/apply/S15.3.4.3_A6_T2.js
-D test/built-ins/Function/prototype/apply/S15.3.4.3_A6_T3.js
-D test/built-ins/Function/prototype/apply/S15.3.4.3_A9.js
-A test/built-ins/Function/prototype/apply/argarray-not-object-realm.js
-A test/built-ins/Function/prototype/apply/argarray-not-object.js
-A test/built-ins/Function/prototype/apply/get-index-abrupt.js
-A test/built-ins/Function/prototype/apply/get-length-abrupt.js
-A test/built-ins/Function/prototype/apply/length.js
-A test/built-ins/Function/prototype/apply/this-not-callable-realm.js
-A test/built-ins/Function/prototype/apply/this-not-callable.js
-A test/built-ins/Function/prototype/bind/get-fn-realm-recursive.js
-M test/built-ins/Function/prototype/bind/get-fn-realm.js
-D test/built-ins/JSON/parse/15.12.2-0-1.js
-D test/built-ins/JSON/parse/15.12.2-0-2.js
-D test/built-ins/JSON/parse/15.12.2-0-3.js
-A test/built-ins/JSON/parse/builtin.js
-A test/built-ins/JSON/parse/length.js
-M test/built-ins/JSON/parse/name.js
-A test/built-ins/JSON/parse/prop-desc.js
-A test/built-ins/JSON/parse/text-negative-zero.js
-A test/built-ins/JSON/parse/text-non-string-primitive.js
-A test/built-ins/JSON/parse/text-object-abrupt.js
-A test/built-ins/JSON/parse/text-object.js
-A test/built-ins/Object/subclass-object-arg.js
-D test/built-ins/Promise/S25.4.3.1_A1.1_T1.js
-D test/built-ins/Promise/S25.4.3.1_A2.1_T1.js
-D test/built-ins/Promise/S25.4.3.1_A2.2_T1.js
-D test/built-ins/Promise/S25.4.3.1_A2.3_T1.js
-D test/built-ins/Promise/S25.4.3.1_A2.4_T1.js
-D test/built-ins/Promise/S25.4.3.1_A3.1_T1.js
-D test/built-ins/Promise/S25.4.3.1_A4.1_T1.js
-D test/built-ins/Promise/S25.4.3.1_A5.1_T1.js
-D test/built-ins/Promise/S25.4.3.1_A5.1_T2.js
-A test/built-ins/Promise/constructor.js
-A test/built-ins/Promise/executor-call-context-sloppy.js
-A test/built-ins/Promise/executor-call-context-strict.js
-A test/built-ins/Promise/executor-not-callable.js
-A test/built-ins/Promise/get-prototype-abrupt-executor-not-callable.js
-A test/built-ins/Promise/get-prototype-abrupt.js
-A test/built-ins/Promise/promise.js
-A test/built-ins/Promise/undefined-newtarget.js
-M test/built-ins/Proxy/apply/call-parameters.js
-M test/built-ins/Proxy/apply/call-result.js
-A test/built-ins/Proxy/apply/null-handler-realm.js
-M test/built-ins/Proxy/apply/null-handler.js
-M test/built-ins/Proxy/apply/return-abrupt.js
-M test/built-ins/Proxy/apply/trap-is-not-callable.js
-M test/built-ins/Proxy/apply/trap-is-null.js
-M test/built-ins/Proxy/apply/trap-is-undefined-no-property.js
-M test/built-ins/Proxy/apply/trap-is-undefined.js
-M test/built-ins/Proxy/construct/call-parameters.js
-M test/built-ins/Proxy/construct/call-result.js
-A test/built-ins/Proxy/construct/null-handler-realm.js
-M test/built-ins/Proxy/construct/null-handler.js
-M test/built-ins/Proxy/construct/return-is-abrupt.js
-A test/built-ins/Proxy/construct/return-not-object-throws-boolean-realm.js
-M test/built-ins/Proxy/construct/return-not-object-throws-boolean.js
-A test/built-ins/Proxy/construct/return-not-object-throws-null-realm.js
-A test/built-ins/Proxy/construct/return-not-object-throws-null.js
-A test/built-ins/Proxy/construct/return-not-object-throws-number-realm.js
-M test/built-ins/Proxy/construct/return-not-object-throws-number.js
-A test/built-ins/Proxy/construct/return-not-object-throws-string-realm.js
-M test/built-ins/Proxy/construct/return-not-object-throws-string.js
-A test/built-ins/Proxy/construct/return-not-object-throws-symbol-realm.js
-M test/built-ins/Proxy/construct/return-not-object-throws-symbol.js
-A test/built-ins/Proxy/construct/return-not-object-throws-undefined-realm.js
-M test/built-ins/Proxy/construct/return-not-object-throws-undefined.js
-M test/built-ins/Proxy/construct/trap-is-not-callable.js
-M test/built-ins/Proxy/construct/trap-is-null.js
-M test/built-ins/Proxy/construct/trap-is-undefined-no-property.js
-A test/built-ins/Proxy/construct/trap-is-undefined-proto-from-cross-realm-newtarget.js
-D test/built-ins/Proxy/construct/trap-is-undefined-proto-from-ctor-realm.js
-A test/built-ins/Proxy/construct/trap-is-undefined-proto-from-newtarget-realm.js
-M test/built-ins/Proxy/construct/trap-is-undefined.js
-M test/built-ins/Proxy/defineProperty/targetdesc-not-configurable-writable-desc-not-writable.js
-M test/built-ins/Proxy/deleteProperty/targetdesc-is-configurable-target-is-not-extensible.js
-A test/built-ins/Proxy/get-fn-realm-recursive.js
-M test/built-ins/Proxy/get-fn-realm.js
-M test/built-ins/Proxy/getOwnPropertyDescriptor/resultdesc-is-not-configurable-not-writable-targetdesc-is-writable.js
-M test/built-ins/RegExp/property-escapes/generated/ASCII.js
-M test/built-ins/RegExp/property-escapes/generated/ASCII_Hex_Digit.js
-M test/built-ins/RegExp/property-escapes/generated/Alphabetic.js
-M test/built-ins/RegExp/property-escapes/generated/Any.js
-M test/built-ins/RegExp/property-escapes/generated/Assigned.js
-M test/built-ins/RegExp/property-escapes/generated/Bidi_Control.js
-M test/built-ins/RegExp/property-escapes/generated/Bidi_Mirrored.js
-M test/built-ins/RegExp/property-escapes/generated/Case_Ignorable.js
-M test/built-ins/RegExp/property-escapes/generated/Cased.js
-M test/built-ins/RegExp/property-escapes/generated/Changes_When_Casefolded.js
-M test/built-ins/RegExp/property-escapes/generated/Changes_When_Casemapped.js
-M test/built-ins/RegExp/property-escapes/generated/Changes_When_Lowercased.js
-M test/built-ins/RegExp/property-escapes/generated/Changes_When_NFKC_Casefolded.js
-M test/built-ins/RegExp/property-escapes/generated/Changes_When_Titlecased.js
-M test/built-ins/RegExp/property-escapes/generated/Changes_When_Uppercased.js
-M test/built-ins/RegExp/property-escapes/generated/Dash.js
-M test/built-ins/RegExp/property-escapes/generated/Default_Ignorable_Code_Point.js
-M test/built-ins/RegExp/property-escapes/generated/Deprecated.js
-M test/built-ins/RegExp/property-escapes/generated/Diacritic.js
-M test/built-ins/RegExp/property-escapes/generated/Emoji.js
-M test/built-ins/RegExp/property-escapes/generated/Emoji_Component.js
-M test/built-ins/RegExp/property-escapes/generated/Emoji_Modifier.js
-M test/built-ins/RegExp/property-escapes/generated/Emoji_Modifier_Base.js
-M test/built-ins/RegExp/property-escapes/generated/Emoji_Presentation.js
-M test/built-ins/RegExp/property-escapes/generated/Extended_Pictographic.js
-M test/built-ins/RegExp/property-escapes/generated/Extender.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Cased_Letter.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Close_Punctuation.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Connector_Punctuation.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Control.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Currency_Symbol.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Dash_Punctuation.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Decimal_Number.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Enclosing_Mark.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Final_Punctuation.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Format.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Initial_Punctuation.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Letter.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Letter_Number.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Line_Separator.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Lowercase_Letter.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Mark.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Math_Symbol.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Modifier_Letter.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Modifier_Symbol.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Nonspacing_Mark.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Number.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Open_Punctuation.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Other.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Letter.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Number.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Punctuation.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Symbol.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Paragraph_Separator.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Private_Use.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Punctuation.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Separator.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Space_Separator.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Spacing_Mark.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Surrogate.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Symbol.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Titlecase_Letter.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Unassigned.js
-M test/built-ins/RegExp/property-escapes/generated/General_Category_-_Uppercase_Letter.js
-M test/built-ins/RegExp/property-escapes/generated/Grapheme_Base.js
-M test/built-ins/RegExp/property-escapes/generated/Grapheme_Extend.js
-M test/built-ins/RegExp/property-escapes/generated/Hex_Digit.js
-M test/built-ins/RegExp/property-escapes/generated/IDS_Binary_Operator.js
-M test/built-ins/RegExp/property-escapes/generated/IDS_Trinary_Operator.js
-M test/built-ins/RegExp/property-escapes/generated/ID_Continue.js
-M test/built-ins/RegExp/property-escapes/generated/ID_Start.js
-M test/built-ins/RegExp/property-escapes/generated/Ideographic.js
-M test/built-ins/RegExp/property-escapes/generated/Join_Control.js
-M test/built-ins/RegExp/property-escapes/generated/Logical_Order_Exception.js
-M test/built-ins/RegExp/property-escapes/generated/Lowercase.js
-M test/built-ins/RegExp/property-escapes/generated/Math.js
-M test/built-ins/RegExp/property-escapes/generated/Noncharacter_Code_Point.js
-M test/built-ins/RegExp/property-escapes/generated/Pattern_Syntax.js
-M test/built-ins/RegExp/property-escapes/generated/Pattern_White_Space.js
-M test/built-ins/RegExp/property-escapes/generated/Quotation_Mark.js
-M test/built-ins/RegExp/property-escapes/generated/Radical.js
-M test/built-ins/RegExp/property-escapes/generated/Regional_Indicator.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Adlam.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Ahom.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Anatolian_Hieroglyphs.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Arabic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Armenian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Avestan.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Balinese.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Bamum.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Bassa_Vah.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Batak.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Bengali.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Bhaiksuki.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Bopomofo.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Brahmi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Braille.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Buginese.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Buhid.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Canadian_Aboriginal.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Carian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Caucasian_Albanian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Chakma.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Cham.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Cherokee.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Common.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Coptic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Cuneiform.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Cypriot.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Cyrillic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Deseret.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Devanagari.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Dogra.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Duployan.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Egyptian_Hieroglyphs.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Elbasan.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Elymaic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Ethiopic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Georgian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Glagolitic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Gothic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Grantha.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Greek.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Gujarati.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Gunjala_Gondi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Gurmukhi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Han.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Hangul.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Hanifi_Rohingya.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Hanunoo.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Hatran.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Hebrew.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Hiragana.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Imperial_Aramaic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Inherited.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Inscriptional_Pahlavi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Inscriptional_Parthian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Javanese.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Kaithi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Kannada.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Katakana.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Kayah_Li.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Kharoshthi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Khmer.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Khojki.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Khudawadi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Lao.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Latin.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Lepcha.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Limbu.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Linear_A.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Linear_B.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Lisu.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Lycian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Lydian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Mahajani.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Makasar.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Malayalam.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Mandaic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Manichaean.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Marchen.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Masaram_Gondi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Medefaidrin.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Meetei_Mayek.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Mende_Kikakui.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Meroitic_Cursive.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Meroitic_Hieroglyphs.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Miao.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Modi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Mongolian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Mro.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Multani.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Myanmar.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Nabataean.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Nandinagari.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_New_Tai_Lue.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Newa.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Nko.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Nushu.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Nyiakeng_Puachue_Hmong.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Ogham.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Ol_Chiki.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Old_Hungarian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Old_Italic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Old_North_Arabian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Old_Permic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Old_Persian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Old_Sogdian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Old_South_Arabian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Old_Turkic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Oriya.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Osage.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Osmanya.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Pahawh_Hmong.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Palmyrene.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Pau_Cin_Hau.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Phags_Pa.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Phoenician.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Psalter_Pahlavi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Rejang.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Runic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Samaritan.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Saurashtra.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Sharada.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Shavian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Siddham.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_SignWriting.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Sinhala.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Sogdian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Sora_Sompeng.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Soyombo.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Sundanese.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Syloti_Nagri.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Syriac.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Tagalog.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Tagbanwa.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Le.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Tham.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Viet.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Takri.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Tamil.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Tangut.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Telugu.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Thaana.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Thai.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Tibetan.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Tifinagh.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Tirhuta.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Ugaritic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Vai.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Wancho.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Warang_Citi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Yi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_-_Zanabazar_Square.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Adlam.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ahom.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Anatolian_Hieroglyphs.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Arabic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Armenian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Avestan.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Balinese.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bamum.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bassa_Vah.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Batak.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bengali.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bhaiksuki.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bopomofo.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Brahmi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Braille.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Buginese.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Buhid.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Canadian_Aboriginal.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Carian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Caucasian_Albanian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Chakma.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cham.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cherokee.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Common.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Coptic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cuneiform.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cypriot.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cyrillic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Deseret.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Devanagari.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Dogra.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Duployan.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Egyptian_Hieroglyphs.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elbasan.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elymaic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ethiopic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Georgian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Glagolitic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gothic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Grantha.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Greek.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gujarati.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gunjala_Gondi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gurmukhi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Han.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hangul.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hanifi_Rohingya.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hanunoo.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hatran.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hebrew.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hiragana.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Imperial_Aramaic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inherited.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Pahlavi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Parthian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Javanese.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kaithi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kannada.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Katakana.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kayah_Li.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kharoshthi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khmer.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khojki.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khudawadi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lao.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Latin.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lepcha.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Limbu.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Linear_A.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Linear_B.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lisu.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lycian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lydian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mahajani.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Makasar.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Malayalam.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mandaic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Manichaean.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Marchen.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Masaram_Gondi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Medefaidrin.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meetei_Mayek.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mende_Kikakui.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Cursive.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Hieroglyphs.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Miao.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Modi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mongolian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mro.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Multani.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Myanmar.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nabataean.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nandinagari.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_New_Tai_Lue.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Newa.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nko.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nushu.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nyiakeng_Puachue_Hmong.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ogham.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ol_Chiki.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Hungarian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Italic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_North_Arabian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Permic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Persian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Sogdian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_South_Arabian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Turkic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Oriya.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osage.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osmanya.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pahawh_Hmong.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Palmyrene.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pau_Cin_Hau.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phags_Pa.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phoenician.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Psalter_Pahlavi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Rejang.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Runic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Samaritan.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Saurashtra.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sharada.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Shavian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Siddham.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_SignWriting.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sinhala.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sogdian.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sora_Sompeng.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Soyombo.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sundanese.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Syloti_Nagri.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Syriac.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tagalog.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tagbanwa.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Le.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Tham.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Viet.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Takri.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tamil.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangut.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Telugu.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thaana.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thai.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tibetan.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tifinagh.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tirhuta.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ugaritic.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vai.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Wancho.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Warang_Citi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Yi.js
-M test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Zanabazar_Square.js
-M test/built-ins/RegExp/property-escapes/generated/Sentence_Terminal.js
-M test/built-ins/RegExp/property-escapes/generated/Soft_Dotted.js
-M test/built-ins/RegExp/property-escapes/generated/Terminal_Punctuation.js
-M test/built-ins/RegExp/property-escapes/generated/Unified_Ideograph.js
-M test/built-ins/RegExp/property-escapes/generated/Uppercase.js
-M test/built-ins/RegExp/property-escapes/generated/Variation_Selector.js
-M test/built-ins/RegExp/property-escapes/generated/White_Space.js
-M test/built-ins/RegExp/property-escapes/generated/XID_Continue.js
-M test/built-ins/RegExp/property-escapes/generated/XID_Start.js
-D test/built-ins/String/prototype/toString/S15.5.4.2_A1_T1.js
-D test/built-ins/String/prototype/toString/S15.5.4.2_A1_T2.js
-D test/built-ins/String/prototype/toString/S15.5.4.2_A1_T3.js
-D test/built-ins/String/prototype/toString/S15.5.4.2_A1_T4.js
-D test/built-ins/String/prototype/toString/S15.5.4.2_A2_T1.js
-D test/built-ins/String/prototype/toString/S15.5.4.2_A2_T2.js
-D test/built-ins/String/prototype/toString/S15.5.4.2_A3_T1.js
-D test/built-ins/String/prototype/toString/S15.5.4.2_A4_T1.js
-A test/built-ins/String/prototype/toString/length.js
-M test/built-ins/String/prototype/toString/name.js
-A test/built-ins/String/prototype/toString/non-generic-realm.js
-A test/built-ins/String/prototype/toString/non-generic.js
-A test/built-ins/String/prototype/toString/string-object.js
-A test/built-ins/String/prototype/toString/string-primitive.js
-D test/built-ins/String/prototype/valueOf/S15.5.4.3_A1_T1.js
-D test/built-ins/String/prototype/valueOf/S15.5.4.3_A1_T2.js
-D test/built-ins/String/prototype/valueOf/S15.5.4.3_A1_T3.js
-D test/built-ins/String/prototype/valueOf/S15.5.4.3_A1_T4.js
-D test/built-ins/String/prototype/valueOf/S15.5.4.3_A2_T1.js
-D test/built-ins/String/prototype/valueOf/S15.5.4.3_A2_T2.js
-M test/built-ins/String/prototype/valueOf/length.js
-M test/built-ins/String/prototype/valueOf/name.js
-A test/built-ins/String/prototype/valueOf/non-generic-realm.js
-A test/built-ins/String/prototype/valueOf/non-generic.js
-A test/built-ins/String/prototype/valueOf/string-object.js
-A test/built-ins/String/prototype/valueOf/string-primitive.js
-A test/built-ins/Symbol/not-callable.js
-R100 test/built-ins/TypedArray/stability.js test/built-ins/TypedArray/prototype/sort/stability.js
-A test/harness/verifyProperty-same-value.js
-A test/intl402/DateTimeFormat/constructor-options-dayPeriod-invalid.js
-A test/intl402/DateTimeFormat/constructor-options-dayPeriod-valid.js
-A test/intl402/DateTimeFormat/constructor-options-fractionalSecondDigits-invalid.js
-A test/intl402/DateTimeFormat/constructor-options-fractionalSecondDigits-valid.js
-A test/intl402/DateTimeFormat/constructor-options-order-dayPeriod.js
-A test/intl402/DateTimeFormat/constructor-options-order-fractionalSecondDigits.js
-A test/intl402/DateTimeFormat/constructor-options-order-quarter.js
-A test/intl402/DateTimeFormat/constructor-options-quarter-invalid.js
-A test/intl402/DateTimeFormat/constructor-options-quarter-valid.js
-A test/intl402/DateTimeFormat/constructor-options-throwing-getters-dayPeriod.js
-A test/intl402/DateTimeFormat/constructor-options-throwing-getters-fractionalSecondDigits.js
-A test/intl402/DateTimeFormat/constructor-options-throwing-getters-quarter.js
-A test/intl402/DateTimeFormat/numbering-system-calendar-options.js
+A test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/Symbol.toStringTag.js
+A test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-job-not-active-throws.js
+A test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-length.js
+A test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-missing-internal-throws.js
+A test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-name.js
+A test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-not-object-throws.js
+A test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-prop-desc.js
+A test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/proto.js
+A test/built-ins/FinalizationGroup/constructor.js
+A test/built-ins/FinalizationGroup/gc-has-one-chance-to-call-cleanupCallback.js
+A test/built-ins/FinalizationGroup/instance-extensible.js
+A test/built-ins/FinalizationGroup/length.js
+A test/built-ins/FinalizationGroup/name.js
+A test/built-ins/FinalizationGroup/newtarget-prototype-is-not-object.js
+A test/built-ins/FinalizationGroup/prop-desc.js
+A test/built-ins/FinalizationGroup/proto-from-ctor-realm.js
+A test/built-ins/FinalizationGroup/proto.js
+A test/built-ins/FinalizationGroup/prototype/Symbol.toStringTag.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-iterator-proto.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-not-callable-throws.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-reference.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-unregister.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanupcallback-iterator-proto.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/custom-this.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/gc-cleanup-not-prevented-with-wr-deref.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-dynamic.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-holdings-multiple-values.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/length.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/name.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-callback-throws.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-cleanup-callback-throws.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/prop-desc.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined-with-gc.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/this-does-not-have-internal-cells-throws.js
+A test/built-ins/FinalizationGroup/prototype/cleanupSome/this-not-object-throws.js
+A test/built-ins/FinalizationGroup/prototype/constructor.js
+A test/built-ins/FinalizationGroup/prototype/prop-desc.js
+A test/built-ins/FinalizationGroup/prototype/proto.js
+A test/built-ins/FinalizationGroup/prototype/register/custom-this.js
+A test/built-ins/FinalizationGroup/prototype/register/holdings-any-value-type.js
+A test/built-ins/FinalizationGroup/prototype/register/holdings-same-as-target.js
+A test/built-ins/FinalizationGroup/prototype/register/length.js
+A test/built-ins/FinalizationGroup/prototype/register/name.js
+A test/built-ins/FinalizationGroup/prototype/register/prop-desc.js
+A test/built-ins/FinalizationGroup/prototype/register/return-undefined-register-itself.js
+A test/built-ins/FinalizationGroup/prototype/register/return-undefined.js
+A test/built-ins/FinalizationGroup/prototype/register/target-not-object-throws.js
+A test/built-ins/FinalizationGroup/prototype/register/this-does-not-have-internal-target-throws.js
+A test/built-ins/FinalizationGroup/prototype/register/this-not-object-throws.js
+A test/built-ins/FinalizationGroup/prototype/register/unregisterToken-not-object-or-undefined-throws.js
+A test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings-and-target.js
+A test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings.js
+A test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-target.js
+A test/built-ins/FinalizationGroup/prototype/unregister/custom-this.js
+A test/built-ins/FinalizationGroup/prototype/unregister/length.js
+A test/built-ins/FinalizationGroup/prototype/unregister/name.js
+A test/built-ins/FinalizationGroup/prototype/unregister/prop-desc.js
+A test/built-ins/FinalizationGroup/prototype/unregister/this-does-not-have-internal-cells-throws.js
+A test/built-ins/FinalizationGroup/prototype/unregister/this-not-object-throws.js
+A test/built-ins/FinalizationGroup/prototype/unregister/unregister.js
+A test/built-ins/FinalizationGroup/prototype/unregister/unregisterToken-not-object-throws.js
+A test/built-ins/FinalizationGroup/prototype-from-newtarget-abrupt.js
+A test/built-ins/FinalizationGroup/prototype-from-newtarget-custom.js
+A test/built-ins/FinalizationGroup/prototype-from-newtarget.js
+A test/built-ins/FinalizationGroup/returns-new-object-from-constructor.js
+A test/built-ins/FinalizationGroup/target-not-callable-throws.js
+A test/built-ins/FinalizationGroup/undefined-newtarget-throws.js
+A test/built-ins/FinalizationGroup/unnaffected-by-poisoned-cleanupCallback.js
+M test/built-ins/Function/StrictFunction_restricted-properties.js
+M test/built-ins/Function/prototype/bind/BoundFunction_restricted-properties.js
+M test/built-ins/Function/prototype/restricted-property-arguments.js
+M test/built-ins/Function/prototype/restricted-property-caller.js
+A test/built-ins/Object/prototype/toString/proxy-function-async.js
+M test/built-ins/Object/prototype/toString/proxy-function.js
+A test/built-ins/Object/prototype/toString/symbol-tag-non-str-builtin.js
+A test/built-ins/Object/prototype/toString/symbol-tag-non-str-proxy-function.js
+M test/built-ins/Object/subclass-object-arg.js
+M test/built-ins/Promise/all/invoke-resolve-get-error-close.js
+M test/built-ins/Promise/all/resolve-element-function-name.js
+M test/built-ins/Promise/allSettled/invoke-resolve-get-error-close.js
+M test/built-ins/Promise/allSettled/reject-element-function-name.js
+M test/built-ins/Promise/allSettled/resolve-element-function-name.js
+M test/built-ins/Promise/executor-function-name.js
+M test/built-ins/Promise/race/invoke-resolve-get-error-close.js
+M test/built-ins/Promise/reject-function-name.js
+M test/built-ins/Promise/resolve-function-name.js
+M test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-weakset.js
+A test/built-ins/WeakRef/constructor.js
+A test/built-ins/WeakRef/instance-extensible.js
+A test/built-ins/WeakRef/length.js
+A test/built-ins/WeakRef/name.js
+A test/built-ins/WeakRef/newtarget-prototype-is-not-object.js
+A test/built-ins/WeakRef/prop-desc.js
+A test/built-ins/WeakRef/proto-from-ctor-realm.js
+A test/built-ins/WeakRef/proto.js
+A test/built-ins/WeakRef/prototype/Symbol.toStringTag.js
+A test/built-ins/WeakRef/prototype/constructor.js
+A test/built-ins/WeakRef/prototype/deref/custom-this.js
+A test/built-ins/WeakRef/prototype/deref/gc-cleanup-not-prevented-with-wr-deref.js
+A test/built-ins/WeakRef/prototype/deref/length.js
+A test/built-ins/WeakRef/prototype/deref/name.js
+A test/built-ins/WeakRef/prototype/deref/prop-desc.js
+A test/built-ins/WeakRef/prototype/deref/return-target.js
+A test/built-ins/WeakRef/prototype/deref/this-does-not-have-internal-target-throws.js
+A test/built-ins/WeakRef/prototype/deref/this-not-object-throws.js
+A test/built-ins/WeakRef/prototype/prop-desc.js
+A test/built-ins/WeakRef/prototype/proto.js
+A test/built-ins/WeakRef/prototype-from-newtarget-abrupt.js
+A test/built-ins/WeakRef/prototype-from-newtarget-custom.js
+A test/built-ins/WeakRef/prototype-from-newtarget.js
+A test/built-ins/WeakRef/returns-new-object-from-constructor.js
+A test/built-ins/WeakRef/target-not-object-throws.js
+A test/built-ins/WeakRef/undefined-newtarget-throws.js
+M test/intl402/BigInt/prototype/toLocaleString/builtin.js
+M test/intl402/BigInt/prototype/toLocaleString/default-options-object-prototype.js
+M test/intl402/BigInt/prototype/toLocaleString/length.js
+M test/intl402/BigInt/prototype/toLocaleString/returns-same-results-as-NumberFormat.js
+M test/intl402/BigInt/prototype/toLocaleString/taint-Intl-NumberFormat.js
+M test/intl402/BigInt/prototype/toLocaleString/this-value-invalid.js
+M test/intl402/BigInt/prototype/toLocaleString/throws-same-exceptions-as-NumberFormat.js
+D test/intl402/DateTimeFormat/constructor-options-order-quarter.js
+D test/intl402/DateTimeFormat/constructor-options-quarter-invalid.js
+D test/intl402/DateTimeFormat/constructor-options-quarter-valid.js
+A test/intl402/DateTimeFormat/prototype/format/dayPeriod-long-en.js
+A test/intl402/DateTimeFormat/prototype/format/dayPeriod-narrow-en.js
+A test/intl402/DateTimeFormat/prototype/format/dayPeriod-short-en.js
+A test/intl402/DateTimeFormat/prototype/format/fractionalSecondDigits.js
 M test/intl402/DateTimeFormat/prototype/formatRange/argument-date-string.js
 M test/intl402/DateTimeFormat/prototype/formatRange/argument-near-time-boundaries.js
 M test/intl402/DateTimeFormat/prototype/formatRange/argument-to-integer.js
-M test/intl402/DateTimeFormat/prototype/formatRange/date-is-infinity-throws.js
-M test/intl402/DateTimeFormat/prototype/formatRange/date-is-nan-throws.js
-M test/intl402/DateTimeFormat/prototype/formatRange/date-undefined-throws.js
-M test/intl402/DateTimeFormat/prototype/formatRange/date-x-greater-than-y-throws.js
-M test/intl402/DateTimeFormat/prototype/formatRange/en-US.js
-M test/intl402/DateTimeFormat/prototype/formatRange/this-is-not-object-throws.js
+M test/intl402/DateTimeFormat/prototype/formatRange/builtin.js
+M test/intl402/DateTimeFormat/prototype/formatRange/prop-desc.js
 M test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-date-string.js
 M test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-near-time-boundaries.js
 M test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-to-integer.js
-M test/intl402/DateTimeFormat/prototype/formatRangeToParts/date-is-infinity-throws.js
-M test/intl402/DateTimeFormat/prototype/formatRangeToParts/date-is-nan-throws.js
-M test/intl402/DateTimeFormat/prototype/formatRangeToParts/date-undefined-throws.js
-M test/intl402/DateTimeFormat/prototype/formatRangeToParts/date-x-greater-than-y-throws.js
-M test/intl402/DateTimeFormat/prototype/formatRangeToParts/en-US.js
-M test/intl402/DateTimeFormat/prototype/formatRangeToParts/this-is-not-object-throws.js
-A test/intl402/DateTimeFormat/prototype/resolvedOptions/order-dayPeriod.js
-A test/intl402/DateTimeFormat/prototype/resolvedOptions/order-fractionalSecondDigits.js
-A test/intl402/DateTimeFormat/prototype/resolvedOptions/order-quarter.js
-A test/intl402/DateTimeFormat/taint-Object-prototype-dayPeriod.js
-A test/intl402/DateTimeFormat/taint-Object-prototype-fractionalSecondDigits.js
-A test/intl402/DateTimeFormat/taint-Object-prototype-quarter.js
-A test/intl402/NumberFormat/numbering-system-options.js
-M test/intl402/NumberFormat/prototype/resolvedOptions/order.js
-M test/intl402/NumberFormat/style-unit.js
-M test/language/asi/S7.9_A5.7_T1.js
-M test/language/expressions/assignment/non-simple-target.js
-M test/language/expressions/assignment/target-boolean.js
-M test/language/expressions/assignment/target-cover-newtarget.js
-M test/language/expressions/assignment/target-cover-yieldexpr.js
-M test/language/expressions/assignment/target-newtarget.js
-M test/language/expressions/assignment/target-null.js
-M test/language/expressions/assignment/target-number.js
-M test/language/expressions/assignment/target-string.js
-M test/language/expressions/async-function/early-errors-expression-not-simple-assignment-target.js
-M test/language/expressions/async-generator/early-errors-expression-not-simple-assignment-target.js
-M test/language/expressions/await/early-errors-await-not-simple-assignment-target.js
-R088 test/language/expressions/class/elements/derived-cls-direct-eval-err-contains-superproperty-1.js test/language/expressions/class/elements/derived-cls-direct-eval-contains-superproperty-1.js
-R085 test/language/expressions/class/elements/derived-cls-direct-eval-err-contains-superproperty-2.js test/language/expressions/class/elements/derived-cls-direct-eval-contains-superproperty-2.js
-R088 test/language/expressions/class/elements/derived-cls-indirect-eval-err-contains-superproperty-1.js test/language/expressions/class/elements/derived-cls-indirect-eval-contains-superproperty-1.js
-R086 test/language/expressions/class/elements/derived-cls-indirect-eval-err-contains-superproperty-2.js test/language/expressions/class/elements/derived-cls-indirect-eval-contains-superproperty-2.js
-M test/language/expressions/class/elements/private-accessor-name/static-private-escape-sequence-ZWJ.js
-M test/language/expressions/class/elements/private-accessor-name/static-private-escape-sequence-ZWNJ.js
-M test/language/expressions/class/elements/private-accessor-name/static-private-escape-sequence-u2118.js
-M test/language/expressions/class/elements/private-accessor-name/static-private-escape-sequence-u6F.js
-M test/language/expressions/class/elements/private-accessor-name/static-private-name-ZWJ.js
-M test/language/expressions/class/elements/private-accessor-name/static-private-name-ZWNJ.js
-M test/language/expressions/class/elements/private-accessor-name/static-private-name-common.js
-M test/language/expressions/class/elements/private-accessor-name/static-private-name-dollar.js
-M test/language/expressions/class/elements/private-accessor-name/static-private-name-u2118.js
-M test/language/expressions/class/elements/private-accessor-name/static-private-name-underscore.js
-R088 test/language/expressions/class/elements/private-derived-cls-direct-eval-err-contains-superproperty-1.js test/language/expressions/class/elements/private-derived-cls-direct-eval-contains-superproperty-1.js
-R086 test/language/expressions/class/elements/private-derived-cls-direct-eval-err-contains-superproperty-2.js test/language/expressions/class/elements/private-derived-cls-direct-eval-contains-superproperty-2.js
-R089 test/language/expressions/class/elements/private-derived-cls-indirect-eval-err-contains-superproperty-1.js test/language/expressions/class/elements/private-derived-cls-indirect-eval-contains-superproperty-1.js
-R086 test/language/expressions/class/elements/private-derived-cls-indirect-eval-err-contains-superproperty-2.js test/language/expressions/class/elements/private-derived-cls-indirect-eval-contains-superproperty-2.js
-A test/language/expressions/class/elements/private-getter-on-nested-class.js
-A test/language/expressions/class/elements/private-getter-shadowed-by-field-on-nested-class.js
-A test/language/expressions/class/elements/private-getter-shadowed-by-getter-on-nested-class.js
-A test/language/expressions/class/elements/private-getter-shadowed-by-method-on-nested-class.js
-A test/language/expressions/class/elements/private-getter-shadowed-by-setter-on-nested-class.js
-A test/language/expressions/class/elements/private-method-comparison.js
-A test/language/expressions/class/elements/private-method-get-and-call.js
-A test/language/expressions/class/elements/private-method-on-nested-class.js
-A test/language/expressions/class/elements/private-method-shadowed-by-field-on-nested-class.js
-A test/language/expressions/class/elements/private-method-shadowed-by-getter-on-nested-class.js
-A test/language/expressions/class/elements/private-method-shadowed-by-setter-on-nested-class.js
-A test/language/expressions/class/elements/private-method-shadowed-on-nested-class.js
-A test/language/expressions/class/elements/private-setter-on-nested-class.js
-A test/language/expressions/class/elements/private-setter-shadowed-by-field-on-nested-class.js
-A test/language/expressions/class/elements/private-setter-shadowed-by-getter-on-nested-class.js
-A test/language/expressions/class/elements/private-setter-shadowed-by-method-on-nested-class.js
-A test/language/expressions/class/elements/private-setter-shadowed-by-setter-on-nested-class.js
-A test/language/expressions/class/elements/prod-private-getter-before-super-return-in-constructor.js
-A test/language/expressions/class/elements/prod-private-getter-before-super-return-in-field-initializer.js
-A test/language/expressions/class/elements/prod-private-method-before-super-return-in-constructor.js
-A test/language/expressions/class/elements/prod-private-method-before-super-return-in-field-initializer.js
-A test/language/expressions/class/elements/prod-private-setter-before-super-return-in-constructor.js
-A test/language/expressions/class/elements/prod-private-setter-before-super-return-in-field-initializer.js
-M test/language/expressions/compound-assignment/add-non-simple.js
-M test/language/expressions/compound-assignment/btws-and-non-simple.js
-M test/language/expressions/compound-assignment/btws-or-non-simple.js
-M test/language/expressions/compound-assignment/btws-xor-non-simple.js
-M test/language/expressions/compound-assignment/div-non-simple.js
-M test/language/expressions/compound-assignment/left-shift-non-simple.js
-M test/language/expressions/compound-assignment/mod-div-non-simple.js
-M test/language/expressions/compound-assignment/mult-non-simple.js
-M test/language/expressions/compound-assignment/right-shift-non-simple.js
-M test/language/expressions/compound-assignment/subtract-non-simple.js
-M test/language/expressions/compound-assignment/u-right-shift-non-simple.js
-D test/language/expressions/dynamic-import/syntax/.DS_Store
-R089 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-1-update-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-1-update-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-10-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-10-lhs-assignment-operator-assignment-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-11-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-11-lhs-assignment-operator-assignment-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-12-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-12-lhs-assignment-operator-assignment-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-13-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-13-lhs-assignment-operator-assignment-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-14-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-14-lhs-assignment-operator-assignment-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-15-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-15-lhs-assignment-operator-assignment-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-16-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-16-lhs-assignment-operator-assignment-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-17-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-17-lhs-assignment-operator-assignment-expression.js
-R082 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-2-update-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-2-update-expression.js
-R082 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-3-update-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-3-update-expression.js
-R082 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-4-update-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-4-update-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-5-lhs-equals-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-5-lhs-equals-assignment-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-6-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-6-lhs-assignment-operator-assignment-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-7-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-7-lhs-assignment-operator-assignment-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-8-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-8-lhs-assignment-operator-assignment-expression.js
-R073 test/language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-9-lhs-assignment-operator-assignment-expression.js test/language/expressions/dynamic-import/syntax/invalid/invalid-assignmenttargettype-syntax-error-9-lhs-assignment-operator-assignment-expression.js
-M test/language/expressions/import.meta/syntax/invalid-assignment-target-assignment-expr.js
-M test/language/expressions/import.meta/syntax/invalid-assignment-target-update-expr.js
-M test/language/expressions/postfix-decrement/target-cover-newtarget.js
-M test/language/expressions/postfix-decrement/target-cover-yieldexpr.js
-M test/language/expressions/postfix-decrement/target-newtarget.js
-M test/language/expressions/postfix-increment/target-cover-newtarget.js
-M test/language/expressions/postfix-increment/target-cover-yieldexpr.js
-M test/language/expressions/postfix-increment/target-newtarget.js
-M test/language/expressions/prefix-decrement/target-cover-newtarget.js
-M test/language/expressions/prefix-decrement/target-cover-yieldexpr.js
-M test/language/expressions/prefix-decrement/target-newtarget.js
-M test/language/expressions/prefix-increment/target-cover-newtarget.js
-M test/language/expressions/prefix-increment/target-cover-yieldexpr.js
-M test/language/expressions/prefix-increment/target-newtarget.js
-M test/language/expressions/this/S11.1.1_A1.js
-M test/language/module-code/instn-resolve-empty-export.js
-M test/language/module-code/instn-resolve-empty-import.js
-R076 test/language/module-code/instn-resolve-err-reference.js test/language/module-code/instn-resolve-err-syntax-1.js
-R100 test/language/module-code/instn-resolve-err-syntax_FIXTURE.js test/language/module-code/instn-resolve-err-syntax-1_FIXTURE.js
-R091 test/language/module-code/instn-resolve-err-syntax.js test/language/module-code/instn-resolve-err-syntax-2.js
-R100 test/language/module-code/instn-resolve-err-reference_FIXTURE.js test/language/module-code/instn-resolve-err-syntax-2_FIXTURE.js
-M test/language/module-code/instn-resolve-order-depth.js
-M test/language/module-code/instn-resolve-order-src.js
-R087 test/language/module-code/parse-err-syntax.js test/language/module-code/parse-err-syntax-1.js
-R075 test/language/module-code/parse-err-reference.js test/language/module-code/parse-err-syntax-2.js
-A test/language/statements/class/elements/class-field-is-observable-by-proxy.js
-A test/language/statements/class/elements/class-field-on-frozen-objects.js
-R088 test/language/statements/class/elements/derived-cls-direct-eval-err-contains-superproperty-1.js test/language/statements/class/elements/derived-cls-direct-eval-contains-superproperty-1.js
-R085 test/language/statements/class/elements/derived-cls-direct-eval-err-contains-superproperty-2.js test/language/statements/class/elements/derived-cls-direct-eval-contains-superproperty-2.js
-R088 test/language/statements/class/elements/derived-cls-indirect-eval-err-contains-superproperty-1.js test/language/statements/class/elements/derived-cls-indirect-eval-contains-superproperty-1.js
-R086 test/language/statements/class/elements/derived-cls-indirect-eval-err-contains-superproperty-2.js test/language/statements/class/elements/derived-cls-indirect-eval-contains-superproperty-2.js
-M test/language/statements/class/elements/private-accessor-name/static-private-escape-sequence-ZWJ.js
-M test/language/statements/class/elements/private-accessor-name/static-private-escape-sequence-ZWNJ.js
-M test/language/statements/class/elements/private-accessor-name/static-private-escape-sequence-u2118.js
-M test/language/statements/class/elements/private-accessor-name/static-private-escape-sequence-u6F.js
-M test/language/statements/class/elements/private-accessor-name/static-private-name-ZWJ.js
-M test/language/statements/class/elements/private-accessor-name/static-private-name-ZWNJ.js
-M test/language/statements/class/elements/private-accessor-name/static-private-name-common.js
-M test/language/statements/class/elements/private-accessor-name/static-private-name-dollar.js
-M test/language/statements/class/elements/private-accessor-name/static-private-name-u2118.js
-M test/language/statements/class/elements/private-accessor-name/static-private-name-underscore.js
-A test/language/statements/class/elements/private-class-field-on-frozen-objects.js
-R088 test/language/statements/class/elements/private-derived-cls-direct-eval-err-contains-superproperty-1.js test/language/statements/class/elements/private-derived-cls-direct-eval-contains-superproperty-1.js
-R086 test/language/statements/class/elements/private-derived-cls-direct-eval-err-contains-superproperty-2.js test/language/statements/class/elements/private-derived-cls-direct-eval-contains-superproperty-2.js
-R089 test/language/statements/class/elements/private-derived-cls-indirect-eval-err-contains-superproperty-1.js test/language/statements/class/elements/private-derived-cls-indirect-eval-contains-superproperty-1.js
-R086 test/language/statements/class/elements/private-derived-cls-indirect-eval-err-contains-superproperty-2.js test/language/statements/class/elements/private-derived-cls-indirect-eval-contains-superproperty-2.js
-A test/language/statements/class/elements/private-getter-on-nested-class.js
-A test/language/statements/class/elements/private-getter-shadowed-by-field-on-nested-class.js
-A test/language/statements/class/elements/private-getter-shadowed-by-getter-on-nested-class.js
-A test/language/statements/class/elements/private-getter-shadowed-by-method-on-nested-class.js
-A test/language/statements/class/elements/private-getter-shadowed-by-setter-on-nested-class.js
-A test/language/statements/class/elements/private-method-comparison-multiple-evaluations-of-class.js
-A test/language/statements/class/elements/private-method-comparison.js
-A test/language/statements/class/elements/private-method-get-and-call.js
-A test/language/statements/class/elements/private-method-on-nested-class.js
-A test/language/statements/class/elements/private-method-shadowed-by-field-on-nested-class.js
-A test/language/statements/class/elements/private-method-shadowed-by-getter-on-nested-class.js
-A test/language/statements/class/elements/private-method-shadowed-by-setter-on-nested-class.js
-A test/language/statements/class/elements/private-method-shadowed-on-nested-class.js
-A test/language/statements/class/elements/private-setter-on-nested-class.js
-A test/language/statements/class/elements/private-setter-shadowed-by-field-on-nested-class.js
-A test/language/statements/class/elements/private-setter-shadowed-by-getter-on-nested-class.js
-A test/language/statements/class/elements/private-setter-shadowed-by-method-on-nested-class.js
-A test/language/statements/class/elements/private-setter-shadowed-by-setter-on-nested-class.js
-A test/language/statements/class/elements/prod-private-getter-before-super-return-in-constructor.js
-A test/language/statements/class/elements/prod-private-getter-before-super-return-in-field-initializer.js
-A test/language/statements/class/elements/prod-private-method-before-super-return-in-constructor.js
-A test/language/statements/class/elements/prod-private-method-before-super-return-in-field-initializer.js
-A test/language/statements/class/elements/prod-private-setter-before-super-return-in-constructor.js
-A test/language/statements/class/elements/prod-private-setter-before-super-return-in-field-initializer.js
-A test/language/statements/class/elements/public-class-field-initialization-is-visible-to-proxy.js
-A test/language/statements/class/elements/public-class-field-initialization-on-super-class-with-setter.js
-A test/language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-init-err.js
-A test/language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-init-err.js
-A test/language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-init-err.js
-A test/language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-init-err.js
-A test/language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-init-err.js
-A test/language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-init-err.js
-A test/language/statements/for-await-of/head-const-init.js
-A test/language/statements/for-await-of/head-let-init.js
-A test/language/statements/for-await-of/head-var-init.js
-A test/language/statements/for-of/dstr/const-ary-ptrn-init-err.js
-A test/language/statements/for-of/dstr/const-obj-ptrn-init-err.js
-A test/language/statements/for-of/dstr/let-ary-ptrn-init-err.js
-A test/language/statements/for-of/dstr/let-obj-ptrn-init-err.js
-A test/language/statements/for-of/dstr/var-ary-ptrn-init-err.js
-A test/language/statements/for-of/dstr/var-obj-ptrn-init-err.js
-A test/language/statements/for-of/head-const-init.js
-A test/language/statements/for-of/head-let-init.js
-A test/language/statements/for-of/head-var-init.js
-M test/language/types/boolean/S8.3_A2.1.js
-M test/language/types/boolean/S8.3_A2.2.js
-M test/language/types/reference/S8.7.2_A1_T1.js
-M test/language/types/reference/S8.7.2_A1_T2.js
\ No newline at end of file
+M test/intl402/DateTimeFormat/prototype/formatRangeToParts/builtin.js
+M test/intl402/DateTimeFormat/prototype/formatRangeToParts/prop-desc.js
+A test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-long-en.js
+A test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-narrow-en.js
+A test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-short-en.js
+A test/intl402/DateTimeFormat/prototype/formatToParts/fractionalSecondDigits.js
+D test/intl402/DateTimeFormat/prototype/resolvedOptions/order-quarter.js
+D test/intl402/DateTimeFormat/taint-Object-prototype-quarter.js
+M test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js
+M test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js
+M test/language/expressions/arrow-function/ArrowFunction_restricted-properties.js
+A test/language/expressions/class/elements/private-field-access-on-inner-arrow-function.js
+A test/language/expressions/class/elements/private-field-access-on-inner-function.js
+A test/language/expressions/class/elements/private-getter-access-on-inner-arrow-function.js
+A test/language/expressions/class/elements/private-getter-access-on-inner-function.js
+A test/language/expressions/class/elements/private-getter-is-not-a-own-property.js
+A test/language/expressions/class/elements/private-method-access-on-inner-arrow-function.js
+A test/language/expressions/class/elements/private-method-access-on-inner-function.js
+A test/language/expressions/class/elements/private-method-is-not-a-own-property.js
+A test/language/expressions/class/elements/private-setter-access-on-inner-arrow-function.js
+A test/language/expressions/class/elements/private-setter-access-on-inner-function.js
+A test/language/expressions/class/elements/private-setter-is-not-a-own-property.js
+M test/language/expressions/class/elements/prod-private-getter-before-super-return-in-field-initializer.js
+M test/language/expressions/class/elements/prod-private-method-before-super-return-in-field-initializer.js
+M test/language/expressions/class/elements/prod-private-setter-before-super-return-in-field-initializer.js
+A test/language/expressions/class/poisoned-underscore-proto.js
+A test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval-indirect.js
+A test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval.js
+A test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-factory.js
+A test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-function-ctor.js
+A test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js
+A test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm.js
+A test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval-indirect.js
+A test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval.js
+A test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-factory.js
+A test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-function-ctor.js
+A test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm-function-ctor.js
+A test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm.js
+A test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval-indirect.js
+A test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval.js
+A test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-factory.js
+A test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-function-ctor.js
+A test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js
+A test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm.js
+A test/language/expressions/new.target/unary-expr.js
+A test/language/expressions/super/call-poisoned-underscore-proto.js
+A test/language/expressions/super/prop-poisoned-underscore-proto.js
+A test/language/identifiers/vals-cjk-escaped.js
+A test/language/identifiers/vals-cjk.js
+M test/language/statements/class/elements/private-class-field-on-frozen-objects.js
+A test/language/statements/class/elements/private-field-access-on-inner-arrow-function.js
+A test/language/statements/class/elements/private-field-access-on-inner-function.js
+A test/language/statements/class/elements/private-field-is-not-clobbered-by-computed-property.js
+A test/language/statements/class/elements/private-field-visible-to-direct-eval-on-initializer.js
+A test/language/statements/class/elements/private-field-visible-to-direct-eval.js
+A test/language/statements/class/elements/private-getter-access-on-inner-arrow-function.js
+A test/language/statements/class/elements/private-getter-access-on-inner-function.js
+M test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js
+A test/language/statements/class/elements/private-getter-is-not-a-own-property.js
+A test/language/statements/class/elements/private-getter-is-not-clobbered-by-computed-property.js
+A test/language/statements/class/elements/private-getter-visible-to-direct-eval-on-initializer.js
+A test/language/statements/class/elements/private-getter-visible-to-direct-eval.js
+A test/language/statements/class/elements/private-method-access-on-inner-arrow-function.js
+A test/language/statements/class/elements/private-method-access-on-inner-function.js
+A test/language/statements/class/elements/private-method-is-not-a-own-property.js
+A test/language/statements/class/elements/private-method-is-not-clobbered-by-computed-property.js
+A test/language/statements/class/elements/private-method-visible-to-direct-eval-on-initializer.js
+A test/language/statements/class/elements/private-method-visible-to-direct-eval.js
+A test/language/statements/class/elements/private-setter-access-on-inner-arrow-function.js
+A test/language/statements/class/elements/private-setter-access-on-inner-function.js
+A test/language/statements/class/elements/private-setter-is-not-a-own-property.js
+A test/language/statements/class/elements/private-setter-is-not-clobbered-by-computed-property.js
+A test/language/statements/class/elements/private-setter-visible-to-direct-eval-on-initializer.js
+A test/language/statements/class/elements/private-setter-visible-to-direct-eval.js
+M test/language/statements/class/elements/prod-private-getter-before-super-return-in-field-initializer.js
+M test/language/statements/class/elements/prod-private-method-before-super-return-in-field-initializer.js
+M test/language/statements/class/elements/prod-private-setter-before-super-return-in-field-initializer.js
+A test/language/statements/class/elements/super-access-inside-a-private-getter.js
+A test/language/statements/class/elements/super-access-inside-a-private-method.js
+A test/language/statements/class/elements/super-access-inside-a-private-setter.js
+A test/language/statements/class/poisoned-underscore-proto.js
+M test/language/statements/function/13.2-30-s.js
\ No newline at end of file
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/Symbol.toStringTag.js b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/Symbol.toStringTag.js
new file mode 100644
index 0000000..c3f687c
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/Symbol.toStringTag.js
@@ -0,0 +1,58 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  FinalizationGroupCleanupIteratorPrototype @@toStringTag
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  ...
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  ...
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  ...
+  6. Let result be Call(callback, undefined, « iterator »).
+  ...
+
+  %FinalizationGroupCleanupIteratorPrototype% [ @@toStringTag ]
+
+  The initial value of the @@toStringTag property is the String value "FinalizationGroup Cleanup Iterator".
+
+  This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup, host-gc-required, Symbol, Symbol.toStringTag]
+---*/
+
+var FinalizationGroupCleanupIteratorPrototype;
+var called = 0;
+var fg = new FinalizationGroup(function() {});
+
+function callback(iterator) {
+  called += 1;
+  FinalizationGroupCleanupIteratorPrototype = Object.getPrototypeOf(iterator);
+}
+
+(function() {
+  var o = {};
+  fg.register(o);
+})();
+
+$262.gc();
+
+fg.cleanupSome(callback);
+
+assert.sameValue(called, 1, 'cleanup successful');
+
+verifyProperty(FinalizationGroupCleanupIteratorPrototype, Symbol.toStringTag, {
+  value: 'FinalizationGroup Cleanup Iterator',
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-job-not-active-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-job-not-active-throws.js
new file mode 100644
index 0000000..a482b83
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-job-not-active-throws.js
@@ -0,0 +1,62 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  Throws a TypeError if [[IsFinalizationGroupCleanupJobActive]] is false
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  ...
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  ...
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  ...
+  5. Set finalizationGroup.[[IsFinalizationGroupCleanupJobActive]] to true.
+  6. Let result be Call(callback, undefined, « iterator »).
+  7. Set finalizationGroup.[[IsFinalizationGroupCleanupJobActive]] to false.
+  ...
+
+  %FinalizationGroupCleanupIteratorPrototype%.next ( )
+
+  1. Let iterator be the this value.
+  2. If Type(iterator) is not Object, throw a TypeError exception.
+  3. If iterator does not have a [[FinalizationGroup]] internal slot, throw a TypeError exception.
+features: [FinalizationGroup, WeakRef, host-gc-required, Symbol]
+---*/
+
+var iter;
+var FinalizationGroupCleanupIteratorPrototype;
+var called = 0;
+var fg = new FinalizationGroup(function() {});
+
+function callback(iterator) {
+  called += 1;
+  iter = iterator;
+  FinalizationGroupCleanupIteratorPrototype = Object.getPrototypeOf(iterator);
+}
+
+(function() {
+  var o = {};
+  fg.register(o);
+})();
+
+$262.gc();
+
+fg.cleanupSome(callback);
+
+// Make sure everything is set
+assert.sameValue(called, 1, 'cleanup successful');
+assert.sameValue(typeof iter, 'object');
+assert.sameValue(Object.getPrototypeOf(iter), FinalizationGroupCleanupIteratorPrototype);
+
+// To the actual assertion
+assert.throws(TypeError, function() {
+  iter.next();
+}, 'Iter should fail if not called during the cleanupSome call');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-length.js b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-length.js
new file mode 100644
index 0000000..d8c9df9
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-length.js
@@ -0,0 +1,70 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  FinalizationGroupCleanupIteratorPrototype.next.length property descriptor
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  ...
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  ...
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  ...
+  6. Let result be Call(callback, undefined, « iterator »).
+  ...
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, has a length
+  property whose value is an integer. Unless otherwise specified, this
+  value is equal to the largest number of named arguments shown in the
+  subclause headings for the function description. Optional parameters
+  (which are indicated with brackets: [ ]) or rest parameters (which
+  are shown using the form «...name») are not included in the default
+  argument count.
+
+  Unless otherwise specified, the length property of a built-in
+  function object has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup, host-gc-required, Symbol]
+---*/
+
+var FinalizationGroupCleanupIteratorPrototype;
+var called = 0;
+var fg = new FinalizationGroup(function() {});
+
+function callback(iterator) {
+  called += 1;
+  FinalizationGroupCleanupIteratorPrototype = Object.getPrototypeOf(iterator);
+}
+
+(function() {
+  var o = {};
+  fg.register(o);
+})();
+
+$262.gc();
+
+fg.cleanupSome(callback);
+
+assert.sameValue(called, 1, 'cleanup successful');
+
+assert.sameValue(typeof FinalizationGroupCleanupIteratorPrototype.next, 'function');
+
+var next = FinalizationGroupCleanupIteratorPrototype.next;
+
+verifyProperty(next, 'length', {
+  value: 0,
+  enumerable: false,
+  writable: false,
+  configurable: true,
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-missing-internal-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-missing-internal-throws.js
new file mode 100644
index 0000000..184a38b
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-missing-internal-throws.js
@@ -0,0 +1,83 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  If iterator does not have a [[FinalizationGroup]] internal slot, throw a TypeError exception.
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  ...
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  ...
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  ...
+  6. Let result be Call(callback, undefined, « iterator »).
+  ...
+
+  %FinalizationGroupCleanupIteratorPrototype%.next ( )
+
+  1. Let iterator be the this value.
+  2. If Type(iterator) is not Object, throw a TypeError exception.
+  3. If iterator does not have a [[FinalizationGroup]] internal slot, throw a TypeError exception.
+features: [FinalizationGroup, WeakRef, host-gc-required, Symbol]
+---*/
+
+var FinalizationGroupCleanupIteratorPrototype;
+var called = 0;
+var endOfCall = 0;
+var fg = new FinalizationGroup(function() {});
+
+function callback(iterator) {
+  called += 1;
+  // Only the iterator itself will have a [[FinalizationGroup]] internal
+  FinalizationGroupCleanupIteratorPrototype = Object.getPrototypeOf(iterator);
+
+  // It's sensitive the assertions remain inside this function in order to secure
+  // [[IsFinalizationGroupCleanupJobActive]] is true
+  assert.sameValue(typeof FinalizationGroupCleanupIteratorPrototype.next, 'function');
+
+  var next = FinalizationGroupCleanupIteratorPrototype.next;
+
+  assert.throws(TypeError, function() {
+    next.call({});
+  }, '{}');
+
+  assert.throws(TypeError, function() {
+    next.call(FinalizationGroup);
+  }, 'FinalizationGroup');
+
+  assert.throws(TypeError, function() {
+    next.call(FinalizationGroupCleanupIteratorPrototype);
+  }, 'FinalizationGroupCleanupIteratorPrototype');
+
+  assert.throws(TypeError, function() {
+    next.call(fg);
+  }, 'FinalizationGroup instance');
+
+  var wr = new WeakRef({});
+  assert.throws(TypeError, function() {
+    next.call(wr);
+  }, 'WeakRef instance');
+
+  // Abrupt completions are not directly returned.
+  endOfCall += 1;
+}
+
+(function() {
+  var o = {};
+  fg.register(o);
+})();
+
+$262.gc();
+
+fg.cleanupSome(callback);
+
+assert.sameValue(called, 1, 'cleanup successful');
+assert.sameValue(endOfCall, 1, 'Abrupt completions are not directly returned.');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-name.js b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-name.js
new file mode 100644
index 0000000..0522715
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-name.js
@@ -0,0 +1,69 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  FinalizationGroupCleanupIteratorPrototype.next.name property descriptor
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  ...
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  ...
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  ...
+  6. Let result be Call(callback, undefined, « iterator »).
+  ...
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, that is not
+  identified as an anonymous function has a name property whose value
+  is a String. Unless otherwise specified, this value is the name that
+  is given to the function in this specification. For functions that
+  are specified as properties of objects, the name value is the
+  property name string used to access the function. [...]
+
+  Unless otherwise specified, the name property of a built-in function
+  object, if it exists, has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup, host-gc-required, Symbol]
+---*/
+
+var FinalizationGroupCleanupIteratorPrototype;
+var called = 0;
+var fg = new FinalizationGroup(function() {});
+
+function callback(iterator) {
+  called += 1;
+  FinalizationGroupCleanupIteratorPrototype = Object.getPrototypeOf(iterator);
+}
+
+(function() {
+  var o = {};
+  fg.register(o);
+})();
+
+$262.gc();
+
+fg.cleanupSome(callback);
+
+assert.sameValue(called, 1, 'cleanup successful');
+
+assert.sameValue(typeof FinalizationGroupCleanupIteratorPrototype.next, 'function');
+
+var next = FinalizationGroupCleanupIteratorPrototype.next;
+
+verifyProperty(next, 'name', {
+  value: 'next',
+  enumerable: false,
+  writable: false,
+  configurable: true,
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-not-object-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-not-object-throws.js
new file mode 100644
index 0000000..169d028
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-not-object-throws.js
@@ -0,0 +1,82 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  FinalizationGroupCleanupIteratorPrototype.next() throws if this is not Object
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  ...
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  ...
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  ...
+  6. Let result be Call(callback, undefined, « iterator »).
+  ...
+
+  %FinalizationGroupCleanupIteratorPrototype%.next ( )
+
+  1. Let iterator be the this value.
+  2. If Type(iterator) is not Object, throw a TypeError exception.
+features: [FinalizationGroup, host-gc-required, Symbol]
+---*/
+
+var FinalizationGroupCleanupIteratorPrototype;
+var called = 0;
+var fg = new FinalizationGroup(function() {});
+
+function callback(iterator) {
+  called += 1;
+  FinalizationGroupCleanupIteratorPrototype = Object.getPrototypeOf(iterator);
+}
+
+(function() {
+  var o = {};
+  fg.register(o);
+})();
+
+$262.gc();
+
+fg.cleanupSome(callback);
+
+assert.sameValue(called, 1, 'cleanup successful');
+
+assert.sameValue(typeof FinalizationGroupCleanupIteratorPrototype.next, 'function');
+
+var next = FinalizationGroupCleanupIteratorPrototype.next;
+
+assert.throws(TypeError, function() {
+  next.call(undefined);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+  next.call(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+  next.call(true);
+}, 'true');
+
+assert.throws(TypeError, function() {
+  next.call(false);
+}, 'false');
+
+assert.throws(TypeError, function() {
+  next.call(1);
+}, '1');
+
+assert.throws(TypeError, function() {
+  next.call('string');
+}, 'string');
+
+var symbol = Symbol();
+assert.throws(TypeError, function() {
+  next.call(symbol);
+}, 'symbol');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-prop-desc.js b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-prop-desc.js
new file mode 100644
index 0000000..e8663aa
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/next-prop-desc.js
@@ -0,0 +1,61 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  Prop descriptor for FinalizationGroupCleanupIteratorPrototype.next
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  ...
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  ...
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  ...
+  6. Let result be Call(callback, undefined, « iterator »).
+  ...
+
+  17 ECMAScript Standard Built-in Objects:
+
+  Every other data property described in clauses 18 through 26 and in Annex B.2
+  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+  [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [FinalizationGroup, host-gc-required, Symbol]
+---*/
+
+var FinalizationGroupCleanupIteratorPrototype;
+var called = 0;
+var fg = new FinalizationGroup(function() {});
+
+function callback(iterator) {
+  called += 1;
+  FinalizationGroupCleanupIteratorPrototype = Object.getPrototypeOf(iterator);
+}
+
+(function() {
+  var o = {};
+  fg.register(o);
+})();
+
+$262.gc();
+
+fg.cleanupSome(callback);
+
+assert.sameValue(called, 1, 'cleanup successful');
+
+assert.sameValue(typeof FinalizationGroupCleanupIteratorPrototype.next, 'function');
+
+var next = FinalizationGroupCleanupIteratorPrototype.next;
+
+verifyProperty(FinalizationGroupCleanupIteratorPrototype, 'next', {
+  enumerable: false,
+  writable: true,
+  configurable: true,
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/proto.js b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/proto.js
new file mode 100644
index 0000000..5b48918
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/FinalizationGroupCleanupIteratorPrototype/proto.js
@@ -0,0 +1,84 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  FinalizationGroupCleanupIterator has a [[Prototype]] internal slot whose value is the intrinsic
+  object %IteratorPrototype%.
+info: |
+  The %FinalizationGroupCleanupIteratorPrototype% Object
+
+  - has properties that are inherited by all FinalizationGroup Cleanup Iterator Objects.
+  - is an ordinary object.
+  - has a [[Prototype]] internal slot whose value is the intrinsic object %IteratorPrototype%.
+  ...
+
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  2. If CheckForEmptyCells(finalizationGroup) is false, return.
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  4. If callback is undefined, set callback to finalizationGroup.[[CleanupCallback]].
+  5. Set finalizationGroup.[[IsFinalizationGroupCleanupJobActive]] to true.
+  6. Let result be Call(callback, undefined, « iterator »).
+  ...
+
+  CheckForEmptyCells ( finalizationGroup )
+
+  ...
+  2. For each cell in finalizationGroup.[[Cells]], do
+    a. If cell.[[Target]] is empty, then
+      i. Return true.
+  3. Return false.
+
+  CreateFinalizationGroupCleanupIterator ( finalizationGroup )
+
+  ...
+  4. Let prototype be finalizationGroup.[[Realm]].[[Intrinsics]].[[%FinalizationGroupCleanupIteratorPrototype%]].
+  5. Let iterator be ObjectCreate(prototype, « [[FinalizationGroup]] »).
+  6. Set iterator.[[FinalizationGroup]] to finalizationGroup.
+  7. Return iterator.
+features: [FinalizationGroup, host-gc-required]
+---*/
+
+var IteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
+var FinalizationGroupCleanupIteratorPrototype;
+var called = 0;
+var cleanupCallbackCalled = 0;
+
+function callback(iterator) {
+  called += 1;
+
+  FinalizationGroupCleanupIteratorPrototype = Object.getPrototypeOf(iterator);
+}
+
+var fg = new FinalizationGroup(function() {});
+
+(function() {
+  var o = {};
+  fg.register(o);
+})();
+
+$262.gc();
+
+fg.cleanupSome(callback);
+
+assert.sameValue(called, 1, 'cleanup successful');
+
+var proto = Object.getPrototypeOf(FinalizationGroupCleanupIteratorPrototype);
+assert.sameValue(
+  proto, IteratorPrototype,
+  '[[Prototype]] internal slot whose value is the intrinsic object %IteratorPrototype%'
+);
+
+assert.sameValue(cleanupCallbackCalled, 0, 'if a callback is given, do not call cleanupCallback');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/constructor.js b/JSTests/test262/test/built-ins/FinalizationGroup/constructor.js
new file mode 100644
index 0000000..651ae89
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/constructor.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-constructor
+description: >
+  The FinalizationGroup constructor is the %FinalizationGroup% intrinsic object and the initial
+  value of the FinalizationGroup property of the global object.
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(
+  typeof FinalizationGroup, 'function',
+  'typeof FinalizationGroup is function'
+);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/gc-has-one-chance-to-call-cleanupCallback.js b/JSTests/test262/test/built-ins/FinalizationGroup/gc-has-one-chance-to-call-cleanupCallback.js
new file mode 100644
index 0000000..796bc6c
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/gc-has-one-chance-to-call-cleanupCallback.js
@@ -0,0 +1,135 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: >
+  cleanupCallback has only one optional chance to be called for a GC that cleans up
+  a registered target.
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  ...
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ? CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+
+  Execution
+
+  At any time, if an object obj is not live, an ECMAScript implementation may perform the following steps atomically:
+
+  1. For each WeakRef ref such that ref.[[Target]] is obj,
+    a. Set ref.[[Target]] to empty.
+  2. For each FinalizationGroup fg such that fg.[[Cells]] contains cell, such that cell.[[Target]] is obj,
+    a. Set cell.[[Target]] to empty.
+    b. Optionally, perform ! HostCleanupFinalizationGroup(fg).
+features: [FinalizationGroup, async-functions, host-gc-required]
+flags: [async]
+---*/
+
+var cleanupCallback = 0;
+var called = 0;
+
+// both this cb and the fg callback are not exhausting the iterator to prevent
+// the target cell from being removed from the finalizationGroup.[[Cells]].
+// More info at %FinalizationGroupCleanupIteratorPrototype%.next ( )
+function cb() {
+  called += 1;
+}
+
+var fg = new FinalizationGroup(function() {
+  cleanupCallback += 1;
+});
+
+function emptyCells() {
+  (function() {
+    var a = {};
+    fg.register(a, 'a');
+  })();
+
+  // GC is called here
+  $262.gc();
+}
+
+emptyCells();
+
+// Let's add some async ticks, as the cleanupCallback is not meant to interrupt
+// synchronous operations.
+async function fn() {
+  await Promise.resolve(1);
+
+  fg.cleanupSome(cb);
+  // This asserts the registered object was emptied in the previous GC.
+  assert.sameValue(called, 1, 'cleanupSome callback for the first time');
+
+  // At this point, we can't assert if cleanupCallback was called, because it's
+  // optional. Although, we can finally assert it's not gonna be called anymore
+  // for the other executions of the Garbage Collector.
+  // The chance of having it called only happens right after the
+  // cell.[[Target]] is set to empty.
+  assert(cleanupCallback >= 0, 'cleanupCallback might be 0');
+  assert(cleanupCallback <= 1, 'cleanupCallback might be 1');
+
+  // Restoring the cleanupCallback variable to 0 will help us asserting the fg
+  // callback is not called again.
+  cleanupCallback = 0;
+
+  $262.gc();
+  await Promise.resolve(2); // tick
+
+  fg.cleanupSome(cb);
+
+  // This cb is called again because fg still holds an emptied cell, but it's
+  // not yet removed from the 
+  assert.sameValue(called, 2, 'cleanupSome callback for the second time');
+  assert.sameValue(cleanupCallback, 0, 'cleanupCallback is not called again #1');
+
+  $262.gc();
+  await Promise.resolve(3); // tick
+
+  fg.cleanupSome(cb);
+
+  assert.sameValue(called, 3, 'cleanupSome callback for the third time');
+  assert.sameValue(cleanupCallback, 0, 'cleanupCallback is not called again #2');
+
+  $262.gc();
+}
+
+fn()
+  .then(async function() { // tick
+    await Promise.resolve(4); // tick
+
+    assert.sameValue(cleanupCallback, 0, 'cleanupCallback is not called again #3');
+
+    fg.cleanupSome(cb);
+
+    assert.sameValue(called, 4, 'cleanupSome callback for the fourth time');
+    assert.sameValue(cleanupCallback, 0, 'cleanupCallback is not called again #4');
+    
+    $262.gc();
+
+    // Now we are exhausting the iterator, so cleanupSome callback will also not be called.
+    fg.cleanupSome(iterator => {
+      var exhausted = [...iterator];
+      assert.sameValue(exhausted.length, 1);
+      assert.sameValue(exhausted[0], 'a');
+      called += 1;
+    });
+
+    assert.sameValue(called, 5, 'cleanupSome callback for the fifth time');
+    assert.sameValue(cleanupCallback, 0, 'cleanupCallback is not called again #4');
+
+    $262.gc();
+
+    await Promise.resolve(5); // tick
+    await await Promise.resolve(6); // more ticks
+    await await await Promise.resolve(7); // even more ticks
+
+    fg.cleanupSome(cb);
+
+    assert.sameValue(called, 5, 'cleanupSome callback is not called anymore, no empty cells');
+    assert.sameValue(cleanupCallback, 0, 'cleanupCallback is not called again #5');
+  })
+  .then($DONE, $DONE);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/instance-extensible.js b/JSTests/test262/test/built-ins/FinalizationGroup/instance-extensible.js
new file mode 100644
index 0000000..cf1187d
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/instance-extensible.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: Instances of FinalizationGroup are extensible
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  ...
+  3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget,  "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
+  ...
+  9. Return finalizationGroup.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  ObjectCreate ( proto [ , internalSlotsList ] )
+
+  4. Set obj.[[Prototype]] to proto.
+  5. Set obj.[[Extensible]] to true.
+  6. Return obj.
+features: [FinalizationGroup]
+---*/
+
+var fg = new FinalizationGroup(function() {});
+assert.sameValue(Object.isExtensible(fg), true);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/length.js b/JSTests/test262/test/built-ins/FinalizationGroup/length.js
new file mode 100644
index 0000000..88e0d59
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/length.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: FinalizationGroup.length property descriptor
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, has a length
+  property whose value is an integer. Unless otherwise specified, this
+  value is equal to the largest number of named arguments shown in the
+  subclause headings for the function description. Optional parameters
+  (which are indicated with brackets: [ ]) or rest parameters (which
+  are shown using the form «...name») are not included in the default
+  argument count.
+
+  Unless otherwise specified, the length property of a built-in
+  function object has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+verifyProperty(FinalizationGroup, 'length', {
+  value: 1,
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/name.js b/JSTests/test262/test/built-ins/FinalizationGroup/name.js
new file mode 100644
index 0000000..517a344
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/name.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: FinalizationGroup.name property descriptor
+info: |
+  FinalizationGroup ( value )
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, that is not
+  identified as an anonymous function has a name property whose value
+  is a String. Unless otherwise specified, this value is the name that
+  is given to the function in this specification. For functions that
+  are specified as properties of objects, the name value is the
+  property name string used to access the function. [...]
+
+  Unless otherwise specified, the name property of a built-in function
+  object, if it exists, has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+verifyProperty(FinalizationGroup, 'name', {
+  value: 'FinalizationGroup',
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/newtarget-prototype-is-not-object.js b/JSTests/test262/test/built-ins/FinalizationGroup/newtarget-prototype-is-not-object.js
new file mode 100644
index 0000000..9c2d7f7
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/newtarget-prototype-is-not-object.js
@@ -0,0 +1,58 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: >
+  [[Prototype]] defaults to %FinalizationGroupPrototype% if NewTarget.prototype is not an object.
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  ...
+  3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget,  "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
+  ...
+  9. Return finalizationGroup.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
+
+  3. Let proto be ? Get(constructor, 'prototype').
+  4. If Type(proto) is not Object, then
+    a. Let realm be ? GetFunctionRealm(constructor).
+    b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
+  5. Return proto.
+features: [FinalizationGroup, Reflect.construct, Symbol]
+---*/
+
+var fg;
+function newTarget() {}
+function fn() {}
+
+newTarget.prototype = undefined;
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is undefined');
+
+newTarget.prototype = null;
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is null');
+
+newTarget.prototype = true;
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is a Boolean');
+
+newTarget.prototype = '';
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is a String');
+
+newTarget.prototype = Symbol();
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is a Symbol');
+
+newTarget.prototype = 1;
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is a Number');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prop-desc.js b/JSTests/test262/test/built-ins/FinalizationGroup/prop-desc.js
new file mode 100644
index 0000000..e5bd1ad
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prop-desc.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-constructor
+description: >
+  Property descriptor of FinalizationGroup
+info: |
+  17 ECMAScript Standard Built-in Objects:
+
+  Every other data property described in clauses 18 through 26 and in Annex B.2
+  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+  [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+verifyProperty(this, 'FinalizationGroup', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/proto-from-ctor-realm.js b/JSTests/test262/test/built-ins/FinalizationGroup/proto-from-ctor-realm.js
new file mode 100644
index 0000000..836351f
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/proto-from-ctor-realm.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: Default [[Prototype]] value derived from realm of the newTarget
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  ...
+  3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget,  "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
+  ...
+  9. Return finalizationGroup.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
+
+  3. Let proto be ? Get(constructor, 'prototype').
+  4. If Type(proto) is not Object, then
+    a. Let realm be ? GetFunctionRealm(constructor).
+    b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
+  5. Return proto.
+features: [FinalizationGroup, cross-realm, Reflect]
+---*/
+
+var other = $262.createRealm().global;
+var newTarget = new other.Function();
+function fn() {}
+var fg;
+
+newTarget.prototype = undefined;
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is undefined');
+
+newTarget.prototype = null;
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is null');
+
+newTarget.prototype = true;
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is a Boolean');
+
+newTarget.prototype = '';
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is a String');
+
+newTarget.prototype = Symbol();
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is a Symbol');
+
+newTarget.prototype = 1;
+fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is a Number');
+
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/proto.js b/JSTests/test262/test/built-ins/FinalizationGroup/proto.js
new file mode 100644
index 0000000..05cab8f
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/proto.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  The prototype of FinalizationGroup is Object.prototype
+info: |
+  The value of the [[Prototype]] internal slot of the FinalizationGroup object is the
+  intrinsic object %FunctionPrototype%.
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(
+  Object.getPrototypeOf(FinalizationGroup),
+  Function.prototype,
+  'Object.getPrototypeOf(FinalizationGroup) returns the value of `Function.prototype`'
+);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype-from-newtarget-abrupt.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype-from-newtarget-abrupt.js
new file mode 100644
index 0000000..31aff1a
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype-from-newtarget-abrupt.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: >
+  Return abrupt from getting the NewTarget prototype
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  ...
+  3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget,  "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
+  ...
+  9. Return finalizationGroup.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
+
+  3. Let proto be ? Get(constructor, 'prototype').
+features: [FinalizationGroup, Reflect.construct]
+---*/
+
+var calls = 0;
+var newTarget = function() {}.bind(null);
+Object.defineProperty(newTarget, 'prototype', {
+  get: function() {
+    calls += 1;
+    throw new Test262Error();
+  }
+});
+
+assert.throws(Test262Error, function() {
+  Reflect.construct(FinalizationGroup, [function() {}], newTarget);
+});
+
+assert.sameValue(calls, 1);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype-from-newtarget-custom.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype-from-newtarget-custom.js
new file mode 100644
index 0000000..ef5be60
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype-from-newtarget-custom.js
@@ -0,0 +1,44 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: >
+  The [[Prototype]] internal slot is computed from NewTarget.
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  ...
+  3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget,  "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
+  ...
+  9. Return finalizationGroup.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
+
+  3. Let proto be ? Get(constructor, 'prototype').
+  4. If Type(proto) is not Object, then
+    a. Let realm be ? GetFunctionRealm(constructor).
+    b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
+  5. Return proto.
+features: [FinalizationGroup, Reflect.construct]
+---*/
+
+var fg;
+
+fg = Reflect.construct(FinalizationGroup, [function() {}], Object);
+assert.sameValue(Object.getPrototypeOf(fg), Object.prototype, 'NewTarget is built-in Object constructor');
+
+var newTarget = function() {}.bind(null);
+Object.defineProperty(newTarget, 'prototype', {
+  get: function() {
+    return Array.prototype;
+  }
+});
+fg = Reflect.construct(FinalizationGroup, [function() {}], newTarget);
+assert.sameValue(Object.getPrototypeOf(fg), Array.prototype, 'NewTarget is BoundFunction with accessor');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype-from-newtarget.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype-from-newtarget.js
new file mode 100644
index 0000000..dd376b7
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype-from-newtarget.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: >
+  The [[Prototype]] internal slot is computed from NewTarget.
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  ...
+  3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget,  "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
+  ...
+  9. Return finalizationGroup.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
+
+  3. Let proto be ? Get(constructor, 'prototype').
+  4. If Type(proto) is not Object, then
+    a. Let realm be ? GetFunctionRealm(constructor).
+    b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
+  5. Return proto.
+features: [FinalizationGroup]
+---*/
+
+var fg = new FinalizationGroup(function() {});
+assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/Symbol.toStringTag.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/Symbol.toStringTag.js
new file mode 100644
index 0000000..d505aa4
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/Symbol.toStringTag.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-@@tostringtag
+description: >
+    `Symbol.toStringTag` property descriptor
+info: |
+    The initial value of the @@toStringTag property is the String value
+    'FinalizationGroup'.
+
+    This property has the attributes { [[Writable]]: false, [[Enumerable]]:
+    false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup, Symbol, Symbol.toStringTag]
+---*/
+
+verifyProperty(FinalizationGroup.prototype, Symbol.toStringTag, {
+  value: 'FinalizationGroup',
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-iterator-proto.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-iterator-proto.js
new file mode 100644
index 0000000..cd593cb
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-iterator-proto.js
@@ -0,0 +1,87 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  The callback function is called with a FinalizationGroupCleanupIterator
+info: |
+  The %FinalizationGroupCleanupIteratorPrototype% Object
+
+  - has properties that are inherited by all FinalizationGroup Cleanup Iterator Objects.
+  - is an ordinary object.
+  - has a [[Prototype]] internal slot whose value is the intrinsic object %IteratorPrototype%.
+  ...
+
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  2. If CheckForEmptyCells(finalizationGroup) is false, return.
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  4. If callback is undefined, set callback to finalizationGroup.[[CleanupCallback]].
+  5. Set finalizationGroup.[[IsFinalizationGroupCleanupJobActive]] to true.
+  6. Let result be Call(callback, undefined, « iterator »).
+  ...
+
+  CheckForEmptyCells ( finalizationGroup )
+
+  ...
+  2. For each cell in finalizationGroup.[[Cells]], do
+    a. If cell.[[Target]] is empty, then
+      i. Return true.
+  3. Return false.
+
+  CreateFinalizationGroupCleanupIterator ( finalizationGroup )
+
+  ...
+  4. Let prototype be finalizationGroup.[[Realm]].[[Intrinsics]].[[%FinalizationGroupCleanupIteratorPrototype%]].
+  5. Let iterator be ObjectCreate(prototype, « [[FinalizationGroup]] »).
+  6. Set iterator.[[FinalizationGroup]] to finalizationGroup.
+  7. Return iterator.
+features: [FinalizationGroup, host-gc-required]
+---*/
+
+var IteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
+var FinalizationGroupCleanupIteratorPrototype;
+var called = 0;
+var cleanupCallbackCalled = 0;
+
+function callback(iterator) {
+  called += 1;
+
+  FinalizationGroupCleanupIteratorPrototype = Object.getPrototypeOf(iterator);
+}
+
+var fg = new FinalizationGroup(function() {
+  cleanupCallbackCalled += 1;
+});
+
+(function() {
+  let o = {};
+  fg.register(o);
+})();
+
+assert.sameValue(called, 0);
+
+$262.gc();
+fg.cleanupSome(callback);
+
+assert.sameValue(called, 1);
+
+var proto = Object.getPrototypeOf(FinalizationGroupCleanupIteratorPrototype);
+assert.sameValue(
+  proto, IteratorPrototype,
+  '[[Prototype]] internal slot whose value is the intrinsic object %IteratorPrototype%'
+);
+
+
+assert.sameValue(cleanupCallbackCalled, 0, 'if a callback is given, do not call cleanupCallback');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-not-callable-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-not-callable-throws.js
new file mode 100644
index 0000000..e963368
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/callback-not-callable-throws.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: Throws a TypeError if callback is not callable
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  ...
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.cleanupSome, 'function');
+
+var fg = new FinalizationGroup(function() {});
+
+assert.throws(TypeError, function() {
+  fg.cleanupSome(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+  fg.cleanupSome(true);
+}, 'true');
+
+assert.throws(TypeError, function() {
+  fg.cleanupSome(false);
+}, 'false');
+
+assert.throws(TypeError, function() {
+  fg.cleanupSome(1);
+}, 'number');
+
+assert.throws(TypeError, function() {
+  fg.cleanupSome('object');
+}, 'string');
+
+var s = Symbol();
+assert.throws(TypeError, function() {
+  fg.cleanupSome(s);
+}, 'symbol');
+
+assert.throws(TypeError, function() {
+  fg.cleanupSome({});
+}, 'object');
+
+assert.throws(TypeError, function() {
+  fg.cleanupSome(FinalizationGroup.prototype);
+}, 'FinalizationGroup.prototype');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-reference.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-reference.js
new file mode 100644
index 0000000..c5dd59b
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-reference.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: Cleanup might be prevented with a reference usage;
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ? CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+features: [FinalizationGroup, host-gc-required]
+---*/
+
+var holdingsList;
+function cb(iterator) {
+  holdingsList = [...iterator];
+};
+var fg = new FinalizationGroup(function() {});
+
+function emptyCells() {
+  var x;
+  (function() {
+    var a = {};
+    b = {};
+    x = {};
+    var y = {};
+    fg.register(x, 'x');
+    fg.register(a, 'a');
+    fg.register(y, y);
+    fg.register(b, 'b');
+    var b;
+  })();
+  $262.gc();
+  x; // This is an intentional reference to x, please leave it here, after the GC
+}
+
+emptyCells();
+fg.cleanupSome(cb);
+
+// The order is per implementation so we can't use compareArray without sorting
+assert.sameValue(holdingsList.length, 2);
+assert(holdingsList.includes('a'));
+assert(holdingsList.includes('b'));
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-unregister.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-unregister.js
new file mode 100644
index 0000000..4c02506
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanup-prevented-with-unregister.js
@@ -0,0 +1,88 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: Cleanup might be prevented with an unregister usage
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ? CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+
+  FinalizationGroup.prototype.unregister ( unregisterToken )
+
+  1. Let removed be false.
+  2. For each Record { [[Target]], [[Holdings]], [[UnregisterToken]] } cell that is an element of finalizationGroup.[[Cells]], do
+    a. If SameValue(cell.[[UnregisterToken]], unregisterToken) is true, then
+      i. Remove cell from finalizationGroup.[[Cells]].
+      ii. Set removed to true.
+  3. Return removed.
+features: [FinalizationGroup, host-gc-required]
+---*/
+
+var holdingsList;
+var fg = new FinalizationGroup(function() {});
+
+var unregA = {};
+var unregB = {};
+var unregC = {};
+var unregDE = {}; // Use the same unregister token for D and E
+
+function emptyCells() {
+  (function() {
+    var a = {};
+    var b = {};
+    var c = {};
+    var d = {};
+    var e = {};
+    fg.register(a, 'a', unregA);
+    fg.register(b, 'b', unregB);
+    fg.register(c, 'c', unregC);
+    fg.register(d, 'd', unregDE);
+    fg.register(e, 'e', unregDE);
+  })();
+
+  var res = fg.unregister(unregC); // unregister 'c' before GC
+  assert.sameValue(res, true, 'unregister c before GC');
+
+  $262.gc();
+}
+
+emptyCells();
+
+var res = fg.unregister(unregDE);
+assert.sameValue(res, true, 'unregister d and e after GC');
+
+fg.cleanupSome(function cb(iterator) {
+  var res = fb.unregister(unregA);
+  assert.sameValue(res, true, 'unregister a before the iterator is consumed.');
+
+  holdingsList = [...iterator];
+
+  // It's not possible to verify an unregister during the iterator consumption
+  // as it's .next() does not have any specific order to follow for each item.
+});
+
+assert.sameValue(holdingsList[0], 'b');
+assert.sameValue(holdingsList.length, 1);
+
+// Second run
+res = fg.unregister(unregB); // let's empty the cells
+assert.sameValue(res, true, 'unregister B for cleanup');
+holdingsList = undefined;
+emptyCells();
+
+fg.cleanupSome(function cb(iterator) {
+  var res = fb.unregister(unregDE);
+  assert.sameValue(res, true, 'unregister d and e before the iterator is consumed.');
+  holdingsList = [...iterator];
+});
+
+assert(holdingsList.includes('b'));
+assert(holdingsList.includes('a'), 'just like the first run, now without removing a');
+assert.sameValue(holdingsList.length, 2);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanupcallback-iterator-proto.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanupcallback-iterator-proto.js
new file mode 100644
index 0000000..5adc6e4
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/cleanupcallback-iterator-proto.js
@@ -0,0 +1,82 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  The cleanup callback function is called with a FinalizationGroupCleanupIterator
+info: |
+  The %FinalizationGroupCleanupIteratorPrototype% Object
+
+  - has properties that are inherited by all FinalizationGroup Cleanup Iterator Objects.
+  - is an ordinary object.
+  - has a [[Prototype]] internal slot whose value is the intrinsic object %IteratorPrototype%.
+  ...
+
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  2. If CheckForEmptyCells(finalizationGroup) is false, return.
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  4. If callback is undefined, set callback to finalizationGroup.[[CleanupCallback]].
+  5. Set finalizationGroup.[[IsFinalizationGroupCleanupJobActive]] to true.
+  6. Let result be Call(callback, undefined, « iterator »).
+  ...
+
+  CheckForEmptyCells ( finalizationGroup )
+
+  ...
+  2. For each cell in finalizationGroup.[[Cells]], do
+    a. If cell.[[Target]] is empty, then
+      i. Return true.
+  3. Return false.
+
+  CreateFinalizationGroupCleanupIterator ( finalizationGroup )
+
+  ...
+  4. Let prototype be finalizationGroup.[[Realm]].[[Intrinsics]].[[%FinalizationGroupCleanupIteratorPrototype%]].
+  5. Let iterator be ObjectCreate(prototype, « [[FinalizationGroup]] »).
+  6. Set iterator.[[FinalizationGroup]] to finalizationGroup.
+  7. Return iterator.
+features: [FinalizationGroup, host-gc-required]
+---*/
+
+var IteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
+var FinalizationGroupCleanupIteratorPrototype;
+var called = 0;
+
+function callback(iterator) {
+  called += 1;
+
+  FinalizationGroupCleanupIteratorPrototype = Object.getPrototypeOf(iterator);
+}
+
+var fg = new FinalizationGroup(callback);
+
+(function() {
+  let o = {};
+  fg.register(o);
+})();
+
+assert.sameValue(called, 0);
+
+$262.gc();
+fg.cleanupSome();
+
+assert.sameValue(called, 1);
+
+var proto = Object.getPrototypeOf(FinalizationGroupCleanupIteratorPrototype);
+assert.sameValue(
+  proto, IteratorPrototype,
+  '[[Prototype]] internal slot whose value is the intrinsic object %IteratorPrototype%'
+);
+
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/custom-this.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/custom-this.js
new file mode 100644
index 0000000..d9de47a
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/custom-this.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: Return values applying custom this
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+features: [FinalizationGroup]
+---*/
+
+var fn = function() {};
+var cleanupSome = FinalizationGroup.prototype.cleanupSome;
+var fg = new FinalizationGroup(fn);
+
+var cb = function() {};
+
+assert.sameValue(cleanupSome.call(fg, cb), undefined);
+assert.sameValue(cleanupSome.call(fg, fn), undefined), 'reuse the same cleanup callback fn';
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/gc-cleanup-not-prevented-with-wr-deref.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/gc-cleanup-not-prevented-with-wr-deref.js
new file mode 100644
index 0000000..1ed2f07
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/gc-cleanup-not-prevented-with-wr-deref.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: WeakRef deref should not prevent a GC event
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  ...
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ? CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+
+  WeakRef.prototype.deref ( )
+
+  ...
+  4. Let target be the value of weakRef.[[Target]].
+  5. If target is not empty,
+    a. Perform ! KeepDuringJob(target).
+    b. Return target.
+  6. Return undefined.
+features: [FinalizationGroup, WeakRef, host-gc-required]
+---*/
+
+var holdingsList;
+function cb(iterator) {
+  holdingsList = [...iterator];
+}
+var fg = new FinalizationGroup(function() {});
+
+var deref = false;
+
+function emptyCells() {
+  var wr;
+  (function() {
+    var a = {};
+    wr = new WeakRef(a);
+    fg.register(a, 'a');
+  })();
+  $262.gc();
+  deref = wr.deref();
+}
+
+emptyCells();
+fg.cleanupSome(cb);
+
+assert.sameValue(holdingsList.length, 1);
+assert.sameValue(holdingsList[0], 'a');
+
+assert.sameValue(deref, undefined, 'deref handles an empty wearRef.[[Target]] returning undefined');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-dynamic.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-dynamic.js
new file mode 100644
index 0000000..f930c7a
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-dynamic.js
@@ -0,0 +1,98 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  The callback iterator is dynamic. Therefore, it can be emptied before iteration
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  ...
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  ...
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  ...
+  6. Let result be Call(callback, undefined, « iterator »).
+  ...
+
+  %FinalizationGroupCleanupIteratorPrototype%.next ( )
+
+  8. If finalizationGroup.[[Cells]] contains a Record cell such that cell.[[Target]] is empty,
+    a. Choose any such cell.
+    b. Remove cell from finalizationGroup.[[Cells]].
+    c. Return CreateIterResultObject(cell.[[Holdings]], false).
+  9. Otherwise, return CreateIterResultObject(undefined, true).
+features: [FinalizationGroup, host-gc-required, Symbol]
+---*/
+
+var called = 0;
+var endOfCall = 0;
+var first, second, third;
+var firstIter, secondIter, thirdIter;
+var fg = new FinalizationGroup(function() {});
+
+function callback(iterator) {
+  called += 1;
+
+  if (called === 1) {
+
+    // Inception!
+    fg.cleanupSome(callback);
+
+    first = iterator.next();
+    firstIter = iterator;
+  } else if (called === 2) {
+
+    // Double Inception!
+    fg.cleanupSome(callback);
+
+    second = iterator.next();
+    secondIter = iterator;
+  } else if (called === 3) {
+
+    // Triple Inception!
+    // But this time we won't try to consume iterator anymore, leave it alone there.
+    fg.cleanupSome(callback);
+
+    third = iterator.next();
+    thirdIter = iterator;
+  }
+
+  endOfCall += 1;
+}
+
+(function() {
+  var o1 = {};
+  var o2 = {};
+  fg.register(o1, 'holdings 1');
+  fg.register(o2, 'holdings 2');
+})();
+
+$262.gc();
+
+fg.cleanupSome(callback);
+
+// Make sure everything is set
+assert.sameValue(called, 4, 'cleanup successfully');
+assert.sameValue(endOfCall, 4, 'cleanup ended successfully');
+
+assert.notSameValue(firstIter, secondIter, 'callback is not called with the same iterator #1');
+assert.notSameValue(firstIter, thirdIter, 'callback is not called with the same iterator #2');
+assert.notSameValue(secondIter, thirdIter, 'callback is not called with the same iterator #3');
+
+assert.sameValue(first.value, undefined, 'iterator is already consumed');
+assert.sameValue(first.done, true, 'first callback will find no empty Targets');
+assert.sameValue(second.done, false, 'second callback will find an empty Target');
+assert.sameValue(third.done, false, 'third callback will find an empty Target');
+
+// 8.a. Choose any such cell.
+var holdings = [second.value, third.value];
+
+assert(holdings.includes('holdings 1'), 'iterators consume emptied cells #1');
+assert(holdings.includes('holdings 2'), 'iterators consume emptied cells #2');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-holdings-multiple-values.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-holdings-multiple-values.js
new file mode 100644
index 0000000..db2ac9e
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/iterator-holdings-multiple-values.js
@@ -0,0 +1,116 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-finalization-group-constructor
+description: >
+  Iterates over different type values in holdings
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  ...
+  5. Perform ! CleanupFinalizationGroup(finalizationGroup, callback).
+  ...
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  ...
+  3. Let iterator be ! CreateFinalizationGroupCleanupIterator(finalizationGroup).
+  ...
+  6. Let result be Call(callback, undefined, « iterator »).
+  ...
+
+  %FinalizationGroupCleanupIteratorPrototype%.next ( )
+
+  8. If finalizationGroup.[[Cells]] contains a Record cell such that cell.[[Target]] is empty,
+    a. Choose any such cell.
+    b. Remove cell from finalizationGroup.[[Cells]].
+    c. Return CreateIterResultObject(cell.[[Holdings]], false).
+  9. Otherwise, return CreateIterResultObject(undefined, true).
+features: [FinalizationGroup, Symbol, host-gc-required]
+includes: [compareArray.js]
+---*/
+
+var holdings;
+var fg = new FinalizationGroup(function() {});
+
+function callback(iterator) {
+  holdings = [...iterator];
+}
+
+(function() {
+  var o = {};
+  fg.register(o);
+  fg.register(o, undefined);
+})();
+
+$262.gc();
+fg.cleanupSome(callback);
+
+assert.compareArray(holdings, [undefined, undefined], 'undefined');
+
+(function() {
+  var o = {};
+  fg.register(o, null);
+})();
+
+$262.gc();
+fg.cleanupSome(callback);
+assert.compareArray(holdings, [null], 'null');
+
+(function() {
+  var o = {};
+  fg.register(o, '');
+})();
+
+$262.gc();
+fg.cleanupSome(callback);
+assert.compareArray(holdings, [''], 'the empty string');
+
+var other = {};
+(function() {
+  var o = {};
+  fg.register(o, other);
+})();
+
+$262.gc();
+fg.cleanupSome(callback);
+assert.compareArray(holdings, [other], '{}');
+
+(function() {
+  var o = {};
+  fg.register(o, 42);
+})();
+
+$262.gc();
+fg.cleanupSome(callback);
+assert.compareArray(holdings, [42], '42');
+
+(function() {
+  var o = {};
+  fg.register(o, true);
+})();
+
+$262.gc();
+fg.cleanupSome(callback);
+assert.compareArray(holdings, [true], 'true');
+
+(function() {
+  var o = {};
+  fg.register(o, false);
+})();
+
+$262.gc();
+fg.cleanupSome(callback);
+assert.compareArray(holdings, [false], 'false');
+
+var s = Symbol();
+(function() {
+  var o = {};
+  fg.register(o, s);
+})();
+
+$262.gc();
+fg.cleanupSome(callback);
+assert.compareArray(holdings, [s], 'symbol');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/length.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/length.js
new file mode 100644
index 0000000..4774834
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/length.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: FinalizationGroup.prototype.cleanupSome.length property descriptor
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, has a length
+  property whose value is an integer. Unless otherwise specified, this
+  value is equal to the largest number of named arguments shown in the
+  subclause headings for the function description. Optional parameters
+  (which are indicated with brackets: [ ]) or rest parameters (which
+  are shown using the form «...name») are not included in the default
+  argument count.
+
+  Unless otherwise specified, the length property of a built-in
+  function object has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+verifyProperty(FinalizationGroup.prototype.cleanupSome, 'length', {
+  value: 0,
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/name.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/name.js
new file mode 100644
index 0000000..370a34f
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/name.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: FinalizationGroup.prototype.cleanupSome.name property descriptor
+info: |
+  FinalizationGroup.prototype.cleanupSome.name value and property descriptor
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, that is not
+  identified as an anonymous function has a name property whose value
+  is a String. Unless otherwise specified, this value is the name that
+  is given to the function in this specification. For functions that
+  are specified as properties of objects, the name value is the
+  property name string used to access the function. [...]
+
+  Unless otherwise specified, the name property of a built-in function
+  object, if it exists, has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+verifyProperty(FinalizationGroup.prototype.cleanupSome, 'name', {
+  value: 'cleanupSome',
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-callback-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-callback-throws.js
new file mode 100644
index 0000000..bc176e2
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-callback-throws.js
@@ -0,0 +1,58 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: Return abrupt completion from CleanupFinalizationGroup
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ? CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  4. If callback is undefined, set callback to finalizationGroup.[[CleanupCallback]].
+  5. Set finalizationGroup.[[IsFinalizationGroupCleanupJobActive]] to true.
+  6. Let result be Call(callback, undefined, « iterator »).
+  7. Set finalizationGroup.[[IsFinalizationGroupCleanupJobActive]] to false.
+  8. If result is an abrupt completion, return result.
+features: [FinalizationGroup, arrow-function, async-functions, async-iteration, class, host-gc-required]
+---*/
+
+var called = 0;
+var iterator;
+
+function poisoned(iter) {
+  iterator = iter;
+  iter.next(); // Won't throw
+  throw new Test262Error();
+}
+var fg = new FinalizationGroup(function() {
+  called += 1;
+});
+
+function emptyCells() {
+  (function() {
+    var o = {};
+    fg.register(o);
+  })();
+  $262.gc();
+}
+
+emptyCells();
+
+assert.throws(Test262Error, function() {
+  fg.cleanupSome(poisoned);
+});
+
+assert.sameValue(called, 0);
+
+assert.sameValue(typeof iteraror.next, 'function');
+assert.throws(TypeError, function() {
+  iterator.next();
+}, 'iterator.next throws a TypeError if IsFinalizationGroupCleanupJobActive is false');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-cleanup-callback-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-cleanup-callback-throws.js
new file mode 100644
index 0000000..b716127
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/poisoned-cleanup-callback-throws.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: Return abrupt completion from CleanupFinalizationGroup (using CleanupCallback)
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ? CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+
+  CleanupFinalizationGroup ( finalizationGroup [ , callback ] )
+
+  4. If callback is undefined, set callback to finalizationGroup.[[CleanupCallback]].
+  5. Set finalizationGroup.[[IsFinalizationGroupCleanupJobActive]] to true.
+  6. Let result be Call(callback, undefined, « iterator »).
+  7. Set finalizationGroup.[[IsFinalizationGroupCleanupJobActive]] to false.
+  8. If result is an abrupt completion, return result.
+features: [FinalizationGroup, arrow-function, async-functions, async-iteration, class, host-gc-required]
+---*/
+
+var iterator;
+function poisoned(iter) {
+  iterator = iter;
+  iter.next(); // Won't throw
+  throw new Test262Error();
+}
+var fg = new FinalizationGroup(poisoned);
+
+function emptyCells() {
+  (function() {
+    var o = {};
+    fg.register(o);
+  })();
+  $262.gc();
+}
+
+emptyCells();
+
+assert.throws(Test262Error, function() {
+  fg.cleanupSome();
+});
+
+assert.sameValue(typeof iteraror.next, 'function');
+assert.throws(TypeError, function() {
+  iterator.next();
+}, 'iterator.next throws a TypeError if IsFinalizationGroupCleanupJobActive is false');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/prop-desc.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/prop-desc.js
new file mode 100644
index 0000000..f2b269c
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/prop-desc.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: >
+  Property descriptor of FinalizationGroup.prototype.cleanupSome
+info: |
+  17 ECMAScript Standard Built-in Objects:
+
+  Every other data property described in clauses 18 through 26 and in Annex B.2
+  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+  [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.cleanupSome, 'function');
+
+verifyProperty(FinalizationGroup.prototype, 'cleanupSome', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined-with-gc.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined-with-gc.js
new file mode 100644
index 0000000..5d6874c
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined-with-gc.js
@@ -0,0 +1,69 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: Return undefined regardless the result of CleanupFinalizationGroup
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ? CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+features: [FinalizationGroup, arrow-function, async-functions, async-iteration, class, host-gc-required]
+---*/
+
+var called;
+var fn = function() {
+  called += 1;
+  return 39;
+};
+var cb = function() {
+  called += 1;
+  return 42;
+};
+var fg = new FinalizationGroup(fn);
+
+function emptyCells() {
+  called = 0;
+  (function() {
+    var o = {};
+    fg.register(o);
+  })();
+  $262.gc();
+}
+
+emptyCells();
+assert.sameValue(fg.cleanupSome(cb), undefined, 'regular callback');
+assert.sameValue(called, 1);
+
+emptyCells();
+assert.sameValue(fg.cleanupSome(fn), undefined, 'regular callback, same FG cleanup function');
+assert.sameValue(called, 1);
+
+emptyCells();
+assert.sameValue(fg.cleanupSome(() => 1), undefined, 'arrow function');
+
+emptyCells();
+assert.sameValue(fg.cleanupSome(fg.cleanupSome), undefined, 'cleanupSome itself');
+
+emptyCells();
+assert.sameValue(fg.cleanupSome(class {}), undefined, 'class expression');
+
+emptyCells();
+assert.sameValue(fg.cleanupSome(async function() {}), undefined, 'async function');
+
+emptyCells();
+assert.sameValue(fg.cleanupSome(function *() {}), undefined, 'generator');
+
+emptyCells();
+assert.sameValue(fg.cleanupSome(async function *() {}), undefined, 'async generator');
+
+emptyCells();
+assert.sameValue(fg.cleanupSome(), undefined, 'undefined, implicit');
+
+emptyCells();
+assert.sameValue(fg.cleanupSome(undefined), undefined, 'undefined, explicit');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined.js
new file mode 100644
index 0000000..7edbd51
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/return-undefined.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: Return undefined regardless the result of CleanupFinalizationGroup
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  5. Perform ? CleanupFinalizationGroup(finalizationGroup, callback).
+  6. Return undefined.
+features: [FinalizationGroup, arrow-function, async-functions, async-iteration, class]
+---*/
+
+var fn = function() {};
+var cb = function() {};
+var poisoned = function() { throw new Test262Error(); };
+var fg = new FinalizationGroup(fn);
+
+assert.sameValue(fg.cleanupSome(cb), undefined, 'regular callback');
+assert.sameValue(fg.cleanupSome(fn), undefined, 'regular callback, same FG cleanup function');
+
+assert.sameValue(fg.cleanupSome(() => {}), undefined, 'arrow function');
+assert.sameValue(fg.cleanupSome(fg.cleanupSome), undefined, 'cleanupSome itself');
+assert.sameValue(fg.cleanupSome(poisoned), undefined, 'poisoned');
+assert.sameValue(fg.cleanupSome(class {}), undefined, 'class expression');
+assert.sameValue(fg.cleanupSome(async function() {}), undefined, 'async function');
+assert.sameValue(fg.cleanupSome(function *() {}), undefined, 'generator');
+assert.sameValue(fg.cleanupSome(async function *() {}), undefined, 'async generator');
+
+assert.sameValue(fg.cleanupSome(), undefined, 'undefined, implicit');
+assert.sameValue(fg.cleanupSome(undefined), undefined, 'undefined, explicit');
+
+var poisonedFg = new FinalizationGroup(poisoned);
+
+assert.sameValue(poisonedFg.cleanupSome(cb), undefined, 'regular callback on poisoned FG cleanup callback');
+assert.sameValue(poisonedFg.cleanupSome(poisoned), undefined, 'poisoned callback on poisoned FG cleanup callback');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/this-does-not-have-internal-cells-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/this-does-not-have-internal-cells-throws.js
new file mode 100644
index 0000000..954fdf0
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/this-does-not-have-internal-cells-throws.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: Throws a TypeError if this does not have a [[Cells]] internal slot
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  ...
+features: [FinalizationGroup, WeakRef]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.cleanupSome, 'function');
+
+var cleanupSome = FinalizationGroup.prototype.cleanupSome;
+var cb = function() {};
+
+assert.throws(TypeError, function() {
+  cleanupSome.call({ ['[[Cells]]']: {} }, cb);
+}, 'Ordinary object without [[Cells]]');
+
+assert.throws(TypeError, function() {
+  cleanupSome.call(WeakRef.prototype, cb);
+}, 'WeakRef.prototype does not have a [[Cells]] internal slot');
+
+assert.throws(TypeError, function() {
+  cleanupSome.call(WeakRef, cb);
+}, 'WeakRef does not have a [[Cells]] internal slot');
+
+var wr = new WeakRef({});
+assert.throws(TypeError, function() {
+  cleanupSome.call(wr, cb);
+}, 'WeakRef instance');
+
+var wm = new WeakMap();
+assert.throws(TypeError, function() {
+  cleanupSome.call(wm, cb);
+}, 'WeakMap instance');
+
+var ws = new WeakSet();
+assert.throws(TypeError, function() {
+  cleanupSome.call(ws, cb);
+}, 'WeakSet instance');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/this-not-object-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/this-not-object-throws.js
new file mode 100644
index 0000000..2de7e87
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/cleanupSome/this-not-object-throws.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.cleanupSome
+description: Throws a TypeError if this is not an Object
+info: |
+  FinalizationGroup.prototype.cleanupSome ( [ callback ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception.
+  ...
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.cleanupSome, 'function');
+
+var cleanupSome = FinalizationGroup.prototype.cleanupSome;
+var cb = function() {};
+
+assert.throws(TypeError, function() {
+  cleanupSome.call(undefined, cb);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+  cleanupSome.call(null, cb);
+}, 'null');
+
+assert.throws(TypeError, function() {
+  cleanupSome.call(true, cb);
+}, 'true');
+
+assert.throws(TypeError, function() {
+  cleanupSome.call(false, cb);
+}, 'false');
+
+assert.throws(TypeError, function() {
+  cleanupSome.call(1, cb);
+}, 'number');
+
+assert.throws(TypeError, function() {
+  cleanupSome.call('object', cb);
+}, 'string');
+
+var s = Symbol();
+assert.throws(TypeError, function() {
+  cleanupSome.call(s, cb);
+}, 'symbol');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/constructor.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/constructor.js
new file mode 100644
index 0000000..e1c94da
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/constructor.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.constructor
+description: FinalizationGroup.prototype.constructor property descriptor
+info: |
+  FinalizationGroup.prototype.constructor
+
+  The initial value of FinalizationGroup.prototype.constructor is the intrinsic
+  object %FinalizationGroup%.
+
+  17 ECMAScript Standard Built-in Objects
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+verifyProperty(FinalizationGroup.prototype, 'constructor', {
+  value: FinalizationGroup,
+  writable: true,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/prop-desc.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/prop-desc.js
new file mode 100644
index 0000000..dfe39b4
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/prop-desc.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The property descriptor FinalizationGroup.prototype
+esid: sec-finalization-group.prototype
+info: |
+  This property has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+  [[Configurable]]: false }.
+features: [FinalizationGroup]
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(FinalizationGroup, 'prototype', {
+  writable: false,
+  enumerable: false,
+  configurable: false
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/proto.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/proto.js
new file mode 100644
index 0000000..7a2f4ae
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/proto.js
@@ -0,0 +1,14 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The prototype of FinalizationGroup.prototype is Object.prototype
+esid: sec-properties-of-the-finalization-group-prototype-object
+info: |
+  The value of the [[Prototype]] internal slot of the FinalizationGroup prototype object
+  is the intrinsic object %ObjectPrototype%.
+features: [FinalizationGroup]
+---*/
+
+var proto = Object.getPrototypeOf(FinalizationGroup.prototype);
+assert.sameValue(proto, Object.prototype);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/custom-this.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/custom-this.js
new file mode 100644
index 0000000..f9d86ec
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/custom-this.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: Return undefined (applying custom this)
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  5. If Type(unregisterToken) is not Object,
+    a. If unregisterToken is not undefined, throw a TypeError exception.
+    b. Set unregisterToken to empty.
+  6. Let cell be the Record { [[Target]] : target, [[Holdings]]: holdings, [[UnregisterToken]]: unregisterToken }.
+  7. Append cell to finalizationGroup.[[Cells]].
+  8. Return undefined.
+features: [FinalizationGroup]
+---*/
+
+var fn = function() {};
+var register = FinalizationGroup.prototype.register;
+var fg = new FinalizationGroup(fn);
+
+var target = {};
+assert.sameValue(register.call(fg, target), undefined);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/holdings-any-value-type.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/holdings-any-value-type.js
new file mode 100644
index 0000000..1048a07
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/holdings-any-value-type.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: No restriction for the value or type of holdings
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  5. If Type(unregisterToken) is not Object,
+    a. If unregisterToken is not undefined, throw a TypeError exception.
+    b. Set unregisterToken to empty.
+  6. Let cell be the Record { [[Target]] : target, [[Holdings]]: holdings, [[UnregisterToken]]: unregisterToken }.
+  7. Append cell to finalizationGroup.[[Cells]].
+  8. Return undefined.
+features: [FinalizationGroup]
+---*/
+
+var fn = function() {};
+var fg = new FinalizationGroup(fn);
+
+var target = {};
+assert.sameValue(fg.register(target, undefined), undefined, 'undefined');
+assert.sameValue(fg.register(target, null), undefined, 'null');
+assert.sameValue(fg.register(target, false), undefined, 'false');
+assert.sameValue(fg.register(target, true), undefined, 'true');
+assert.sameValue(fg.register(target, Symbol()), undefined, 'symbol');
+assert.sameValue(fg.register(target, {}), undefined, 'object');
+assert.sameValue(fg.register(target, fg), undefined, 'same as fg instance');
+assert.sameValue(fg.register(target, 1), undefined, 'number');
+assert.sameValue(fg.register(target, 'holdings'), undefined, 'string');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/holdings-same-as-target.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/holdings-same-as-target.js
new file mode 100644
index 0000000..d38d888
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/holdings-same-as-target.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: holdings may be the same as target
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  5. If Type(unregisterToken) is not Object,
+    a. If unregisterToken is not undefined, throw a TypeError exception.
+    b. Set unregisterToken to empty.
+  6. Let cell be the Record { [[Target]] : target, [[Holdings]]: holdings, [[UnregisterToken]]: unregisterToken }.
+  7. Append cell to finalizationGroup.[[Cells]].
+  8. Return undefined.
+features: [FinalizationGroup]
+---*/
+
+var fg = new FinalizationGroup(function() {});
+
+var target = {};
+assert.sameValue(fg.register(target, target), undefined);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/length.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/length.js
new file mode 100644
index 0000000..5c18110
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/length.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: FinalizationGroup.prototype.register.length property descriptor
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, has a length
+  property whose value is an integer. Unless otherwise specified, this
+  value is equal to the largest number of named arguments shown in the
+  subclause headings for the function description. Optional parameters
+  (which are indicated with brackets: [ ]) or rest parameters (which
+  are shown using the form «...name») are not included in the default
+  argument count.
+
+  Unless otherwise specified, the length property of a built-in
+  function object has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+verifyProperty(FinalizationGroup.prototype.register, 'length', {
+  value: 2,
+  enumerable: false,
+  writable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/name.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/name.js
new file mode 100644
index 0000000..d70988d
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/name.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: FinalizationGroup.prototype.register.name property descriptor
+info: |
+  FinalizationGroup.prototype.register.name value and property descriptor
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, that is not
+  identified as an anonymous function has a name property whose value
+  is a String. Unless otherwise specified, this value is the name that
+  is given to the function in this specification. For functions that
+  are specified as properties of objects, the name value is the
+  property name string used to access the function. [...]
+
+  Unless otherwise specified, the name property of a built-in function
+  object, if it exists, has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+verifyProperty(FinalizationGroup.prototype.register, 'name', {
+  value: 'register',
+  enumerable: false,
+  writable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/prop-desc.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/prop-desc.js
new file mode 100644
index 0000000..4814634
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/prop-desc.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: >
+  Property descriptor of FinalizationGroup.prototype.register
+info: |
+  17 ECMAScript Standard Built-in Objects:
+
+  Every other data property described in clauses 18 through 26 and in Annex B.2
+  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+  [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.register, 'function');
+
+verifyProperty(FinalizationGroup.prototype, 'register', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/return-undefined-register-itself.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/return-undefined-register-itself.js
new file mode 100644
index 0000000..a507f6e
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/return-undefined-register-itself.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: Return undefined after registering itself
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  5. If Type(unregisterToken) is not Object,
+    a. If unregisterToken is not undefined, throw a TypeError exception.
+    b. Set unregisterToken to empty.
+  6. Let cell be the Record { [[Target]] : target, [[Holdings]]: holdings, [[UnregisterToken]]: unregisterToken }.
+  7. Append cell to finalizationGroup.[[Cells]].
+  8. Return undefined.
+features: [FinalizationGroup]
+---*/
+
+var fn = function() {};
+var fg = new FinalizationGroup(fn);
+
+assert.sameValue(fg.register(fg), undefined, 'Register itself');
+assert.sameValue(fg.register(fg, fg), undefined, 'Register itself with holdings');
+assert.sameValue(fg.register(fg, fg, fg), undefined, 'Register itself with holdings and unregisterToken');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/return-undefined.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/return-undefined.js
new file mode 100644
index 0000000..bedf933
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/return-undefined.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: Return undefined after registering
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  5. If Type(unregisterToken) is not Object,
+    a. If unregisterToken is not undefined, throw a TypeError exception.
+    b. Set unregisterToken to empty.
+  6. Let cell be the Record { [[Target]] : target, [[Holdings]]: holdings, [[UnregisterToken]]: unregisterToken }.
+  7. Append cell to finalizationGroup.[[Cells]].
+  8. Return undefined.
+features: [FinalizationGroup]
+---*/
+
+var fn = function() {};
+var fg = new FinalizationGroup(fn);
+
+var target = {};
+assert.sameValue(fg.register(target), undefined, 'Register a targer');
+assert.sameValue(fg.register(target), undefined, 'Register the same target again');
+assert.sameValue(fg.register(target), undefined, 'Register the same target again and again');
+
+assert.sameValue(fg.register({}), undefined, 'Register other targets');
+
+assert.sameValue(fg.register(target, undefined, {}), undefined, 'Register target with unregisterToken');
+assert.sameValue(
+  fg.register(target, undefined, target),
+  undefined,
+  'Register target with unregisterToken being the registered target'
+);
+
+assert.sameValue(fg.register(target, undefined, undefined), undefined, 'Register target with explicit undefined unregisterToken');
+
+assert.sameValue(fg.register(fn), undefined, 'register the cleanup callback fn');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/target-not-object-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/target-not-object-throws.js
new file mode 100644
index 0000000..f128d11
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/target-not-object-throws.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: Throws a TypeError if target is not an Object
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  5. If Type(unregisterToken) is not Object,
+    a. If unregisterToken is not undefined, throw a TypeError exception.
+    b. Set unregisterToken to empty.
+  ...
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.register, 'function');
+
+var fg = new FinalizationGroup(function() {});
+
+assert.throws(TypeError, function() {
+  fg.register(undefined);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+  fg.register(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+  fg.register(true);
+}, 'true');
+
+assert.throws(TypeError, function() {
+  fg.register(false);
+}, 'false');
+
+assert.throws(TypeError, function() {
+  fg.register(1);
+}, 'number');
+
+assert.throws(TypeError, function() {
+  fg.register('object');
+}, 'string');
+
+var s = Symbol();
+assert.throws(TypeError, function() {
+  fg.register(s);
+}, 'symbol');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/this-does-not-have-internal-target-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/this-does-not-have-internal-target-throws.js
new file mode 100644
index 0000000..c1b509a
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/this-does-not-have-internal-target-throws.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: Throws a TypeError if this does not have a [[Cells]] internal slot
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  ...
+features: [FinalizationGroup, WeakRef]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.register, 'function');
+
+var register = FinalizationGroup.prototype.register;
+var target = {};
+
+assert.throws(TypeError, function() {
+  register.call({ ['[[Cells]]']: {} }, target);
+}, 'Ordinary object without [[Cells]]');
+
+assert.throws(TypeError, function() {
+  register.call(WeakRef.prototype, target);
+}, 'WeakRef.prototype does not have a [[Cells]] internal slot');
+
+assert.throws(TypeError, function() {
+  register.call(WeakRef, target);
+}, 'WeakRef does not have a [[Cells]] internal slot');
+
+var wr = new WeakRef({});
+assert.throws(TypeError, function() {
+  register.call(wr, target);
+}, 'WeakRef instance');
+
+var wm = new WeakMap();
+assert.throws(TypeError, function() {
+  register.call(wm, target);
+}, 'WeakMap instance');
+
+var ws = new WeakSet();
+assert.throws(TypeError, function() {
+  register.call(ws, target);
+}, 'WeakSet instance');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/this-not-object-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/this-not-object-throws.js
new file mode 100644
index 0000000..7635230
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/this-not-object-throws.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: Throws a TypeError if this is not an Object
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  5. If Type(unregisterToken) is not Object,
+    a. If unregisterToken is not undefined, throw a TypeError exception.
+  ...
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.register, 'function');
+
+var register = FinalizationGroup.prototype.register;
+
+assert.throws(TypeError, function() {
+  register.call(undefined, {});
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+  register.call(null, {});
+}, 'null');
+
+assert.throws(TypeError, function() {
+  register.call(true, {});
+}, 'true');
+
+assert.throws(TypeError, function() {
+  register.call(false, {});
+}, 'false');
+
+assert.throws(TypeError, function() {
+  register.call(1, {});
+}, 'number');
+
+assert.throws(TypeError, function() {
+  register.call('object', {});
+}, 'string');
+
+var s = Symbol();
+assert.throws(TypeError, function() {
+  register.call(s, {});
+}, 'symbol');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-not-object-or-undefined-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-not-object-or-undefined-throws.js
new file mode 100644
index 0000000..b0b942e
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-not-object-or-undefined-throws.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: Throws a TypeError if unregisterToken is not an Object or undefined
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  5. If Type(unregisterToken) is not Object,
+    a. If unregisterToken is not undefined, throw a TypeError exception.
+  ...
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.register, 'function');
+
+var fg = new FinalizationGroup(function() {});
+var target = {};
+
+assert.throws(TypeError, function() {
+  fg.register(target, undefined, null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+  fg.register(target, undefined, true);
+}, 'true');
+
+assert.throws(TypeError, function() {
+  fg.register(target, undefined, false);
+}, 'false');
+
+assert.throws(TypeError, function() {
+  fg.register(target, undefined, 1);
+}, 'number');
+
+assert.throws(TypeError, function() {
+  fg.register(target, undefined, 'object');
+}, 'string');
+
+var s = Symbol();
+assert.throws(TypeError, function() {
+  fg.register(target, undefined, s);
+}, 'symbol');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings-and-target.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings-and-target.js
new file mode 100644
index 0000000..f1dc302
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings-and-target.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: unregisterToken may be the same as holdings and target
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  5. If Type(unregisterToken) is not Object,
+    a. If unregisterToken is not undefined, throw a TypeError exception.
+    b. Set unregisterToken to empty.
+  6. Let cell be the Record { [[Target]] : target, [[Holdings]]: holdings, [[UnregisterToken]]: unregisterToken }.
+  7. Append cell to finalizationGroup.[[Cells]].
+  8. Return undefined.
+features: [FinalizationGroup]
+---*/
+
+var fg = new FinalizationGroup(function() {});
+
+var target = {};
+assert.sameValue(fg.register(target, target, target), undefined);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings.js
new file mode 100644
index 0000000..7c498bc
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-holdings.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: unregisterToken may be the same as holdings
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  5. If Type(unregisterToken) is not Object,
+    a. If unregisterToken is not undefined, throw a TypeError exception.
+    b. Set unregisterToken to empty.
+  6. Let cell be the Record { [[Target]] : target, [[Holdings]]: holdings, [[UnregisterToken]]: unregisterToken }.
+  7. Append cell to finalizationGroup.[[Cells]].
+  8. Return undefined.
+features: [FinalizationGroup]
+---*/
+
+var fg = new FinalizationGroup(function() {});
+
+var target = {};
+var holdings = {};
+assert.sameValue(fg.register(target, holdings, holdings), undefined);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-target.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-target.js
new file mode 100644
index 0000000..20fe2e0
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/register/unregisterToken-same-as-target.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.register
+description: unregisterToken may be the same as target
+info: |
+  FinalizationGroup.prototype.register ( target , holdings [, unregisterToken ] )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If Type(target) is not Object, throw a TypeError exception.
+  4. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  5. If Type(unregisterToken) is not Object,
+    a. If unregisterToken is not undefined, throw a TypeError exception.
+    b. Set unregisterToken to empty.
+  6. Let cell be the Record { [[Target]] : target, [[Holdings]]: holdings, [[UnregisterToken]]: unregisterToken }.
+  7. Append cell to finalizationGroup.[[Cells]].
+  8. Return undefined.
+features: [FinalizationGroup]
+---*/
+
+var fg = new FinalizationGroup(function() {});
+
+var target = {};
+assert.sameValue(fg.register(target, '1', target), undefined);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/custom-this.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/custom-this.js
new file mode 100644
index 0000000..1534707
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/custom-this.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.unregister
+description: Return values applying custom this
+info: |
+  FinalizationGroup.prototype.unregister ( unregisterToken )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If Type(unregisterToken) is not Object, throw a TypeError exception.
+  5. Let removed be false.
+  6. For each Record { [[Target]], [[Holdings]], [[UnregisterToken]] } cell that is an element of finalizationGroup.[[Cells]], do
+    a. If SameValue(cell.[[UnregisterToken]], unregisterToken) is true, then
+      i. Remove cell from finalizationGroup.[[Cells]].
+      ii. Set removed to true.
+  7. Return removed.
+features: [FinalizationGroup]
+---*/
+
+var fn = function() {};
+var unregister = FinalizationGroup.prototype.unregister;
+var fg = new FinalizationGroup(fn);
+
+var target1 = {};
+var target2 = {};
+var target3 = {};
+var token1 = {};
+var token2 = {};
+
+assert.sameValue(unregister.call(fg, token1), false, 'unregistering token1 from empty fg');
+assert.sameValue(unregister.call(fg, token2), false, 'unregistering token2 from empty fg');
+
+fg.register(target1, undefined, token1);
+fg.register(target2, undefined, token2);
+fg.register(target3, undefined, token2);
+
+assert.sameValue(unregister.call(fg, target1), false, 'own target does not work on unregister, #1');
+assert.sameValue(unregister.call(fg, target2), false, 'own target does not work on unregister, #2');
+assert.sameValue(unregister.call(fg, target3), false, 'own target does not work on unregister, #3');
+
+assert.sameValue(unregister.call(fg, token1), true, 'unregistering token1 from fg');
+assert.sameValue(unregister.call(fg, token1), false, 'unregistering token1 again from fg');
+assert.sameValue(unregister.call(fg, token2), true, 'unregistering token2 to remove target2 and target3');
+assert.sameValue(unregister.call(fg, token2), false, 'unregistering token2 from empty fg');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/length.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/length.js
new file mode 100644
index 0000000..b3a1df3
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/length.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.unregister
+description: FinalizationGroup.prototype.unregister.length property descriptor
+info: |
+  FinalizationGroup.prototype.unregister ( unregisterToken )
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, has a length
+  property whose value is an integer. Unless otherwise specified, this
+  value is equal to the largest number of named arguments shown in the
+  subclause headings for the function description. Optional parameters
+  (which are indicated with brackets: [ ]) or rest parameters (which
+  are shown using the form «...name») are not included in the default
+  argument count.
+
+  Unless otherwise specified, the length property of a built-in
+  function object has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+verifyProperty(FinalizationGroup.prototype.unregister, 'length', {
+  value: 1,
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/name.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/name.js
new file mode 100644
index 0000000..94db099
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/name.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.unregister
+description: FinalizationGroup.prototype.unregister.name property descriptor
+info: |
+  FinalizationGroup.prototype.unregister.name value and property descriptor
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, that is not
+  identified as an anonymous function has a name property whose value
+  is a String. Unless otherwise specified, this value is the name that
+  is given to the function in this specification. For functions that
+  are specified as properties of objects, the name value is the
+  property name string used to access the function. [...]
+
+  Unless otherwise specified, the name property of a built-in function
+  object, if it exists, has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+verifyProperty(FinalizationGroup.prototype.unregister, 'name', {
+  value: 'unregister',
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/prop-desc.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/prop-desc.js
new file mode 100644
index 0000000..fa2e487
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/prop-desc.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.unregister
+description: >
+  Property descriptor of FinalizationGroup.prototype.unregister
+info: |
+  17 ECMAScript Standard Built-in Objects:
+
+  Every other data property described in clauses 18 through 26 and in Annex B.2
+  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+  [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.unregister, 'function');
+
+verifyProperty(FinalizationGroup.prototype, 'unregister', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/this-does-not-have-internal-cells-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/this-does-not-have-internal-cells-throws.js
new file mode 100644
index 0000000..eff37a2
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/this-does-not-have-internal-cells-throws.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.unregister
+description: Throws a TypeError if this does not have a [[Cells]] internal slot
+info: |
+  FinalizationGroup.prototype.unregister ( unregisterToken )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If Type(unregisterToken) is not Object, throw a TypeError exception.
+  ...
+features: [FinalizationGroup, WeakRef]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.unregister, 'function');
+
+var unregister = FinalizationGroup.prototype.unregister;
+var token = {};
+
+assert.throws(TypeError, function() {
+  unregister.call({ ['[[Cells]]']: {} }, token);
+}, 'Ordinary object without [[Cells]]');
+
+assert.throws(TypeError, function() {
+  unregister.call(WeakRef.prototype, token);
+}, 'WeakRef.prototype does not have a [[Cells]] internal slot');
+
+assert.throws(TypeError, function() {
+  unregister.call(WeakRef, token);
+}, 'WeakRef does not have a [[Cells]] internal slot');
+
+var wr = new WeakRef({});
+assert.throws(TypeError, function() {
+  unregister.call(wr, token);
+}, 'WeakRef instance');
+
+var wm = new WeakMap();
+assert.throws(TypeError, function() {
+  unregister.call(wm, token);
+}, 'WeakMap instance');
+
+var ws = new WeakSet();
+assert.throws(TypeError, function() {
+  unregister.call(ws, token);
+}, 'WeakSet instance');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/this-not-object-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/this-not-object-throws.js
new file mode 100644
index 0000000..63da68a
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/this-not-object-throws.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.unregister
+description: Throws a TypeError if this is not an Object
+info: |
+  FinalizationGroup.prototype.unregister ( unregisterToken )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If Type(unregisterToken) is not Object, throw a TypeError exception.
+  ...
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.unregister, 'function');
+
+var unregister = FinalizationGroup.prototype.unregister;
+
+assert.throws(TypeError, function() {
+  unregister.call(undefined, {});
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+  unregister.call(null, {});
+}, 'null');
+
+assert.throws(TypeError, function() {
+  unregister.call(true, {});
+}, 'true');
+
+assert.throws(TypeError, function() {
+  unregister.call(false, {});
+}, 'false');
+
+assert.throws(TypeError, function() {
+  unregister.call(1, {});
+}, 'number');
+
+assert.throws(TypeError, function() {
+  unregister.call('object', {});
+}, 'string');
+
+var s = Symbol();
+assert.throws(TypeError, function() {
+  unregister.call(s, {});
+}, 'symbol');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/unregister.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/unregister.js
new file mode 100644
index 0000000..703415c
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/unregister.js
@@ -0,0 +1,56 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.unregister
+description: Return boolean values indicating unregistering of values from given token
+info: |
+  FinalizationGroup.prototype.unregister ( unregisterToken )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If Type(unregisterToken) is not Object, throw a TypeError exception.
+  5. Let removed be false.
+  6. For each Record { [[Target]], [[Holdings]], [[UnregisterToken]] } cell that is an element of finalizationGroup.[[Cells]], do
+    a. If SameValue(cell.[[UnregisterToken]], unregisterToken) is true, then
+      i. Remove cell from finalizationGroup.[[Cells]].
+      ii. Set removed to true.
+  7. Return removed.
+features: [FinalizationGroup]
+---*/
+
+var fn = function() {};
+var fg = new FinalizationGroup(fn);
+
+var target1 = {};
+var target2 = {};
+var target3 = {};
+var token1 = {};
+var token2 = {};
+
+assert.sameValue(fg.unregister(token1), false, 'unregistering token1 from empty fg');
+assert.sameValue(fg.unregister(token2), false, 'unregistering token2 from empty fg');
+
+fg.register(target1, undefined, token1);
+fg.register(target1, undefined, token1); // Repeat registering un purpose
+fg.register(target2, undefined, token2);
+fg.register(target3, undefined, token2);
+
+assert.sameValue(fg.unregister(target1), false, 'own target does not work on unregister, #1');
+assert.sameValue(fg.unregister(target2), false, 'own target does not work on unregister, #2');
+assert.sameValue(fg.unregister(target3), false, 'own target does not work on unregister, #3');
+
+assert.sameValue(fg.unregister(token1), true, 'unregistering token1 from fg');
+assert.sameValue(fg.unregister(token1), false, 'unregistering token1 again from fg');
+assert.sameValue(fg.unregister(token2), true, 'unregistering token2 to remove target2 and target3');
+assert.sameValue(fg.unregister(token2), false, 'unregistering token2 from empty fg');
+
+// Notice these assertions take advantage of adding targets previously added with a token,
+// but now they got no token so it won't be used to remove them.
+fg.register(target1, token1); // holdings, not unregisterToken
+fg.register(target2, token2); // holdings, not unregisterToken
+fg.register(target3);
+
+assert.sameValue(fg.unregister(token1), false, 'nothing to remove without a set unregisterToken #1');
+assert.sameValue(fg.unregister(token2), false, 'nothing to remove without a set unregisterToken #2');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/unregisterToken-not-object-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/unregisterToken-not-object-throws.js
new file mode 100644
index 0000000..de3b8ef
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/prototype/unregister/unregisterToken-not-object-throws.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group.prototype.unregister
+description: Throws a TypeError if unregisterToken is not an Object
+info: |
+  FinalizationGroup.prototype.unregister ( unregisterToken )
+
+  1. Let finalizationGroup be the this value.
+  2. If Type(finalizationGroup) is not Object, throw a TypeError exception.
+  3. If finalizationGroup does not have a [[Cells]] internal slot, throw a TypeError exception.
+  4. If Type(unregisterToken) is not Object, throw a TypeError exception.
+  ...
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(typeof FinalizationGroup.prototype.unregister, 'function');
+
+var fg = new FinalizationGroup(function() {});
+
+assert.throws(TypeError, function() {
+  fg.unregister(undefined);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+  fg.unregister(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+  fg.unregister(true);
+}, 'true');
+
+assert.throws(TypeError, function() {
+  fg.unregister(false);
+}, 'false');
+
+assert.throws(TypeError, function() {
+  fg.unregister(1);
+}, 'number');
+
+assert.throws(TypeError, function() {
+  fg.unregister('object');
+}, 'string');
+
+var s = Symbol();
+assert.throws(TypeError, function() {
+  fg.unregister(s);
+}, 'symbol');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/returns-new-object-from-constructor.js b/JSTests/test262/test/built-ins/FinalizationGroup/returns-new-object-from-constructor.js
new file mode 100644
index 0000000..c63f6c5
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/returns-new-object-from-constructor.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: >
+  Returns a new ordinary object from the FinalizationGroup constructor
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  ...
+  3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget,  "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
+  ...
+  9. Return finalizationGroup.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+features: [FinalizationGroup, for-of]
+---*/
+
+var cleanupCallback = function() {};
+var fg = new FinalizationGroup(cleanupCallback);
+
+assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype);
+assert.notSameValue(fg, cleanupCallback, 'does not return the same function');
+assert.sameValue(fg instanceof FinalizationGroup, true, 'instanceof');
+
+for (let key of Object.getOwnPropertyNames(fg)) {
+  assert(false, `should not set any own named properties: ${key}`);
+}
+
+for (let key of Object.getOwnPropertySymbols(fg)) {
+  assert(false, `should not set any own symbol properties: ${String(key)}`);
+}
+
+assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype);
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/target-not-callable-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/target-not-callable-throws.js
new file mode 100644
index 0000000..d71fbe5
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/target-not-callable-throws.js
@@ -0,0 +1,69 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: >
+  Throws a TypeError if target is not callable
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  1. If NewTarget is undefined, throw a TypeError exception.
+  2. If IsCallable(cleanupCallback) is false, throw a TypeError exception.
+  ...
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(
+  typeof FinalizationGroup, 'function',
+  'typeof FinalizationGroup is function'
+);
+
+assert.throws(TypeError, function() {
+  new FinalizationGroup({});
+}, 'ordinary object');
+
+assert.throws(TypeError, function() {
+  new FinalizationGroup(WeakRef.prototype);
+}, 'WeakRef.prototype');
+
+assert.throws(TypeError, function() {
+  new FinalizationGroup(FinalizationGroup.prototype);
+}, 'FinalizationGroup.prototype');
+
+assert.throws(TypeError, function() {
+  new FinalizationGroup([]);
+}, 'Array');
+
+assert.throws(TypeError, function() {
+  new FinalizationGroup();
+}, 'implicit undefined');
+
+assert.throws(TypeError, function() {
+  new FinalizationGroup(undefined);
+}, 'explicit undefined');
+
+assert.throws(TypeError, function() {
+  new FinalizationGroup(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+  new FinalizationGroup(1);
+}, 'number');
+
+assert.throws(TypeError, function() {
+  new FinalizationGroup('Object');
+}, 'string');
+
+var s = Symbol();
+assert.throws(TypeError, function() {
+  new FinalizationGroup(s);
+}, 'symbol');
+
+assert.throws(TypeError, function() {
+  new FinalizationGroup(true);
+}, 'Boolean, true');
+
+assert.throws(TypeError, function() {
+  new FinalizationGroup(false);
+}, 'Boolean, false');
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/undefined-newtarget-throws.js b/JSTests/test262/test/built-ins/FinalizationGroup/undefined-newtarget-throws.js
new file mode 100644
index 0000000..6f40273
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/undefined-newtarget-throws.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: >
+  Throws a TypeError if NewTarget is undefined.
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  1. If NewTarget is undefined, throw a TypeError exception.
+  2. If IsCallable(cleanupCallback) is false, throw a TypeError exception.
+  ...
+features: [FinalizationGroup]
+---*/
+
+assert.sameValue(
+  typeof FinalizationGroup, 'function',
+  'typeof FinalizationGroup is function'
+);
+
+assert.throws(TypeError, function() {
+  FinalizationGroup();
+});
+
+assert.throws(TypeError, function() {
+  FinalizationGroup(function() {});
+});
diff --git a/JSTests/test262/test/built-ins/FinalizationGroup/unnaffected-by-poisoned-cleanupCallback.js b/JSTests/test262/test/built-ins/FinalizationGroup/unnaffected-by-poisoned-cleanupCallback.js
new file mode 100644
index 0000000..5b1d1cf
--- /dev/null
+++ b/JSTests/test262/test/built-ins/FinalizationGroup/unnaffected-by-poisoned-cleanupCallback.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-finalization-group-target
+description: >
+  Normal completion even if the cleanupCallback fn is poisoned
+info: |
+  FinalizationGroup ( cleanupCallback )
+
+  ...
+  3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget,  "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
+  ...
+  9. Return finalizationGroup.
+features: [FinalizationGroup]
+---*/
+
+var cleanupCallback = function() { throw new Test262Error('should not throw yet'); };
+var fg = new FinalizationGroup(cleanupCallback);
+
+assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype);
+assert.notSameValue(fg, cleanupCallback, 'does not return the same function');
+assert.sameValue(fg instanceof FinalizationGroup, true, 'instanceof');
+
+for (let key of Object.getOwnPropertyNames(fg)) {
+  assert(false, `should not set any own named properties: ${key}`);
+}
+
+for (let key of Object.getOwnPropertySymbols(fg)) {
+  assert(false, `should not set any own symbol properties: ${String(key)}`);
+}
+
+assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype);
diff --git a/JSTests/test262/test/built-ins/Function/StrictFunction_restricted-properties.js b/JSTests/test262/test/built-ins/Function/StrictFunction_restricted-properties.js
index 37f7945..cd7e1d3 100644
--- a/JSTests/test262/test/built-ins/Function/StrictFunction_restricted-properties.js
+++ b/JSTests/test262/test/built-ins/Function/StrictFunction_restricted-properties.js
@@ -1,7 +1,7 @@
 // Copyright (C) 2015 Caitlin Potter. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
-/*--- 
+/*---
 description: >
     ECMAScript Function objects defined using syntactic constructors
     in strict mode code do not have own properties "caller" or
diff --git a/JSTests/test262/test/built-ins/Function/prototype/bind/BoundFunction_restricted-properties.js b/JSTests/test262/test/built-ins/Function/prototype/bind/BoundFunction_restricted-properties.js
index 0db2015..7700223 100644
--- a/JSTests/test262/test/built-ins/Function/prototype/bind/BoundFunction_restricted-properties.js
+++ b/JSTests/test262/test/built-ins/Function/prototype/bind/BoundFunction_restricted-properties.js
@@ -1,7 +1,7 @@
 // Copyright (C) 2015 Caitlin Potter. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
-/*--- 
+/*---
 description: >
     Functions created using Function.prototype.bind() do not have own
     properties "caller" or "arguments", but inherit them from
diff --git a/JSTests/test262/test/built-ins/Function/prototype/restricted-property-arguments.js b/JSTests/test262/test/built-ins/Function/prototype/restricted-property-arguments.js
index 1faf047..9e114df 100644
--- a/JSTests/test262/test/built-ins/Function/prototype/restricted-property-arguments.js
+++ b/JSTests/test262/test/built-ins/Function/prototype/restricted-property-arguments.js
@@ -1,7 +1,7 @@
 // Copyright (C) 2015 Caitlin Potter. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
-/*--- 
+/*---
 description: Intrinsic %FunctionPrototype% has poisoned own property "arguments"
 includes:
   - propertyHelper.js
diff --git a/JSTests/test262/test/built-ins/Function/prototype/restricted-property-caller.js b/JSTests/test262/test/built-ins/Function/prototype/restricted-property-caller.js
index e069ee7..414aad6 100644
--- a/JSTests/test262/test/built-ins/Function/prototype/restricted-property-caller.js
+++ b/JSTests/test262/test/built-ins/Function/prototype/restricted-property-caller.js
@@ -1,7 +1,7 @@
 // Copyright (C) 2015 Caitlin Potter. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
-/*--- 
+/*---
 description: Intrinsic %FunctionPrototype% has poisoned own property "caller"
 includes:
   - propertyHelper.js
diff --git a/JSTests/test262/test/built-ins/Object/prototype/toString/proxy-function-async.js b/JSTests/test262/test/built-ins/Object/prototype/toString/proxy-function-async.js
new file mode 100644
index 0000000..0732201
--- /dev/null
+++ b/JSTests/test262/test/built-ins/Object/prototype/toString/proxy-function-async.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.tostring
+description: Proxy of async function is treated as a function.
+info: |
+  ProxyCreate ( target, handler )
+
+  [...]
+  7. If IsCallable(target) is true, then
+    a. Set P.[[Call]] as specified in 9.5.12.
+
+  Object.prototype.toString ( )
+
+  [...]
+  7. Else if O has a [[Call]] internal method, let builtinTag be "Function".
+features: [async-functions, Proxy, Symbol.toStringTag]
+---*/
+
+var asyncProxy = new Proxy(async function() {}, {});
+var asyncProxyProxy = new Proxy(asyncProxy, {});
+
+assert.sameValue(
+  Object.prototype.toString.call(asyncProxy),
+  '[object AsyncFunction]',
+  'async function proxy'
+);
+assert.sameValue(
+  Object.prototype.toString.call(asyncProxyProxy),
+  '[object AsyncFunction]',
+  'proxy for async function proxy'
+);
diff --git a/JSTests/test262/test/built-ins/Object/prototype/toString/proxy-function.js b/JSTests/test262/test/built-ins/Object/prototype/toString/proxy-function.js
index 965aeba..3b221a1 100644
--- a/JSTests/test262/test/built-ins/Object/prototype/toString/proxy-function.js
+++ b/JSTests/test262/test/built-ins/Object/prototype/toString/proxy-function.js
@@ -14,7 +14,7 @@
     a. Set the [[Call]] internal method of P as specified in 9.5.12.
   [...]
 
-features: [generators, Proxy, Symbol.toStringTag]
+features: [generators, async-functions, Proxy, Symbol.toStringTag]
 ---*/
 
 var functionProxy = new Proxy(function() {}, {});
@@ -53,13 +53,14 @@
   'proxy for generator function proxy'
 );
 
-delete generatorProxy.constructor.prototype[Symbol.toStringTag];
+var asyncProxy = new Proxy(async function() {}, {});
+var asyncProxyProxy = new Proxy(asyncProxy, {});
 
 assert.sameValue(
-  Object.prototype.toString.call(generatorProxy), '[object Function]', 'generator function proxy without Symbol.toStringTag'
+  Object.prototype.toString.call(asyncProxy), '[object AsyncFunction]', 'async function proxy'
 );
 assert.sameValue(
-  Object.prototype.toString.call(generatorProxyProxy),
-  '[object Function]',
-  'proxy for generator function proxy without Symbol.toStringTag'
+  Object.prototype.toString.call(asyncProxyProxy),
+  '[object AsyncFunction]',
+  'proxy for async function proxy'
 );
diff --git a/JSTests/test262/test/built-ins/Object/prototype/toString/symbol-tag-non-str-builtin.js b/JSTests/test262/test/built-ins/Object/prototype/toString/symbol-tag-non-str-builtin.js
new file mode 100644
index 0000000..a19e840
--- /dev/null
+++ b/JSTests/test262/test/built-ins/Object/prototype/toString/symbol-tag-non-str-builtin.js
@@ -0,0 +1,76 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.tostring
+description: >
+  Non-string values of `Symbol.toStringTag` property are ignored.
+info: |
+  Object.prototype.toString ( )
+
+  [...]
+  15. Let tag be ? Get(O, @@toStringTag).
+  16. If Type(tag) is not String, set tag to builtinTag.
+  17. Return the string-concatenation of "[object ", tag, and "]".
+features: [Symbol.toStringTag, Symbol.iterator, generators]
+---*/
+
+var toString = Object.prototype.toString;
+var defaultTag = '[object Object]';
+
+delete Symbol.prototype[Symbol.toStringTag];
+assert.sameValue(toString.call(Symbol('desc')), defaultTag);
+
+Object.defineProperty(Math, Symbol.toStringTag, {value: Symbol()});
+assert.sameValue(toString.call(Math), defaultTag);
+
+var strIter = ''[Symbol.iterator]();
+var strIterProto = Object.getPrototypeOf(strIter);
+delete strIterProto[Symbol.toStringTag];
+assert.sameValue(toString.call(strIter), defaultTag);
+
+var arrIter = [][Symbol.iterator]();
+var arrIterProto = Object.getPrototypeOf(arrIter)
+Object.defineProperty(arrIterProto, Symbol.toStringTag, {value: null});
+assert.sameValue(toString.call(arrIter), defaultTag);
+
+var map = new Map();
+delete Map.prototype[Symbol.toStringTag];
+assert.sameValue(toString.call(map), defaultTag);
+
+var mapIter = map[Symbol.iterator]();
+var mapIterProto = Object.getPrototypeOf(mapIter);
+Object.defineProperty(mapIterProto, Symbol.toStringTag, {
+  get: function() { return new String('ShouldNotBeUnwrapped'); },
+});
+assert.sameValue(toString.call(mapIter), defaultTag);
+
+var set = new Set();
+delete Set.prototype[Symbol.toStringTag];
+assert.sameValue(toString.call(set), defaultTag);
+
+var setIter = set[Symbol.iterator]();
+var setIterProto = Object.getPrototypeOf(setIter);
+Object.defineProperty(setIterProto, Symbol.toStringTag, {value: false});
+assert.sameValue(toString.call(setIter), defaultTag);
+
+var wm = new WeakMap();
+delete WeakMap.prototype[Symbol.toStringTag];
+assert.sameValue(toString.call(wm), defaultTag);
+
+var ws = new WeakSet();
+Object.defineProperty(WeakSet.prototype, Symbol.toStringTag, {value: 0});
+assert.sameValue(toString.call(ws), defaultTag);
+
+delete JSON[Symbol.toStringTag];
+assert.sameValue(toString.call(JSON), defaultTag);
+
+var gen = (function* () {})();
+var genProto = Object.getPrototypeOf(gen);
+Object.defineProperty(genProto, Symbol.toStringTag, {
+  get: function() { return {}; },
+});
+assert.sameValue(toString.call(gen), defaultTag);
+
+var promise = new Promise(function() {});
+delete Promise.prototype[Symbol.toStringTag];
+assert.sameValue(toString.call(promise), defaultTag);
diff --git a/JSTests/test262/test/built-ins/Object/prototype/toString/symbol-tag-non-str-proxy-function.js b/JSTests/test262/test/built-ins/Object/prototype/toString/symbol-tag-non-str-proxy-function.js
new file mode 100644
index 0000000..fcc5bee
--- /dev/null
+++ b/JSTests/test262/test/built-ins/Object/prototype/toString/symbol-tag-non-str-proxy-function.js
@@ -0,0 +1,55 @@
+// Copyright (C) 2016 the Apple Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.tostring
+description: >
+  Non-string values of `Symbol.toStringTag` property are ignored.
+info: |
+  ProxyCreate ( target, handler )
+
+  [...]
+  7. If IsCallable(target) is true, then
+    a. Set P.[[Call]] as specified in 9.5.12.
+
+  Object.prototype.toString ( )
+
+  [...]
+  7. Else if O has a [[Call]] internal method, let builtinTag be "Function".
+  [...]
+  15. Let tag be ? Get(O, @@toStringTag).
+  16. If Type(tag) is not String, set tag to builtinTag.
+  17. Return the string-concatenation of "[object ", tag, and "]".
+features: [generators, async-functions, Proxy, Symbol.toStringTag]
+---*/
+
+var generatorProxy = new Proxy(function* () {}, {});
+var generatorProxyProxy = new Proxy(generatorProxy, {});
+delete generatorProxy.constructor.prototype[Symbol.toStringTag];
+
+assert.sameValue(
+  Object.prototype.toString.call(generatorProxy),
+  '[object Function]',
+  'generator function proxy without Symbol.toStringTag'
+);
+assert.sameValue(
+  Object.prototype.toString.call(generatorProxyProxy),
+  '[object Function]',
+  'proxy for generator function proxy without Symbol.toStringTag'
+);
+
+var asyncProxy = new Proxy(async function() {}, {});
+var asyncProxyProxy = new Proxy(asyncProxy, {});
+Object.defineProperty(asyncProxy.constructor.prototype, Symbol.toStringTag, {
+  value: undefined,
+});
+
+assert.sameValue(
+  Object.prototype.toString.call(asyncProxy),
+  '[object Function]',
+  'async function proxy without Symbol.toStringTag'
+);
+assert.sameValue(
+  Object.prototype.toString.call(asyncProxyProxy),
+  '[object Function]',
+  'proxy for async function proxy without Symbol.toStringTag'
+);
diff --git a/JSTests/test262/test/built-ins/Object/subclass-object-arg.js b/JSTests/test262/test/built-ins/Object/subclass-object-arg.js
index d4de31e..9500340 100644
--- a/JSTests/test262/test/built-ins/Object/subclass-object-arg.js
+++ b/JSTests/test262/test/built-ins/Object/subclass-object-arg.js
@@ -11,7 +11,6 @@
   1. If NewTarget is neither undefined nor the active function, then
     a. Return ? OrdinaryCreateFromConstructor(NewTarget, "%ObjectPrototype%").
   [...]
-  3. Return ! ToObject(value).
 features: [class, Reflect, Reflect.construct]
 ---*/
 
@@ -20,5 +19,8 @@
 var o1 = new O({a: 1});
 var o2 = Reflect.construct(Object, [{b: 2}], O);
 
-assert.sameValue(o1.a, 1);
-assert.sameValue(o2.b, 2);
+assert.sameValue(o1.a, undefined);
+assert.sameValue(o2.b, undefined);
+
+assert.sameValue(Object.getPrototypeOf(o1), O.prototype);
+assert.sameValue(Object.getPrototypeOf(o2), O.prototype);
diff --git a/JSTests/test262/test/built-ins/Promise/all/invoke-resolve-get-error-close.js b/JSTests/test262/test/built-ins/Promise/all/invoke-resolve-get-error-close.js
index ac1bb29..a2be829 100644
--- a/JSTests/test262/test/built-ins/Promise/all/invoke-resolve-get-error-close.js
+++ b/JSTests/test262/test/built-ins/Promise/all/invoke-resolve-get-error-close.js
@@ -54,4 +54,4 @@
 Promise.all(iter);
 
 assert.sameValue(nextCount, 0);
-assert.sameValue(returnCount, 0);
+assert.sameValue(returnCount, 1);
diff --git a/JSTests/test262/test/built-ins/Promise/all/resolve-element-function-name.js b/JSTests/test262/test/built-ins/Promise/all/resolve-element-function-name.js
index 2af12b8..e743dba 100644
--- a/JSTests/test262/test/built-ins/Promise/all/resolve-element-function-name.js
+++ b/JSTests/test262/test/built-ins/Promise/all/resolve-element-function-name.js
@@ -2,7 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-es6id: 25.4.4.1.2
+esid: sec-promise.all-resolve-element-functions
 description: The `name` property of Promise.all Resolve Element functions
 info: |
   A promise resolve function is an anonymous built-in function.
@@ -29,3 +29,4 @@
 Promise.all.call(NotPromise, [thenable]);
 
 assert.sameValue(Object.prototype.hasOwnProperty.call(resolveElementFunction, "name"), false);
+assert.sameValue(resolveElementFunction.name, "");
diff --git a/JSTests/test262/test/built-ins/Promise/allSettled/invoke-resolve-get-error-close.js b/JSTests/test262/test/built-ins/Promise/allSettled/invoke-resolve-get-error-close.js
index f04144a..ccab860 100644
--- a/JSTests/test262/test/built-ins/Promise/allSettled/invoke-resolve-get-error-close.js
+++ b/JSTests/test262/test/built-ins/Promise/allSettled/invoke-resolve-get-error-close.js
@@ -45,4 +45,4 @@
 Promise.allSettled(iter);
 
 assert.sameValue(nextCount, 0);
-assert.sameValue(returnCount, 0);
+assert.sameValue(returnCount, 1);
diff --git a/JSTests/test262/test/built-ins/Promise/allSettled/reject-element-function-name.js b/JSTests/test262/test/built-ins/Promise/allSettled/reject-element-function-name.js
index 79944bb..5f8827a 100644
--- a/JSTests/test262/test/built-ins/Promise/allSettled/reject-element-function-name.js
+++ b/JSTests/test262/test/built-ins/Promise/allSettled/reject-element-function-name.js
@@ -30,3 +30,4 @@
 Promise.allSettled.call(NotPromise, [thenable]);
 
 assert.sameValue(Object.prototype.hasOwnProperty.call(rejectElementFunction, 'name'), false);
+assert.sameValue(rejectElementFunction.name, '');
diff --git a/JSTests/test262/test/built-ins/Promise/allSettled/resolve-element-function-name.js b/JSTests/test262/test/built-ins/Promise/allSettled/resolve-element-function-name.js
index 76ff9fb..2df8fb8 100644
--- a/JSTests/test262/test/built-ins/Promise/allSettled/resolve-element-function-name.js
+++ b/JSTests/test262/test/built-ins/Promise/allSettled/resolve-element-function-name.js
@@ -33,3 +33,4 @@
   Object.prototype.hasOwnProperty.call(resolveElementFunction, 'name'),
   false
 );
+assert.sameValue(resolveElementFunction.name, '');
diff --git a/JSTests/test262/test/built-ins/Promise/executor-function-name.js b/JSTests/test262/test/built-ins/Promise/executor-function-name.js
index f571504..cf412cc 100644
--- a/JSTests/test262/test/built-ins/Promise/executor-function-name.js
+++ b/JSTests/test262/test/built-ins/Promise/executor-function-name.js
@@ -2,7 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-es6id: 25.4.1.5.1
+esid: sec-getcapabilitiesexecutor-functions
 description: The `name` property of GetCapabilitiesExecutor functions
 info: |
   A GetCapabilitiesExecutor function is an anonymous built-in function.
@@ -22,3 +22,4 @@
 Promise.resolve.call(NotPromise);
 
 assert.sameValue(Object.prototype.hasOwnProperty.call(executorFunction, "name"), false);
+assert.sameValue(executorFunction.name, "");
diff --git a/JSTests/test262/test/built-ins/Promise/race/invoke-resolve-get-error-close.js b/JSTests/test262/test/built-ins/Promise/race/invoke-resolve-get-error-close.js
index 951b509..cf7f2bd 100644
--- a/JSTests/test262/test/built-ins/Promise/race/invoke-resolve-get-error-close.js
+++ b/JSTests/test262/test/built-ins/Promise/race/invoke-resolve-get-error-close.js
@@ -52,4 +52,4 @@
 Promise.race(iter);
 
 assert.sameValue(nextCount, 0);
-assert.sameValue(returnCount, 0);
+assert.sameValue(returnCount, 1);
diff --git a/JSTests/test262/test/built-ins/Promise/reject-function-name.js b/JSTests/test262/test/built-ins/Promise/reject-function-name.js
index edf684b..af64244 100644
--- a/JSTests/test262/test/built-ins/Promise/reject-function-name.js
+++ b/JSTests/test262/test/built-ins/Promise/reject-function-name.js
@@ -2,7 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-es6id: 25.4.1.3.1
+esid: sec-promise-reject-functions
 description: The `name` property of Promise Reject functions
 info: |
   A promise reject function is an anonymous built-in function.
@@ -19,3 +19,4 @@
 });
 
 assert.sameValue(Object.prototype.hasOwnProperty.call(rejectFunction, "name"), false);
+assert.sameValue(rejectFunction.name, "");
diff --git a/JSTests/test262/test/built-ins/Promise/resolve-function-name.js b/JSTests/test262/test/built-ins/Promise/resolve-function-name.js
index 7f17972..afaec3a 100644
--- a/JSTests/test262/test/built-ins/Promise/resolve-function-name.js
+++ b/JSTests/test262/test/built-ins/Promise/resolve-function-name.js
@@ -2,7 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
-es6id: 25.4.1.3.2
+esid: sec-promise-resolve-functions
 description: The `name` property of Promise Resolve functions
 info: |
   A promise resolve function is an anonymous built-in function.
@@ -19,3 +19,4 @@
 });
 
 assert.sameValue(Object.prototype.hasOwnProperty.call(resolveFunction, "name"), false);
+assert.sameValue(resolveFunction.name, "");
diff --git a/JSTests/test262/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-weakset.js b/JSTests/test262/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-weakset.js
index 6a521b5..bb23765 100644
--- a/JSTests/test262/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-weakset.js
+++ b/JSTests/test262/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-weakset.js
@@ -18,10 +18,10 @@
 ---*/
 
 assert.throws(TypeError, function() {
-  Set.prototype.values.call(new WeakMap());
+  Set.prototype.values.call(new WeakSet());
 });
 
 assert.throws(TypeError, function() {
   var s = new Set();
-  s.values.call(new WeakMap());
+  s.values.call(new WeakSet());
 });
diff --git a/JSTests/test262/test/built-ins/WeakRef/constructor.js b/JSTests/test262/test/built-ins/WeakRef/constructor.js
new file mode 100644
index 0000000..15159a7
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/constructor.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-constructor
+description: >
+  The WeakRef constructor is the %WeakRef% intrinsic object and the initial
+  value of the WeakRef property of the global object.
+features: [WeakRef]
+---*/
+
+assert.sameValue(
+  typeof WeakRef, 'function',
+  'typeof WeakRef is function'
+);
diff --git a/JSTests/test262/test/built-ins/WeakRef/instance-extensible.js b/JSTests/test262/test/built-ins/WeakRef/instance-extensible.js
new file mode 100644
index 0000000..d6249e2
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/instance-extensible.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-target
+description: Instances of WeakRef are extensible
+info: |
+  WeakRef( target )
+
+  ...
+  3. Let weakRef be ? OrdinaryCreateFromConstructor(NewTarget,  "%WeakRefPrototype%", « [[Target]] »).
+  4. Perfom ! KeepDuringJob(target).
+  5. Set weakRef.[[Target]] to target.
+  6. Return weakRef.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  ObjectCreate ( proto [ , internalSlotsList ] )
+
+  4. Set obj.[[Prototype]] to proto.
+  5. Set obj.[[Extensible]] to true.
+  6. Return obj.
+features: [WeakRef, Reflect]
+---*/
+
+var wr = new WeakRef({});
+assert.sameValue(Object.isExtensible(wr), true);
diff --git a/JSTests/test262/test/built-ins/WeakRef/length.js b/JSTests/test262/test/built-ins/WeakRef/length.js
new file mode 100644
index 0000000..9ced86b
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/length.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-target
+description: WeakRef.length property descriptor
+info: |
+  WeakRef ( target )
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, has a length
+  property whose value is an integer. Unless otherwise specified, this
+  value is equal to the largest number of named arguments shown in the
+  subclause headings for the function description. Optional parameters
+  (which are indicated with brackets: [ ]) or rest parameters (which
+  are shown using the form «...name») are not included in the default
+  argument count.
+
+  Unless otherwise specified, the length property of a built-in
+  function object has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [WeakRef]
+---*/
+
+verifyProperty(WeakRef, 'length', {
+  value: 1,
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/WeakRef/name.js b/JSTests/test262/test/built-ins/WeakRef/name.js
new file mode 100644
index 0000000..d47b73b
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/name.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-target
+description: WeakRef.name property descriptor
+info: |
+  WeakRef ( value )
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, that is not
+  identified as an anonymous function has a name property whose value
+  is a String. Unless otherwise specified, this value is the name that
+  is given to the function in this specification. For functions that
+  are specified as properties of objects, the name value is the
+  property name string used to access the function. [...]
+
+  Unless otherwise specified, the name property of a built-in function
+  object, if it exists, has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [WeakRef]
+---*/
+
+verifyProperty(WeakRef, 'name', {
+  value: 'WeakRef',
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/WeakRef/newtarget-prototype-is-not-object.js b/JSTests/test262/test/built-ins/WeakRef/newtarget-prototype-is-not-object.js
new file mode 100644
index 0000000..0313813
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/newtarget-prototype-is-not-object.js
@@ -0,0 +1,58 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-target
+description: >
+  [[Prototype]] defaults to %WeakRefPrototype% if NewTarget.prototype is not an object.
+info: |
+  WeakRef( target )
+
+  ...
+  3. Let weakRef be ? OrdinaryCreateFromConstructor(NewTarget,  "%WeakRefPrototype%", « [[Target]] »).
+  4. Perfom ! KeepDuringJob(target).
+  5. Set weakRef.[[Target]] to target.
+  6. Return weakRef.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
+
+  3. Let proto be ? Get(constructor, 'prototype').
+  4. If Type(proto) is not Object, then
+    a. Let realm be ? GetFunctionRealm(constructor).
+    b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
+  5. Return proto.
+features: [WeakRef, Reflect.construct, Symbol]
+---*/
+
+var wr;
+function newTarget() {}
+
+newTarget.prototype = undefined;
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), WeakRef.prototype, 'newTarget.prototype is undefined');
+
+newTarget.prototype = null;
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), WeakRef.prototype, 'newTarget.prototype is null');
+
+newTarget.prototype = true;
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), WeakRef.prototype, 'newTarget.prototype is a Boolean');
+
+newTarget.prototype = '';
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), WeakRef.prototype, 'newTarget.prototype is a String');
+
+newTarget.prototype = Symbol();
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), WeakRef.prototype, 'newTarget.prototype is a Symbol');
+
+newTarget.prototype = 1;
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), WeakRef.prototype, 'newTarget.prototype is a Number');
diff --git a/JSTests/test262/test/built-ins/WeakRef/prop-desc.js b/JSTests/test262/test/built-ins/WeakRef/prop-desc.js
new file mode 100644
index 0000000..26a9b29
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prop-desc.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-constructor
+description: >
+  Property descriptor of WeakRef
+info: |
+  17 ECMAScript Standard Built-in Objects:
+
+  Every other data property described in clauses 18 through 26 and in Annex B.2
+  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+  [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [WeakRef]
+---*/
+
+verifyProperty(this, 'WeakRef', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/WeakRef/proto-from-ctor-realm.js b/JSTests/test262/test/built-ins/WeakRef/proto-from-ctor-realm.js
new file mode 100644
index 0000000..4345e09
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/proto-from-ctor-realm.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-target
+description: Default [[Prototype]] value derived from realm of the newTarget
+info: |
+  WeakRef( target )
+
+  ...
+  3. Let weakRef be ? OrdinaryCreateFromConstructor(NewTarget,  '%WeakRefPrototype%', « [[Target]] »).
+  4. Perfom ! KeepDuringJob(target).
+  5. Set weakRef.[[Target]] to target.
+  6. Return weakRef.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
+
+  3. Let proto be ? Get(constructor, 'prototype').
+  4. If Type(proto) is not Object, then
+    a. Let realm be ? GetFunctionRealm(constructor).
+    b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
+  5. Return proto.
+features: [WeakRef, cross-realm, Reflect]
+---*/
+
+var other = $262.createRealm().global;
+var newTarget = new other.Function();
+var wr;
+
+newTarget.prototype = undefined;
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), other.WeakRef.prototype, 'newTarget.prototype is undefined');
+
+newTarget.prototype = null;
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), other.WeakRef.prototype, 'newTarget.prototype is null');
+
+newTarget.prototype = true;
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), other.WeakRef.prototype, 'newTarget.prototype is a Boolean');
+
+newTarget.prototype = '';
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), other.WeakRef.prototype, 'newTarget.prototype is a String');
+
+newTarget.prototype = Symbol();
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), other.WeakRef.prototype, 'newTarget.prototype is a Symbol');
+
+newTarget.prototype = 1;
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), other.WeakRef.prototype, 'newTarget.prototype is a Number');
+
diff --git a/JSTests/test262/test/built-ins/WeakRef/proto.js b/JSTests/test262/test/built-ins/WeakRef/proto.js
new file mode 100644
index 0000000..aee0662
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/proto.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-weak-ref-constructor
+description: >
+  The prototype of WeakRef is Object.prototype
+info: |
+  The value of the [[Prototype]] internal slot of the WeakRef object is the
+  intrinsic object %FunctionPrototype%.
+features: [WeakRef]
+---*/
+
+assert.sameValue(
+  Object.getPrototypeOf(WeakRef),
+  Function.prototype,
+  'Object.getPrototypeOf(WeakRef) returns the value of `Function.prototype`'
+);
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype-from-newtarget-abrupt.js b/JSTests/test262/test/built-ins/WeakRef/prototype-from-newtarget-abrupt.js
new file mode 100644
index 0000000..952b2af
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype-from-newtarget-abrupt.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-target
+description: >
+  Return abrupt from getting the NewTarget prototype
+info: |
+  WeakRef ( target )
+
+  ...
+  3. Let weakRef be ? OrdinaryCreateFromConstructor(NewTarget,  "%WeakRefPrototype%", « [[Target]] »).
+  4. Perfom ! KeepDuringJob(target).
+  5. Set weakRef.[[Target]] to target.
+  6. Return weakRef.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
+
+  3. Let proto be ? Get(constructor, 'prototype').
+features: [WeakRef, Reflect.construct]
+---*/
+
+var calls = 0;
+var newTarget = function() {}.bind(null);
+Object.defineProperty(newTarget, 'prototype', {
+  get: function() {
+    calls += 1;
+    throw new Test262Error();
+  }
+});
+
+assert.throws(Test262Error, function() {
+  Reflect.construct(WeakRef, [{}], newTarget);
+});
+
+assert.sameValue(calls, 1);
\ No newline at end of file
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype-from-newtarget-custom.js b/JSTests/test262/test/built-ins/WeakRef/prototype-from-newtarget-custom.js
new file mode 100644
index 0000000..104781f
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype-from-newtarget-custom.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-target
+description: >
+  The [[Prototype]] internal slot is computed from NewTarget.
+info: |
+  WeakRef ( target )
+
+  ...
+  3. Let weakRef be ? OrdinaryCreateFromConstructor(NewTarget,  "%WeakRefPrototype%", « [[Target]] »).
+  4. Perfom ! KeepDuringJob(target).
+  5. Set weakRef.[[Target]] to target.
+  6. Return weakRef.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
+
+  3. Let proto be ? Get(constructor, 'prototype').
+  4. If Type(proto) is not Object, then
+    a. Let realm be ? GetFunctionRealm(constructor).
+    b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
+  5. Return proto.
+features: [WeakRef, Reflect.construct]
+---*/
+
+var wr;
+
+wr = Reflect.construct(WeakRef, [{}], Object);
+assert.sameValue(Object.getPrototypeOf(wr), Object.prototype, 'NewTarget is built-in Object constructor');
+
+var newTarget = function() {}.bind(null);
+Object.defineProperty(newTarget, 'prototype', {
+  get: function() {
+    return Array.prototype;
+  }
+});
+wr = Reflect.construct(WeakRef, [{}], newTarget);
+assert.sameValue(Object.getPrototypeOf(wr), Array.prototype, 'NewTarget is BoundFunction with accessor');
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype-from-newtarget.js b/JSTests/test262/test/built-ins/WeakRef/prototype-from-newtarget.js
new file mode 100644
index 0000000..e7aa89d
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype-from-newtarget.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-target
+description: >
+  The [[Prototype]] internal slot is computed from NewTarget.
+info: |
+  WeakRef ( target )
+
+  ...
+  3. Let weakRef be ? OrdinaryCreateFromConstructor(NewTarget,  "%WeakRefPrototype%", « [[Target]] »).
+  4. Perfom ! KeepDuringJob(target).
+  5. Set weakRef.[[Target]] to target.
+  6. Return weakRef.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
+
+  3. Let proto be ? Get(constructor, 'prototype').
+  4. If Type(proto) is not Object, then
+    a. Let realm be ? GetFunctionRealm(constructor).
+    b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
+  5. Return proto.
+features: [WeakRef]
+---*/
+
+var wr = new WeakRef({});
+assert.sameValue(Object.getPrototypeOf(wr), WeakRef.prototype);
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/Symbol.toStringTag.js b/JSTests/test262/test/built-ins/WeakRef/prototype/Symbol.toStringTag.js
new file mode 100644
index 0000000..a6d4e11
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/Symbol.toStringTag.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-@@tostringtag
+description: >
+    `Symbol.toStringTag` property descriptor
+info: |
+    The initial value of the @@toStringTag property is the String value
+    'WeakRef'.
+
+    This property has the attributes { [[Writable]]: false, [[Enumerable]]:
+    false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [WeakRef, Symbol, Symbol.toStringTag]
+---*/
+
+verifyProperty(WeakRef.prototype, Symbol.toStringTag, {
+  value: 'WeakRef',
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/constructor.js b/JSTests/test262/test/built-ins/WeakRef/prototype/constructor.js
new file mode 100644
index 0000000..d9c1e5c
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-properties-of-the-weak-ref-prototype-object
+description: WeakRef.prototype.constructor
+info: |
+  WeakRef.prototype.constructor
+
+  Normative Optional
+
+  The initial value of WeakRef.prototype.constructor is the intrinsic object %WeakRef%.
+
+  This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
+
+  This section is to be treated identically to the "Annex B" of ECMA-262, but to be written in-line with the main specification.
+includes: [propertyHelper.js]
+features: [WeakRef]
+---*/
+
+var actual = WeakRef.prototype.hasOwnProperty('constructor');
+
+// If implemented, it should conform to the spec text
+if (actual) {
+  verifyProperty(WeakRef.prototype, 'constructor', {
+    value: WeakRef,
+    writable: true,
+    enumerable: false,
+    configurable: true
+  });
+}
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/deref/custom-this.js b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/custom-this.js
new file mode 100644
index 0000000..44d571d
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/custom-this.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref.prototype.deref
+description: Return target if weakRef.[[Target]] is not empty (applying custom this)
+info: |
+  WeakRef.prototype.deref ()
+
+  1. Let weakRef be the this value.
+  ...
+  4. Let target be the value of weakRef.[[Target]].
+  5. If target is not empty,
+    a. Perform ! KeepDuringJob(target).
+    b. Return target.
+  6. Return undefined.
+features: [WeakRef]
+---*/
+
+var target = {};
+var deref = WeakRef.prototype.deref;
+var wref = new WeakRef(target);
+
+assert.sameValue(deref.call(wref), target, 'returns target');
+assert.sameValue(deref.call(wref), target, '[[Target]] is not emptied #1');
+assert.sameValue(deref.call(wref), target, '[[Target]] is not emptied #2');
+assert.sameValue(deref.call(wref), target, '[[Target]] is not emptied #3');
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/deref/gc-cleanup-not-prevented-with-wr-deref.js b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/gc-cleanup-not-prevented-with-wr-deref.js
new file mode 100644
index 0000000..33d67b3
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/gc-cleanup-not-prevented-with-wr-deref.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref.prototype.deref
+description: WeakRef deref should not prevent a GC event
+info: |
+  WeakRef.prototype.deref ( )
+
+  ...
+  4. Let target be the value of weakRef.[[Target]].
+  5. If target is not empty,
+    a. Perform ! KeepDuringJob(target).
+    b. Return target.
+  6. Return undefined.
+features: [WeakRef, host-gc-required]
+---*/
+
+var deref = false;
+
+function emptyCells() {
+  var wr;
+  (function() {
+    var a = {};
+    wr = new WeakRef(a);
+  })();
+  $262.gc();
+  deref = wr.deref();
+}
+
+emptyCells();
+
+assert.sameValue(deref, undefined);
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/deref/length.js b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/length.js
new file mode 100644
index 0000000..f9103c0
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/length.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref.prototype.deref
+description: WeakRef.prototype.deref.length property descriptor
+info: |
+  WeakRef.prototype.deref ()
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, has a length
+  property whose value is an integer. Unless otherwise specified, this
+  value is equal to the largest number of named arguments shown in the
+  subclause headings for the function description. Optional parameters
+  (which are indicated with brackets: [ ]) or rest parameters (which
+  are shown using the form «...name») are not included in the default
+  argument count.
+
+  Unless otherwise specified, the length property of a built-in
+  function object has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [WeakRef]
+---*/
+
+verifyProperty(WeakRef.prototype.deref, 'length', {
+  value: 0,
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/deref/name.js b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/name.js
new file mode 100644
index 0000000..5d512bb
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/name.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref.prototype.deref
+description: WeakRef.prototype.deref.name property descriptor
+info: |
+  WeakRef.prototype.deref.name value and property descriptor
+
+  17 ECMAScript Standard Built-in Objects
+
+  Every built-in function object, including constructors, that is not
+  identified as an anonymous function has a name property whose value
+  is a String. Unless otherwise specified, this value is the name that
+  is given to the function in this specification. For functions that
+  are specified as properties of objects, the name value is the
+  property name string used to access the function. [...]
+
+  Unless otherwise specified, the name property of a built-in function
+  object, if it exists, has the attributes { [[Writable]]: false,
+  [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [WeakRef]
+---*/
+
+verifyProperty(WeakRef.prototype.deref, 'name', {
+  value: 'deref',
+  writable: false,
+  enumerable: false,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/deref/prop-desc.js b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/prop-desc.js
new file mode 100644
index 0000000..e8d0359
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/prop-desc.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref.prototype.deref
+description: >
+  Property descriptor of WeakRef.prototype.deref
+info: |
+  17 ECMAScript Standard Built-in Objects:
+
+  Every other data property described in clauses 18 through 26 and in Annex B.2
+  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+  [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [WeakRef]
+---*/
+
+assert.sameValue(typeof WeakRef.prototype.deref, 'function');
+
+verifyProperty(WeakRef.prototype, 'deref', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/deref/return-target.js b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/return-target.js
new file mode 100644
index 0000000..19bb5e6
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/return-target.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref.prototype.deref
+description: Return target if weakRef.[[Target]] is not empty
+info: |
+  WeakRef.prototype.deref ()
+
+  ...
+  4. Let target be the value of weakRef.[[Target]].
+  5. If target is not empty,
+    a. Perform ! KeepDuringJob(target).
+    b. Return target.
+  6. Return undefined.
+features: [WeakRef]
+---*/
+
+var target = {};
+var wref = new WeakRef(target);
+
+assert.sameValue(wref.deref(), target, 'returns target');
+assert.sameValue(wref.deref(), target, '[[Target]] is not emptied #1');
+assert.sameValue(wref.deref(), target, '[[Target]] is not emptied #2');
+assert.sameValue(wref.deref(), target, '[[Target]] is not emptied #3');
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/deref/this-does-not-have-internal-target-throws.js b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/this-does-not-have-internal-target-throws.js
new file mode 100644
index 0000000..c21d048
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/this-does-not-have-internal-target-throws.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref.prototype.deref
+description: Throws a TypeError if this does not have a [[Target]] internal slot
+info: |
+  WeakRef.prototype.deref ()
+
+  1. Let weakRef be the this value.
+  2. If Type(weakRef) is not Object, throw a TypeError exception.
+  3. If weakRef does not have a [[Target]] internal slot, throw a TypeError exception.
+  4. Let target be the value of weakRef.[[Target]].
+  5. If target is not empty,
+    a. Perform ! KeepDuringJob(target).
+    b. Return target.
+  6. Return undefined.
+features: [WeakRef, FinalizationGroup]
+---*/
+
+assert.sameValue(typeof WeakRef.prototype.deref, 'function');
+
+var deref = WeakRef.prototype.deref;
+
+assert.throws(TypeError, function() {
+  deref.call({ ['[[Target]]']: {} });
+}, 'Ordinary object without [[Target]]');
+
+assert.throws(TypeError, function() {
+  deref.call(WeakRef.prototype);
+}, 'WeakRef.prototype does not have a [[Target]] internal slot');
+
+assert.throws(TypeError, function() {
+  deref.call(WeakRef);
+}, 'WeakRef does not have a [[Target]] internal slot');
+
+var fg = new FinalizationGroup(function() {});
+assert.throws(TypeError, function() {
+  deref.call(fg);
+}, 'FinalizationGroup instance');
+
+var wm = new WeakMap();
+assert.throws(TypeError, function() {
+  deref.call(wm);
+}, 'WeakMap instance');
+
+var ws = new WeakSet();
+assert.throws(TypeError, function() {
+  deref.call(ws);
+}, 'WeakSet instance');
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/deref/this-not-object-throws.js b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/this-not-object-throws.js
new file mode 100644
index 0000000..05adca1
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/deref/this-not-object-throws.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref.prototype.deref
+description: Throws a TypeError if this is not an Object
+info: |
+  WeakRef.prototype.deref ()
+
+  1. Let weakRef be the this value.
+  2. If Type(weakRef) is not Object, throw a TypeError exception.
+  3. If weakRef does not have a [[Target]] internal slot, throw a TypeError exception.
+  4. Let target be the value of weakRef.[[Target]].
+  5. If target is not empty,
+    a. Perform ! KeepDuringJob(target).
+    b. Return target.
+  6. Return undefined.
+features: [WeakRef]
+---*/
+
+assert.sameValue(typeof WeakRef.prototype.deref, 'function');
+
+var deref = WeakRef.prototype.deref;
+
+assert.throws(TypeError, function() {
+  deref.call(undefined);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+  deref.call(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+  deref.call(true);
+}, 'true');
+
+assert.throws(TypeError, function() {
+  deref.call(false);
+}, 'false');
+
+assert.throws(TypeError, function() {
+  deref.call(1);
+}, 'number');
+
+assert.throws(TypeError, function() {
+  deref.call('object');
+}, 'string');
+
+var s = Symbol();
+assert.throws(TypeError, function() {
+  deref.call(s);
+}, 'symbol');
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/prop-desc.js b/JSTests/test262/test/built-ins/WeakRef/prototype/prop-desc.js
new file mode 100644
index 0000000..8f4bacc
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/prop-desc.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The property descriptor WeakRef.prototype
+esid: sec-weak-ref.prototype
+info: |
+  This property has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+  [[Configurable]]: false }.
+features: [WeakRef]
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(WeakRef, 'prototype', {
+  writable: false,
+  enumerable: false,
+  configurable: false
+});
diff --git a/JSTests/test262/test/built-ins/WeakRef/prototype/proto.js b/JSTests/test262/test/built-ins/WeakRef/prototype/proto.js
new file mode 100644
index 0000000..8df0982
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/prototype/proto.js
@@ -0,0 +1,14 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The prototype of WeakRef.prototype is Object.prototype
+esid: sec-properties-of-the-weak-ref-prototype-object
+info: |
+  The value of the [[Prototype]] internal slot of the WeakRef prototype object
+  is the intrinsic object %ObjectPrototype%.
+features: [WeakRef]
+---*/
+
+var proto = Object.getPrototypeOf(WeakRef.prototype);
+assert.sameValue(proto, Object.prototype);
diff --git a/JSTests/test262/test/built-ins/WeakRef/returns-new-object-from-constructor.js b/JSTests/test262/test/built-ins/WeakRef/returns-new-object-from-constructor.js
new file mode 100644
index 0000000..9e52f88
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/returns-new-object-from-constructor.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-target
+description: >
+  Returns a new ordinary object from the WeakRef constructor
+info: |
+  WeakRef ( target )
+
+  ...
+  3. Let weakRef be ? OrdinaryCreateFromConstructor(NewTarget,  "%WeakRefPrototype%", « [[Target]] »).
+  4. Perfom ! KeepDuringJob(target).
+  5. Set weakRef.[[Target]] to target.
+  6. Return weakRef.
+
+  OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
+
+  ...
+  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
+  3. Return ObjectCreate(proto, internalSlotsList).
+
+  GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
+
+  3. Let proto be ? Get(constructor, 'prototype').
+  4. If Type(proto) is not Object, then
+    a. Let realm be ? GetFunctionRealm(constructor).
+    b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
+  5. Return proto.
+features: [WeakRef]
+---*/
+
+var target = {};
+var wr = new WeakRef(target);
+
+assert.notSameValue(wr, target, 'does not return the same object');
+assert.sameValue(wr instanceof WeakRef, true, 'instanceof');
+
+for (let key of Object.getOwnPropertyNames(wr)) {
+  assert(false, `should not set any own named properties: ${key}`);
+}
+
+for (let key of Object.getOwnPropertySymbols(wr)) {
+  assert(false, `should not set any own symbol properties: ${String(key)}`);
+}
+
+assert.sameValue(Object.getPrototypeOf(wr), WeakRef.prototype);
+
+
diff --git a/JSTests/test262/test/built-ins/WeakRef/target-not-object-throws.js b/JSTests/test262/test/built-ins/WeakRef/target-not-object-throws.js
new file mode 100644
index 0000000..5322770
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/target-not-object-throws.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-target
+description: >
+  Throws a TypeError if target is not Object
+info: |
+  WeakRef ( target )
+
+  1. If NewTarget is undefined, throw a TypeError exception.
+  2. If Type(target) is not Object, throw a TypeError exception.
+  ...
+features: [WeakRef]
+---*/
+
+assert.sameValue(
+  typeof WeakRef, 'function',
+  'typeof WeakRef is function'
+);
+
+assert.throws(TypeError, function() {
+  new WeakRef();
+}, 'implicit undefined');
+
+assert.throws(TypeError, function() {
+  new WeakRef(undefined);
+}, 'explicit undefined');
+
+assert.throws(TypeError, function() {
+  new WeakRef(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+  new WeakRef(1);
+}, 'number');
+
+assert.throws(TypeError, function() {
+  new WeakRef('Object');
+}, 'string');
+
+var s = Symbol();
+assert.throws(TypeError, function() {
+  new WeakRef(s);
+}, 'symbol');
+
+assert.throws(TypeError, function() {
+  new WeakRef(true);
+}, 'Boolean, true');
+
+assert.throws(TypeError, function() {
+  new WeakRef(false);
+}, 'Boolean, false');
diff --git a/JSTests/test262/test/built-ins/WeakRef/undefined-newtarget-throws.js b/JSTests/test262/test/built-ins/WeakRef/undefined-newtarget-throws.js
new file mode 100644
index 0000000..942a070
--- /dev/null
+++ b/JSTests/test262/test/built-ins/WeakRef/undefined-newtarget-throws.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weak-ref-target
+description: >
+  Throws a TypeError if NewTarget is undefined.
+info: |
+  WeakRef ( target )
+
+  1. If NewTarget is undefined, throw a TypeError exception.
+  2. If Type(target) is not Object, throw a TypeError exception.
+  ...
+features: [WeakRef]
+---*/
+
+assert.sameValue(
+  typeof WeakRef, 'function',
+  'typeof WeakRef is function'
+);
+
+assert.throws(TypeError, function() {
+  WeakRef();
+});
+
+assert.throws(TypeError, function() {
+  WeakRef({});
+});
diff --git a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/builtin.js b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/builtin.js
index ea19689..2ade8aa 100644
--- a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/builtin.js
+++ b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/builtin.js
@@ -1,4 +1,5 @@
-// Copyright 2012-2019 Mozilla Corporation; Igalia, S.L. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// Copyright 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/default-options-object-prototype.js b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/default-options-object-prototype.js
index af40a89..c46d4b0 100644
--- a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/default-options-object-prototype.js
+++ b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/default-options-object-prototype.js
@@ -1,4 +1,5 @@
-// Copyright (C) 2017-2019 Daniel Ehrenberg; Igalia, S.L. All rights reserved.
+// Copyright (C) 2017 Daniel Ehrenberg. All rights reserved.
+// Copyright (C) 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/length.js b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/length.js
index 0a0d78c..7a22c29 100644
--- a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/length.js
+++ b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/length.js
@@ -1,4 +1,5 @@
-// Copyright (C) 2017-2019 André Bargull; Igalia, S.L. All rights reserved.
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// Copyright (C) 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/returns-same-results-as-NumberFormat.js b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/returns-same-results-as-NumberFormat.js
index 36a5ee4..2ee4f8d 100644
--- a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/returns-same-results-as-NumberFormat.js
+++ b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/returns-same-results-as-NumberFormat.js
@@ -1,4 +1,5 @@
-// Copyright 2012-2019 Mozilla Corporation; Igalia, S.L. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// Copyright 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/taint-Intl-NumberFormat.js b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/taint-Intl-NumberFormat.js
index b1aeef3..be336fd 100644
--- a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/taint-Intl-NumberFormat.js
+++ b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/taint-Intl-NumberFormat.js
@@ -1,4 +1,5 @@
-// Copyright 2013-2019 Mozilla Corporation; Igalia, S.L. All rights reserved.
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// Copyright 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/this-value-invalid.js b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/this-value-invalid.js
index d80719a..9506feb 100644
--- a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/this-value-invalid.js
+++ b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/this-value-invalid.js
@@ -1,4 +1,5 @@
-// Copyright 2012-2019 Mozilla Corporation; Igalia, S.L. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// Copyright 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/throws-same-exceptions-as-NumberFormat.js b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/throws-same-exceptions-as-NumberFormat.js
index cf8a391..14decca 100644
--- a/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/throws-same-exceptions-as-NumberFormat.js
+++ b/JSTests/test262/test/intl402/BigInt/prototype/toLocaleString/throws-same-exceptions-as-NumberFormat.js
@@ -1,4 +1,5 @@
-// Copyright 2012-2019 Mozilla Corporation; Igalia, S.L. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// Copyright 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/constructor-options-order-quarter.js b/JSTests/test262/test/intl402/DateTimeFormat/constructor-options-order-quarter.js
deleted file mode 100644
index d1a40c0..0000000
--- a/JSTests/test262/test/intl402/DateTimeFormat/constructor-options-order-quarter.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2019 Googe Inc. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-esid: sec-initializedatetimeformat
-description: Checks the order of getting options of 'quarter' for the DateTimeFormat constructor.
-info: |
-    ToDateTimeOptions ( options, required, defaults )
-    4. If required is "date" or "any", then
-      a. For each of the property names "weekday", "year", "quarter", "month",  "day", do
-includes: [compareArray.js]
-features: [Intl.DateTimeFormat-quarter]
----*/
-
-// Just need to ensure quarter are get between year and month.
-const expected = [
-  // ToDateTimeOptions step 4.
-  "year", "quarter", "month",
-  // InitializeDateTimeFormat step 22.
-  "year",
-  "quarter",
-  "month"
-];
-
-const actual = [];
-
-const options = {
-  get month() {
-    actual.push("month");
-    return "numeric";
-  },
-  get quarter() {
-    actual.push("quarter");
-    return "long";
-  },
-  get year() {
-    actual.push("year");
-    return "numeric";
-  },
-};
-
-new Intl.DateTimeFormat("en", options);
-assert.compareArray(actual, expected);
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/constructor-options-quarter-invalid.js b/JSTests/test262/test/intl402/DateTimeFormat/constructor-options-quarter-invalid.js
deleted file mode 100644
index c21eda3..0000000
--- a/JSTests/test262/test/intl402/DateTimeFormat/constructor-options-quarter-invalid.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2019 Google Inc. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-esid: sec-initializedatetimeformat
-description: >
-    Checks error cases for the options argument to the DateTimeFormat constructor.
-info: |
-   [[Quarter]]    `"quarter"`    `"narrow"`, `"short"`, `"long"`
-    InitializeDateTimeFormat ( dateTimeFormat, locales, options )
-
-    ...
-features: [Intl.DateTimeFormat-quarter]
----*/
-
-
-const invalidOptions = [
-  "",
-  "LONG",
-  " long",
-  "short ",
-  "full",
-  "numeric",
-];
-for (const quarter of invalidOptions) {
-  assert.throws(RangeError, function() {
-    new Intl.DateTimeFormat("en", { quarter });
-  }, `new Intl.DateTimeFormat("en", { quarter: "${quarter}" }) throws RangeError`);
-}
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/constructor-options-quarter-valid.js b/JSTests/test262/test/intl402/DateTimeFormat/constructor-options-quarter-valid.js
deleted file mode 100644
index a9a3075..0000000
--- a/JSTests/test262/test/intl402/DateTimeFormat/constructor-options-quarter-valid.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2019 Google Inc. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-esid: sec-initializedatetimeformat
-description: >
-    Checks handling of the options argument to the DateTimeFormat constructor.
-info: |
-   [[Quarter]]    `"quarter"`    `"narrow"`, `"short"`, `"long"`
-    InitializeDateTimeFormat ( dateTimeFormat, locales, options )
-
-    ...
-features: [Intl.DateTimeFormat-quarter]
----*/
-
-
-const validOptions = [
-  [undefined, undefined],
-  ["long", "long"],
-  ["short", "short"],
-  ["narrow", "narrow"],
-  [{ toString() { return "narrow"; } }, "narrow"],
-  [{ valueOf() { return "long"; }, toString: undefined }, "long"],
-];
-for (const [quarter, expected] of validOptions) {
-  const dtf = new Intl.DateTimeFormat("en", { quarter });
-  const options = dtf.resolvedOptions();
-  assert.sameValue(options.quarter, expected);
-  const propdesc = Object.getOwnPropertyDescriptor(options, "quarter");
-  if (expected === undefined) {
-    assert.sameValue(propdesc, undefined);
-  } else {
-    assert.sameValue(propdesc.value, expected);
-  }
-}
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-long-en.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-long-en.js
new file mode 100644
index 0000000..69440b0
--- /dev/null
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-long-en.js
@@ -0,0 +1,93 @@
+// Copyright 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-initializedatetimeformat
+description: Checks basic handling of dayPeriod, long format.
+features: [Intl.DateTimeFormat-dayPeriod]
+locale: [en-US]
+---*/
+
+const d0000 = new Date(2017, 11, 12,  0, 0, 0, 0);
+const d0100 = new Date(2017, 11, 12,  1, 0, 0, 0);
+const d0200 = new Date(2017, 11, 12,  2, 0, 0, 0);
+const d0300 = new Date(2017, 11, 12,  3, 0, 0, 0);
+const d0400 = new Date(2017, 11, 12,  4, 0, 0, 0);
+const d0500 = new Date(2017, 11, 12,  5, 0, 0, 0);
+const d0600 = new Date(2017, 11, 12,  6, 0, 0, 0);
+const d0700 = new Date(2017, 11, 12,  7, 0, 0, 0);
+const d0800 = new Date(2017, 11, 12,  8, 0, 0, 0);
+const d0900 = new Date(2017, 11, 12,  9, 0, 0, 0);
+const d1000 = new Date(2017, 11, 12, 10, 0, 0, 0);
+const d1100 = new Date(2017, 11, 12, 11, 0, 0, 0);
+const d1200 = new Date(2017, 11, 12, 12, 0, 0, 0);
+const d1300 = new Date(2017, 11, 12, 13, 0, 0, 0);
+const d1400 = new Date(2017, 11, 12, 14, 0, 0, 0);
+const d1500 = new Date(2017, 11, 12, 15, 0, 0, 0);
+const d1600 = new Date(2017, 11, 12, 16, 0, 0, 0);
+const d1700 = new Date(2017, 11, 12, 17, 0, 0, 0);
+const d1800 = new Date(2017, 11, 12, 18, 0, 0, 0);
+const d1900 = new Date(2017, 11, 12, 19, 0, 0, 0);
+const d2000 = new Date(2017, 11, 12, 20, 0, 0, 0);
+const d2100 = new Date(2017, 11, 12, 21, 0, 0, 0);
+const d2200 = new Date(2017, 11, 12, 22, 0, 0, 0);
+const d2300 = new Date(2017, 11, 12, 23, 0, 0, 0);
+
+const long = new Intl.DateTimeFormat('en', {
+  dayPeriod: 'long'
+});
+
+assert.sameValue(long.format(d0000), 'at night', '00:00, long format');
+assert.sameValue(long.format(d0100), 'at night', '01:00, long format');
+assert.sameValue(long.format(d0200), 'at night', '02:00, long format');
+assert.sameValue(long.format(d0300), 'at night', '03:00, long format');
+assert.sameValue(long.format(d0400), 'at night', '04:00, long format');
+assert.sameValue(long.format(d0500), 'at night', '05:00, long format');
+assert.sameValue(long.format(d0600), 'in the morning', '06:00, long format');
+assert.sameValue(long.format(d0700), 'in the morning', '07:00, long format');
+assert.sameValue(long.format(d0800), 'in the morning', '08:00, long format');
+assert.sameValue(long.format(d0900), 'in the morning', '09:00, long format');
+assert.sameValue(long.format(d1000), 'in the morning', '10:00, long format');
+assert.sameValue(long.format(d1100), 'in the morning', '11:00, long format');
+assert.sameValue(long.format(d1200), 'noon', '12:00, long format');
+assert.sameValue(long.format(d1300), 'in the afternoon', '13:00, long format');
+assert.sameValue(long.format(d1400), 'in the afternoon', '14:00, long format');
+assert.sameValue(long.format(d1500), 'in the afternoon', '15:00, long format');
+assert.sameValue(long.format(d1600), 'in the afternoon', '16:00, long format');
+assert.sameValue(long.format(d1700), 'in the afternoon', '17:00, long format');
+assert.sameValue(long.format(d1800), 'in the evening', '18:00, long format');
+assert.sameValue(long.format(d1900), 'in the evening', '19:00, long format');
+assert.sameValue(long.format(d2000), 'in the evening', '20:00, long format');
+assert.sameValue(long.format(d2100), 'at night', '21:00, long format');
+assert.sameValue(long.format(d2200), 'at night', '22:00, long format');
+assert.sameValue(long.format(d2300), 'at night', '23:00, long format');
+
+const longNumeric = new Intl.DateTimeFormat('en', {
+  dayPeriod: 'long',
+  hour: 'numeric'
+});
+
+assert.sameValue(longNumeric.format(d0000), '12 at night', '00:00, long-numeric');
+assert.sameValue(longNumeric.format(d0100), '1 at night', '01:00, long-numeric');
+assert.sameValue(longNumeric.format(d0200), '2 at night', '02:00, long-numeric');
+assert.sameValue(longNumeric.format(d0300), '3 at night', '03:00, long-numeric');
+assert.sameValue(longNumeric.format(d0400), '4 at night', '04:00, long-numeric');
+assert.sameValue(longNumeric.format(d0500), '5 at night', '05:00, long-numeric');
+assert.sameValue(longNumeric.format(d0600), '6 in the morning', '06:00, long-numeric');
+assert.sameValue(longNumeric.format(d0700), '7 in the morning', '07:00, long-numeric');
+assert.sameValue(longNumeric.format(d0800), '8 in the morning', '08:00, long-numeric');
+assert.sameValue(longNumeric.format(d0900), '9 in the morning', '09:00, long-numeric');
+assert.sameValue(longNumeric.format(d1000), '10 in the morning', '10:00, long-numeric');
+assert.sameValue(longNumeric.format(d1100), '11 in the morning', '11:00, long-numeric');
+assert.sameValue(longNumeric.format(d1200), '12 noon', '12:00, long-numeric');
+assert.sameValue(longNumeric.format(d1300), '1 in the afternoon', '13:00, long-numeric');
+assert.sameValue(longNumeric.format(d1400), '2 in the afternoon', '14:00, long-numeric');
+assert.sameValue(longNumeric.format(d1500), '3 in the afternoon', '15:00, long-numeric');
+assert.sameValue(longNumeric.format(d1600), '4 in the afternoon', '16:00, long-numeric');
+assert.sameValue(longNumeric.format(d1700), '5 in the afternoon', '17:00, long-numeric');
+assert.sameValue(longNumeric.format(d1800), '6 in the evening', '18:00, long-numeric');
+assert.sameValue(longNumeric.format(d1900), '7 in the evening', '19:00, long-numeric');
+assert.sameValue(longNumeric.format(d2000), '8 in the evening', '20:00, long-numeric');
+assert.sameValue(longNumeric.format(d2100), '9 at night', '21:00, long-numeric');
+assert.sameValue(longNumeric.format(d2200), '10 at night', '22:00, long-numeric');
+assert.sameValue(longNumeric.format(d2300), '11 at night', '23:00, long-numeric');
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-narrow-en.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-narrow-en.js
new file mode 100644
index 0000000..01c5418
--- /dev/null
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-narrow-en.js
@@ -0,0 +1,93 @@
+// Copyright 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-initializedatetimeformat
+description: Checks basic handling of dayPeriod, narrow format.
+features: [Intl.DateTimeFormat-dayPeriod]
+locale: [en-US]
+---*/
+
+const d0000 = new Date(2017, 11, 12,  0, 0, 0, 0);
+const d0100 = new Date(2017, 11, 12,  1, 0, 0, 0);
+const d0200 = new Date(2017, 11, 12,  2, 0, 0, 0);
+const d0300 = new Date(2017, 11, 12,  3, 0, 0, 0);
+const d0400 = new Date(2017, 11, 12,  4, 0, 0, 0);
+const d0500 = new Date(2017, 11, 12,  5, 0, 0, 0);
+const d0600 = new Date(2017, 11, 12,  6, 0, 0, 0);
+const d0700 = new Date(2017, 11, 12,  7, 0, 0, 0);
+const d0800 = new Date(2017, 11, 12,  8, 0, 0, 0);
+const d0900 = new Date(2017, 11, 12,  9, 0, 0, 0);
+const d1000 = new Date(2017, 11, 12, 10, 0, 0, 0);
+const d1100 = new Date(2017, 11, 12, 11, 0, 0, 0);
+const d1200 = new Date(2017, 11, 12, 12, 0, 0, 0);
+const d1300 = new Date(2017, 11, 12, 13, 0, 0, 0);
+const d1400 = new Date(2017, 11, 12, 14, 0, 0, 0);
+const d1500 = new Date(2017, 11, 12, 15, 0, 0, 0);
+const d1600 = new Date(2017, 11, 12, 16, 0, 0, 0);
+const d1700 = new Date(2017, 11, 12, 17, 0, 0, 0);
+const d1800 = new Date(2017, 11, 12, 18, 0, 0, 0);
+const d1900 = new Date(2017, 11, 12, 19, 0, 0, 0);
+const d2000 = new Date(2017, 11, 12, 20, 0, 0, 0);
+const d2100 = new Date(2017, 11, 12, 21, 0, 0, 0);
+const d2200 = new Date(2017, 11, 12, 22, 0, 0, 0);
+const d2300 = new Date(2017, 11, 12, 23, 0, 0, 0);
+
+const narrow = new Intl.DateTimeFormat('en', {
+  dayPeriod: 'narrow'
+});
+
+assert.sameValue(narrow.format(d0000), 'at night', '00:00, narrow format');
+assert.sameValue(narrow.format(d0100), 'at night', '01:00, narrow format');
+assert.sameValue(narrow.format(d0200), 'at night', '02:00, narrow format');
+assert.sameValue(narrow.format(d0300), 'at night', '03:00, narrow format');
+assert.sameValue(narrow.format(d0400), 'at night', '04:00, narrow format');
+assert.sameValue(narrow.format(d0500), 'at night', '05:00, narrow format');
+assert.sameValue(narrow.format(d0600), 'in the morning', '06:00, narrow format');
+assert.sameValue(narrow.format(d0700), 'in the morning', '07:00, narrow format');
+assert.sameValue(narrow.format(d0800), 'in the morning', '08:00, narrow format');
+assert.sameValue(narrow.format(d0900), 'in the morning', '09:00, narrow format');
+assert.sameValue(narrow.format(d1000), 'in the morning', '10:00, narrow format');
+assert.sameValue(narrow.format(d1100), 'in the morning', '11:00, narrow format');
+assert.sameValue(narrow.format(d1200), 'n', '12:00, narrow format');
+assert.sameValue(narrow.format(d1300), 'in the afternoon', '13:00, narrow format');
+assert.sameValue(narrow.format(d1400), 'in the afternoon', '14:00, narrow format');
+assert.sameValue(narrow.format(d1500), 'in the afternoon', '15:00, narrow format');
+assert.sameValue(narrow.format(d1600), 'in the afternoon', '16:00, narrow format');
+assert.sameValue(narrow.format(d1700), 'in the afternoon', '17:00, narrow format');
+assert.sameValue(narrow.format(d1800), 'in the evening', '18:00, narrow format');
+assert.sameValue(narrow.format(d1900), 'in the evening', '19:00, narrow format');
+assert.sameValue(narrow.format(d2000), 'in the evening', '20:00, narrow format');
+assert.sameValue(narrow.format(d2100), 'at night', '21:00, narrow format');
+assert.sameValue(narrow.format(d2200), 'at night', '22:00, narrow format');
+assert.sameValue(narrow.format(d2300), 'at night', '23:00, narrow format');
+
+const narrowNumeric = new Intl.DateTimeFormat('en', {
+  dayPeriod: 'narrow',
+  hour: 'numeric'
+});
+
+assert.sameValue(narrowNumeric.format(d0000), '12 at night', '00:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d0100), '1 at night', '01:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d0200), '2 at night', '02:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d0300), '3 at night', '03:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d0400), '4 at night', '04:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d0500), '5 at night', '05:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d0600), '6 in the morning', '06:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d0700), '7 in the morning', '07:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d0800), '8 in the morning', '08:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d0900), '9 in the morning', '09:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d1000), '10 in the morning', '10:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d1100), '11 in the morning', '11:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d1200), '12 n', '12:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d1300), '1 in the afternoon', '13:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d1400), '2 in the afternoon', '14:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d1500), '3 in the afternoon', '15:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d1600), '4 in the afternoon', '16:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d1700), '5 in the afternoon', '17:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d1800), '6 in the evening', '18:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d1900), '7 in the evening', '19:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d2000), '8 in the evening', '20:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d2100), '9 at night', '21:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d2200), '10 at night', '22:00, narrow-numeric');
+assert.sameValue(narrowNumeric.format(d2300), '11 at night', '23:00, narrow-numeric');
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-short-en.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-short-en.js
new file mode 100644
index 0000000..3a450c5
--- /dev/null
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/dayPeriod-short-en.js
@@ -0,0 +1,93 @@
+// Copyright 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-initializedatetimeformat
+description: Checks basic handling of dayPeriod, short format.
+features: [Intl.DateTimeFormat-dayPeriod]
+locale: [en-US]
+---*/
+
+const d0000 = new Date(2017, 11, 12,  0, 0, 0, 0);
+const d0100 = new Date(2017, 11, 12,  1, 0, 0, 0);
+const d0200 = new Date(2017, 11, 12,  2, 0, 0, 0);
+const d0300 = new Date(2017, 11, 12,  3, 0, 0, 0);
+const d0400 = new Date(2017, 11, 12,  4, 0, 0, 0);
+const d0500 = new Date(2017, 11, 12,  5, 0, 0, 0);
+const d0600 = new Date(2017, 11, 12,  6, 0, 0, 0);
+const d0700 = new Date(2017, 11, 12,  7, 0, 0, 0);
+const d0800 = new Date(2017, 11, 12,  8, 0, 0, 0);
+const d0900 = new Date(2017, 11, 12,  9, 0, 0, 0);
+const d1000 = new Date(2017, 11, 12, 10, 0, 0, 0);
+const d1100 = new Date(2017, 11, 12, 11, 0, 0, 0);
+const d1200 = new Date(2017, 11, 12, 12, 0, 0, 0);
+const d1300 = new Date(2017, 11, 12, 13, 0, 0, 0);
+const d1400 = new Date(2017, 11, 12, 14, 0, 0, 0);
+const d1500 = new Date(2017, 11, 12, 15, 0, 0, 0);
+const d1600 = new Date(2017, 11, 12, 16, 0, 0, 0);
+const d1700 = new Date(2017, 11, 12, 17, 0, 0, 0);
+const d1800 = new Date(2017, 11, 12, 18, 0, 0, 0);
+const d1900 = new Date(2017, 11, 12, 19, 0, 0, 0);
+const d2000 = new Date(2017, 11, 12, 20, 0, 0, 0);
+const d2100 = new Date(2017, 11, 12, 21, 0, 0, 0);
+const d2200 = new Date(2017, 11, 12, 22, 0, 0, 0);
+const d2300 = new Date(2017, 11, 12, 23, 0, 0, 0);
+
+const short = new Intl.DateTimeFormat('en', {
+  dayPeriod: 'short'
+});
+
+assert.sameValue(short.format(d0000), 'at night', '00:00, short format');
+assert.sameValue(short.format(d0100), 'at night', '01:00, short format');
+assert.sameValue(short.format(d0200), 'at night', '02:00, short format');
+assert.sameValue(short.format(d0300), 'at night', '03:00, short format');
+assert.sameValue(short.format(d0400), 'at night', '04:00, short format');
+assert.sameValue(short.format(d0500), 'at night', '05:00, short format');
+assert.sameValue(short.format(d0600), 'in the morning', '06:00, short format');
+assert.sameValue(short.format(d0700), 'in the morning', '07:00, short format');
+assert.sameValue(short.format(d0800), 'in the morning', '08:00, short format');
+assert.sameValue(short.format(d0900), 'in the morning', '09:00, short format');
+assert.sameValue(short.format(d1000), 'in the morning', '10:00, short format');
+assert.sameValue(short.format(d1100), 'in the morning', '11:00, short format');
+assert.sameValue(short.format(d1200), 'noon', '12:00, short format');
+assert.sameValue(short.format(d1300), 'in the afternoon', '13:00, short format');
+assert.sameValue(short.format(d1400), 'in the afternoon', '14:00, short format');
+assert.sameValue(short.format(d1500), 'in the afternoon', '15:00, short format');
+assert.sameValue(short.format(d1600), 'in the afternoon', '16:00, short format');
+assert.sameValue(short.format(d1700), 'in the afternoon', '17:00, short format');
+assert.sameValue(short.format(d1800), 'in the evening', '18:00, short format');
+assert.sameValue(short.format(d1900), 'in the evening', '19:00, short format');
+assert.sameValue(short.format(d2000), 'in the evening', '20:00, short format');
+assert.sameValue(short.format(d2100), 'at night', '21:00, short format');
+assert.sameValue(short.format(d2200), 'at night', '22:00, short format');
+assert.sameValue(short.format(d2300), 'at night', '23:00, short format');
+
+const shortNumeric = new Intl.DateTimeFormat('en', {
+  dayPeriod: 'short',
+  hour: 'numeric'
+});
+
+assert.sameValue(shortNumeric.format(d0000), '12 at night', '00:00, short-numeric');
+assert.sameValue(shortNumeric.format(d0100), '1 at night', '01:00, short-numeric');
+assert.sameValue(shortNumeric.format(d0200), '2 at night', '02:00, short-numeric');
+assert.sameValue(shortNumeric.format(d0300), '3 at night', '03:00, short-numeric');
+assert.sameValue(shortNumeric.format(d0400), '4 at night', '04:00, short-numeric');
+assert.sameValue(shortNumeric.format(d0500), '5 at night', '05:00, short-numeric');
+assert.sameValue(shortNumeric.format(d0600), '6 in the morning', '06:00, short-numeric');
+assert.sameValue(shortNumeric.format(d0700), '7 in the morning', '07:00, short-numeric');
+assert.sameValue(shortNumeric.format(d0800), '8 in the morning', '08:00, short-numeric');
+assert.sameValue(shortNumeric.format(d0900), '9 in the morning', '09:00, short-numeric');
+assert.sameValue(shortNumeric.format(d1000), '10 in the morning', '10:00, short-numeric');
+assert.sameValue(shortNumeric.format(d1100), '11 in the morning', '11:00, short-numeric');
+assert.sameValue(shortNumeric.format(d1200), '12 noon', '12:00, short-numeric');
+assert.sameValue(shortNumeric.format(d1300), '1 in the afternoon', '13:00, short-numeric');
+assert.sameValue(shortNumeric.format(d1400), '2 in the afternoon', '14:00, short-numeric');
+assert.sameValue(shortNumeric.format(d1500), '3 in the afternoon', '15:00, short-numeric');
+assert.sameValue(shortNumeric.format(d1600), '4 in the afternoon', '16:00, short-numeric');
+assert.sameValue(shortNumeric.format(d1700), '5 in the afternoon', '17:00, short-numeric');
+assert.sameValue(shortNumeric.format(d1800), '6 in the evening', '18:00, short-numeric');
+assert.sameValue(shortNumeric.format(d1900), '7 in the evening', '19:00, short-numeric');
+assert.sameValue(shortNumeric.format(d2000), '8 in the evening', '20:00, short-numeric');
+assert.sameValue(shortNumeric.format(d2100), '9 at night', '21:00, short-numeric');
+assert.sameValue(shortNumeric.format(d2200), '10 at night', '22:00, short-numeric');
+assert.sameValue(shortNumeric.format(d2300), '11 at night', '23:00, short-numeric');
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/fractionalSecondDigits.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/fractionalSecondDigits.js
new file mode 100644
index 0000000..ee2bfc4
--- /dev/null
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/format/fractionalSecondDigits.js
@@ -0,0 +1,32 @@
+// Copyright 2019 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-initializedatetimeformat
+description: Checks basic handling of fractionalSecondDigits.
+features: [Intl.DateTimeFormat-fractionalSecondDigits]
+locale: [en-US]
+---*/
+
+const d1 = new Date(2019, 7, 10,  1, 2, 3, 234);
+const d2 = new Date(2019, 7, 10,  1, 2, 3, 567);
+
+let dtf = new Intl.DateTimeFormat(
+    'en', { minute: "numeric", second: "numeric", fractionalSecondDigits: 0});
+assert.sameValue(dtf.format(d1), "02:03", "no fractionalSecondDigits");
+assert.sameValue(dtf.format(d2), "02:03", "no fractionalSecondDigits");
+
+dtf = new Intl.DateTimeFormat(
+    'en', { minute: "numeric", second: "numeric", fractionalSecondDigits: 1});
+assert.sameValue(dtf.format(d1), "02:03.2", "1 fractionalSecondDigits round down");
+assert.sameValue(dtf.format(d2), "02:03.5", "1 fractionalSecondDigits round down");
+
+dtf = new Intl.DateTimeFormat(
+    'en', { minute: "numeric", second: "numeric", fractionalSecondDigits: 2});
+assert.sameValue(dtf.format(d1), "02:03.23", "2 fractionalSecondDigits round down");
+assert.sameValue(dtf.format(d2), "02:03.56", "2 fractionalSecondDigits round down");
+
+dtf = new Intl.DateTimeFormat(
+    'en', { minute: "numeric", second: "numeric", fractionalSecondDigits: 3});
+assert.sameValue(dtf.format(d1), "02:03.234", "3 fractionalSecondDigits round down");
+assert.sameValue(dtf.format(d2), "02:03.567", "3 fractionalSecondDigits round down");
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-date-string.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-date-string.js
index 6be3a36..0559625 100644
--- a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-date-string.js
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-date-string.js
@@ -1,4 +1,5 @@
-// Copyright (C) 2017-2019 André Bargull, Igalia S.L. All rights reserved.
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// Copyright (C) 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-near-time-boundaries.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-near-time-boundaries.js
index e5e0718..257c5ba 100644
--- a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-near-time-boundaries.js
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-near-time-boundaries.js
@@ -1,4 +1,5 @@
-// Copyright (C) 2017-2019 André Bargull, Igalia S.L. All rights reserved.
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// Copyright (C) 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-to-integer.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-to-integer.js
index 5d9542a..93e1a28 100644
--- a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-to-integer.js
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/argument-to-integer.js
@@ -1,4 +1,5 @@
-// Copyright (C) 2017-2019 André Bargull, Igalia S.L. All rights reserved.
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// Copyright (C) 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/builtin.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/builtin.js
index 7a378af..7883d0d 100644
--- a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/builtin.js
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/builtin.js
@@ -1,4 +1,5 @@
-// Copyright (C) 2012-2019 Mozilla Corporation, Igalia S.L. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// Copyright 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/prop-desc.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/prop-desc.js
index c0130ef..f37e3df 100644
--- a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/prop-desc.js
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRange/prop-desc.js
@@ -1,4 +1,5 @@
-// Copyright 2016-2019 Mozilla Corporation, Igalia S.L. All rights reserved.
+// Copyright 2016 Mozilla Corporation. All rights reserved.
+// Copyright 2019 Igalia S.L. All rights reserved.
 // This code is governed by the license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-date-string.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-date-string.js
index 69e50c5..1621c26 100644
--- a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-date-string.js
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-date-string.js
@@ -1,4 +1,5 @@
-// Copyright (C) 2017-2019 André Bargull, Igalia S.L. All rights reserved.
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// Copyright (C) 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-near-time-boundaries.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-near-time-boundaries.js
index 999f2d5..c2e4f56 100644
--- a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-near-time-boundaries.js
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-near-time-boundaries.js
@@ -1,4 +1,5 @@
-// Copyright (C) 2017-2019 André Bargull, Igalia S.L. All rights reserved.
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// Copyright (C) 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-to-integer.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-to-integer.js
index 84f7b8b..50854ca 100644
--- a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-to-integer.js
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/argument-to-integer.js
@@ -1,4 +1,5 @@
-// Copyright (C) 2017-2019 André Bargull, Igalia S.L. All rights reserved.
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// Copyright (C) 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/builtin.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/builtin.js
index c624b33..f20d969 100644
--- a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/builtin.js
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/builtin.js
@@ -1,4 +1,5 @@
-// Copyright (C) 2012-2019 Mozilla Corporation, Igalia S.L. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// Copyright 2019 Igalia S.L. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/prop-desc.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/prop-desc.js
index 1f2622d..436ac1a 100644
--- a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/prop-desc.js
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatRangeToParts/prop-desc.js
@@ -1,4 +1,5 @@
-// Copyright 2016-2019 Mozilla Corporation, Igalia S.L. All rights reserved.
+// Copyright 2016 Mozilla Corporation. All rights reserved.
+// Copyright 2019 Igalia S.L. All rights reserved.
 // This code is governed by the license found in the LICENSE file.
 
 /*---
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-long-en.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-long-en.js
new file mode 100644
index 0000000..3fe08f0
--- /dev/null
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-long-en.js
@@ -0,0 +1,106 @@
+// Copyright 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-initializedatetimeformat
+description: Checks basic handling of dayPeriod, long format.
+features: [Intl.DateTimeFormat-dayPeriod]
+---*/
+
+const d0000 = new Date(2017, 11, 12,  0, 0, 0, 0);
+const d0100 = new Date(2017, 11, 12,  1, 0, 0, 0);
+const d0200 = new Date(2017, 11, 12,  2, 0, 0, 0);
+const d0300 = new Date(2017, 11, 12,  3, 0, 0, 0);
+const d0400 = new Date(2017, 11, 12,  4, 0, 0, 0);
+const d0500 = new Date(2017, 11, 12,  5, 0, 0, 0);
+const d0600 = new Date(2017, 11, 12,  6, 0, 0, 0);
+const d0700 = new Date(2017, 11, 12,  7, 0, 0, 0);
+const d0800 = new Date(2017, 11, 12,  8, 0, 0, 0);
+const d0900 = new Date(2017, 11, 12,  9, 0, 0, 0);
+const d1000 = new Date(2017, 11, 12, 10, 0, 0, 0);
+const d1100 = new Date(2017, 11, 12, 11, 0, 0, 0);
+const d1200 = new Date(2017, 11, 12, 12, 0, 0, 0);
+const d1300 = new Date(2017, 11, 12, 13, 0, 0, 0);
+const d1400 = new Date(2017, 11, 12, 14, 0, 0, 0);
+const d1500 = new Date(2017, 11, 12, 15, 0, 0, 0);
+const d1600 = new Date(2017, 11, 12, 16, 0, 0, 0);
+const d1700 = new Date(2017, 11, 12, 17, 0, 0, 0);
+const d1800 = new Date(2017, 11, 12, 18, 0, 0, 0);
+const d1900 = new Date(2017, 11, 12, 19, 0, 0, 0);
+const d2000 = new Date(2017, 11, 12, 20, 0, 0, 0);
+const d2100 = new Date(2017, 11, 12, 21, 0, 0, 0);
+const d2200 = new Date(2017, 11, 12, 22, 0, 0, 0);
+const d2300 = new Date(2017, 11, 12, 23, 0, 0, 0);
+
+const long = new Intl.DateTimeFormat('en', { dayPeriod: 'long' });
+
+function assertParts(parts, expected, message) {
+  assert.sameValue(parts.length, 1, `length should be 1, ${message}`);
+  assert.sameValue(parts[0].value, expected, `expected part value. ${message}`);
+  assert.sameValue(parts[0].type, 'dayPeriod', `part type is dayPeriod. ${message}`);
+}
+
+assertParts(long.formatToParts(d0000), 'at night', '00:00, long format');
+assertParts(long.formatToParts(d0100), 'at night', '01:00, long format');
+assertParts(long.formatToParts(d0200), 'at night', '02:00, long format');
+assertParts(long.formatToParts(d0300), 'at night', '03:00, long format');
+assertParts(long.formatToParts(d0400), 'at night', '04:00, long format');
+assertParts(long.formatToParts(d0500), 'at night', '05:00, long format');
+assertParts(long.formatToParts(d0600), 'in the morning', '06:00, long format');
+assertParts(long.formatToParts(d0700), 'in the morning', '07:00, long format');
+assertParts(long.formatToParts(d0800), 'in the morning', '08:00, long format');
+assertParts(long.formatToParts(d0900), 'in the morning', '09:00, long format');
+assertParts(long.formatToParts(d1000), 'in the morning', '10:00, long format');
+assertParts(long.formatToParts(d1100), 'in the morning', '11:00, long format');
+assertParts(long.formatToParts(d1200), 'noon', '12:00, long format');
+assertParts(long.formatToParts(d1300), 'in the afternoon', '13:00, long format');
+assertParts(long.formatToParts(d1400), 'in the afternoon', '14:00, long format');
+assertParts(long.formatToParts(d1500), 'in the afternoon', '15:00, long format');
+assertParts(long.formatToParts(d1600), 'in the afternoon', '16:00, long format');
+assertParts(long.formatToParts(d1700), 'in the afternoon', '17:00, long format');
+assertParts(long.formatToParts(d1800), 'in the evening', '18:00, long format');
+assertParts(long.formatToParts(d1900), 'in the evening', '19:00, long format');
+assertParts(long.formatToParts(d2000), 'in the evening', '20:00, long format');
+assertParts(long.formatToParts(d2100), 'at night', '21:00, long format');
+assertParts(long.formatToParts(d2200), 'at night', '22:00, long format');
+assertParts(long.formatToParts(d2300), 'at night', '23:00, long format');
+
+const longNumeric = new Intl.DateTimeFormat('en', {
+  dayPeriod: 'long',
+  hour: 'numeric'
+});
+
+function assertPartsNumeric(parts, hour, expected, message) {
+  assert.sameValue(parts.length, 3, `length should be 3, ${message}`);
+  assert.sameValue(parts[0].value, hour, `hour part value. ${message}`);
+  assert.sameValue(parts[0].type, 'hour', `hour part type. ${message}`);
+  assert.sameValue(parts[1].value, ' ', `literal part value. ${message}`);
+  assert.sameValue(parts[1].type, 'literal', `literal part type. ${message}`);
+  assert.sameValue(parts[2].value, expected, `expected part value. ${message}`);
+  assert.sameValue(parts[2].type, 'dayPeriod', `expected part type. ${message}`);
+}
+
+assertPartsNumeric(longNumeric.formatToParts(d0000), '12', 'at night', '00:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d0100),  '1', 'at night', '01:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d0200),  '2', 'at night', '02:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d0300),  '3', 'at night', '03:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d0400),  '4', 'at night', '04:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d0500),  '5', 'at night', '05:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d0600),  '6', 'in the morning', '06:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d0700),  '7', 'in the morning', '07:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d0800),  '8', 'in the morning', '08:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d0900),  '9', 'in the morning', '09:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d1000), '10', 'in the morning', '10:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d1100), '11', 'in the morning', '11:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d1200), '12', 'noon', '12:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d1300),  '1', 'in the afternoon', '13:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d1400),  '2', 'in the afternoon', '14:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d1500),  '3', 'in the afternoon', '15:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d1600),  '4', 'in the afternoon', '16:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d1700),  '5', 'in the afternoon', '17:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d1800),  '6', 'in the evening', '18:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d1900),  '7', 'in the evening', '19:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d2000),  '8', 'in the evening', '20:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d2100),  '9', 'at night', '21:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d2200), '10', 'at night', '22:00, long-numeric');
+assertPartsNumeric(longNumeric.formatToParts(d2300), '11', 'at night', '23:00, long-numeric');
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-narrow-en.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-narrow-en.js
new file mode 100644
index 0000000..605e8e2
--- /dev/null
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-narrow-en.js
@@ -0,0 +1,106 @@
+// Copyright 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-initializedatetimeformat
+description: Checks basic handling of dayPeriod, narrow format.
+features: [Intl.DateTimeFormat-dayPeriod]
+---*/
+
+const d0000 = new Date(2017, 11, 12,  0, 0, 0, 0);
+const d0100 = new Date(2017, 11, 12,  1, 0, 0, 0);
+const d0200 = new Date(2017, 11, 12,  2, 0, 0, 0);
+const d0300 = new Date(2017, 11, 12,  3, 0, 0, 0);
+const d0400 = new Date(2017, 11, 12,  4, 0, 0, 0);
+const d0500 = new Date(2017, 11, 12,  5, 0, 0, 0);
+const d0600 = new Date(2017, 11, 12,  6, 0, 0, 0);
+const d0700 = new Date(2017, 11, 12,  7, 0, 0, 0);
+const d0800 = new Date(2017, 11, 12,  8, 0, 0, 0);
+const d0900 = new Date(2017, 11, 12,  9, 0, 0, 0);
+const d1000 = new Date(2017, 11, 12, 10, 0, 0, 0);
+const d1100 = new Date(2017, 11, 12, 11, 0, 0, 0);
+const d1200 = new Date(2017, 11, 12, 12, 0, 0, 0);
+const d1300 = new Date(2017, 11, 12, 13, 0, 0, 0);
+const d1400 = new Date(2017, 11, 12, 14, 0, 0, 0);
+const d1500 = new Date(2017, 11, 12, 15, 0, 0, 0);
+const d1600 = new Date(2017, 11, 12, 16, 0, 0, 0);
+const d1700 = new Date(2017, 11, 12, 17, 0, 0, 0);
+const d1800 = new Date(2017, 11, 12, 18, 0, 0, 0);
+const d1900 = new Date(2017, 11, 12, 19, 0, 0, 0);
+const d2000 = new Date(2017, 11, 12, 20, 0, 0, 0);
+const d2100 = new Date(2017, 11, 12, 21, 0, 0, 0);
+const d2200 = new Date(2017, 11, 12, 22, 0, 0, 0);
+const d2300 = new Date(2017, 11, 12, 23, 0, 0, 0);
+
+const narrow = new Intl.DateTimeFormat('en', { dayPeriod: 'narrow' });
+
+function assertParts(parts, expected, message) {
+  assert.sameValue(parts.length, 1, `length should be 1, ${message}`);
+  assert.sameValue(parts[0].value, expected, `expected part value. ${message}`);
+  assert.sameValue(parts[0].type, 'dayPeriod', `part type is dayPeriod. ${message}`);
+}
+
+assertParts(narrow.formatToParts(d0000), 'at night', '00:00, narrow format');
+assertParts(narrow.formatToParts(d0100), 'at night', '01:00, narrow format');
+assertParts(narrow.formatToParts(d0200), 'at night', '02:00, narrow format');
+assertParts(narrow.formatToParts(d0300), 'at night', '03:00, narrow format');
+assertParts(narrow.formatToParts(d0400), 'at night', '04:00, narrow format');
+assertParts(narrow.formatToParts(d0500), 'at night', '05:00, narrow format');
+assertParts(narrow.formatToParts(d0600), 'in the morning', '06:00, narrow format');
+assertParts(narrow.formatToParts(d0700), 'in the morning', '07:00, narrow format');
+assertParts(narrow.formatToParts(d0800), 'in the morning', '08:00, narrow format');
+assertParts(narrow.formatToParts(d0900), 'in the morning', '09:00, narrow format');
+assertParts(narrow.formatToParts(d1000), 'in the morning', '10:00, narrow format');
+assertParts(narrow.formatToParts(d1100), 'in the morning', '11:00, narrow format');
+assertParts(narrow.formatToParts(d1200), 'n', '12:00, narrow format');
+assertParts(narrow.formatToParts(d1300), 'in the afternoon', '13:00, narrow format');
+assertParts(narrow.formatToParts(d1400), 'in the afternoon', '14:00, narrow format');
+assertParts(narrow.formatToParts(d1500), 'in the afternoon', '15:00, narrow format');
+assertParts(narrow.formatToParts(d1600), 'in the afternoon', '16:00, narrow format');
+assertParts(narrow.formatToParts(d1700), 'in the afternoon', '17:00, narrow format');
+assertParts(narrow.formatToParts(d1800), 'in the evening', '18:00, narrow format');
+assertParts(narrow.formatToParts(d1900), 'in the evening', '19:00, narrow format');
+assertParts(narrow.formatToParts(d2000), 'in the evening', '20:00, narrow format');
+assertParts(narrow.formatToParts(d2100), 'at night', '21:00, narrow format');
+assertParts(narrow.formatToParts(d2200), 'at night', '22:00, narrow format');
+assertParts(narrow.formatToParts(d2300), 'at night', '23:00, narrow format');
+
+const narrowNumeric = new Intl.DateTimeFormat('en', {
+  dayPeriod: 'narrow',
+  hour: 'numeric'
+});
+
+function assertPartsNumeric(parts, hour, expected, message) {
+  assert.sameValue(parts.length, 3, `length should be 3, ${message}`);
+  assert.sameValue(parts[0].value, hour, `hour part value. ${message}`);
+  assert.sameValue(parts[0].type, 'hour', `hour part type. ${message}`);
+  assert.sameValue(parts[1].value, ' ', `literal part value. ${message}`);
+  assert.sameValue(parts[1].type, 'literal', `literal part type. ${message}`);
+  assert.sameValue(parts[2].value, expected, `expected part value. ${message}`);
+  assert.sameValue(parts[2].type, 'dayPeriod', `expected part type. ${message}`);
+}
+
+assertPartsNumeric(narrowNumeric.formatToParts(d0000), '12', 'at night', '00:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d0100),  '1', 'at night', '01:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d0200),  '2', 'at night', '02:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d0300),  '3', 'at night', '03:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d0400),  '4', 'at night', '04:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d0500),  '5', 'at night', '05:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d0600),  '6', 'in the morning', '06:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d0700),  '7', 'in the morning', '07:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d0800),  '8', 'in the morning', '08:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d0900),  '9', 'in the morning', '09:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d1000), '10', 'in the morning', '10:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d1100), '11', 'in the morning', '11:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d1200), '12', 'n', '12:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d1300),  '1', 'in the afternoon', '13:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d1400),  '2', 'in the afternoon', '14:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d1500),  '3', 'in the afternoon', '15:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d1600),  '4', 'in the afternoon', '16:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d1700),  '5', 'in the afternoon', '17:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d1800),  '6', 'in the evening', '18:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d1900),  '7', 'in the evening', '19:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d2000),  '8', 'in the evening', '20:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d2100),  '9', 'at night', '21:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d2200), '10', 'at night', '22:00, narrow-numeric');
+assertPartsNumeric(narrowNumeric.formatToParts(d2300), '11', 'at night', '23:00, narrow-numeric');
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-short-en.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-short-en.js
new file mode 100644
index 0000000..6c11833
--- /dev/null
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/dayPeriod-short-en.js
@@ -0,0 +1,106 @@
+// Copyright 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-initializedatetimeformat
+description: Checks basic handling of dayPeriod, short format.
+features: [Intl.DateTimeFormat-dayPeriod]
+---*/
+
+const d0000 = new Date(2017, 11, 12,  0, 0, 0, 0);
+const d0100 = new Date(2017, 11, 12,  1, 0, 0, 0);
+const d0200 = new Date(2017, 11, 12,  2, 0, 0, 0);
+const d0300 = new Date(2017, 11, 12,  3, 0, 0, 0);
+const d0400 = new Date(2017, 11, 12,  4, 0, 0, 0);
+const d0500 = new Date(2017, 11, 12,  5, 0, 0, 0);
+const d0600 = new Date(2017, 11, 12,  6, 0, 0, 0);
+const d0700 = new Date(2017, 11, 12,  7, 0, 0, 0);
+const d0800 = new Date(2017, 11, 12,  8, 0, 0, 0);
+const d0900 = new Date(2017, 11, 12,  9, 0, 0, 0);
+const d1000 = new Date(2017, 11, 12, 10, 0, 0, 0);
+const d1100 = new Date(2017, 11, 12, 11, 0, 0, 0);
+const d1200 = new Date(2017, 11, 12, 12, 0, 0, 0);
+const d1300 = new Date(2017, 11, 12, 13, 0, 0, 0);
+const d1400 = new Date(2017, 11, 12, 14, 0, 0, 0);
+const d1500 = new Date(2017, 11, 12, 15, 0, 0, 0);
+const d1600 = new Date(2017, 11, 12, 16, 0, 0, 0);
+const d1700 = new Date(2017, 11, 12, 17, 0, 0, 0);
+const d1800 = new Date(2017, 11, 12, 18, 0, 0, 0);
+const d1900 = new Date(2017, 11, 12, 19, 0, 0, 0);
+const d2000 = new Date(2017, 11, 12, 20, 0, 0, 0);
+const d2100 = new Date(2017, 11, 12, 21, 0, 0, 0);
+const d2200 = new Date(2017, 11, 12, 22, 0, 0, 0);
+const d2300 = new Date(2017, 11, 12, 23, 0, 0, 0);
+
+const short = new Intl.DateTimeFormat('en', { dayPeriod: 'short' });
+
+function assertParts(parts, expected, message) {
+  assert.sameValue(parts.length, 1, `length should be 1, ${message}`);
+  assert.sameValue(parts[0].value, expected, `expected part value. ${message}`);
+  assert.sameValue(parts[0].type, 'dayPeriod', `part type is dayPeriod. ${message}`);
+}
+
+assertParts(short.formatToParts(d0000), 'at night', '00:00, short format');
+assertParts(short.formatToParts(d0100), 'at night', '01:00, short format');
+assertParts(short.formatToParts(d0200), 'at night', '02:00, short format');
+assertParts(short.formatToParts(d0300), 'at night', '03:00, short format');
+assertParts(short.formatToParts(d0400), 'at night', '04:00, short format');
+assertParts(short.formatToParts(d0500), 'at night', '05:00, short format');
+assertParts(short.formatToParts(d0600), 'in the morning', '06:00, short format');
+assertParts(short.formatToParts(d0700), 'in the morning', '07:00, short format');
+assertParts(short.formatToParts(d0800), 'in the morning', '08:00, short format');
+assertParts(short.formatToParts(d0900), 'in the morning', '09:00, short format');
+assertParts(short.formatToParts(d1000), 'in the morning', '10:00, short format');
+assertParts(short.formatToParts(d1100), 'in the morning', '11:00, short format');
+assertParts(short.formatToParts(d1200), 'noon', '12:00, short format');
+assertParts(short.formatToParts(d1300), 'in the afternoon', '13:00, short format');
+assertParts(short.formatToParts(d1400), 'in the afternoon', '14:00, short format');
+assertParts(short.formatToParts(d1500), 'in the afternoon', '15:00, short format');
+assertParts(short.formatToParts(d1600), 'in the afternoon', '16:00, short format');
+assertParts(short.formatToParts(d1700), 'in the afternoon', '17:00, short format');
+assertParts(short.formatToParts(d1800), 'in the evening', '18:00, short format');
+assertParts(short.formatToParts(d1900), 'in the evening', '19:00, short format');
+assertParts(short.formatToParts(d2000), 'in the evening', '20:00, short format');
+assertParts(short.formatToParts(d2100), 'at night', '21:00, short format');
+assertParts(short.formatToParts(d2200), 'at night', '22:00, short format');
+assertParts(short.formatToParts(d2300), 'at night', '23:00, short format');
+
+const shortNumeric = new Intl.DateTimeFormat('en', {
+  dayPeriod: 'short',
+  hour: 'numeric'
+});
+
+function assertPartsNumeric(parts, hour, expected, message) {
+  assert.sameValue(parts.length, 3, `length should be 3, ${message}`);
+  assert.sameValue(parts[0].value, hour, `hour part value. ${message}`);
+  assert.sameValue(parts[0].type, 'hour', `hour part type. ${message}`);
+  assert.sameValue(parts[1].value, ' ', `literal part value. ${message}`);
+  assert.sameValue(parts[1].type, 'literal', `literal part type. ${message}`);
+  assert.sameValue(parts[2].value, expected, `expected part value. ${message}`);
+  assert.sameValue(parts[2].type, 'dayPeriod', `expected part type. ${message}`);
+}
+
+assertPartsNumeric(shortNumeric.formatToParts(d0000), '12', 'at night', '00:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d0100),  '1', 'at night', '01:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d0200),  '2', 'at night', '02:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d0300),  '3', 'at night', '03:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d0400),  '4', 'at night', '04:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d0500),  '5', 'at night', '05:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d0600),  '6', 'in the morning', '06:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d0700),  '7', 'in the morning', '07:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d0800),  '8', 'in the morning', '08:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d0900),  '9', 'in the morning', '09:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d1000), '10', 'in the morning', '10:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d1100), '11', 'in the morning', '11:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d1200), '12', 'noon', '12:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d1300),  '1', 'in the afternoon', '13:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d1400),  '2', 'in the afternoon', '14:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d1500),  '3', 'in the afternoon', '15:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d1600),  '4', 'in the afternoon', '16:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d1700),  '5', 'in the afternoon', '17:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d1800),  '6', 'in the evening', '18:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d1900),  '7', 'in the evening', '19:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d2000),  '8', 'in the evening', '20:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d2100),  '9', 'at night', '21:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d2200), '10', 'at night', '22:00, short-numeric');
+assertPartsNumeric(shortNumeric.formatToParts(d2300), '11', 'at night', '23:00, short-numeric');
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/fractionalSecondDigits.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/fractionalSecondDigits.js
new file mode 100644
index 0000000..854ee4a
--- /dev/null
+++ b/JSTests/test262/test/intl402/DateTimeFormat/prototype/formatToParts/fractionalSecondDigits.js
@@ -0,0 +1,52 @@
+// Copyright 2019 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-initializedatetimeformat
+description: Checks basic handling of fractionalSecondDigits.
+features: [Intl.DateTimeFormat-fractionalSecondDigits]
+locale: [en-US]
+---*/
+
+const d1 = new Date(2019, 7, 10,  1, 2, 3, 234);
+const d2 = new Date(2019, 7, 10,  1, 2, 3, 567);
+
+function assertParts(parts, minute, second, fractionalSecond, message) {
+  if (fractionalSecond === null) {
+    assert.sameValue(parts.length, 3, `length should be 3, ${message}`);
+  } else {
+    assert.sameValue(parts.length, 5, `length should be 5, ${message}`);
+  }
+  assert.sameValue(parts[0].value, minute, `minute part value. ${message}`);
+  assert.sameValue(parts[0].type, 'minute', `minute part type. ${message}`);
+  assert.sameValue(parts[1].value, ':', `literal part value. ${message}`);
+  assert.sameValue(parts[1].type, 'literal', `literal part type. ${message}`);
+  assert.sameValue(parts[2].value, second, `second part value. ${message}`);
+  assert.sameValue(parts[2].type, 'second', `second part type. ${message}`);
+  if (fractionalSecond !== null) {
+    assert.sameValue(parts[3].value, '.', `literal part value. ${message}`);
+    assert.sameValue(parts[3].type, 'literal', `literal part type. ${message}`);
+    assert.sameValue(parts[4].value, fractionalSecond, `fractionalSecond part value. ${message}`);
+    assert.sameValue(parts[4].type, 'fractionalSecond', `fractionalSecond part type. ${message}`);
+  }
+}
+
+let dtf = new Intl.DateTimeFormat(
+    'en', { minute: "numeric", second: "numeric", fractionalSecondDigits: 0});
+assertParts(dtf.formatToParts(d1), "02", "03", null, "no fractionalSecondDigits round down");
+assertParts(dtf.formatToParts(d2), "02", "03", null, "no fractionalSecondDigits round down");
+
+dtf = new Intl.DateTimeFormat(
+    'en', { minute: "numeric", second: "numeric", fractionalSecondDigits: 1});
+assertParts(dtf.formatToParts(d1), "02", "03", "2", "1 fractionalSecondDigits round down");
+assertParts(dtf.formatToParts(d2), "02", "03", "5", "1 fractionalSecondDigits round down");
+
+dtf = new Intl.DateTimeFormat(
+    'en', { minute: "numeric", second: "numeric", fractionalSecondDigits: 2});
+assertParts(dtf.formatToParts(d1), "02", "03", "23", "2 fractionalSecondDigits round down");
+assertParts(dtf.formatToParts(d2), "02", "03", "56", "2 fractionalSecondDigits round down");
+
+dtf = new Intl.DateTimeFormat(
+    'en', { minute: "numeric", second: "numeric", fractionalSecondDigits: 3});
+assertParts(dtf.formatToParts(d1), "02", "03", "234", "3 fractionalSecondDigits round down");
+assertParts(dtf.formatToParts(d2), "02", "03", "567", "3 fractionalSecondDigits round down");
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/prototype/resolvedOptions/order-quarter.js b/JSTests/test262/test/intl402/DateTimeFormat/prototype/resolvedOptions/order-quarter.js
deleted file mode 100644
index 8094a09..0000000
--- a/JSTests/test262/test/intl402/DateTimeFormat/prototype/resolvedOptions/order-quarter.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2019 Google Inc. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-esid: sec-intl.datetimeformat.prototype.resolvedoptions
-description: Verifies the property order for the object returned by resolvedOptions().
-includes: [compareArray.js]
-features: [Intl.DateTimeFormat-quarter]
----*/
-
-const options = new Intl.DateTimeFormat([], {
-  "year": "numeric",
-  "quarter": "short",
-  "month": "numeric",
-  "day": "numeric",
-}).resolvedOptions();
-
-const expected = [
-  "locale",
-  "calendar",
-  "numberingSystem",
-  "timeZone",
-  "year",
-  "quarter",
-  "month",
-  "day",
-];
-
-assert.compareArray(Object.getOwnPropertyNames(options), expected);
diff --git a/JSTests/test262/test/intl402/DateTimeFormat/taint-Object-prototype-quarter.js b/JSTests/test262/test/intl402/DateTimeFormat/taint-Object-prototype-quarter.js
deleted file mode 100644
index 0f7e042..0000000
--- a/JSTests/test262/test/intl402/DateTimeFormat/taint-Object-prototype-quarter.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2019 Google Inc. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-esid: sec-initializedatetimeformat
-description: >
-  Tests that the behavior of a Record is not affected by adversarial changes to Object.prototype.
-includes: [testIntl.js]
-features: [Intl.DateTimeFormat-quarter]
----*/
-
-taintProperties(["quarter"]);
-
-var locale = new Intl.DateTimeFormat(undefined, {localeMatcher: "lookup"}).resolvedOptions().locale;
-assert(isCanonicalizedStructurallyValidLanguageTag(locale), "DateTimeFormat returns invalid locale " + locale + ".");
diff --git a/JSTests/test262/test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js b/JSTests/test262/test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js
index 19a4b8a..7402150 100644
--- a/JSTests/test262/test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js
+++ b/JSTests/test262/test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js
@@ -50,6 +50,16 @@
     "0": "today",
     "1": "tomorrow",
   },
+  "hour": {
+    "-1": "1 hour ago",
+    '0': 'this hour',
+    "1": "in 1 hour",
+  },
+  "minute": {
+    "-1": "1 minute ago",
+    '0': 'this minute',
+    "1": "in 1 minute",
+  },
   "second": {
     "-1": "1 second ago",
     "0": "now",
diff --git a/JSTests/test262/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js b/JSTests/test262/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js
index 00f319b..bb6fb34 100644
--- a/JSTests/test262/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js
+++ b/JSTests/test262/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js
@@ -46,6 +46,12 @@
       "0": "today",
       "1": "tomorrow",
     },
+    "hour": {
+      "0": "this hour",
+    },
+    "minute": {
+      "0": "this minute",
+    },
     "second": {
       "0": "now",
     },
diff --git a/JSTests/test262/test/language/expressions/arrow-function/ArrowFunction_restricted-properties.js b/JSTests/test262/test/language/expressions/arrow-function/ArrowFunction_restricted-properties.js
index 14daf58..1a581a0 100644
--- a/JSTests/test262/test/language/expressions/arrow-function/ArrowFunction_restricted-properties.js
+++ b/JSTests/test262/test/language/expressions/arrow-function/ArrowFunction_restricted-properties.js
@@ -1,7 +1,7 @@
 // Copyright (C) 2015 Caitlin Potter. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
-/*--- 
+/*---
 description: >
     Functions created using ArrowFunction syntactic form do not have
     own properties "caller" or "arguments", but inherit them from
diff --git a/JSTests/test262/test/language/expressions/class/elements/private-field-access-on-inner-arrow-function.js b/JSTests/test262/test/language/expressions/class/elements/private-field-access-on-inner-arrow-function.js
new file mode 100644
index 0000000..bd51492
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/elements/private-field-access-on-inner-arrow-function.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-field-access-on-inner-arrow-function.case
+// - src/class-elements/default/cls-expr.template
+/*---
+description: PrivateName of private field is visible on inner arrow function of class scope (field definitions in a class expression)
+esid: prod-FieldDefinition
+features: [class-fields-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+var C = class {
+  #f = 'Test262';
+
+  method() {
+    let arrowFunction = () => {
+      return this.#f;
+    }
+
+    return arrowFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private field from an ordinary object');
diff --git a/JSTests/test262/test/language/expressions/class/elements/private-field-access-on-inner-function.js b/JSTests/test262/test/language/expressions/class/elements/private-field-access-on-inner-function.js
new file mode 100644
index 0000000..18209f3
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/elements/private-field-access-on-inner-function.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-field-access-on-inner-function.case
+// - src/class-elements/default/cls-expr.template
+/*---
+description: PrivateName of private field is visible on inner function of class scope (field definitions in a class expression)
+esid: prod-FieldDefinition
+features: [class-fields-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+var C = class {
+  #f = 'Test262';
+
+  method() {
+    let self = this;
+    function innerFunction() {
+      return self.#f;
+    }
+
+    return innerFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private field from an ordinary object');
diff --git a/JSTests/test262/test/language/expressions/class/elements/private-getter-access-on-inner-arrow-function.js b/JSTests/test262/test/language/expressions/class/elements/private-getter-access-on-inner-arrow-function.js
new file mode 100644
index 0000000..3c1f0eb
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/elements/private-getter-access-on-inner-arrow-function.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-getter-access-on-inner-arrow-function.case
+// - src/class-elements/default/cls-expr.template
+/*---
+description: PrivateName of private getter is visible on inner arrow function of class scope (field definitions in a class expression)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+var C = class {
+  get #m() { return 'Test262'; }
+
+  method() {
+    let arrowFunction = () => {
+      return this.#m;
+    }
+
+    return arrowFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private accessor from an ordinary object');
diff --git a/JSTests/test262/test/language/expressions/class/elements/private-getter-access-on-inner-function.js b/JSTests/test262/test/language/expressions/class/elements/private-getter-access-on-inner-function.js
new file mode 100644
index 0000000..89e2665
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/elements/private-getter-access-on-inner-function.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-getter-access-on-inner-function.case
+// - src/class-elements/default/cls-expr.template
+/*---
+description: PrivateName of private getter is visible on inner function of class scope (field definitions in a class expression)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+var C = class {
+  get #m() { return 'Test262'; }
+
+  method() {
+    let self = this;
+    function innerFunction() {
+      return self.#m;
+    }
+
+    return innerFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private accessor from an ordinary object');
diff --git a/JSTests/test262/test/language/expressions/class/elements/private-getter-is-not-a-own-property.js b/JSTests/test262/test/language/expressions/class/elements/private-getter-is-not-a-own-property.js
new file mode 100644
index 0000000..8894ea7
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/elements/private-getter-is-not-a-own-property.js
@@ -0,0 +1,45 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-getter-is-not-a-own-property.case
+// - src/class-elements/default/cls-expr.template
+/*---
+description: Private getter is not stored as an own property of objects (field definitions in a class expression)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    PrivateFieldGet (P, O)
+      1. Assert: P is a Private Name.
+      2. If O is not an object, throw a TypeError exception.
+      3. If P.[[Kind]] is "field",
+        a. Let entry be PrivateFieldFind(P, O).
+        b. If entry is empty, throw a TypeError exception.
+        c. Return entry.[[PrivateFieldValue]].
+      4. Perform ? PrivateBrandCheck(O, P).
+      5. If P.[[Kind]] is "method",
+        a. Return P.[[Value]].
+      6. Else,
+        a. Assert: P.[[Kind]] is "accessor".
+        b. If P does not have a [[Get]] field, throw a TypeError exception.
+        c. Let getter be P.[[Get]].
+        d. Return ? Call(getter, O).
+
+---*/
+
+
+var C = class {
+  get #m() { return "Test262"; }
+
+  checkPrivateGetter() {
+    assert.sameValue(this.hasOwnProperty("#m"), false);
+    assert.sameValue("#m" in this, false);
+
+    assert.sameValue(this.__lookupGetter__("#m"), undefined);
+
+    assert.sameValue(this.#m, "Test262");
+
+    return 0;
+  }
+}
+
+let c = new C();
+assert.sameValue(c.checkPrivateGetter(), 0);
diff --git a/JSTests/test262/test/language/expressions/class/elements/private-method-access-on-inner-arrow-function.js b/JSTests/test262/test/language/expressions/class/elements/private-method-access-on-inner-arrow-function.js
new file mode 100644
index 0000000..a122d55
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/elements/private-method-access-on-inner-arrow-function.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-method-access-on-inner-arrow-function.case
+// - src/class-elements/default/cls-expr.template
+/*---
+description: PrivateName of private method is visible on inner arrow function of class scope (field definitions in a class expression)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+var C = class {
+  #m() { return 'Test262'; }
+
+  method() {
+    let arrowFunction = () => {
+      return this.#m();
+    }
+
+    return arrowFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private method from an ordinary object');
diff --git a/JSTests/test262/test/language/expressions/class/elements/private-method-access-on-inner-function.js b/JSTests/test262/test/language/expressions/class/elements/private-method-access-on-inner-function.js
new file mode 100644
index 0000000..a6566c9
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/elements/private-method-access-on-inner-function.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-method-access-on-inner-function.case
+// - src/class-elements/default/cls-expr.template
+/*---
+description: PrivateName of private method is visible on inner function of class scope (field definitions in a class expression)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+var C = class {
+  #m() { return 'Test262'; }
+
+  method() {
+    let self = this;
+    function innerFunction() {
+      return self.#m();
+    }
+
+    return innerFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private method from an ordinary object');
diff --git a/JSTests/test262/test/language/expressions/class/elements/private-method-is-not-a-own-property.js b/JSTests/test262/test/language/expressions/class/elements/private-method-is-not-a-own-property.js
new file mode 100644
index 0000000..2e13621
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/elements/private-method-is-not-a-own-property.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-method-is-not-a-own-property.case
+// - src/class-elements/default/cls-expr.template
+/*---
+description: Private method is not stored as an own property of objects (field definitions in a class expression)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    PrivateFieldGet (P, O)
+      1. Assert: P is a Private Name.
+      2. If O is not an object, throw a TypeError exception.
+      3. If P.[[Kind]] is "field",
+        a. Let entry be PrivateFieldFind(P, O).
+        b. If entry is empty, throw a TypeError exception.
+        c. Return entry.[[PrivateFieldValue]].
+      4. Perform ? PrivateBrandCheck(O, P).
+      5. If P.[[Kind]] is "method",
+        a. Return P.[[Value]].
+      6. Else,
+        a. Assert: P.[[Kind]] is "accessor".
+        b. If P does not have a [[Get]] field, throw a TypeError exception.
+        c. Let getter be P.[[Get]].
+        d. Return ? Call(getter, O).
+
+---*/
+
+
+var C = class {
+  #m() { return "Test262"; }
+
+  checkPrivateMethod() {
+    assert.sameValue(this.hasOwnProperty("#m"), false);
+    assert.sameValue("#m" in this, false);
+
+    assert.sameValue(this.#m(), "Test262");
+    
+    return 0;
+  }
+}
+
+let c = new C();
+assert.sameValue(c.checkPrivateMethod(), 0);
diff --git a/JSTests/test262/test/language/expressions/class/elements/private-setter-access-on-inner-arrow-function.js b/JSTests/test262/test/language/expressions/class/elements/private-setter-access-on-inner-arrow-function.js
new file mode 100644
index 0000000..6a51773
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/elements/private-setter-access-on-inner-arrow-function.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-setter-access-on-inner-arrow-function.case
+// - src/class-elements/default/cls-expr.template
+/*---
+description: PrivateName of private setter is visible on inner arrow function of class scope (field definitions in a class expression)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+var C = class {
+  set #m(v) { this._v = v; }
+
+  method() {
+    let arrowFunction = () => {
+      this.#m = 'Test262';
+    }
+
+    arrowFunction();
+  }
+}
+
+let c = new C();
+c.method();
+assert.sameValue(c._v, 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private setter from an ordinary object');
diff --git a/JSTests/test262/test/language/expressions/class/elements/private-setter-access-on-inner-function.js b/JSTests/test262/test/language/expressions/class/elements/private-setter-access-on-inner-function.js
new file mode 100644
index 0000000..0d8bfd4
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/elements/private-setter-access-on-inner-function.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-setter-access-on-inner-function.case
+// - src/class-elements/default/cls-expr.template
+/*---
+description: PrivateName of private setter is visible on inner function of class scope (field definitions in a class expression)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+var C = class {
+  set #m(v) { this._v = v; }
+
+  method() {
+    let self = this;
+    function innerFunction() {
+      self.#m = 'Test262';
+    }
+
+    innerFunction();
+  }
+}
+
+let c = new C();
+c.method();
+assert.sameValue(c._v, 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private setter from an ordinary object');
diff --git a/JSTests/test262/test/language/expressions/class/elements/private-setter-is-not-a-own-property.js b/JSTests/test262/test/language/expressions/class/elements/private-setter-is-not-a-own-property.js
new file mode 100644
index 0000000..695c931
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/elements/private-setter-is-not-a-own-property.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-setter-is-not-a-own-property.case
+// - src/class-elements/default/cls-expr.template
+/*---
+description: Private setter is not stored as an own property of objects (field definitions in a class expression)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    PrivateFieldGet (P, O)
+      1. Assert: P is a Private Name.
+      2. If O is not an object, throw a TypeError exception.
+      3. If P.[[Kind]] is "field",
+        a. Let entry be PrivateFieldFind(P, O).
+        b. If entry is empty, throw a TypeError exception.
+        c. Return entry.[[PrivateFieldValue]].
+      4. Perform ? PrivateBrandCheck(O, P).
+      5. If P.[[Kind]] is "method",
+        a. Return P.[[Value]].
+      6. Else,
+        a. Assert: P.[[Kind]] is "accessor".
+        b. If P does not have a [[Get]] field, throw a TypeError exception.
+        c. Let getter be P.[[Get]].
+        d. Return ? Call(getter, O).
+
+---*/
+
+
+var C = class {
+  set #m(v) { this._v = v; }
+
+  checkPrivateSetter() {
+    assert.sameValue(this.hasOwnProperty("#m"), false);
+    assert.sameValue("#m" in this, false);
+
+    assert.sameValue(this.__lookupSetter__("#m"), undefined);
+
+    this.#m = "Test262";
+    assert.sameValue(this._v, "Test262");
+
+    return 0;
+  }
+}
+
+let c = new C();
+assert.sameValue(c.checkPrivateSetter(), 0);
diff --git a/JSTests/test262/test/language/expressions/class/elements/prod-private-getter-before-super-return-in-field-initializer.js b/JSTests/test262/test/language/expressions/class/elements/prod-private-getter-before-super-return-in-field-initializer.js
index 60227cb..4e6edac 100644
--- a/JSTests/test262/test/language/expressions/class/elements/prod-private-getter-before-super-return-in-field-initializer.js
+++ b/JSTests/test262/test/language/expressions/class/elements/prod-private-getter-before-super-return-in-field-initializer.js
@@ -4,7 +4,7 @@
 /*---
 description: Private getters are installed "when super returns" and no earlier (call in field initializer) (field definitions in a class expression)
 esid: prod-FieldDefinition
-features: [class-methods-private, class]
+features: [class-methods-private, class-fields-public, class]
 flags: [generated]
 info: |
     SuperCall: super Arguments
diff --git a/JSTests/test262/test/language/expressions/class/elements/prod-private-method-before-super-return-in-field-initializer.js b/JSTests/test262/test/language/expressions/class/elements/prod-private-method-before-super-return-in-field-initializer.js
index 950b7b2..b13db04 100644
--- a/JSTests/test262/test/language/expressions/class/elements/prod-private-method-before-super-return-in-field-initializer.js
+++ b/JSTests/test262/test/language/expressions/class/elements/prod-private-method-before-super-return-in-field-initializer.js
@@ -4,7 +4,7 @@
 /*---
 description: Private methods are installed "when super returns" and no earlier (call in field initializer) (field definitions in a class expression)
 esid: prod-FieldDefinition
-features: [class-methods-private, class]
+features: [class-methods-private, class-fields-public, class]
 flags: [generated]
 info: |
     SuperCall: super Arguments
diff --git a/JSTests/test262/test/language/expressions/class/elements/prod-private-setter-before-super-return-in-field-initializer.js b/JSTests/test262/test/language/expressions/class/elements/prod-private-setter-before-super-return-in-field-initializer.js
index 89fdcd8..bb59700 100644
--- a/JSTests/test262/test/language/expressions/class/elements/prod-private-setter-before-super-return-in-field-initializer.js
+++ b/JSTests/test262/test/language/expressions/class/elements/prod-private-setter-before-super-return-in-field-initializer.js
@@ -4,7 +4,7 @@
 /*---
 description: Private settters are installed "when super returns" and no earlier (call in field initializer) (field definitions in a class expression)
 esid: prod-FieldDefinition
-features: [class-methods-private, class]
+features: [class-methods-private, class-fields-public, class]
 flags: [generated]
 info: |
     SuperCall: super Arguments
diff --git a/JSTests/test262/test/language/expressions/class/poisoned-underscore-proto.js b/JSTests/test262/test/language/expressions/class/poisoned-underscore-proto.js
new file mode 100644
index 0000000..e9e333f
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/poisoned-underscore-proto.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: prod-ClassExpression
+description: >
+  ClassExpression should directly set [[Prototype]] internal slot.
+info: |
+  ClassDefinitionEvaluation
+
+  [...]
+  7. Let proto be ObjectCreate(protoParent).
+
+  ObjectCreate ( proto [ , internalSlotsList ] )
+
+  [...]
+  4. Set obj.[[Prototype]] to proto.
+features: [class]
+---*/
+
+Object.defineProperty(Object.prototype, '__proto__', {
+  set: function() {
+    throw new Test262Error('should not be called');
+  },
+});
+
+var A = class extends Array {};
+
+assert.sameValue(new A(1).length, 1);
diff --git a/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval-indirect.js b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval-indirect.js
new file mode 100644
index 0000000..e3cc5a6
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval-indirect.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private getter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+flags: [noStrict]
+---*/
+
+let classStringExpression = `(
+class {
+  get #m() { return 'test262'; }
+
+  access(o) {
+    return o.#m;
+  }
+}
+)`;
+
+let createAndInstantiateClass = function (_eval) {
+  return new (_eval(classStringExpression));
+};
+
+let c1 = createAndInstantiateClass(eval);
+let c2 = createAndInstantiateClass(eval);
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval.js b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval.js
new file mode 100644
index 0000000..e695ea2
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-eval.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private getter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+flags: [noStrict]
+---*/
+
+let classStringExpression = `(
+class {
+  get #m() { return 'test262'; }
+
+  access(o) {
+    return o.#m;
+  }
+}
+)`;
+
+let createAndInstantiateClass = function () {
+  return new (eval(classStringExpression));
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-factory.js b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-factory.js
new file mode 100644
index 0000000..732cb19
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-factory.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private getter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+---*/
+
+let createAndInstantiateClass = function () {
+  const C = class {
+    get #m() { return 'test262'; }
+
+    access(o) {
+      return o.#m;
+    }
+  }
+
+  let c = new C();
+  return c;
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-function-ctor.js b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-function-ctor.js
new file mode 100644
index 0000000..55f7406
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-function-ctor.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private getter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+---*/
+
+let classStringExpression = `
+return class {
+  get m() { return 'test262'; }
+
+  access(o) {
+    return o.m;
+  }
+}
+`;
+
+let createAndInstantiateClass = function () {
+  let classFactoryFunction = new Function(classStringExpression);
+  let Class = classFactoryFunction();
+  return new Class();
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js
new file mode 100644
index 0000000..5dcf1e3
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private getter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+---*/
+
+let classStringExpression = `
+return class {
+  get #m() { return 'test262'; }
+
+  access(o) {
+    return o.#m;
+  }
+}
+`;
+
+let createAndInstantiateClass = function () {
+  let classFactoryFunction = new ($262.createRealm().global.Function)(classStringExpression);
+  let Class = classFactoryFunction();
+  return new Class();
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm.js b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm.js
new file mode 100644
index 0000000..a287545
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-getter-brand-check-multiple-evaluations-of-class-realm.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private getter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+flags: [noStrict]
+---*/
+
+let eval1 = $262.createRealm().global.eval;
+let eval2 = $262.createRealm().global.eval;
+
+let classStringExpression = `(
+class {
+  get #m() { return 'test262'; }
+
+  access(o) {
+    return o.#m;
+  }
+}
+)`;
+
+let createAndInstantiateClass = function (_eval) {
+  return new (_eval(classStringExpression));
+};
+
+let c1 = createAndInstantiateClass(eval1);
+let c2 = createAndInstantiateClass(eval2);
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval-indirect.js b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval-indirect.js
new file mode 100644
index 0000000..eac0268
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval-indirect.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private method)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+flags: [noStrict]
+---*/
+
+let classStringExpression = `(
+class C {
+  #m() { return 'test262'; }
+
+  access(o) {
+    return o.#m();
+  }
+}
+)`;
+
+let createAndInstantiateClass = function (_eval) {
+  return new (_eval(classStringExpression));
+};
+
+let c1 = createAndInstantiateClass(eval);
+let c2 = createAndInstantiateClass(eval);
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval.js b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval.js
new file mode 100644
index 0000000..4cc49d8
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-eval.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private method)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+flags: [noStrict]
+---*/
+
+let classStringExpression = `(
+class C {
+  #m() { return 'test262'; }
+
+  access(o) {
+    return o.#m();
+  }
+}
+)`;
+
+let createAndInstantiateClass = function () {
+  return new (eval(classStringExpression));
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-factory.js b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-factory.js
new file mode 100644
index 0000000..094165e
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-factory.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private method)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+---*/
+
+let createAndInstantiateClass = function () {
+  const C = class {
+    #m() { return 'test262'; }
+
+    access(o) {
+      return o.#m();
+    }
+  }
+
+  return new C();
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-function-ctor.js b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-function-ctor.js
new file mode 100644
index 0000000..6e23740
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-function-ctor.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private method)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+---*/
+
+let classStringExpression = `
+return class C {
+  #m() { return 'test262'; }
+
+  access(o) {
+    return o.#m();
+  }
+}
+`;
+
+let createAndInstantiateClass = function () {
+  let classFactoryFunction = new Function(classStringExpression);
+  let Class = classFactoryFunction();
+  return new Class();
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm-function-ctor.js b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm-function-ctor.js
new file mode 100644
index 0000000..094df6a
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm-function-ctor.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private method)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+---*/
+
+let classStringExpression = `
+return class C {
+  #m() { return 'test262'; }
+
+  access(o) {
+    return o.#m();
+  }
+}
+`;
+
+let createAndInstantiateClass = function () {
+  let classFactoryFunction = new ($262.createRealm().global.Function)(classStringExpression);
+  let Class = classFactoryFunction();
+  return new Class();
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm.js b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm.js
new file mode 100644
index 0000000..49657c8
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-method-brand-check-multiple-evaluations-of-class-realm.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private method)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+flags: [noStrict]
+---*/
+
+let eval1 = $262.createRealm().global.eval;
+let eval2 = $262.createRealm().global.eval;
+
+let classStringExpression = `(
+class {
+  #m() { return 'test262'; }
+
+  access(o) {
+    return o.#m();
+  }
+}
+)`;
+
+let createAndInstantiateClass = function (_eval) {
+  return new (_eval(classStringExpression));
+};
+
+let c1 = createAndInstantiateClass(eval1);
+let c2 = createAndInstantiateClass(eval2);
+
+assert.sameValue(c1.access(c1), 'test262');
+assert.sameValue(c2.access(c2), 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2);
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1);
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval-indirect.js b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval-indirect.js
new file mode 100644
index 0000000..18e5558
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval-indirect.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private setter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+flags: [noStrict]
+---*/
+
+let classStringExpression = `(
+class {
+  set #m(v) { this._v = v; }
+
+  access(o, v) {
+    o.#m = v;
+  }
+}
+)`;
+
+let createAndInstantiateClass = function (_eval) {
+  return new (_eval(classStringExpression));
+};
+
+let c1 = createAndInstantiateClass(eval);
+let c2 = createAndInstantiateClass(eval);
+
+c1.access(c1, 'test262');
+assert.sameValue(c1._v, 'test262');
+c2.access(c2, 'test262');
+assert.sameValue(c2._v, 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2, 'foo');
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1, 'foo');
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval.js b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval.js
new file mode 100644
index 0000000..091cff4
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-eval.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private setter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+flags: [noStrict]
+---*/
+
+let classStringExpression = `(
+class {
+  set #m(v) { this._v = v; }
+
+  access(o, v) {
+    o.#m = v;
+  }
+}
+)`;
+
+let createAndInstantiateClass = function () {
+  return new (eval(classStringExpression));
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+c1.access(c1, 'test262');
+assert.sameValue(c1._v, 'test262');
+c2.access(c2, 'test262');
+assert.sameValue(c2._v, 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2, 'foo');
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1, 'foo');
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-factory.js b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-factory.js
new file mode 100644
index 0000000..58771e3
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-factory.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private setter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+---*/
+
+let createAndInstantiateClass = function () {
+  const C = class {
+    set #m(v) { this._v = v; }
+
+    access(o, v) {
+      o.#m = v;
+    }
+  }
+
+  return new C();
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+c1.access(c1, 'test262');
+assert.sameValue(c1._v, 'test262');
+c2.access(c2, 'test262');
+assert.sameValue(c2._v, 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2, 'foo');
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1, 'foo');
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-function-ctor.js b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-function-ctor.js
new file mode 100644
index 0000000..86722d0
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-function-ctor.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private setter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+---*/
+
+let classStringExpression = `
+return class {
+  set #m(v) { this._v = v; }
+
+  access(o, v) {
+    o.#m = v;
+  }
+}
+`;
+
+let createAndInstantiateClass = function () {
+  let classFactoryFunction = new Function(classStringExpression);
+  let Class = classFactoryFunction();
+  return new Class();
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+c1.access(c1, 'test262');
+assert.sameValue(c1._v, 'test262');
+c2.access(c2, 'test262');
+assert.sameValue(c2._v, 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2, 'foo');
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1, 'foo');
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js
new file mode 100644
index 0000000..0c5eff4
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm-function-ctor.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private setter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+---*/
+
+let classStringExpression = `
+return class {
+  set #m(v) { this._v = v; }
+
+  access(o, v) {
+    o.#m = v;
+  }
+}
+`;
+
+let createAndInstantiateClass = function () {
+  let classFactoryFunction = new ($262.createRealm().global.Function)(classStringExpression);
+  let Class = classFactoryFunction();
+  return new Class();
+};
+
+let c1 = createAndInstantiateClass();
+let c2 = createAndInstantiateClass();
+
+c1.access(c1, 'test262');
+assert.sameValue(c1._v, 'test262');
+c2.access(c2, 'test262');
+assert.sameValue(c2._v, 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2, 'foo');
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1, 'foo');
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm.js b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm.js
new file mode 100644
index 0000000..35a42d3
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/class/private-setter-brand-check-multiple-evaluations-of-class-realm.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2019 Jaideep Bhoosreddy (Bloomberg LP). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Every new evaluation of a class creates a different brand (private setter)
+esid: sec-privatefieldget
+info: |
+  ClassTail : ClassHeritage { ClassBody }
+    ...
+    11. Let proto be ObjectCreate(protoParent).
+    ...
+    31. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that the P's [[Kind]] field is either "method" or "accessor",
+      a. Set F.[[PrivateBrand]] to proto.
+    ...
+
+  PrivateBrandCheck(O, P)
+    1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
+      a. Throw a TypeError exception.
+features: [class, class-methods-private]
+flags: [noStrict]
+---*/
+
+let eval1 = $262.createRealm().global.eval;
+let eval2 = $262.createRealm().global.eval;
+
+let classStringExpression = `(
+class {
+  set #m(v) { this._v = v; }
+
+  access(o, v) {
+    o.#m = v;
+  }
+}
+)`;
+
+let createAndInstantiateClass = function (_eval) {
+  return new (_eval(classStringExpression));
+};
+
+let c1 = createAndInstantiateClass(eval1);
+let c2 = createAndInstantiateClass(eval2);
+
+c1.access(c1, 'test262');
+assert.sameValue(c1._v, 'test262');
+c2.access(c2, 'test262');
+assert.sameValue(c2._v, 'test262');
+
+assert.throws(TypeError, function() {
+  c1.access(c2, 'foo');
+}, 'invalid access of c1 private method');
+
+assert.throws(TypeError, function() {
+  c2.access(c1, 'foo');
+}, 'invalid access of c2 private method');
diff --git a/JSTests/test262/test/language/expressions/new.target/unary-expr.js b/JSTests/test262/test/language/expressions/new.target/unary-expr.js
new file mode 100644
index 0000000..0e3592c
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/new.target/unary-expr.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: prod-UnaryExpression
+description: >
+  While increments and decrements are restricted to use with NewTarget,
+  other unary operators should not throw SyntaxError.
+info: |
+  UnaryExpression[Yield, Await]:
+    UpdateExpression[?Yield, ?Await]:
+      LeftHandSideExpression[?Yield, ?Await]:
+        NewExpression[?Yield, ?Await]:
+          MemberExpression[Yield, Await]:
+            MetaProperty:
+              NewTarget
+features: [new.target, async-functions]
+flags: [async]
+---*/
+
+(function() { assert.sameValue(delete (new.target), true); })();
+(function() { assert.sameValue(void new.target, undefined); })();
+new function() { assert.sameValue(typeof new.target, 'function'); };
+new function() { assert.sameValue(+(new.target), NaN); };
+(function() { assert.sameValue(-(new.target), NaN); })();
+new function() { assert.sameValue(~new.target, -1); };
+(function() { assert.sameValue(!new.target, true); })();
+new function() { assert.sameValue(delete void typeof +-~!(new.target), true); };
+
+(async function() {
+  assert.sameValue(await new.target, undefined);
+})().then($DONE, $DONE);
diff --git a/JSTests/test262/test/language/expressions/super/call-poisoned-underscore-proto.js b/JSTests/test262/test/language/expressions/super/call-poisoned-underscore-proto.js
new file mode 100644
index 0000000..b9a9ed1
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/super/call-poisoned-underscore-proto.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: prod-SuperCall
+description: >
+  SuperCall should directly invoke [[GetPrototypeOf]] internal method.
+info: |
+  GetSuperConstructor ( )
+
+  [...]
+  5. Let superConstructor be ! activeFunction.[[GetPrototypeOf]]().
+features: [class]
+---*/
+
+Object.defineProperty(Object.prototype, '__proto__', {
+  get: function() {
+    throw new Test262Error('should not be called');
+  },
+});
+
+class A extends Array {}
+
+assert.sameValue(new A(1).length, 1);
diff --git a/JSTests/test262/test/language/expressions/super/prop-poisoned-underscore-proto.js b/JSTests/test262/test/language/expressions/super/prop-poisoned-underscore-proto.js
new file mode 100644
index 0000000..c96e21a
--- /dev/null
+++ b/JSTests/test262/test/language/expressions/super/prop-poisoned-underscore-proto.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: prod-SuperProperty
+description: >
+  SuperProperty should directly call [[GetPrototypeOf]] internal method.
+info: |
+  MakeSuperPropertyReference ( actualThis, propertyKey, strict )
+
+  [...]
+  3. Let baseValue be ? env.GetSuperBase().
+
+  GetSuperBase ( )
+
+  [...]
+  5. Return ? home.[[GetPrototypeOf]]().
+---*/
+
+Object.defineProperty(Object.prototype, '__proto__', {
+  get: function() {
+    throw new Test262Error('should not be called');
+  },
+});
+
+var obj = {
+  superExpression() {
+    return super['CONSTRUCTOR'.toLowerCase()];
+  },
+  superIdentifierName() {
+    return super.toString();
+  },
+};
+
+assert.sameValue(obj.superExpression(), Object);
+assert.sameValue(obj.superIdentifierName(), '[object Object]');
diff --git a/JSTests/test262/test/language/identifiers/vals-cjk-escaped.js b/JSTests/test262/test/language/identifiers/vals-cjk-escaped.js
new file mode 100644
index 0000000..1270cf1
--- /dev/null
+++ b/JSTests/test262/test/language/identifiers/vals-cjk-escaped.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2019 Student Main. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+info: |
+    IdentifierName and ReservedWord are tokens that are interpreted according to the 
+    Default Identifier Syntax given in Unicode Standard Annex #31, 
+    Identifier and Pattern Syntax, with some small modifications.
+esid: sec-names-and-keywords
+description: Check CJK UNIFIED IDEOGRAPH range is correct.
+---*/
+
+// CJK UNIFIED IDEOGRAPH 4e00-9fff
+// u4e00
+var \u4e00 = 1;
+assert.sameValue(一, 1);
+
+// u6c5f, check parser included all CJK range not only first and last
+var \u6c5f = 1;
+assert.sameValue(江, 1);
+
+// u9fa5, last character in CJK UNIFIED IDEOGRAPH as for 2019
+var \u9fa5 = 1;
+assert.sameValue(龥, 1);
+
+// CJK UNIFIED IDEOGRAPH EXTENDED A 3400-4dbf
+// u3400
+var \u3400 = 1;
+assert.sameValue(㐀, 1);
+
+// u362e
+var \u362e = 1;
+assert.sameValue(㘮, 1);
+
+// u4db5, last in CJK UNIFIED IDEOGRAPH EXTENDED A
+var \u4db5 = 1;
+assert.sameValue(䶵, 1);
diff --git a/JSTests/test262/test/language/identifiers/vals-cjk.js b/JSTests/test262/test/language/identifiers/vals-cjk.js
new file mode 100644
index 0000000..819d0b7
--- /dev/null
+++ b/JSTests/test262/test/language/identifiers/vals-cjk.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2019 Student Main. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+info: |
+    IdentifierName and ReservedWord are tokens that are interpreted according to the 
+    Default Identifier Syntax given in Unicode Standard Annex #31, 
+    Identifier and Pattern Syntax, with some small modifications.
+esid: sec-names-and-keywords
+description: Check CJK UNIFIED IDEOGRAPH range is correct.
+---*/
+
+// CJK UNIFIED IDEOGRAPH 4e00-9fff
+// u4e00
+var 一 = 1;
+assert.sameValue(一, 1);
+
+// u6c5f, check parser included all CJK range not only first and last character
+var 江 = 1;
+assert.sameValue(江, 1);
+
+// u9fa5, last character in CJK UNIFIED IDEOGRAPH as for 2019
+var 龥 = 1;
+assert.sameValue(龥, 1);
+
+// CJK UNIFIED IDEOGRAPH EXTENDED A 3400-4dbf
+// u3400
+var 㐀 = 1;
+assert.sameValue(㐀, 1);
+
+// u362e
+var 㘮 = 1;
+assert.sameValue(㘮, 1);
+
+// u4db5, last in CJK UNIFIED IDEOGRAPH EXTENDED A
+var 䶵 = 1;
+assert.sameValue(䶵, 1);
diff --git a/JSTests/test262/test/language/statements/class/elements/private-class-field-on-frozen-objects.js b/JSTests/test262/test/language/statements/class/elements/private-class-field-on-frozen-objects.js
index c2c0492..5eb8431 100644
--- a/JSTests/test262/test/language/statements/class/elements/private-class-field-on-frozen-objects.js
+++ b/JSTests/test262/test/language/statements/class/elements/private-class-field-on-frozen-objects.js
@@ -14,7 +14,7 @@
       b. Perform ? CreateDataPropertyOrThrow(receiver, fieldName, initValue).
     10. Return.
 includes: [compareArray.js]
-features: [class, class-fields-private]
+features: [class, class-fields-private, class-fields-public]
 flags: [onlyStrict]
 ---*/
 
diff --git a/JSTests/test262/test/language/statements/class/elements/private-field-access-on-inner-arrow-function.js b/JSTests/test262/test/language/statements/class/elements/private-field-access-on-inner-arrow-function.js
new file mode 100644
index 0000000..3c626db
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-field-access-on-inner-arrow-function.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-field-access-on-inner-arrow-function.case
+// - src/class-elements/default/cls-decl.template
+/*---
+description: PrivateName of private field is visible on inner arrow function of class scope (field definitions in a class declaration)
+esid: prod-FieldDefinition
+features: [class-fields-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+class C {
+  #f = 'Test262';
+
+  method() {
+    let arrowFunction = () => {
+      return this.#f;
+    }
+
+    return arrowFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private field from an ordinary object');
diff --git a/JSTests/test262/test/language/statements/class/elements/private-field-access-on-inner-function.js b/JSTests/test262/test/language/statements/class/elements/private-field-access-on-inner-function.js
new file mode 100644
index 0000000..0e5e308
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-field-access-on-inner-function.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-field-access-on-inner-function.case
+// - src/class-elements/default/cls-decl.template
+/*---
+description: PrivateName of private field is visible on inner function of class scope (field definitions in a class declaration)
+esid: prod-FieldDefinition
+features: [class-fields-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+class C {
+  #f = 'Test262';
+
+  method() {
+    let self = this;
+    function innerFunction() {
+      return self.#f;
+    }
+
+    return innerFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private field from an ordinary object');
diff --git a/JSTests/test262/test/language/statements/class/elements/private-field-is-not-clobbered-by-computed-property.js b/JSTests/test262/test/language/statements/class/elements/private-field-is-not-clobbered-by-computed-property.js
new file mode 100644
index 0000000..7148cde
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-field-is-not-clobbered-by-computed-property.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private field is not clobbered by computed property
+esid: sec-privatefieldget
+info: |
+  PrivateFieldGet (P, O)
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Return entry.[[PrivateFieldValue]].
+    4. Perform ? PrivateBrandCheck(O, P).
+    5. If P.[[Kind]] is "method",
+      a. Return P.[[Value]].
+    6. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If P does not have a [[Get]] field, throw a TypeError exception.
+      c. Let getter be P.[[Get]].
+      d. Return ? Call(getter, O).
+features: [class-fields-public, class-fields-private, class]
+---*/
+
+class C {
+  #m = 44;
+  ["#m"] = this.#m / 11;
+
+  checkPrivateField() {
+    assert.sameValue(this.hasOwnProperty("#m"), true);
+    assert.sameValue("#m" in this, true);
+  
+    assert.sameValue(this["#m"], 4);
+  
+    assert.sameValue(this.#m, 44);
+  
+    return 0;
+  }
+}
+
+let c = new C();
+assert.sameValue(c.checkPrivateField(), 0);
diff --git a/JSTests/test262/test/language/statements/class/elements/private-field-visible-to-direct-eval-on-initializer.js b/JSTests/test262/test/language/statements/class/elements/private-field-visible-to-direct-eval-on-initializer.js
new file mode 100644
index 0000000..f772fa6
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-field-visible-to-direct-eval-on-initializer.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private field is visible on initializer with direct eval
+esid: sec-privatefieldget
+info: |
+  PrivateFieldGet (P, O)
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Return entry.[[PrivateFieldValue]].
+    4. Perform ? PrivateBrandCheck(O, P).
+    5. If P.[[Kind]] is "method",
+      a. Return P.[[Value]].
+    6. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If P does not have a [[Get]] field, throw a TypeError exception.
+      c. Let getter be P.[[Get]].
+      d. Return ? Call(getter, O).
+
+  ClassElementName : PrivateIdentifier
+    1. Let privateIdentifier be StringValue of PrivateIdentifier.
+    2. Let privateName be NewPrivateName(privateIdentifier).
+    3. Let scope be the running execution context's PrivateEnvironment.
+    4. Let scopeEnvRec be scope's EnvironmentRecord.
+    5. Perform ! scopeEnvRec.InitializeBinding(privateIdentifier, privateName).
+    6. Return privateName.
+
+  MakePrivateReference ( baseValue, privateIdentifier )
+    1. Let env be the running execution context's PrivateEnvironment.
+    2. Let privateNameBinding be ? ResolveBinding(privateIdentifier, env).
+    3. Let privateName be GetValue(privateNameBinding).
+    4. Assert: privateName is a Private Name.
+    5. Return a value of type Reference whose base value is baseValue, whose referenced name is privateName, whose strict reference flag is true.
+features: [class-fields-private, class-fields-public, class]
+---*/
+
+class C {
+  #m = 44;
+  v = eval("this.#m");
+}
+
+let c = new C();
+assert.sameValue(c.v, 44);
diff --git a/JSTests/test262/test/language/statements/class/elements/private-field-visible-to-direct-eval.js b/JSTests/test262/test/language/statements/class/elements/private-field-visible-to-direct-eval.js
new file mode 100644
index 0000000..003332c
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-field-visible-to-direct-eval.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private field is visible to direct eval code
+esid: sec-privatefieldget
+info: |
+  PrivateFieldGet (P, O)
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Return entry.[[PrivateFieldValue]].
+    4. Perform ? PrivateBrandCheck(O, P).
+    5. If P.[[Kind]] is "method",
+      a. Return P.[[Value]].
+    6. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If P does not have a [[Get]] field, throw a TypeError exception.
+      c. Let getter be P.[[Get]].
+      d. Return ? Call(getter, O).
+
+  ClassElementName : PrivateIdentifier
+    1. Let privateIdentifier be StringValue of PrivateIdentifier.
+    2. Let privateName be NewPrivateName(privateIdentifier).
+    3. Let scope be the running execution context's PrivateEnvironment.
+    4. Let scopeEnvRec be scope's EnvironmentRecord.
+    5. Perform ! scopeEnvRec.InitializeBinding(privateIdentifier, privateName).
+    6. Return privateName.
+
+  MakePrivateReference ( baseValue, privateIdentifier )
+    1. Let env be the running execution context's PrivateEnvironment.
+    2. Let privateNameBinding be ? ResolveBinding(privateIdentifier, env).
+    3. Let privateName be GetValue(privateNameBinding).
+    4. Assert: privateName is a Private Name.
+    5. Return a value of type Reference whose base value is baseValue, whose referenced name is privateName, whose strict reference flag is true.
+features: [class-fields-private, class]
+---*/
+
+class C {
+  #m = 44;
+
+  getWithEval() {
+    return eval("this.#m");
+  }
+}
+
+class D {
+  #m = 44;
+}
+
+let c = new C();
+assert.sameValue(c.getWithEval(), 44);
+
+let d = new D();
+assert.throws(TypeError, function() {
+  c.getWithEval.call(d);
+}, "invalid access to a private field");
diff --git a/JSTests/test262/test/language/statements/class/elements/private-getter-access-on-inner-arrow-function.js b/JSTests/test262/test/language/statements/class/elements/private-getter-access-on-inner-arrow-function.js
new file mode 100644
index 0000000..087142e
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-getter-access-on-inner-arrow-function.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-getter-access-on-inner-arrow-function.case
+// - src/class-elements/default/cls-decl.template
+/*---
+description: PrivateName of private getter is visible on inner arrow function of class scope (field definitions in a class declaration)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+class C {
+  get #m() { return 'Test262'; }
+
+  method() {
+    let arrowFunction = () => {
+      return this.#m;
+    }
+
+    return arrowFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private accessor from an ordinary object');
diff --git a/JSTests/test262/test/language/statements/class/elements/private-getter-access-on-inner-function.js b/JSTests/test262/test/language/statements/class/elements/private-getter-access-on-inner-function.js
new file mode 100644
index 0000000..2e7fafb
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-getter-access-on-inner-function.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-getter-access-on-inner-function.case
+// - src/class-elements/default/cls-decl.template
+/*---
+description: PrivateName of private getter is visible on inner function of class scope (field definitions in a class declaration)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+class C {
+  get #m() { return 'Test262'; }
+
+  method() {
+    let self = this;
+    function innerFunction() {
+      return self.#m;
+    }
+
+    return innerFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private accessor from an ordinary object');
diff --git a/JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js b/JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js
index b20ba45..2774984 100644
--- a/JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js
+++ b/JSTests/test262/test/language/statements/class/elements/private-getter-brand-check-multiple-evaluations-of-class.js
@@ -22,12 +22,12 @@
 let createAndInstantiateClass = function () {
   class C {
     get #m() { return 'test262'; }
-    
+
     access(o) {
       return o.#m;
     }
   }
-  
+
   let c = new C();
   return c;
 };
diff --git a/JSTests/test262/test/language/statements/class/elements/private-getter-is-not-a-own-property.js b/JSTests/test262/test/language/statements/class/elements/private-getter-is-not-a-own-property.js
new file mode 100644
index 0000000..03ddc9a
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-getter-is-not-a-own-property.js
@@ -0,0 +1,45 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-getter-is-not-a-own-property.case
+// - src/class-elements/default/cls-decl.template
+/*---
+description: Private getter is not stored as an own property of objects (field definitions in a class declaration)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    PrivateFieldGet (P, O)
+      1. Assert: P is a Private Name.
+      2. If O is not an object, throw a TypeError exception.
+      3. If P.[[Kind]] is "field",
+        a. Let entry be PrivateFieldFind(P, O).
+        b. If entry is empty, throw a TypeError exception.
+        c. Return entry.[[PrivateFieldValue]].
+      4. Perform ? PrivateBrandCheck(O, P).
+      5. If P.[[Kind]] is "method",
+        a. Return P.[[Value]].
+      6. Else,
+        a. Assert: P.[[Kind]] is "accessor".
+        b. If P does not have a [[Get]] field, throw a TypeError exception.
+        c. Let getter be P.[[Get]].
+        d. Return ? Call(getter, O).
+
+---*/
+
+
+class C {
+  get #m() { return "Test262"; }
+
+  checkPrivateGetter() {
+    assert.sameValue(this.hasOwnProperty("#m"), false);
+    assert.sameValue("#m" in this, false);
+
+    assert.sameValue(this.__lookupGetter__("#m"), undefined);
+
+    assert.sameValue(this.#m, "Test262");
+
+    return 0;
+  }
+}
+
+let c = new C();
+assert.sameValue(c.checkPrivateGetter(), 0);
diff --git a/JSTests/test262/test/language/statements/class/elements/private-getter-is-not-clobbered-by-computed-property.js b/JSTests/test262/test/language/statements/class/elements/private-getter-is-not-clobbered-by-computed-property.js
new file mode 100644
index 0000000..60adabb
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-getter-is-not-clobbered-by-computed-property.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private getter is not clobbered by computed property
+esid: sec-privatefieldget
+info: |
+  PrivateFieldGet (P, O)
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Return entry.[[PrivateFieldValue]].
+    4. Perform ? PrivateBrandCheck(O, P).
+    5. If P.[[Kind]] is "method",
+      a. Return P.[[Value]].
+    6. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If P does not have a [[Get]] field, throw a TypeError exception.
+      c. Let getter be P.[[Get]].
+      d. Return ? Call(getter, O).
+features: [class-methods-private, class-fields-public, class]
+---*/
+
+class C {
+  get #m() { return "Test262"; }
+  ["#m"] = 0;
+  
+  checkPrivateGetter() {
+    assert.sameValue(this.hasOwnProperty("#m"), true);
+    assert.sameValue("#m" in this, true);
+  
+    assert.sameValue(this["#m"], 0);
+  
+    assert.sameValue(this.#m, "Test262");
+  
+    return 0;
+  }
+}
+
+let c = new C();
+assert.sameValue(c.checkPrivateGetter(), 0);
diff --git a/JSTests/test262/test/language/statements/class/elements/private-getter-visible-to-direct-eval-on-initializer.js b/JSTests/test262/test/language/statements/class/elements/private-getter-visible-to-direct-eval-on-initializer.js
new file mode 100644
index 0000000..e7310eb
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-getter-visible-to-direct-eval-on-initializer.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private getter is visible on initializer with direct eval
+esid: sec-privatefieldget
+info: |
+  PrivateFieldGet (P, O)
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Return entry.[[PrivateFieldValue]].
+    4. Perform ? PrivateBrandCheck(O, P).
+    5. If P.[[Kind]] is "method",
+      a. Return P.[[Value]].
+    6. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If P does not have a [[Get]] field, throw a TypeError exception.
+      c. Let getter be P.[[Get]].
+      d. Return ? Call(getter, O).
+
+  ClassElementName : PrivateIdentifier
+    1. Let privateIdentifier be StringValue of PrivateIdentifier.
+    2. Let privateName be NewPrivateName(privateIdentifier).
+    3. Let scope be the running execution context's PrivateEnvironment.
+    4. Let scopeEnvRec be scope's EnvironmentRecord.
+    5. Perform ! scopeEnvRec.InitializeBinding(privateIdentifier, privateName).
+    6. Return privateName.
+
+  MakePrivateReference ( baseValue, privateIdentifier )
+    1. Let env be the running execution context's PrivateEnvironment.
+    2. Let privateNameBinding be ? ResolveBinding(privateIdentifier, env).
+    3. Let privateName be GetValue(privateNameBinding).
+    4. Assert: privateName is a Private Name.
+    5. Return a value of type Reference whose base value is baseValue, whose referenced name is privateName, whose strict reference flag is true.
+features: [class-methods-private, class-fields-public, class]
+---*/
+
+class C {
+  get #m() { return "Test262"; };
+  v = eval("this.#m");
+}
+
+let c = new C();
+assert.sameValue(c.v, "Test262");
diff --git a/JSTests/test262/test/language/statements/class/elements/private-getter-visible-to-direct-eval.js b/JSTests/test262/test/language/statements/class/elements/private-getter-visible-to-direct-eval.js
new file mode 100644
index 0000000..b4d575f
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-getter-visible-to-direct-eval.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private getter is visible to direct eval code
+esid: sec-privatefieldget
+info: |
+  PrivateFieldGet (P, O)
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Return entry.[[PrivateFieldValue]].
+    4. Perform ? PrivateBrandCheck(O, P).
+    5. If P.[[Kind]] is "method",
+      a. Return P.[[Value]].
+    6. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If P does not have a [[Get]] field, throw a TypeError exception.
+      c. Let getter be P.[[Get]].
+      d. Return ? Call(getter, O).
+
+  ClassElementName : PrivateIdentifier
+    1. Let privateIdentifier be StringValue of PrivateIdentifier.
+    2. Let privateName be NewPrivateName(privateIdentifier).
+    3. Let scope be the running execution context's PrivateEnvironment.
+    4. Let scopeEnvRec be scope's EnvironmentRecord.
+    5. Perform ! scopeEnvRec.InitializeBinding(privateIdentifier, privateName).
+    6. Return privateName.
+
+  MakePrivateReference ( baseValue, privateIdentifier )
+    1. Let env be the running execution context's PrivateEnvironment.
+    2. Let privateNameBinding be ? ResolveBinding(privateIdentifier, env).
+    3. Let privateName be GetValue(privateNameBinding).
+    4. Assert: privateName is a Private Name.
+    5. Return a value of type Reference whose base value is baseValue, whose referenced name is privateName, whose strict reference flag is true.
+features: [class-methods-private, class]
+---*/
+
+class C {
+  get #m() { return "Test262"; };
+
+  getWithEval() {
+    return eval("this.#m");
+  }
+}
+
+class D {
+  get #m() { throw new Test262Error(); };
+}
+
+let c = new C();
+assert.sameValue(c.getWithEval(), "Test262");
+
+let d = new D();
+assert.throws(TypeError, function() {
+  c.getWithEval.call(d);
+}, "invalid access to a private getter");
diff --git a/JSTests/test262/test/language/statements/class/elements/private-method-access-on-inner-arrow-function.js b/JSTests/test262/test/language/statements/class/elements/private-method-access-on-inner-arrow-function.js
new file mode 100644
index 0000000..488df0a
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-method-access-on-inner-arrow-function.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-method-access-on-inner-arrow-function.case
+// - src/class-elements/default/cls-decl.template
+/*---
+description: PrivateName of private method is visible on inner arrow function of class scope (field definitions in a class declaration)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+class C {
+  #m() { return 'Test262'; }
+
+  method() {
+    let arrowFunction = () => {
+      return this.#m();
+    }
+
+    return arrowFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private method from an ordinary object');
diff --git a/JSTests/test262/test/language/statements/class/elements/private-method-access-on-inner-function.js b/JSTests/test262/test/language/statements/class/elements/private-method-access-on-inner-function.js
new file mode 100644
index 0000000..b672931
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-method-access-on-inner-function.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-method-access-on-inner-function.case
+// - src/class-elements/default/cls-decl.template
+/*---
+description: PrivateName of private method is visible on inner function of class scope (field definitions in a class declaration)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+class C {
+  #m() { return 'Test262'; }
+
+  method() {
+    let self = this;
+    function innerFunction() {
+      return self.#m();
+    }
+
+    return innerFunction();
+  }
+}
+
+let c = new C();
+assert.sameValue(c.method(), 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private method from an ordinary object');
diff --git a/JSTests/test262/test/language/statements/class/elements/private-method-is-not-a-own-property.js b/JSTests/test262/test/language/statements/class/elements/private-method-is-not-a-own-property.js
new file mode 100644
index 0000000..3f45701
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-method-is-not-a-own-property.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-method-is-not-a-own-property.case
+// - src/class-elements/default/cls-decl.template
+/*---
+description: Private method is not stored as an own property of objects (field definitions in a class declaration)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    PrivateFieldGet (P, O)
+      1. Assert: P is a Private Name.
+      2. If O is not an object, throw a TypeError exception.
+      3. If P.[[Kind]] is "field",
+        a. Let entry be PrivateFieldFind(P, O).
+        b. If entry is empty, throw a TypeError exception.
+        c. Return entry.[[PrivateFieldValue]].
+      4. Perform ? PrivateBrandCheck(O, P).
+      5. If P.[[Kind]] is "method",
+        a. Return P.[[Value]].
+      6. Else,
+        a. Assert: P.[[Kind]] is "accessor".
+        b. If P does not have a [[Get]] field, throw a TypeError exception.
+        c. Let getter be P.[[Get]].
+        d. Return ? Call(getter, O).
+
+---*/
+
+
+class C {
+  #m() { return "Test262"; }
+
+  checkPrivateMethod() {
+    assert.sameValue(this.hasOwnProperty("#m"), false);
+    assert.sameValue("#m" in this, false);
+
+    assert.sameValue(this.#m(), "Test262");
+    
+    return 0;
+  }
+}
+
+let c = new C();
+assert.sameValue(c.checkPrivateMethod(), 0);
diff --git a/JSTests/test262/test/language/statements/class/elements/private-method-is-not-clobbered-by-computed-property.js b/JSTests/test262/test/language/statements/class/elements/private-method-is-not-clobbered-by-computed-property.js
new file mode 100644
index 0000000..a5a0a0c
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-method-is-not-clobbered-by-computed-property.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private method is not clobbered by computed property
+esid: sec-privatefieldget
+info: |
+  PrivateFieldGet (P, O)
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Return entry.[[PrivateFieldValue]].
+    4. Perform ? PrivateBrandCheck(O, P).
+    5. If P.[[Kind]] is "method",
+      a. Return P.[[Value]].
+    6. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If P does not have a [[Get]] field, throw a TypeError exception.
+      c. Let getter be P.[[Get]].
+      d. Return ? Call(getter, O).
+features: [class-methods-private, class-fields-public, class]
+---*/
+
+class C {
+  #m() { return "Test262"; }
+  ["#m"] = 0;
+  
+  checkPrivateMethod() {
+    assert.sameValue(this.hasOwnProperty("#m"), true);
+    assert.sameValue("#m" in this, true);
+  
+    assert.sameValue(this["#m"], 0);
+  
+    assert.sameValue(this.#m(), "Test262");
+  
+    return 0;
+  }
+}
+
+let c = new C();
+assert.sameValue(c.checkPrivateMethod(), 0);
diff --git a/JSTests/test262/test/language/statements/class/elements/private-method-visible-to-direct-eval-on-initializer.js b/JSTests/test262/test/language/statements/class/elements/private-method-visible-to-direct-eval-on-initializer.js
new file mode 100644
index 0000000..c11a11f
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-method-visible-to-direct-eval-on-initializer.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private method is visible on initializer with direct eval
+esid: sec-privatefieldget
+info: |
+  PrivateFieldGet (P, O)
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Return entry.[[PrivateFieldValue]].
+    4. Perform ? PrivateBrandCheck(O, P).
+    5. If P.[[Kind]] is "method",
+      a. Return P.[[Value]].
+    6. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If P does not have a [[Get]] field, throw a TypeError exception.
+      c. Let getter be P.[[Get]].
+      d. Return ? Call(getter, O).
+
+  ClassElementName : PrivateIdentifier
+    1. Let privateIdentifier be StringValue of PrivateIdentifier.
+    2. Let privateName be NewPrivateName(privateIdentifier).
+    3. Let scope be the running execution context's PrivateEnvironment.
+    4. Let scopeEnvRec be scope's EnvironmentRecord.
+    5. Perform ! scopeEnvRec.InitializeBinding(privateIdentifier, privateName).
+    6. Return privateName.
+
+  MakePrivateReference ( baseValue, privateIdentifier )
+    1. Let env be the running execution context's PrivateEnvironment.
+    2. Let privateNameBinding be ? ResolveBinding(privateIdentifier, env).
+    3. Let privateName be GetValue(privateNameBinding).
+    4. Assert: privateName is a Private Name.
+    5. Return a value of type Reference whose base value is baseValue, whose referenced name is privateName, whose strict reference flag is true.
+features: [class-methods-private, class-fields-public, class]
+---*/
+
+class C {
+  #m() { return "Test262"; };
+  v = eval("this.#m()");
+}
+
+let c = new C();
+assert.sameValue(c.v, "Test262");
diff --git a/JSTests/test262/test/language/statements/class/elements/private-method-visible-to-direct-eval.js b/JSTests/test262/test/language/statements/class/elements/private-method-visible-to-direct-eval.js
new file mode 100644
index 0000000..fb84f016
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-method-visible-to-direct-eval.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private method is visible to direct eval code
+esid: sec-privatefieldget
+info: |
+  PrivateFieldGet (P, O)
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Return entry.[[PrivateFieldValue]].
+    4. Perform ? PrivateBrandCheck(O, P).
+    5. If P.[[Kind]] is "method",
+      a. Return P.[[Value]].
+    6. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If P does not have a [[Get]] field, throw a TypeError exception.
+      c. Let getter be P.[[Get]].
+      d. Return ? Call(getter, O).
+
+  ClassElementName : PrivateIdentifier
+    1. Let privateIdentifier be StringValue of PrivateIdentifier.
+    2. Let privateName be NewPrivateName(privateIdentifier).
+    3. Let scope be the running execution context's PrivateEnvironment.
+    4. Let scopeEnvRec be scope's EnvironmentRecord.
+    5. Perform ! scopeEnvRec.InitializeBinding(privateIdentifier, privateName).
+    6. Return privateName.
+
+  MakePrivateReference ( baseValue, privateIdentifier )
+    1. Let env be the running execution context's PrivateEnvironment.
+    2. Let privateNameBinding be ? ResolveBinding(privateIdentifier, env).
+    3. Let privateName be GetValue(privateNameBinding).
+    4. Assert: privateName is a Private Name.
+    5. Return a value of type Reference whose base value is baseValue, whose referenced name is privateName, whose strict reference flag is true.
+features: [class-methods-private, class]
+---*/
+
+class C {
+  #m() { return "Test262"; };
+
+  getWithEval() {
+    return eval("this.#m()");
+  }
+}
+
+class D {
+  #m() { throw new Test262Error(); };
+}
+
+let c = new C();
+assert.sameValue(c.getWithEval(), "Test262");
+
+let d = new D();
+assert.throws(TypeError, function() {
+  c.getWithEval.call(d);
+}, "invalid access to a private method");
diff --git a/JSTests/test262/test/language/statements/class/elements/private-setter-access-on-inner-arrow-function.js b/JSTests/test262/test/language/statements/class/elements/private-setter-access-on-inner-arrow-function.js
new file mode 100644
index 0000000..640996d
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-setter-access-on-inner-arrow-function.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-setter-access-on-inner-arrow-function.case
+// - src/class-elements/default/cls-decl.template
+/*---
+description: PrivateName of private setter is visible on inner arrow function of class scope (field definitions in a class declaration)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+class C {
+  set #m(v) { this._v = v; }
+
+  method() {
+    let arrowFunction = () => {
+      this.#m = 'Test262';
+    }
+
+    arrowFunction();
+  }
+}
+
+let c = new C();
+c.method();
+assert.sameValue(c._v, 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private setter from an ordinary object');
diff --git a/JSTests/test262/test/language/statements/class/elements/private-setter-access-on-inner-function.js b/JSTests/test262/test/language/statements/class/elements/private-setter-access-on-inner-function.js
new file mode 100644
index 0000000..3ea9a61
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-setter-access-on-inner-function.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-setter-access-on-inner-function.case
+// - src/class-elements/default/cls-decl.template
+/*---
+description: PrivateName of private setter is visible on inner function of class scope (field definitions in a class declaration)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    Updated Productions
+
+    CallExpression[Yield, Await]:
+      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
+      SuperCall[?Yield, ?Await]
+      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
+      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
+      CallExpression[?Yield, ?Await].IdentifierName
+      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
+      CallExpression[?Yield, ?Await].PrivateName
+
+---*/
+
+
+class C {
+  set #m(v) { this._v = v; }
+
+  method() {
+    let self = this;
+    function innerFunction() {
+      self.#m = 'Test262';
+    }
+
+    innerFunction();
+  }
+}
+
+let c = new C();
+c.method();
+assert.sameValue(c._v, 'Test262');
+let o = {};
+assert.throws(TypeError, function() {
+  c.method.call(o);
+}, 'accessed private setter from an ordinary object');
diff --git a/JSTests/test262/test/language/statements/class/elements/private-setter-is-not-a-own-property.js b/JSTests/test262/test/language/statements/class/elements/private-setter-is-not-a-own-property.js
new file mode 100644
index 0000000..4b1ad37
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-setter-is-not-a-own-property.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/private-setter-is-not-a-own-property.case
+// - src/class-elements/default/cls-decl.template
+/*---
+description: Private setter is not stored as an own property of objects (field definitions in a class declaration)
+esid: prod-FieldDefinition
+features: [class-methods-private, class]
+flags: [generated]
+info: |
+    PrivateFieldGet (P, O)
+      1. Assert: P is a Private Name.
+      2. If O is not an object, throw a TypeError exception.
+      3. If P.[[Kind]] is "field",
+        a. Let entry be PrivateFieldFind(P, O).
+        b. If entry is empty, throw a TypeError exception.
+        c. Return entry.[[PrivateFieldValue]].
+      4. Perform ? PrivateBrandCheck(O, P).
+      5. If P.[[Kind]] is "method",
+        a. Return P.[[Value]].
+      6. Else,
+        a. Assert: P.[[Kind]] is "accessor".
+        b. If P does not have a [[Get]] field, throw a TypeError exception.
+        c. Let getter be P.[[Get]].
+        d. Return ? Call(getter, O).
+
+---*/
+
+
+class C {
+  set #m(v) { this._v = v; }
+
+  checkPrivateSetter() {
+    assert.sameValue(this.hasOwnProperty("#m"), false);
+    assert.sameValue("#m" in this, false);
+
+    assert.sameValue(this.__lookupSetter__("#m"), undefined);
+
+    this.#m = "Test262";
+    assert.sameValue(this._v, "Test262");
+
+    return 0;
+  }
+}
+
+let c = new C();
+assert.sameValue(c.checkPrivateSetter(), 0);
diff --git a/JSTests/test262/test/language/statements/class/elements/private-setter-is-not-clobbered-by-computed-property.js b/JSTests/test262/test/language/statements/class/elements/private-setter-is-not-clobbered-by-computed-property.js
new file mode 100644
index 0000000..d00cc73
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-setter-is-not-clobbered-by-computed-property.js
@@ -0,0 +1,44 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private setter is not clobbered by computed property
+esid: sec-privatefieldget
+info: |
+  PrivateFieldGet (P, O)
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Return entry.[[PrivateFieldValue]].
+    4. Perform ? PrivateBrandCheck(O, P).
+    5. If P.[[Kind]] is "method",
+      a. Return P.[[Value]].
+    6. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If P does not have a [[Get]] field, throw a TypeError exception.
+      c. Let getter be P.[[Get]].
+      d. Return ? Call(getter, O).
+features: [class-methods-private, class-fields-public, class]
+---*/
+
+class C {
+  set #m(v) { this._v = v; }
+  ["#m"] = 0;
+  
+  checkPrivateSetter() {
+    assert.sameValue(this.hasOwnProperty("#m"), true);
+    assert.sameValue("#m" in this, true);
+  
+    assert.sameValue(this["#m"], 0);
+  
+    this.#m = "Test262";
+    assert.sameValue(this._v, "Test262");
+  
+    return 0;
+  }
+}
+
+let c = new C();
+assert.sameValue(c.checkPrivateSetter(), 0);
diff --git a/JSTests/test262/test/language/statements/class/elements/private-setter-visible-to-direct-eval-on-initializer.js b/JSTests/test262/test/language/statements/class/elements/private-setter-visible-to-direct-eval-on-initializer.js
new file mode 100644
index 0000000..50cfcba
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-setter-visible-to-direct-eval-on-initializer.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private setter is visible on initializer with direct eval
+esid: sec-privatefieldset
+info: |
+  PrivateFieldSet (P, O, value )
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Set entry.[[PrivateFieldValue]] to value.
+      d. Return.
+    4. If P.[[Kind]] is "method", throw a TypeError exception.
+    5. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If O.[[PrivateFieldBrands]] does not contain P.[[Brand]], throw a TypeError exception.
+      c. If P does not have a [[Set]] field, throw a TypeError exception.
+      d. Let setter be P.[[Set]].
+      e. Perform ? Call(setter, O, value).
+      f. Return.
+
+  ClassElementName : PrivateIdentifier
+    1. Let privateIdentifier be StringValue of PrivateIdentifier.
+    2. Let privateName be NewPrivateName(privateIdentifier).
+    3. Let scope be the running execution context's PrivateEnvironment.
+    4. Let scopeEnvRec be scope's EnvironmentRecord.
+    5. Perform ! scopeEnvRec.InitializeBinding(privateIdentifier, privateName).
+    6. Return privateName.
+
+  MakePrivateReference ( baseValue, privateIdentifier )
+    1. Let env be the running execution context's PrivateEnvironment.
+    2. Let privateNameBinding be ? ResolveBinding(privateIdentifier, env).
+    3. Let privateName be GetValue(privateNameBinding).
+    4. Assert: privateName is a Private Name.
+    5. Return a value of type Reference whose base value is baseValue, whose referenced name is privateName, whose strict reference flag is true.
+features: [class-fields-public, class-methods-private, class]
+---*/
+
+class C {
+  set #m(v) { this._v = v; };
+  v = (eval("this.#m = 53"), this._v);
+}
+
+let c = new C();
+assert.sameValue(c.v, 53);
diff --git a/JSTests/test262/test/language/statements/class/elements/private-setter-visible-to-direct-eval.js b/JSTests/test262/test/language/statements/class/elements/private-setter-visible-to-direct-eval.js
new file mode 100644
index 0000000..d39734b
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/private-setter-visible-to-direct-eval.js
@@ -0,0 +1,61 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private setter is visible to direct eval code
+esid: sec-privatefieldset
+info: |
+  PrivateFieldSet (P, O, value )
+    1. Assert: P is a Private Name.
+    2. If O is not an object, throw a TypeError exception.
+    3. If P.[[Kind]] is "field",
+      a. Let entry be PrivateFieldFind(P, O).
+      b. If entry is empty, throw a TypeError exception.
+      c. Set entry.[[PrivateFieldValue]] to value.
+      d. Return.
+    4. If P.[[Kind]] is "method", throw a TypeError exception.
+    5. Else,
+      a. Assert: P.[[Kind]] is "accessor".
+      b. If O.[[PrivateFieldBrands]] does not contain P.[[Brand]], throw a TypeError exception.
+      c. If P does not have a [[Set]] field, throw a TypeError exception.
+      d. Let setter be P.[[Set]].
+      e. Perform ? Call(setter, O, value).
+      f. Return.
+
+  ClassElementName : PrivateIdentifier
+    1. Let privateIdentifier be StringValue of PrivateIdentifier.
+    2. Let privateName be NewPrivateName(privateIdentifier).
+    3. Let scope be the running execution context's PrivateEnvironment.
+    4. Let scopeEnvRec be scope's EnvironmentRecord.
+    5. Perform ! scopeEnvRec.InitializeBinding(privateIdentifier, privateName).
+    6. Return privateName.
+
+  MakePrivateReference ( baseValue, privateIdentifier )
+    1. Let env be the running execution context's PrivateEnvironment.
+    2. Let privateNameBinding be ? ResolveBinding(privateIdentifier, env).
+    3. Let privateName be GetValue(privateNameBinding).
+    4. Assert: privateName is a Private Name.
+    5. Return a value of type Reference whose base value is baseValue, whose referenced name is privateName, whose strict reference flag is true.
+features: [class-methods-private, class]
+---*/
+
+class C {
+  set #m(v) { this._v = v; };
+
+  setWithEval(v) {
+    eval("this.#m = v");
+  }
+}
+
+class D {
+  set #m(v) { throw new Test262Error(); };
+}
+
+let c = new C();
+c.setWithEval("Test262");
+assert.sameValue(c._v, "Test262");
+
+let d = new D();
+assert.throws(TypeError, function() {
+  c.setWithEval.call(d);
+}, "invalid access to a private setter");
diff --git a/JSTests/test262/test/language/statements/class/elements/prod-private-getter-before-super-return-in-field-initializer.js b/JSTests/test262/test/language/statements/class/elements/prod-private-getter-before-super-return-in-field-initializer.js
index 509c3e9..d80d775 100644
--- a/JSTests/test262/test/language/statements/class/elements/prod-private-getter-before-super-return-in-field-initializer.js
+++ b/JSTests/test262/test/language/statements/class/elements/prod-private-getter-before-super-return-in-field-initializer.js
@@ -4,7 +4,7 @@
 /*---
 description: Private getters are installed "when super returns" and no earlier (call in field initializer) (field definitions in a class declaration)
 esid: prod-FieldDefinition
-features: [class-methods-private, class]
+features: [class-methods-private, class-fields-public, class]
 flags: [generated]
 info: |
     SuperCall: super Arguments
diff --git a/JSTests/test262/test/language/statements/class/elements/prod-private-method-before-super-return-in-field-initializer.js b/JSTests/test262/test/language/statements/class/elements/prod-private-method-before-super-return-in-field-initializer.js
index 1fbc16b..dd8405b7 100644
--- a/JSTests/test262/test/language/statements/class/elements/prod-private-method-before-super-return-in-field-initializer.js
+++ b/JSTests/test262/test/language/statements/class/elements/prod-private-method-before-super-return-in-field-initializer.js
@@ -4,7 +4,7 @@
 /*---
 description: Private methods are installed "when super returns" and no earlier (call in field initializer) (field definitions in a class declaration)
 esid: prod-FieldDefinition
-features: [class-methods-private, class]
+features: [class-methods-private, class-fields-public, class]
 flags: [generated]
 info: |
     SuperCall: super Arguments
diff --git a/JSTests/test262/test/language/statements/class/elements/prod-private-setter-before-super-return-in-field-initializer.js b/JSTests/test262/test/language/statements/class/elements/prod-private-setter-before-super-return-in-field-initializer.js
index 2243f7e..f5ec8e1 100644
--- a/JSTests/test262/test/language/statements/class/elements/prod-private-setter-before-super-return-in-field-initializer.js
+++ b/JSTests/test262/test/language/statements/class/elements/prod-private-setter-before-super-return-in-field-initializer.js
@@ -4,7 +4,7 @@
 /*---
 description: Private settters are installed "when super returns" and no earlier (call in field initializer) (field definitions in a class declaration)
 esid: prod-FieldDefinition
-features: [class-methods-private, class]
+features: [class-methods-private, class-fields-public, class]
 flags: [generated]
 info: |
     SuperCall: super Arguments
diff --git a/JSTests/test262/test/language/statements/class/elements/super-access-inside-a-private-getter.js b/JSTests/test262/test/language/statements/class/elements/super-access-inside-a-private-getter.js
new file mode 100644
index 0000000..dbb39b1
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/super-access-inside-a-private-getter.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private getter contains proper HomeObject
+esid: sec-method-definitions-runtime-semantics-classelementevaluation
+info: |
+  MethodDefinition : get ClassElementName () { FunctionBody }
+    1. Let key be the result of evaluating ClassElementName.
+    2. ReturnIfAbrupt(key).
+    3. If the function code for this MethodDefinition is strict mode code, let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let formalParameterList be an instance of the production FormalParameters:[empty] .
+    6. Let closure be FunctionCreate(Method, formalParameterList, FunctionBody, scope, strict).
+    7. Perform MakeMethod(closure, homeObject).
+    8. Perform SetFunctionName(closure, key, "get").
+    9. If key is a Private Name,
+      a. If key has a [[Kind]] field,
+        i. Assert: key.[[Kind]] is "accessor".
+        ii. Assert: key.[[Brand]] is homeObject.
+        iii. Assert: key does not have a [[Get]] field.
+        iv. Set key.[[Get]] to closure.
+      b. Otherwise,
+        i. Set key.[[Kind]] to "accessor".
+        ii. Set key.[[Brand]] to homeObject.
+        iii. Set key.[[Get]] to closure.
+    10. Else,
+      a. Let desc be the PropertyDescriptor{[[Get]]: closure, [[Enumerable]]: enumerable, [[Configurable]]: true}.
+      b. Perform ? DefinePropertyOrThrow(homeObject, key, desc).
+features: [class-methods-private, class]
+---*/
+
+class A {
+  method() {
+    return "Test262";
+  }
+}
+
+class C extends A {
+  get #m() {
+    return super.method();
+  }
+
+  access() {
+    return this.#m;
+  }
+}
+
+let c = new C();
+assert.sameValue(c.access(), "Test262");
diff --git a/JSTests/test262/test/language/statements/class/elements/super-access-inside-a-private-method.js b/JSTests/test262/test/language/statements/class/elements/super-access-inside-a-private-method.js
new file mode 100644
index 0000000..f20a1fb
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/super-access-inside-a-private-method.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private method contains proper HomeObject
+esid: sec-method-definitions-runtime-semantics-classelementevaluation
+info: |
+  MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody }
+    1. Let methodDef be DefineMethod of MethodDefinition with argument homeObject.
+    2. ReturnIfAbrupt(methodDef).
+    3. Perform ? DefineOrdinaryMethod(methodDef.[[Key]], homeObject, methodDef.[[Closure]], _enumerable).
+
+  MethodDefinition : PropertyName ( UniqueFormalParameters ) { FunctionBody }
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. Let scope be the running execution context's LexicalEnvironment.
+    4. If functionPrototype is present as a parameter, then
+      a. Let kind be Normal.
+      b. Let prototype be functionPrototype.
+    5. Else,
+      a. Let kind be Method.
+      b. Let prototype be the intrinsic object %FunctionPrototype%.
+    6. Let closure be FunctionCreate(kind, UniqueFormalParameters, FunctionBody, scope, prototype).
+    7. Perform MakeMethod(closure, object).
+    8. Set closure.[[SourceText]] to the source text matched by MethodDefinition.
+    9. Return the Record { [[Key]]: propKey, [[Closure]]: closure }.
+features: [class-methods-private, class]
+---*/
+
+class A {
+  method() {
+    return "Test262";
+  }
+}
+
+class C extends A {
+  #m() {
+    return super.method();
+  }
+
+  access(o) {
+    return this.#m.call(o);
+  }
+}
+
+let c = new C();
+assert.sameValue(c.access(c), "Test262");
+
+let o = {};
+assert.sameValue(c.access(o), "Test262");
diff --git a/JSTests/test262/test/language/statements/class/elements/super-access-inside-a-private-setter.js b/JSTests/test262/test/language/statements/class/elements/super-access-inside-a-private-setter.js
new file mode 100644
index 0000000..ce0d317
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/elements/super-access-inside-a-private-setter.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Private setter contains proper HomeObject
+esid: sec-method-definitions-runtime-semantics-classelementevaluation
+info: |
+  MethodDefinition : set ClassElementName ( PropertySetParameterList ) { FunctionBody }
+    1. Let key be the result of evaluating ClassElementName.
+    2. ReturnIfAbrupt(key).
+    3. If the function code for this MethodDefinition is strict mode code, let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be FunctionCreate(Method, PropertySetParameterList, FunctionBody, scope, strict).
+    6. Perform MakeMethod(closure, homeObject).
+    7. Perform SetFunctionName(closure, key, "set").
+    8. If key is a Private Name,
+      a. If key has a [[Kind]] field,
+        i. Assert: key.[[Kind]] is "accessor".
+        ii. Assert: key.[[Brand]] is homeObject.
+        iii. Assert: key does not have a [[Set]] field.
+        iv. Set key.[[Set]] to closure.
+      b. Otherwise,
+        i. Set key.[[Kind]] to "accessor".
+        ii. Set key.[[Brand]] to homeObject.
+        iii. Set key.[[Set]] to closure.
+    9. Else,
+      a. Let desc be the PropertyDescriptor{[[Set]]: closure, [[Enumerable]]: enumerable, [[Configurable]]: true}.
+      b. Perform ? DefinePropertyOrThrow(homeObject, key, desc).
+features: [class-methods-private, class]
+---*/
+
+class A {
+  method(v) {
+    return v;
+  }
+}
+
+class C extends A {
+  set #m(v) {
+    this._v = super.method(v);
+  }
+
+  access() {
+    return this.#m = "Test262";
+  }
+}
+
+let c = new C();
+c.access();
+assert.sameValue(c._v, "Test262");
diff --git a/JSTests/test262/test/language/statements/class/poisoned-underscore-proto.js b/JSTests/test262/test/language/statements/class/poisoned-underscore-proto.js
new file mode 100644
index 0000000..5cb1e73
--- /dev/null
+++ b/JSTests/test262/test/language/statements/class/poisoned-underscore-proto.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: prod-ClassDeclaration
+description: >
+  ClassDeclaration should directly set [[Prototype]] internal slot.
+info: |
+  ClassDefinitionEvaluation
+
+  [...]
+  7. Let proto be ObjectCreate(protoParent).
+
+  ObjectCreate ( proto [ , internalSlotsList ] )
+
+  [...]
+  4. Set obj.[[Prototype]] to proto.
+features: [class]
+---*/
+
+Object.defineProperty(Object.prototype, '__proto__', {
+  set: function() {
+    throw new Test262Error('should not be called');
+  },
+});
+
+class A extends Array {}
+
+assert.sameValue(new A(1).length, 1);
diff --git a/JSTests/test262/test/language/statements/function/13.2-30-s.js b/JSTests/test262/test/language/statements/function/13.2-30-s.js
index 778e2e7..a1e55d6 100644
--- a/JSTests/test262/test/language/statements/function/13.2-30-s.js
+++ b/JSTests/test262/test/language/statements/function/13.2-30-s.js
@@ -1,7 +1,7 @@
 // Copyright (C) 2015 Caitlin Potter. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 
-/*--- 
+/*---
  description: >
     Functions created using Function.prototype.bind() do not have own
     properties "caller" or "arguments", but inherit them from
diff --git a/JSTests/test262/test262-Revision.txt b/JSTests/test262/test262-Revision.txt
index 5c4eda9..e418df1 100644
--- a/JSTests/test262/test262-Revision.txt
+++ b/JSTests/test262/test262-Revision.txt
@@ -1,2 +1,2 @@
 test262 remote url: git@github.com:tc39/test262.git
-test262 revision: 395401cba0ce1f1d5a3866923179aca945e1e43a
+test262 revision: 26a2268436f28f64c4539d9aab9ebd0f0b7c99c5