summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/statements/generators/dstr
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/language/statements/generators/dstr')
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-close.js72
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-get-err-array-prototype.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-get-err.js59
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-no-close.js72
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-name-iter-val.js71
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elem-init.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elem-iter.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elision-init.js70
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elision-iter.js67
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-empty-init.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-empty-iter.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-rest-init.js67
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-rest-iter.js70
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-val-null.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-exhausted.js62
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-arrow.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-class.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-cover.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-fn.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-gen.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-hole.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-skipped.js67
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-throws.js57
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-undef.js61
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-unresolvable.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-complete.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-done.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-step-err.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val-array-prototype.js81
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val-err.js77
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val.js71
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-id-init.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-id.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-prop-id-init.js73
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-prop-id.js73
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-val-null.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-val-undef.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision-exhausted.js68
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision-step-err.js73
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision.js77
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-empty.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-elem.js84
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-elision.js90
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-empty.js73
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-rest.js69
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-direct.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-elision-next-err.js59
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-elision.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-exhausted.js61
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-iter-step-err.js70
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-iter-val-err.js72
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id.js62
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-ary.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-id.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-obj.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-ary.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-id.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-obj.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-obj-id.js62
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-obj-prop-id.js69
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/browser.js0
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-close.js72
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-get-err-array-prototype.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-get-err.js59
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-no-close.js72
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-name-iter-val.js71
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elem-init.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elem-iter.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elision-init.js70
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elision-iter.js67
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-empty-init.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-empty-iter.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-rest-init.js67
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-rest-iter.js70
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-val-null.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-exhausted.js62
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-hole.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-skipped.js67
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-throws.js57
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-undef.js61
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-complete.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-done.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-step-err.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js81
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val-err.js77
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val.js71
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-id-init.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-id.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js73
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-prop-id.js73
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-val-null.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-val-undef.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision-exhausted.js68
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision-step-err.js73
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision.js77
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-empty.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-elem.js84
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-elision.js90
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-empty.js73
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-rest.js69
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-direct.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-elision-next-err.js59
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-elision.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-exhausted.js61
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-iter-step-err.js70
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-iter-val-err.js72
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id.js62
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-ary.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-id.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-obj.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-ary.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-id.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-obj.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-obj-id.js62
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-obj-prop-id.js69
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-init-null.js53
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-init-undefined.js53
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-empty.js61
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-get-value-err.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js62
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-class.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-fn.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-gen.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-skipped.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-throws.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-unresolvable.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-trailing-comma.js56
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-list-err.js61
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-init.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js56
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-value-null.js55
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-eval-err.js57
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-get-value-err.js62
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-skipped.js78
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-throws.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init.js59
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-trailing-comma.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id.js59
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-init.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-value-null.js55
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-value-undef.js55
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-getter.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-val-obj.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-init-null.js53
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-init-undefined.js53
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-empty.js61
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-get-value-err.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-arrow.js62
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-class.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-cover.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-fn.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-gen.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-skipped.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-throws.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-unresolvable.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-trailing-comma.js56
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-list-err.js61
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-init.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-trailing-comma.js56
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-value-null.js55
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-eval-err.js57
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-get-value-err.js62
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-skipped.js78
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-throws.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-unresolvable.js64
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init.js59
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-trailing-comma.js60
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id.js59
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-init.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-value-null.js55
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-value-undef.js55
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj.js63
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-getter.js58
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-skip-non-enumerable.js66
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-val-obj.js65
-rw-r--r--js/src/tests/test262/language/statements/generators/dstr/shell.js0
188 files changed, 11980 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-close.js b/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-close.js
new file mode 100644
index 0000000000..070211dc51
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-close.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-init-iter-close.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Iterator is closed when not exhausted by pattern evaluation (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ArrayBindingPattern
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, return ? IteratorClose(iterator,
+ result).
+ [...]
+
+---*/
+var doneCallCount = 0;
+var iter = {};
+iter[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ return { value: null, done: false };
+ },
+ return: function() {
+ doneCallCount += 1;
+ return {};
+ }
+ };
+};
+
+var callCount = 0;
+function* f([x]) {
+ assert.sameValue(doneCallCount, 1);
+ callCount = callCount + 1;
+};
+f(iter).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-get-err-array-prototype.js b/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-get-err-array-prototype.js
new file mode 100644
index 0000000000..061aacfcac
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-get-err-array-prototype.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-init-iter-get-err-array-prototype.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Abrupt completion returned by GetIterator (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: BindingInitialization
+
+ BindingPattern : ArrayBindingPattern
+
+ 1. Let iteratorRecord be ? GetIterator(value).
+
+ GetIterator ( obj [ , hint [ , method ] ] )
+
+ [...]
+ 4. Let iterator be ? Call(method, obj).
+
+ Call ( F, V [ , argumentsList ] )
+
+ [...]
+ 2. If IsCallable(F) is false, throw a TypeError exception.
+
+---*/
+delete Array.prototype[Symbol.iterator];
+
+function* f([x, y, z]) {}
+
+assert.throws(TypeError, function() {
+ f([1, 2, 3]);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-get-err.js b/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-get-err.js
new file mode 100644
index 0000000000..cefbe3af8e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-get-err.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-init-iter-get-err.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Abrupt completion returned by GetIterator (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ArrayBindingPattern
+
+ 1. Let iterator be GetIterator(value).
+ 2. ReturnIfAbrupt(iterator).
+
+---*/
+var iter = {};
+iter[Symbol.iterator] = function() {
+ throw new Test262Error();
+};
+
+function* f([x]) {}
+
+assert.throws(Test262Error, function() {
+ f(iter);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-no-close.js b/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-no-close.js
new file mode 100644
index 0000000000..8ec447cf4f
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-init-iter-no-close.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-init-iter-no-close.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Iterator is not closed when exhausted by pattern evaluation (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ArrayBindingPattern
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, return ? IteratorClose(iterator,
+ result).
+ [...]
+
+---*/
+var doneCallCount = 0;
+var iter = {};
+iter[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ return { value: null, done: true };
+ },
+ return: function() {
+ doneCallCount += 1;
+ return {};
+ }
+ };
+};
+
+var callCount = 0;
+function* f([x]) {
+ assert.sameValue(doneCallCount, 0);
+ callCount = callCount + 1;
+};
+f(iter).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-name-iter-val.js b/js/src/tests/test262/language/statements/generators/dstr/ary-name-iter-val.js
new file mode 100644
index 0000000000..ee87f9a426
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-name-iter-val.js
@@ -0,0 +1,71 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-name-iter-val.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding with normal value iteration (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ e. Else,
+ [...]
+ i. Let v be IteratorValue(next).
+ ii. If v is an abrupt completion, set
+ iteratorRecord.[[done]] to true.
+ iii. ReturnIfAbrupt(v).
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x, y, z]) {
+ assert.sameValue(x, 1);
+ assert.sameValue(y, 2);
+ assert.sameValue(z, 3);
+ callCount = callCount + 1;
+};
+f([1, 2, 3]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elem-init.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elem-init.js
new file mode 100644
index 0000000000..edc36af3c6
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elem-init.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-elem-init.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with array binding pattern and initializer is used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([[x, y, z] = [4, 5, 6]]) {
+ assert.sameValue(x, 4);
+ assert.sameValue(y, 5);
+ assert.sameValue(z, 6);
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elem-iter.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elem-iter.js
new file mode 100644
index 0000000000..2c41271fba
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elem-iter.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-elem-iter.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with array binding pattern and initializer is not used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ [...]
+ e. Else,
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([[x, y, z] = [4, 5, 6]]) {
+ assert.sameValue(x, 7);
+ assert.sameValue(y, 8);
+ assert.sameValue(z, 9);
+ callCount = callCount + 1;
+};
+f([[7, 8, 9]]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elision-init.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elision-init.js
new file mode 100644
index 0000000000..7e3c622dcd
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elision-init.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-elision-init.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with array binding pattern and initializer is used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+---*/
+var first = 0;
+var second = 0;
+function* g() {
+ first += 1;
+ yield;
+ second += 1;
+};
+
+var callCount = 0;
+function* f([[,] = g()]) {
+ assert.sameValue(first, 1);
+ assert.sameValue(second, 0);
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elision-iter.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elision-iter.js
new file mode 100644
index 0000000000..d028c485f3
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-elision-iter.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-elision-iter.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with array binding pattern and initializer is not used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ [...]
+ e. Else,
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+---*/
+var callCount = 0;
+function* g() {
+ callCount += 1;
+};
+
+var callCount = 0;
+function* f([[,] = g()]) {
+ assert.sameValue(callCount, 0);
+ callCount = callCount + 1;
+};
+f([[]]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-empty-init.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-empty-init.js
new file mode 100644
index 0000000000..5eb48c1c86
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-empty-init.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-empty-init.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with array binding pattern and initializer is used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+---*/
+var initCount = 0;
+var iterCount = 0;
+var iter = function*() { iterCount += 1; }();
+
+var callCount = 0;
+function* f([[] = function() { initCount += 1; return iter; }()]) {
+ assert.sameValue(initCount, 1);
+ assert.sameValue(iterCount, 0);
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-empty-iter.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-empty-iter.js
new file mode 100644
index 0000000000..8ffc811272
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-empty-iter.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-empty-iter.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with array binding pattern and initializer is not used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ [...]
+ e. Else,
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+var initCount = 0;
+
+var callCount = 0;
+function* f([[] = function() { initCount += 1; }()]) {
+ assert.sameValue(initCount, 0);
+ callCount = callCount + 1;
+};
+f([[23]]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-rest-init.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-rest-init.js
new file mode 100644
index 0000000000..a8275eeadc
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-rest-init.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-rest-init.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with array binding pattern and initializer is used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+var values = [2, 1, 3];
+
+var callCount = 0;
+function* f([[...x] = values]) {
+ assert(Array.isArray(x));
+ assert.sameValue(x[0], 2);
+ assert.sameValue(x[1], 1);
+ assert.sameValue(x[2], 3);
+ assert.sameValue(x.length, 3);
+ assert.notSameValue(x, values);
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-rest-iter.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-rest-iter.js
new file mode 100644
index 0000000000..d0ec9ba538
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-rest-iter.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-rest-iter.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with array binding pattern and initializer is not used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ [...]
+ e. Else,
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+var values = [2, 1, 3];
+var initCount = 0;
+
+var callCount = 0;
+function* f([[...x] = function() { initCount += 1; }()]) {
+ assert(Array.isArray(x));
+ assert.sameValue(x[0], 2);
+ assert.sameValue(x[1], 1);
+ assert.sameValue(x[2], 3);
+ assert.sameValue(x.length, 3);
+ assert.notSameValue(x, values);
+ assert.sameValue(initCount, 0);
+ callCount = callCount + 1;
+};
+f([values]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-val-null.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-val-null.js
new file mode 100644
index 0000000000..488a9633da
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-ary-val-null.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-val-null.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Nested array destructuring with a null value (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ [...]
+ e. Else
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ArrayBindingPattern
+
+ 1. Let iterator be GetIterator(value).
+ 2. ReturnIfAbrupt(iterator).
+---*/
+
+function* f([[x]]) {}
+
+assert.throws(TypeError, function() {
+ f([null]);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-exhausted.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-exhausted.js
new file mode 100644
index 0000000000..a6df78cd24
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-exhausted.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-exhausted.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Destructuring initializer with an exhausted iterator (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x = 23]) {
+ assert.sameValue(x, 23);
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-arrow.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-arrow.js
new file mode 100644
index 0000000000..367c71d59a
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-arrow.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-fn-name-arrow.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding does assign name to arrow functions (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([arrow = () => {}]) {
+ assert.sameValue(arrow.name, 'arrow');
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-class.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-class.js
new file mode 100644
index 0000000000..6da7e8c78f
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-class.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-fn-name-class.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding assigns `name` to "anonymous" classes (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
+ assert.sameValue(cls.name, 'cls');
+ assert.notSameValue(xCls.name, 'xCls');
+ assert.notSameValue(xCls2.name, 'xCls2');
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-cover.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-cover.js
new file mode 100644
index 0000000000..ed57c66ba5
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-cover.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-fn-name-cover.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding does assign name to "anonymous" functions "through" cover grammar (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([cover = (function () {}), xCover = (0, function() {})]) {
+ assert.sameValue(cover.name, 'cover');
+ assert.notSameValue(xCover.name, 'xCover');
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-fn.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-fn.js
new file mode 100644
index 0000000000..b736b59dec
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-fn.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-fn-name-fn.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding assigns name to "anonymous" functions (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([fn = function () {}, xFn = function x() {}]) {
+ assert.sameValue(fn.name, 'fn');
+ assert.notSameValue(xFn.name, 'xFn');
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-gen.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-gen.js
new file mode 100644
index 0000000000..cba8655724
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-fn-name-gen.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-fn-name-gen.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding assigns name to "anonymous" generator functions (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+
+---*/
+
+var callCount = 0;
+function* f([gen = function* () {}, xGen = function* x() {}]) {
+ assert.sameValue(gen.name, 'gen');
+ assert.notSameValue(xGen.name, 'xGen');
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-hole.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-hole.js
new file mode 100644
index 0000000000..1983b26ced
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-hole.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-hole.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Destructuring initializer with a "hole" (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ SingleNameBinding : BindingIdentifier Initializeropt
+ [...] 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v). 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x = 23]) {
+ assert.sameValue(x, 23);
+ // another statement
+ callCount = callCount + 1;
+};
+f([,]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-skipped.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-skipped.js
new file mode 100644
index 0000000000..66604d9783
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-skipped.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-skipped.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Destructuring initializer is not evaluated when value is not `undefined` (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+var initCount = 0;
+function counter() {
+ initCount += 1;
+}
+
+var callCount = 0;
+function* f([w = counter(), x = counter(), y = counter(), z = counter()]) {
+ assert.sameValue(w, null);
+ assert.sameValue(x, 0);
+ assert.sameValue(y, false);
+ assert.sameValue(z, '');
+ assert.sameValue(initCount, 0);
+ callCount = callCount + 1;
+};
+f([null, 0, false, '']).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-throws.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-throws.js
new file mode 100644
index 0000000000..c818b5049e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-throws.js
@@ -0,0 +1,57 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-throws.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Destructuring initializer returns an abrupt completion (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+---*/
+
+function* f([x = (function() { throw new Test262Error(); })()]) {}
+
+assert.throws(Test262Error, function() {
+ f([undefined]);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-undef.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-undef.js
new file mode 100644
index 0000000000..78a9c350a5
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-undef.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-undef.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Destructuring initializer with an undefined value (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x = 23]) {
+ assert.sameValue(x, 23);
+ callCount = callCount + 1;
+};
+f([undefined]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-unresolvable.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-unresolvable.js
new file mode 100644
index 0000000000..dde818edf6
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-init-unresolvable.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-unresolvable.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Destructuring initializer is an unresolvable reference (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+
+ 6.2.3.1 GetValue (V)
+
+ 1. ReturnIfAbrupt(V).
+ 2. If Type(V) is not Reference, return V.
+ 3. Let base be GetBase(V).
+ 4. If IsUnresolvableReference(V), throw a ReferenceError exception.
+---*/
+
+function* f([ x = unresolvableReference ]) {}
+
+assert.throws(ReferenceError, function() {
+ f([]);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-complete.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-complete.js
new file mode 100644
index 0000000000..523dd78256
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-complete.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-complete.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding when value iteration completes (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ e. Else,
+ [...]
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x]) {
+ assert.sameValue(x, undefined);
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-done.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-done.js
new file mode 100644
index 0000000000..67d5bc220b
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-done.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-done.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding when value iteration was completed previously (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ [...]
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([_, x]) {
+ assert.sameValue(x, undefined);
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-step-err.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-step-err.js
new file mode 100644
index 0000000000..e88649739f
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-step-err.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-step-err.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Error forwarding when IteratorStep returns an abrupt completion (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+
+---*/
+var g = {};
+g[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ throw new Test262Error();
+ }
+ };
+};
+
+function* f([x]) {}
+
+assert.throws(Test262Error, function() {
+ f(g);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val-array-prototype.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val-array-prototype.js
new file mode 100644
index 0000000000..a085d0eab8
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val-array-prototype.js
@@ -0,0 +1,81 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-val-array-prototype.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Array destructuring uses overriden Array.prototype[Symbol.iterator] (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializer_opt
+
+ 1. Let bindingId be StringValue of BindingIdentifier.
+ 2. Let lhs be ? ResolveBinding(bindingId, environment).
+ 3. If iteratorRecord.[[Done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord).
+ b. If next is an abrupt completion, set iteratorRecord.[[Done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[Done]] to true.
+ e. Else,
+ i. Let v be IteratorValue(next).
+ ii. If v is an abrupt completion, set iteratorRecord.[[Done]] to true.
+ iii. ReturnIfAbrupt(v).
+ [...]
+ 7. Return InitializeReferencedBinding(lhs, v).
+
+---*/
+Array.prototype[Symbol.iterator] = function* () {
+ if (this.length > 0) {
+ yield this[0];
+ }
+ if (this.length > 1) {
+ yield this[1];
+ }
+ if (this.length > 2) {
+ yield 42;
+ }
+};
+
+var callCount = 0;
+function* f([x, y, z]) {
+ assert.sameValue(x, 1);
+ assert.sameValue(y, 2);
+ assert.sameValue(z, 42);
+ callCount = callCount + 1;
+};
+f([1, 2, 3]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val-err.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val-err.js
new file mode 100644
index 0000000000..2ef06dabcd
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val-err.js
@@ -0,0 +1,77 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-val-err.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Error forwarding when IteratorValue returns an abrupt completion (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ e. Else,
+ i. Let v be IteratorValue(next).
+ ii. If v is an abrupt completion, set iteratorRecord.[[done]] to
+ true.
+ iii. ReturnIfAbrupt(v).
+
+---*/
+var poisonedValue = Object.defineProperty({}, 'value', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+var g = {};
+g[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ return poisonedValue;
+ }
+ };
+};
+
+function* f([x]) {}
+
+assert.throws(Test262Error, function() {
+ f(g);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val.js
new file mode 100644
index 0000000000..1a1c0f958b
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-id-iter-val.js
@@ -0,0 +1,71 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-val.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding when value iteration was completed previously (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ e. Else,
+ [...]
+ i. Let v be IteratorValue(next).
+ ii. If v is an abrupt completion, set
+ iteratorRecord.[[done]] to true.
+ iii. ReturnIfAbrupt(v).
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x, y, z]) {
+ assert.sameValue(x, 1);
+ assert.sameValue(y, 2);
+ assert.sameValue(z, 3);
+ callCount = callCount + 1;
+};
+f([1, 2, 3]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-id-init.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-id-init.js
new file mode 100644
index 0000000000..46b616eb41
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-id-init.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-id-init.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with object binding pattern and initializer is used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([{ x, y, z } = { x: 44, y: 55, z: 66 }]) {
+ assert.sameValue(x, 44);
+ assert.sameValue(y, 55);
+ assert.sameValue(z, 66);
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-id.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-id.js
new file mode 100644
index 0000000000..16b57f3c88
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-id.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-id.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with object binding pattern and initializer is not used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([{ x, y, z } = { x: 44, y: 55, z: 66 }]) {
+ assert.sameValue(x, 11);
+ assert.sameValue(y, 22);
+ assert.sameValue(z, 33);
+ callCount = callCount + 1;
+};
+f([{ x: 11, y: 22, z: 33 }]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-prop-id-init.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-prop-id-init.js
new file mode 100644
index 0000000000..3f0e79c08b
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-prop-id-init.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-prop-id-init.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with object binding pattern and initializer is used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([{ u: v, w: x, y: z } = { u: 444, w: 555, y: 666 }]) {
+ assert.sameValue(v, 444);
+ assert.sameValue(x, 555);
+ assert.sameValue(z, 666);
+
+ assert.throws(ReferenceError, function() {
+ u;
+ });
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ assert.throws(ReferenceError, function() {
+ y;
+ });
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-prop-id.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-prop-id.js
new file mode 100644
index 0000000000..40aceb907c
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-prop-id.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-prop-id.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: BindingElement with object binding pattern and initializer is not used (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([{ u: v, w: x, y: z } = { u: 444, w: 555, y: 666 }]) {
+ assert.sameValue(v, 777);
+ assert.sameValue(x, 888);
+ assert.sameValue(z, 999);
+
+ assert.throws(ReferenceError, function() {
+ u;
+ });
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ assert.throws(ReferenceError, function() {
+ y;
+ });
+ callCount = callCount + 1;
+};
+f([{ u: 777, w: 888, y: 999 }]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-val-null.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-val-null.js
new file mode 100644
index 0000000000..01eac68ef1
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-val-null.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-val-null.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Nested object destructuring with a null value (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ [...]
+ e. Else
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ObjectBindingPattern
+
+ 1. Let valid be RequireObjectCoercible(value).
+ 2. ReturnIfAbrupt(valid).
+---*/
+
+function* f([{ x }]) {}
+
+assert.throws(TypeError, function() {
+ f([null]);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-val-undef.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-val-undef.js
new file mode 100644
index 0000000000..2ff371b420
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elem-obj-val-undef.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-val-undef.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Nested object destructuring with a value of `undefined` (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ [...]
+ e. Else
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ObjectBindingPattern
+
+ 1. Let valid be RequireObjectCoercible(value).
+ 2. ReturnIfAbrupt(valid).
+---*/
+
+function* f([{ x }]) {}
+
+assert.throws(TypeError, function() {
+ f([]);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision-exhausted.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision-exhausted.js
new file mode 100644
index 0000000000..cb1baf966c
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision-exhausted.js
@@ -0,0 +1,68 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elision-exhausted.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Elision accepts exhausted iterator (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ Elision ]
+
+ 1. Return the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with iteratorRecord
+ as the argument.
+
+ 12.14.5.3 Runtime Semantics: IteratorDestructuringAssignmentEvaluation
+
+ Elision : ,
+
+ 1. If iteratorRecord.[[done]] is false, then
+ [...]
+ 2. Return NormalCompletion(empty).
+
+---*/
+var iter = function*() {}();
+iter.next();
+
+var callCount = 0;
+function* f([,]) {
+
+ callCount = callCount + 1;
+};
+f(iter).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision-step-err.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision-step-err.js
new file mode 100644
index 0000000000..46233e56b9
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision-step-err.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elision-step-err.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Elision advances iterator and forwards abrupt completions (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ Elision ]
+
+ 1. Return the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with iteratorRecord
+ as the argument.
+
+ 12.14.5.3 Runtime Semantics: IteratorDestructuringAssignmentEvaluation
+
+ Elision : ,
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+
+---*/
+var following = 0;
+var iter =function* () {
+ throw new Test262Error();
+ following += 1;
+}();
+
+function* f([,]) {}
+
+assert.throws(Test262Error, function() {
+ f(iter);
+});
+
+iter.next();
+assert.sameValue(following, 0, 'Iterator was properly closed.');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision.js
new file mode 100644
index 0000000000..904635c9ae
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-elision.js
@@ -0,0 +1,77 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elision.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Elision advances iterator (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ Elision ]
+
+ 1. Return the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with iteratorRecord
+ as the argument.
+
+ 12.14.5.3 Runtime Semantics: IteratorDestructuringAssignmentEvaluation
+
+ Elision : ,
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ 2. Return NormalCompletion(empty).
+
+---*/
+var first = 0;
+var second = 0;
+function* g() {
+ first += 1;
+ yield;
+ second += 1;
+};
+
+var callCount = 0;
+function* f([,]) {
+ assert.sameValue(first, 1);
+ assert.sameValue(second, 0);
+ callCount = callCount + 1;
+};
+f(g()).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-empty.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-empty.js
new file mode 100644
index 0000000000..f1e9a584c6
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-empty.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-empty.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: No iteration occurs for an "empty" array binding pattern (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ ]
+
+ 1. Return NormalCompletion(empty).
+
+---*/
+var iterations = 0;
+var iter = function*() {
+ iterations += 1;
+}();
+
+var callCount = 0;
+function* f([]) {
+ assert.sameValue(iterations, 0);
+ callCount = callCount + 1;
+};
+f(iter).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-elem.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-elem.js
new file mode 100644
index 0000000000..d089e10e00
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-elem.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-ary-elem.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element containing an array BindingElementList pattern (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ e. Else,
+ [...]
+ i. Let v be IteratorValue(next).
+ ii. If v is an abrupt completion, set
+ iteratorRecord.[[done]] to true.
+ iii. ReturnIfAbrupt(v).
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([...[x, y, z]]) {
+ assert.sameValue(x, 3);
+ assert.sameValue(y, 4);
+ assert.sameValue(z, 5);
+ callCount = callCount + 1;
+};
+f([3, 4, 5]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-elision.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-elision.js
new file mode 100644
index 0000000000..bd98fc0d59
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-elision.js
@@ -0,0 +1,90 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-ary-elision.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element containing an elision (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ Elision ]
+
+ 1. Return the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with iteratorRecord
+ as the argument.
+
+ 12.14.5.3 Runtime Semantics: IteratorDestructuringAssignmentEvaluation
+
+ Elision : ,
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ 2. Return NormalCompletion(empty).
+
+---*/
+var first = 0;
+var second = 0;
+function* g() {
+ first += 1;
+ yield;
+ second += 1;
+};
+
+var callCount = 0;
+function* f([...[,]]) {
+ assert.sameValue(first, 1);
+ assert.sameValue(second, 1);
+ callCount = callCount + 1;
+};
+f(g()).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-empty.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-empty.js
new file mode 100644
index 0000000000..0624a5ecd3
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-empty.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-ary-empty.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element containing an "empty" array pattern (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ ]
+
+ 1. Return NormalCompletion(empty).
+
+---*/
+var iterations = 0;
+var iter = function*() {
+ iterations += 1;
+}();
+
+var callCount = 0;
+function* f([...[]]) {
+ assert.sameValue(iterations, 1);
+ callCount = callCount + 1;
+};
+f(iter).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-rest.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-rest.js
new file mode 100644
index 0000000000..e70f0f4810
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-ary-rest.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-ary-rest.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element containing a rest element (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+---*/
+var values = [1, 2, 3];
+
+var callCount = 0;
+function* f([...[...x]]) {
+ assert(Array.isArray(x));
+ assert.sameValue(x.length, 3);
+ assert.sameValue(x[0], 1);
+ assert.sameValue(x[1], 2);
+ assert.sameValue(x[2], 3);
+ assert.notSameValue(x, values);
+
+ callCount = callCount + 1;
+};
+f(values).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-direct.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-direct.js
new file mode 100644
index 0000000000..a757ac9395
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-direct.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-direct.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Lone rest element (direct binding) (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+includes: [compareArray.js]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingIdentifier
+
+ [...]
+ 2. Let A be ! ArrayCreate(0).
+ 3. Let n be 0.
+ 4. Repeat,
+ [...]
+ f. Perform ! CreateDataPropertyOrThrow(A, ! ToString(n), nextValue).
+ g. Set n to n + 1.
+
+---*/
+
+var callCount = 0;
+function* f([...x]) {
+ assert(Array.isArray(x));
+ assert.compareArray(x, [1]);
+ callCount = callCount + 1;
+};
+f([1]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-elision-next-err.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-elision-next-err.js
new file mode 100644
index 0000000000..b651e1d9ad
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-elision-next-err.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-elision-next-err.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Rest element following elision elements (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ ArrayBindingPattern : [ Elisionopt BindingRestElement ]
+ 1. If Elision is present, then
+ a. Let status be the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with
+ iteratorRecord as the argument.
+ b. ReturnIfAbrupt(status).
+ 2. Return the result of performing IteratorBindingInitialization for
+ BindingRestElement with iteratorRecord and environment as arguments.
+
+---*/
+var iter = (function*() { throw new Test262Error(); })();
+
+function* f([, ...x]) {}
+
+assert.throws(Test262Error, function() {
+ f(iter);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-elision.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-elision.js
new file mode 100644
index 0000000000..02b4a277dc
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-elision.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-elision.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element following elision elements (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ ArrayBindingPattern : [ Elisionopt BindingRestElement ]
+ 1. If Elision is present, then
+ a. Let status be the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with
+ iteratorRecord as the argument.
+ b. ReturnIfAbrupt(status).
+ 2. Return the result of performing IteratorBindingInitialization for
+ BindingRestElement with iteratorRecord and environment as arguments.
+---*/
+var values = [1, 2, 3, 4, 5];
+
+var callCount = 0;
+function* f([ , , ...x]) {
+ assert(Array.isArray(x));
+ assert.sameValue(x.length, 3);
+ assert.sameValue(x[0], 3);
+ assert.sameValue(x[1], 4);
+ assert.sameValue(x[2], 5);
+ assert.notSameValue(x, values);
+ callCount = callCount + 1;
+};
+f(values).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-exhausted.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-exhausted.js
new file mode 100644
index 0000000000..51bcf5564f
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-exhausted.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-exhausted.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: RestElement applied to an exhausted iterator (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ BindingRestElement : ... BindingIdentifier
+ 1. Let lhs be ResolveBinding(StringValue of BindingIdentifier,
+ environment).
+ 2. ReturnIfAbrupt(lhs). 3. Let A be ArrayCreate(0). 4. Let n=0. 5. Repeat,
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. If environment is undefined, return PutValue(lhs, A).
+ ii. Return InitializeReferencedBinding(lhs, A).
+
+---*/
+
+var callCount = 0;
+function* f([, , ...x]) {
+ assert(Array.isArray(x));
+ assert.sameValue(x.length, 0);
+ callCount = callCount + 1;
+};
+f([1, 2]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-iter-step-err.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-iter-step-err.js
new file mode 100644
index 0000000000..0e7649b5bb
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-iter-step-err.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-iter-step-err.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Error forwarding when IteratorStep returns an abrupt completion (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ BindingRestElement : ... BindingIdentifier
+ 1. Let lhs be ResolveBinding(StringValue of BindingIdentifier,
+ environment).
+ 2. ReturnIfAbrupt(lhs). 3. Let A be ArrayCreate(0). 4. Let n=0. 5. Repeat,
+ a. If iteratorRecord.[[done]] is false,
+ i. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ ii. If next is an abrupt completion, set iteratorRecord.[[done]] to
+ true.
+ iii. ReturnIfAbrupt(next).
+
+---*/
+var first = 0;
+var second = 0;
+var iter = function*() {
+ first += 1;
+ throw new Test262Error();
+ second += 1;
+}();
+
+function* f([...x]) {}
+
+assert.throws(Test262Error, function() {
+ f(iter);
+});
+
+iter.next();
+assert.sameValue(first, 1);
+assert.sameValue(second, 0, 'Iterator is closed following abrupt completion.');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-iter-val-err.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-iter-val-err.js
new file mode 100644
index 0000000000..c9a30f0761
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id-iter-val-err.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-iter-val-err.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Error forwarding when IteratorValue returns an abrupt completion (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ BindingRestElement : ... BindingIdentifier
+ 1. Let lhs be ResolveBinding(StringValue of BindingIdentifier,
+ environment).
+ 2. ReturnIfAbrupt(lhs). 3. Let A be ArrayCreate(0). 4. Let n=0. 5. Repeat,
+ [...]
+ c. Let nextValue be IteratorValue(next).
+ d. If nextValue is an abrupt completion, set iteratorRecord.[[done]] to
+ true.
+ e. ReturnIfAbrupt(nextValue).
+
+---*/
+var poisonedValue = Object.defineProperty({}, 'value', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+var iter = {};
+iter[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ return poisonedValue;
+ }
+ };
+};
+
+function* f([...x]) {}
+
+assert.throws(Test262Error, function() {
+ f(iter);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id.js
new file mode 100644
index 0000000000..52cf032774
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-id.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Lone rest element (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ BindingRestElement : ... BindingIdentifier
+ [...] 3. Let A be ArrayCreate(0). [...] 5. Repeat
+ [...]
+ f. Let status be CreateDataProperty(A, ToString (n), nextValue).
+ [...]
+---*/
+var values = [1, 2, 3];
+
+var callCount = 0;
+function* f([...x]) {
+ assert(Array.isArray(x));
+ assert.sameValue(x.length, 3);
+ assert.sameValue(x[0], 1);
+ assert.sameValue(x[1], 2);
+ assert.sameValue(x[2], 3);
+ assert.notSameValue(x, values);
+ callCount = callCount + 1;
+};
+f(values).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-ary.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-ary.js
new file mode 100644
index 0000000000..709ad6689f
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-ary.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-init-ary.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element (nested array pattern) does not support initializer (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...[ x ] = []]) {
+
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-id.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-id.js
new file mode 100644
index 0000000000..1c24f4886d
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-id.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-init-id.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element (identifier) does not support initializer (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...x = []]) {
+
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-obj.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-obj.js
new file mode 100644
index 0000000000..f707db33de
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-init-obj.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-init-obj.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element (nested object pattern) does not support initializer (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...{ x } = []]) {
+
+ callCount = callCount + 1;
+};
+f([]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-ary.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-ary.js
new file mode 100644
index 0000000000..0be6d7726a
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-ary.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-not-final-ary.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element (array binding pattern) may not be followed by any element (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...[x], y]) {
+
+ callCount = callCount + 1;
+};
+f([1, 2, 3]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-id.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-id.js
new file mode 100644
index 0000000000..1d928d1e08
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-id.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-not-final-id.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element (identifier) may not be followed by any element (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...x, y]) {
+
+ callCount = callCount + 1;
+};
+f([1, 2, 3]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-obj.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-obj.js
new file mode 100644
index 0000000000..cb834ac504
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-not-final-obj.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-not-final-obj.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element (object binding pattern) may not be followed by any element (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...{ x }, y]) {
+
+ callCount = callCount + 1;
+};
+f([1, 2, 3]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-obj-id.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-obj-id.js
new file mode 100644
index 0000000000..f9888f1e95
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-obj-id.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-obj-id.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element containing an object binding pattern (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+---*/
+
+var callCount = 0;
+function* f([...{ length }]) {
+ assert.sameValue(length, 3);
+ callCount = callCount + 1;
+};
+f([1, 2, 3]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-obj-prop-id.js b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-obj-prop-id.js
new file mode 100644
index 0000000000..f453270fe3
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/ary-ptrn-rest-obj-prop-id.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-obj-prop-id.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest element containing an object binding pattern (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+---*/
+let length = "outer";
+
+var callCount = 0;
+function* f([...{ 0: v, 1: w, 2: x, 3: y, length: z }]) {
+ assert.sameValue(v, 7);
+ assert.sameValue(w, 8);
+ assert.sameValue(x, 9);
+ assert.sameValue(y, undefined);
+ assert.sameValue(z, 3);
+
+ assert.sameValue(length, "outer", "the length prop is not set as a binding name");
+ callCount = callCount + 1;
+};
+f([7, 8, 9]).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/browser.js b/js/src/tests/test262/language/statements/generators/dstr/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/browser.js
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-close.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-close.js
new file mode 100644
index 0000000000..7fd04976ef
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-close.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-init-iter-close.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Iterator is closed when not exhausted by pattern evaluation (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ArrayBindingPattern
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, return ? IteratorClose(iterator,
+ result).
+ [...]
+
+---*/
+var doneCallCount = 0;
+var iter = {};
+iter[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ return { value: null, done: false };
+ },
+ return: function() {
+ doneCallCount += 1;
+ return {};
+ }
+ };
+};
+
+var callCount = 0;
+function* f([x] = iter) {
+ assert.sameValue(doneCallCount, 1);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-get-err-array-prototype.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-get-err-array-prototype.js
new file mode 100644
index 0000000000..0a3c267e4c
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-get-err-array-prototype.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-init-iter-get-err-array-prototype.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Abrupt completion returned by GetIterator (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: BindingInitialization
+
+ BindingPattern : ArrayBindingPattern
+
+ 1. Let iteratorRecord be ? GetIterator(value).
+
+ GetIterator ( obj [ , hint [ , method ] ] )
+
+ [...]
+ 4. Let iterator be ? Call(method, obj).
+
+ Call ( F, V [ , argumentsList ] )
+
+ [...]
+ 2. If IsCallable(F) is false, throw a TypeError exception.
+
+---*/
+delete Array.prototype[Symbol.iterator];
+
+function* f([x, y, z] = [1, 2, 3]) {}
+
+assert.throws(TypeError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-get-err.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-get-err.js
new file mode 100644
index 0000000000..89b6b056d7
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-get-err.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-init-iter-get-err.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Abrupt completion returned by GetIterator (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ArrayBindingPattern
+
+ 1. Let iterator be GetIterator(value).
+ 2. ReturnIfAbrupt(iterator).
+
+---*/
+var iter = {};
+iter[Symbol.iterator] = function() {
+ throw new Test262Error();
+};
+
+function* f([x] = iter) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-no-close.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-no-close.js
new file mode 100644
index 0000000000..d0070d79d1
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-init-iter-no-close.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-init-iter-no-close.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Iterator is not closed when exhausted by pattern evaluation (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ArrayBindingPattern
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, return ? IteratorClose(iterator,
+ result).
+ [...]
+
+---*/
+var doneCallCount = 0;
+var iter = {};
+iter[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ return { value: null, done: true };
+ },
+ return: function() {
+ doneCallCount += 1;
+ return {};
+ }
+ };
+};
+
+var callCount = 0;
+function* f([x] = iter) {
+ assert.sameValue(doneCallCount, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-name-iter-val.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-name-iter-val.js
new file mode 100644
index 0000000000..93a00016ef
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-name-iter-val.js
@@ -0,0 +1,71 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-name-iter-val.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding with normal value iteration (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ e. Else,
+ [...]
+ i. Let v be IteratorValue(next).
+ ii. If v is an abrupt completion, set
+ iteratorRecord.[[done]] to true.
+ iii. ReturnIfAbrupt(v).
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x, y, z] = [1, 2, 3]) {
+ assert.sameValue(x, 1);
+ assert.sameValue(y, 2);
+ assert.sameValue(z, 3);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elem-init.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elem-init.js
new file mode 100644
index 0000000000..7cb24f5326
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elem-init.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-elem-init.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with array binding pattern and initializer is used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([[x, y, z] = [4, 5, 6]] = []) {
+ assert.sameValue(x, 4);
+ assert.sameValue(y, 5);
+ assert.sameValue(z, 6);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elem-iter.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elem-iter.js
new file mode 100644
index 0000000000..b916777786
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elem-iter.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-elem-iter.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with array binding pattern and initializer is not used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ [...]
+ e. Else,
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([[x, y, z] = [4, 5, 6]] = [[7, 8, 9]]) {
+ assert.sameValue(x, 7);
+ assert.sameValue(y, 8);
+ assert.sameValue(z, 9);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elision-init.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elision-init.js
new file mode 100644
index 0000000000..1e8aa34711
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elision-init.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-elision-init.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with array binding pattern and initializer is used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+---*/
+var first = 0;
+var second = 0;
+function* g() {
+ first += 1;
+ yield;
+ second += 1;
+};
+
+var callCount = 0;
+function* f([[,] = g()] = []) {
+ assert.sameValue(first, 1);
+ assert.sameValue(second, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elision-iter.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elision-iter.js
new file mode 100644
index 0000000000..ef9dee96b2
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-elision-iter.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-elision-iter.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with array binding pattern and initializer is not used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ [...]
+ e. Else,
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+---*/
+var callCount = 0;
+function* g() {
+ callCount += 1;
+};
+
+var callCount = 0;
+function* f([[,] = g()] = [[]]) {
+ assert.sameValue(callCount, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-empty-init.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-empty-init.js
new file mode 100644
index 0000000000..96a8e0a8b1
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-empty-init.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-empty-init.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with array binding pattern and initializer is used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+---*/
+var initCount = 0;
+var iterCount = 0;
+var iter = function*() { iterCount += 1; }();
+
+var callCount = 0;
+function* f([[] = function() { initCount += 1; return iter; }()] = []) {
+ assert.sameValue(initCount, 1);
+ assert.sameValue(iterCount, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-empty-iter.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-empty-iter.js
new file mode 100644
index 0000000000..975e2645fb
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-empty-iter.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-empty-iter.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with array binding pattern and initializer is not used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ [...]
+ e. Else,
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+var initCount = 0;
+
+var callCount = 0;
+function* f([[] = function() { initCount += 1; }()] = [[23]]) {
+ assert.sameValue(initCount, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-rest-init.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-rest-init.js
new file mode 100644
index 0000000000..0a591a0395
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-rest-init.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-rest-init.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with array binding pattern and initializer is used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+var values = [2, 1, 3];
+
+var callCount = 0;
+function* f([[...x] = values] = []) {
+ assert(Array.isArray(x));
+ assert.sameValue(x[0], 2);
+ assert.sameValue(x[1], 1);
+ assert.sameValue(x[2], 3);
+ assert.sameValue(x.length, 3);
+ assert.notSameValue(x, values);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-rest-iter.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-rest-iter.js
new file mode 100644
index 0000000000..c41f1fbc20
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-rest-iter.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-rest-iter.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with array binding pattern and initializer is not used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ [...]
+ e. Else,
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+var values = [2, 1, 3];
+var initCount = 0;
+
+var callCount = 0;
+function* f([[...x] = function() { initCount += 1; }()] = [values]) {
+ assert(Array.isArray(x));
+ assert.sameValue(x[0], 2);
+ assert.sameValue(x[1], 1);
+ assert.sameValue(x[2], 3);
+ assert.sameValue(x.length, 3);
+ assert.notSameValue(x, values);
+ assert.sameValue(initCount, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-val-null.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-val-null.js
new file mode 100644
index 0000000000..702da478cf
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-ary-val-null.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-ary-val-null.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Nested array destructuring with a null value (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ [...]
+ e. Else
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ArrayBindingPattern
+
+ 1. Let iterator be GetIterator(value).
+ 2. ReturnIfAbrupt(iterator).
+---*/
+
+function* f([[x]] = [null]) {}
+
+assert.throws(TypeError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-exhausted.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-exhausted.js
new file mode 100644
index 0000000000..5fd55e6a1f
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-exhausted.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-exhausted.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Destructuring initializer with an exhausted iterator (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x = 23] = []) {
+ assert.sameValue(x, 23);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js
new file mode 100644
index 0000000000..426c3bf087
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-fn-name-arrow.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding does assign name to arrow functions (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([arrow = () => {}] = []) {
+ assert.sameValue(arrow.name, 'arrow');
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js
new file mode 100644
index 0000000000..3dd2091151
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-fn-name-class.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding assigns `name` to "anonymous" classes (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
+ assert.sameValue(cls.name, 'cls');
+ assert.notSameValue(xCls.name, 'xCls');
+ assert.notSameValue(xCls2.name, 'xCls2');
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js
new file mode 100644
index 0000000000..08d78391d2
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-fn-name-cover.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding does assign name to "anonymous" functions "through" cover grammar (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([cover = (function () {}), xCover = (0, function() {})] = []) {
+ assert.sameValue(cover.name, 'cover');
+ assert.notSameValue(xCover.name, 'xCover');
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js
new file mode 100644
index 0000000000..5f6ca23110
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-fn-name-fn.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding assigns name to "anonymous" functions (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([fn = function () {}, xFn = function x() {}] = []) {
+ assert.sameValue(fn.name, 'fn');
+ assert.notSameValue(xFn.name, 'xFn');
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js
new file mode 100644
index 0000000000..4de7da79c3
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-fn-name-gen.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding assigns name to "anonymous" generator functions (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+
+---*/
+
+var callCount = 0;
+function* f([gen = function* () {}, xGen = function* x() {}] = []) {
+ assert.sameValue(gen.name, 'gen');
+ assert.notSameValue(xGen.name, 'xGen');
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-hole.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-hole.js
new file mode 100644
index 0000000000..cdf756a868
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-hole.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-hole.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Destructuring initializer with a "hole" (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ SingleNameBinding : BindingIdentifier Initializeropt
+ [...] 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v). 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x = 23] = [,]) {
+ assert.sameValue(x, 23);
+ // another statement
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-skipped.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-skipped.js
new file mode 100644
index 0000000000..2c03a17217
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-skipped.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-skipped.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Destructuring initializer is not evaluated when value is not `undefined` (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+var initCount = 0;
+function counter() {
+ initCount += 1;
+}
+
+var callCount = 0;
+function* f([w = counter(), x = counter(), y = counter(), z = counter()] = [null, 0, false, '']) {
+ assert.sameValue(w, null);
+ assert.sameValue(x, 0);
+ assert.sameValue(y, false);
+ assert.sameValue(z, '');
+ assert.sameValue(initCount, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-throws.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-throws.js
new file mode 100644
index 0000000000..7caca2e0d6
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-throws.js
@@ -0,0 +1,57 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-throws.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Destructuring initializer returns an abrupt completion (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+---*/
+
+function* f([x = (function() { throw new Test262Error(); })()] = [undefined]) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-undef.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-undef.js
new file mode 100644
index 0000000000..78041dad4a
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-undef.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-undef.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Destructuring initializer with an undefined value (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ [...]
+ 7. If environment is undefined, return PutValue(lhs, v).
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x = 23] = [undefined]) {
+ assert.sameValue(x, 23);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js
new file mode 100644
index 0000000000..f8c8754b86
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-init-unresolvable.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Destructuring initializer is an unresolvable reference (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+
+ 6.2.3.1 GetValue (V)
+
+ 1. ReturnIfAbrupt(V).
+ 2. If Type(V) is not Reference, return V.
+ 3. Let base be GetBase(V).
+ 4. If IsUnresolvableReference(V), throw a ReferenceError exception.
+---*/
+
+function* f([ x = unresolvableReference ] = []) {}
+
+assert.throws(ReferenceError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-complete.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-complete.js
new file mode 100644
index 0000000000..0cf4ada254
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-complete.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-complete.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding when value iteration completes (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ e. Else,
+ [...]
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x] = []) {
+ assert.sameValue(x, undefined);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-done.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-done.js
new file mode 100644
index 0000000000..11ee30daaf
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-done.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-done.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding when value iteration was completed previously (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ [...]
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([_, x] = []) {
+ assert.sameValue(x, undefined);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-step-err.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-step-err.js
new file mode 100644
index 0000000000..d14fda2324
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-step-err.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-step-err.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Error forwarding when IteratorStep returns an abrupt completion (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+
+---*/
+var g = {};
+g[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ throw new Test262Error();
+ }
+ };
+};
+
+function* f([x] = g) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js
new file mode 100644
index 0000000000..666519659e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js
@@ -0,0 +1,81 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-val-array-prototype.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Array destructuring uses overriden Array.prototype[Symbol.iterator] (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializer_opt
+
+ 1. Let bindingId be StringValue of BindingIdentifier.
+ 2. Let lhs be ? ResolveBinding(bindingId, environment).
+ 3. If iteratorRecord.[[Done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord).
+ b. If next is an abrupt completion, set iteratorRecord.[[Done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[Done]] to true.
+ e. Else,
+ i. Let v be IteratorValue(next).
+ ii. If v is an abrupt completion, set iteratorRecord.[[Done]] to true.
+ iii. ReturnIfAbrupt(v).
+ [...]
+ 7. Return InitializeReferencedBinding(lhs, v).
+
+---*/
+Array.prototype[Symbol.iterator] = function* () {
+ if (this.length > 0) {
+ yield this[0];
+ }
+ if (this.length > 1) {
+ yield this[1];
+ }
+ if (this.length > 2) {
+ yield 42;
+ }
+};
+
+var callCount = 0;
+function* f([x, y, z] = [1, 2, 3]) {
+ assert.sameValue(x, 1);
+ assert.sameValue(y, 2);
+ assert.sameValue(z, 42);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val-err.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val-err.js
new file mode 100644
index 0000000000..4c5f951de9
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val-err.js
@@ -0,0 +1,77 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-val-err.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Error forwarding when IteratorValue returns an abrupt completion (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ e. Else,
+ i. Let v be IteratorValue(next).
+ ii. If v is an abrupt completion, set iteratorRecord.[[done]] to
+ true.
+ iii. ReturnIfAbrupt(v).
+
+---*/
+var poisonedValue = Object.defineProperty({}, 'value', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+var g = {};
+g[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ return poisonedValue;
+ }
+ };
+};
+
+function* f([x] = g) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val.js
new file mode 100644
index 0000000000..43cbbf7241
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-id-iter-val.js
@@ -0,0 +1,71 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-id-iter-val.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding when value iteration was completed previously (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ e. Else,
+ [...]
+ i. Let v be IteratorValue(next).
+ ii. If v is an abrupt completion, set
+ iteratorRecord.[[done]] to true.
+ iii. ReturnIfAbrupt(v).
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([x, y, z] = [1, 2, 3]) {
+ assert.sameValue(x, 1);
+ assert.sameValue(y, 2);
+ assert.sameValue(z, 3);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-id-init.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-id-init.js
new file mode 100644
index 0000000000..73d5a7838d
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-id-init.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-id-init.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with object binding pattern and initializer is used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([{ x, y, z } = { x: 44, y: 55, z: 66 }] = []) {
+ assert.sameValue(x, 44);
+ assert.sameValue(y, 55);
+ assert.sameValue(z, 66);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-id.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-id.js
new file mode 100644
index 0000000000..caa450eb7f
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-id.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-id.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with object binding pattern and initializer is not used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([{ x, y, z } = { x: 44, y: 55, z: 66 }] = [{ x: 11, y: 22, z: 33 }]) {
+ assert.sameValue(x, 11);
+ assert.sameValue(y, 22);
+ assert.sameValue(z, 33);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js
new file mode 100644
index 0000000000..0ee3cd9141
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-prop-id-init.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with object binding pattern and initializer is used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([{ u: v, w: x, y: z } = { u: 444, w: 555, y: 666 }] = []) {
+ assert.sameValue(v, 444);
+ assert.sameValue(x, 555);
+ assert.sameValue(z, 666);
+
+ assert.throws(ReferenceError, function() {
+ u;
+ });
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ assert.throws(ReferenceError, function() {
+ y;
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-prop-id.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-prop-id.js
new file mode 100644
index 0000000000..ead6f84704
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-prop-id.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-prop-id.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: BindingElement with object binding pattern and initializer is not used (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPatternInitializer opt
+
+ [...]
+ 2. If iteratorRecord.[[done]] is true, let v be undefined.
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be ? GetValue(defaultValue).
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f([{ u: v, w: x, y: z } = { u: 444, w: 555, y: 666 }] = [{ u: 777, w: 888, y: 999 }]) {
+ assert.sameValue(v, 777);
+ assert.sameValue(x, 888);
+ assert.sameValue(z, 999);
+
+ assert.throws(ReferenceError, function() {
+ u;
+ });
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ assert.throws(ReferenceError, function() {
+ y;
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-val-null.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-val-null.js
new file mode 100644
index 0000000000..509fdef404
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-val-null.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-val-null.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Nested object destructuring with a null value (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ [...]
+ e. Else
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ObjectBindingPattern
+
+ 1. Let valid be RequireObjectCoercible(value).
+ 2. ReturnIfAbrupt(valid).
+---*/
+
+function* f([{ x }] = [null]) {}
+
+assert.throws(TypeError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-val-undef.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-val-undef.js
new file mode 100644
index 0000000000..a47a0accd6
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elem-obj-val-undef.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elem-obj-val-undef.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Nested object destructuring with a value of `undefined` (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ 1. If iteratorRecord.[[done]] is false, then
+ [...]
+ e. Else
+ i. Let v be IteratorValue(next).
+ [...]
+ 4. Return the result of performing BindingInitialization of BindingPattern
+ with v and environment as the arguments.
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPattern : ObjectBindingPattern
+
+ 1. Let valid be RequireObjectCoercible(value).
+ 2. ReturnIfAbrupt(valid).
+---*/
+
+function* f([{ x }] = []) {}
+
+assert.throws(TypeError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision-exhausted.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision-exhausted.js
new file mode 100644
index 0000000000..08b551c95e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision-exhausted.js
@@ -0,0 +1,68 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elision-exhausted.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Elision accepts exhausted iterator (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ Elision ]
+
+ 1. Return the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with iteratorRecord
+ as the argument.
+
+ 12.14.5.3 Runtime Semantics: IteratorDestructuringAssignmentEvaluation
+
+ Elision : ,
+
+ 1. If iteratorRecord.[[done]] is false, then
+ [...]
+ 2. Return NormalCompletion(empty).
+
+---*/
+var iter = function*() {}();
+iter.next();
+
+var callCount = 0;
+function* f([,] = iter) {
+
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision-step-err.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision-step-err.js
new file mode 100644
index 0000000000..2094923aa1
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision-step-err.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elision-step-err.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Elision advances iterator and forwards abrupt completions (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ Elision ]
+
+ 1. Return the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with iteratorRecord
+ as the argument.
+
+ 12.14.5.3 Runtime Semantics: IteratorDestructuringAssignmentEvaluation
+
+ Elision : ,
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+
+---*/
+var following = 0;
+var iter =function* () {
+ throw new Test262Error();
+ following += 1;
+}();
+
+function* f([,] = iter) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+iter.next();
+assert.sameValue(following, 0, 'Iterator was properly closed.');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision.js
new file mode 100644
index 0000000000..711b7ee8de
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-elision.js
@@ -0,0 +1,77 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-elision.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Elision advances iterator (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ Elision ]
+
+ 1. Return the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with iteratorRecord
+ as the argument.
+
+ 12.14.5.3 Runtime Semantics: IteratorDestructuringAssignmentEvaluation
+
+ Elision : ,
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ 2. Return NormalCompletion(empty).
+
+---*/
+var first = 0;
+var second = 0;
+function* g() {
+ first += 1;
+ yield;
+ second += 1;
+};
+
+var callCount = 0;
+function* f([,] = g()) {
+ assert.sameValue(first, 1);
+ assert.sameValue(second, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-empty.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-empty.js
new file mode 100644
index 0000000000..16520a1cb5
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-empty.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-empty.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: No iteration occurs for an "empty" array binding pattern (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ ]
+
+ 1. Return NormalCompletion(empty).
+
+---*/
+var iterations = 0;
+var iter = function*() {
+ iterations += 1;
+}();
+
+var callCount = 0;
+function* f([] = iter) {
+ assert.sameValue(iterations, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-elem.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-elem.js
new file mode 100644
index 0000000000..687489bd84
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-elem.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-ary-elem.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element containing an array BindingElementList pattern (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ e. Else,
+ [...]
+ i. Let v be IteratorValue(next).
+ ii. If v is an abrupt completion, set
+ iteratorRecord.[[done]] to true.
+ iii. ReturnIfAbrupt(v).
+ 5. If iteratorRecord.[[done]] is true, let v be undefined.
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f([...[x, y, z]] = [3, 4, 5]) {
+ assert.sameValue(x, 3);
+ assert.sameValue(y, 4);
+ assert.sameValue(z, 5);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-elision.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-elision.js
new file mode 100644
index 0000000000..d8b153487f
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-elision.js
@@ -0,0 +1,90 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-ary-elision.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element containing an elision (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ Elision ]
+
+ 1. Return the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with iteratorRecord
+ as the argument.
+
+ 12.14.5.3 Runtime Semantics: IteratorDestructuringAssignmentEvaluation
+
+ Elision : ,
+
+ 1. If iteratorRecord.[[done]] is false, then
+ a. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
+ c. ReturnIfAbrupt(next).
+ d. If next is false, set iteratorRecord.[[done]] to true.
+ 2. Return NormalCompletion(empty).
+
+---*/
+var first = 0;
+var second = 0;
+function* g() {
+ first += 1;
+ yield;
+ second += 1;
+};
+
+var callCount = 0;
+function* f([...[,]] = g()) {
+ assert.sameValue(first, 1);
+ assert.sameValue(second, 1);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-empty.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-empty.js
new file mode 100644
index 0000000000..4b912f4678
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-empty.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-ary-empty.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element containing an "empty" array pattern (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ ArrayBindingPattern : [ ]
+
+ 1. Return NormalCompletion(empty).
+
+---*/
+var iterations = 0;
+var iter = function*() {
+ iterations += 1;
+}();
+
+var callCount = 0;
+function* f([...[]] = iter) {
+ assert.sameValue(iterations, 1);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-rest.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-rest.js
new file mode 100644
index 0000000000..be6e892868
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-ary-rest.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-ary-rest.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element containing a rest element (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+---*/
+var values = [1, 2, 3];
+
+var callCount = 0;
+function* f([...[...x]] = values) {
+ assert(Array.isArray(x));
+ assert.sameValue(x.length, 3);
+ assert.sameValue(x[0], 1);
+ assert.sameValue(x[1], 2);
+ assert.sameValue(x[2], 3);
+ assert.notSameValue(x, values);
+
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-direct.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-direct.js
new file mode 100644
index 0000000000..9be676e308
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-direct.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-direct.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Lone rest element (direct binding) (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+includes: [compareArray.js]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingIdentifier
+
+ [...]
+ 2. Let A be ! ArrayCreate(0).
+ 3. Let n be 0.
+ 4. Repeat,
+ [...]
+ f. Perform ! CreateDataPropertyOrThrow(A, ! ToString(n), nextValue).
+ g. Set n to n + 1.
+
+---*/
+
+var callCount = 0;
+function* f([...x] = [1]) {
+ assert(Array.isArray(x));
+ assert.compareArray(x, [1]);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-elision-next-err.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-elision-next-err.js
new file mode 100644
index 0000000000..ac4e2ccb3a
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-elision-next-err.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-elision-next-err.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Rest element following elision elements (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ ArrayBindingPattern : [ Elisionopt BindingRestElement ]
+ 1. If Elision is present, then
+ a. Let status be the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with
+ iteratorRecord as the argument.
+ b. ReturnIfAbrupt(status).
+ 2. Return the result of performing IteratorBindingInitialization for
+ BindingRestElement with iteratorRecord and environment as arguments.
+
+---*/
+var iter = (function*() { throw new Test262Error(); })();
+
+function* f([, ...x] = iter) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-elision.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-elision.js
new file mode 100644
index 0000000000..ffd7a31d41
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-elision.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-elision.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element following elision elements (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ ArrayBindingPattern : [ Elisionopt BindingRestElement ]
+ 1. If Elision is present, then
+ a. Let status be the result of performing
+ IteratorDestructuringAssignmentEvaluation of Elision with
+ iteratorRecord as the argument.
+ b. ReturnIfAbrupt(status).
+ 2. Return the result of performing IteratorBindingInitialization for
+ BindingRestElement with iteratorRecord and environment as arguments.
+---*/
+var values = [1, 2, 3, 4, 5];
+
+var callCount = 0;
+function* f([ , , ...x] = values) {
+ assert(Array.isArray(x));
+ assert.sameValue(x.length, 3);
+ assert.sameValue(x[0], 3);
+ assert.sameValue(x[1], 4);
+ assert.sameValue(x[2], 5);
+ assert.notSameValue(x, values);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-exhausted.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-exhausted.js
new file mode 100644
index 0000000000..8daf7bb3cf
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-exhausted.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-exhausted.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: RestElement applied to an exhausted iterator (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ BindingRestElement : ... BindingIdentifier
+ 1. Let lhs be ResolveBinding(StringValue of BindingIdentifier,
+ environment).
+ 2. ReturnIfAbrupt(lhs). 3. Let A be ArrayCreate(0). 4. Let n=0. 5. Repeat,
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. If environment is undefined, return PutValue(lhs, A).
+ ii. Return InitializeReferencedBinding(lhs, A).
+
+---*/
+
+var callCount = 0;
+function* f([, , ...x] = [1, 2]) {
+ assert(Array.isArray(x));
+ assert.sameValue(x.length, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-iter-step-err.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-iter-step-err.js
new file mode 100644
index 0000000000..8ce90e621d
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-iter-step-err.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-iter-step-err.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Error forwarding when IteratorStep returns an abrupt completion (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ BindingRestElement : ... BindingIdentifier
+ 1. Let lhs be ResolveBinding(StringValue of BindingIdentifier,
+ environment).
+ 2. ReturnIfAbrupt(lhs). 3. Let A be ArrayCreate(0). 4. Let n=0. 5. Repeat,
+ a. If iteratorRecord.[[done]] is false,
+ i. Let next be IteratorStep(iteratorRecord.[[iterator]]).
+ ii. If next is an abrupt completion, set iteratorRecord.[[done]] to
+ true.
+ iii. ReturnIfAbrupt(next).
+
+---*/
+var first = 0;
+var second = 0;
+var iter = function*() {
+ first += 1;
+ throw new Test262Error();
+ second += 1;
+}();
+
+function* f([...x] = iter) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+iter.next();
+assert.sameValue(first, 1);
+assert.sameValue(second, 0, 'Iterator is closed following abrupt completion.');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-iter-val-err.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-iter-val-err.js
new file mode 100644
index 0000000000..75e6e91f85
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id-iter-val-err.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id-iter-val-err.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Error forwarding when IteratorValue returns an abrupt completion (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [Symbol.iterator, generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ BindingRestElement : ... BindingIdentifier
+ 1. Let lhs be ResolveBinding(StringValue of BindingIdentifier,
+ environment).
+ 2. ReturnIfAbrupt(lhs). 3. Let A be ArrayCreate(0). 4. Let n=0. 5. Repeat,
+ [...]
+ c. Let nextValue be IteratorValue(next).
+ d. If nextValue is an abrupt completion, set iteratorRecord.[[done]] to
+ true.
+ e. ReturnIfAbrupt(nextValue).
+
+---*/
+var poisonedValue = Object.defineProperty({}, 'value', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+var iter = {};
+iter[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ return poisonedValue;
+ }
+ };
+};
+
+function* f([...x] = iter) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id.js
new file mode 100644
index 0000000000..f2a486d518
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-id.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-id.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Lone rest element (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+ BindingRestElement : ... BindingIdentifier
+ [...] 3. Let A be ArrayCreate(0). [...] 5. Repeat
+ [...]
+ f. Let status be CreateDataProperty(A, ToString (n), nextValue).
+ [...]
+---*/
+var values = [1, 2, 3];
+
+var callCount = 0;
+function* f([...x] = values) {
+ assert(Array.isArray(x));
+ assert.sameValue(x.length, 3);
+ assert.sameValue(x[0], 1);
+ assert.sameValue(x[1], 2);
+ assert.sameValue(x[2], 3);
+ assert.notSameValue(x, values);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-ary.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-ary.js
new file mode 100644
index 0000000000..bf253ad62b
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-ary.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-init-ary.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element (nested array pattern) does not support initializer (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...[ x ] = []] = []) {
+
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-id.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-id.js
new file mode 100644
index 0000000000..7b47998a9b
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-id.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-init-id.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element (identifier) does not support initializer (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...x = []] = []) {
+
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-obj.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-obj.js
new file mode 100644
index 0000000000..86b09cdf04
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-init-obj.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-init-obj.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element (nested object pattern) does not support initializer (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...{ x } = []] = []) {
+
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-ary.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-ary.js
new file mode 100644
index 0000000000..36f8546852
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-ary.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-not-final-ary.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element (array binding pattern) may not be followed by any element (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...[x], y] = [1, 2, 3]) {
+
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-id.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-id.js
new file mode 100644
index 0000000000..7b55ea42d7
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-id.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-not-final-id.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element (identifier) may not be followed by any element (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...x, y] = [1, 2, 3]) {
+
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-obj.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-obj.js
new file mode 100644
index 0000000000..6600c24443
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-not-final-obj.js
@@ -0,0 +1,58 @@
+// |reftest| error:SyntaxError
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-not-final-obj.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element (object binding pattern) may not be followed by any element (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+negative:
+ phase: parse
+ type: SyntaxError
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+ ArrayBindingPattern[Yield] :
+ [ Elisionopt BindingRestElement[?Yield]opt ]
+ [ BindingElementList[?Yield] ]
+ [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+$DONOTEVALUATE();
+
+var callCount = 0;
+function* f([...{ x }, y] = [1, 2, 3]) {
+
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-obj-id.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-obj-id.js
new file mode 100644
index 0000000000..6fd55ed9f0
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-obj-id.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-obj-id.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element containing an object binding pattern (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+---*/
+
+var callCount = 0;
+function* f([...{ length }] = [1, 2, 3]) {
+ assert.sameValue(length, 3);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-obj-prop-id.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-obj-prop-id.js
new file mode 100644
index 0000000000..d80ed3e5a1
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-ary-ptrn-rest-obj-prop-id.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/ary-ptrn-rest-obj-prop-id.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest element containing an object binding pattern (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+
+ BindingRestElement : ... BindingPattern
+
+ 1. Let A be ArrayCreate(0).
+ [...]
+ 3. Repeat
+ [...]
+ b. If iteratorRecord.[[done]] is true, then
+ i. Return the result of performing BindingInitialization of
+ BindingPattern with A and environment as the arguments.
+ [...]
+---*/
+let length = "outer";
+
+var callCount = 0;
+function* f([...{ 0: v, 1: w, 2: x, 3: y, length: z }] = [7, 8, 9]) {
+ assert.sameValue(v, 7);
+ assert.sameValue(w, 8);
+ assert.sameValue(x, 9);
+ assert.sameValue(y, undefined);
+ assert.sameValue(z, 3);
+
+ assert.sameValue(length, "outer", "the length prop is not set as a binding name");
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-init-null.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-init-null.js
new file mode 100644
index 0000000000..447533f2b4
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-init-null.js
@@ -0,0 +1,53 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-init-null.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Value specifed for object binding pattern must be object coercible (null) (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: BindingInitialization
+
+ ObjectBindingPattern : { }
+
+ 1. Return NormalCompletion(empty).
+---*/
+
+function* f({} = null) {}
+
+assert.throws(TypeError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-init-undefined.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-init-undefined.js
new file mode 100644
index 0000000000..96c3faceee
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-init-undefined.js
@@ -0,0 +1,53 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-init-undefined.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Value specifed for object binding pattern must be object coercible (undefined) (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: BindingInitialization
+
+ ObjectBindingPattern : { }
+
+ 1. Return NormalCompletion(empty).
+---*/
+
+function* f({} = undefined) {}
+
+assert.throws(TypeError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-empty.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-empty.js
new file mode 100644
index 0000000000..fd0049c958
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-empty.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-empty.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: No property access occurs for an "empty" object binding pattern (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: BindingInitialization
+
+ ObjectBindingPattern : { }
+
+ 1. Return NormalCompletion(empty).
+---*/
+var accessCount = 0;
+var obj = Object.defineProperty({}, 'attr', {
+ get: function() {
+ accessCount += 1;
+ }
+});
+
+var callCount = 0;
+function* f({} = obj) {
+ assert.sameValue(accessCount, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-get-value-err.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-get-value-err.js
new file mode 100644
index 0000000000..94bb067028
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-get-value-err.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-get-value-err.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Error thrown when accessing the corresponding property of the value object (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. Let v be GetV(value, propertyName).
+ 5. ReturnIfAbrupt(v).
+---*/
+var poisonedProperty = Object.defineProperty({}, 'poisoned', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+function* f({ poisoned } = poisonedProperty) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js
new file mode 100644
index 0000000000..8865dae913
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-fn-name-arrow.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding assigns `name` to arrow functions (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ i. Let hasNameProperty be HasOwnProperty(v, "name").
+ ii. ReturnIfAbrupt(hasNameProperty).
+ iii. If hasNameProperty is false, perform SetFunctionName(v,
+ bindingId).
+---*/
+
+var callCount = 0;
+function* f({ arrow = () => {} } = {}) {
+ assert.sameValue(arrow.name, 'arrow');
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-class.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-class.js
new file mode 100644
index 0000000000..120764e074
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-class.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-fn-name-class.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding assigns `name` to "anonymous" classes (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ i. Let hasNameProperty be HasOwnProperty(v, "name").
+ ii. ReturnIfAbrupt(hasNameProperty).
+ iii. If hasNameProperty is false, perform SetFunctionName(v,
+ bindingId).
+---*/
+
+var callCount = 0;
+function* f({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
+ assert.sameValue(cls.name, 'cls');
+ assert.notSameValue(xCls.name, 'xCls');
+ assert.notSameValue(xCls2.name, 'xCls2');
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js
new file mode 100644
index 0000000000..e0734ed86e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-fn-name-cover.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding assigns `name` to "anonymous" functions "through" cover grammar (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ i. Let hasNameProperty be HasOwnProperty(v, "name").
+ ii. ReturnIfAbrupt(hasNameProperty).
+ iii. If hasNameProperty is false, perform SetFunctionName(v,
+ bindingId).
+---*/
+
+var callCount = 0;
+function* f({ cover = (function () {}), xCover = (0, function() {}) } = {}) {
+ assert.sameValue(cover.name, 'cover');
+ assert.notSameValue(xCover.name, 'xCover');
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-fn.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-fn.js
new file mode 100644
index 0000000000..a23ac6eeca
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-fn.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-fn-name-fn.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding assigns name to "anonymous" functions (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ i. Let hasNameProperty be HasOwnProperty(v, "name").
+ ii. ReturnIfAbrupt(hasNameProperty).
+ iii. If hasNameProperty is false, perform SetFunctionName(v,
+ bindingId).
+---*/
+
+var callCount = 0;
+function* f({ fn = function () {}, xFn = function x() {} } = {}) {
+ assert.sameValue(fn.name, 'fn');
+ assert.notSameValue(xFn.name, 'xFn');
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-gen.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-gen.js
new file mode 100644
index 0000000000..83f4092ad5
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-fn-name-gen.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-fn-name-gen.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: SingleNameBinding assigns name to "anonymous" generator functions (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ i. Let hasNameProperty be HasOwnProperty(v, "name").
+ ii. ReturnIfAbrupt(hasNameProperty).
+ iii. If hasNameProperty is false, perform SetFunctionName(v,
+ bindingId).
+
+---*/
+
+var callCount = 0;
+function* f({ gen = function* () {}, xGen = function* x() {} } = {}) {
+ assert.sameValue(gen.name, 'gen');
+ assert.notSameValue(xGen.name, 'xGen');
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-skipped.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-skipped.js
new file mode 100644
index 0000000000..a76e614ede
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-skipped.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-skipped.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Destructuring initializer is not evaluated when value is not `undefined` (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ [...]
+---*/
+var initCount = 0;
+function counter() {
+ initCount += 1;
+}
+
+var callCount = 0;
+function* f({ w = counter(), x = counter(), y = counter(), z = counter() } = { w: null, x: 0, y: false, z: '' }) {
+ assert.sameValue(w, null);
+ assert.sameValue(x, 0);
+ assert.sameValue(y, false);
+ assert.sameValue(z, '');
+ assert.sameValue(initCount, 0);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-throws.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-throws.js
new file mode 100644
index 0000000000..5521677612
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-throws.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-throws.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Error thrown when evaluating the initializer (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+---*/
+function thrower() {
+ throw new Test262Error();
+}
+
+function* f({ x = thrower() } = {}) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-unresolvable.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-unresolvable.js
new file mode 100644
index 0000000000..907bad7d5c
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-init-unresolvable.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-unresolvable.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Destructuring initializer is an unresolvable reference (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+
+ 6.2.3.1 GetValue (V)
+
+ 1. ReturnIfAbrupt(V).
+ 2. If Type(V) is not Reference, return V.
+ 3. Let base be GetBase(V).
+ 4. If IsUnresolvableReference(V), throw a ReferenceError exception.
+---*/
+
+function* f({ x = unresolvableReference } = {}) {}
+
+assert.throws(ReferenceError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-trailing-comma.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-trailing-comma.js
new file mode 100644
index 0000000000..7257f4ae99
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-id-trailing-comma.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-trailing-comma.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Trailing comma is allowed following BindingPropertyList (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+
+ ObjectBindingPattern[Yield] :
+ { }
+ { BindingPropertyList[?Yield] }
+ { BindingPropertyList[?Yield] , }
+---*/
+
+var callCount = 0;
+function* f({ x, } = { x: 23 }) {
+ assert.sameValue(x, 23);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-list-err.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-list-err.js
new file mode 100644
index 0000000000..ecc6954c8c
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-list-err.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-list-err.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Binding property list evaluation is interrupted by an abrupt completion (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPropertyList : BindingPropertyList , BindingProperty
+
+ 1. Let status be the result of performing BindingInitialization for
+ BindingPropertyList using value and environment as arguments.
+ 2. ReturnIfAbrupt(status).
+---*/
+var initCount = 0;
+function thrower() {
+ throw new Test262Error();
+}
+
+function* f({ a, b = thrower(), c = ++initCount } = {}) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+assert.sameValue(initCount, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-init.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-init.js
new file mode 100644
index 0000000000..976483e6cc
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-init.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-ary-init.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Object binding pattern with "nested" array binding pattern using initializer (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+var callCount = 0;
+function* f({ w: [x, y, z] = [4, 5, 6] } = {}) {
+ assert.sameValue(x, 4);
+ assert.sameValue(y, 5);
+ assert.sameValue(z, 6);
+
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js
new file mode 100644
index 0000000000..79044cc81e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-ary-trailing-comma.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Trailing comma is allowed following BindingPropertyList (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+
+ ObjectBindingPattern[Yield] :
+ { }
+ { BindingPropertyList[?Yield] }
+ { BindingPropertyList[?Yield] , }
+---*/
+
+var callCount = 0;
+function* f({ x: [y], } = { x: [45] }) {
+ assert.sameValue(y,45);
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-value-null.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-value-null.js
new file mode 100644
index 0000000000..bec276192a
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary-value-null.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-ary-value-null.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Object binding pattern with "nested" array binding pattern taking the `null` value (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+function* f({ w: [x, y, z] = [4, 5, 6] } = { w: null }) {}
+
+assert.throws(TypeError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary.js
new file mode 100644
index 0000000000..67c750f56f
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-ary.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-ary.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Object binding pattern with "nested" array binding pattern not using initializer (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+var callCount = 0;
+function* f({ w: [x, y, z] = [4, 5, 6] } = { w: [7, undefined, ] }) {
+ assert.sameValue(x, 7);
+ assert.sameValue(y, undefined);
+ assert.sameValue(z, undefined);
+
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-eval-err.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-eval-err.js
new file mode 100644
index 0000000000..0ed24be60d
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-eval-err.js
@@ -0,0 +1,57 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-eval-err.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Evaluation of property name returns an abrupt completion (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingProperty : PropertyName : BindingElement
+
+ 1. Let P be the result of evaluating PropertyName
+ 2. ReturnIfAbrupt(P).
+---*/
+function thrower() {
+ throw new Test262Error();
+}
+
+function* f({ [thrower()]: x } = {}) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-get-value-err.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-get-value-err.js
new file mode 100644
index 0000000000..01abbe3a86
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-get-value-err.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-get-value-err.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Error thrown when accessing the corresponding property of the value object (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ 1. Let v be GetV(value, propertyName).
+ 2. ReturnIfAbrupt(v).
+---*/
+var initEvalCount = 0;
+var poisonedProperty = Object.defineProperty({}, 'poisoned', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+function* f({ poisoned: x = ++initEvalCount } = poisonedProperty) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+assert.sameValue(initEvalCount, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-skipped.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-skipped.js
new file mode 100644
index 0000000000..f71580643b
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-skipped.js
@@ -0,0 +1,78 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-init-skipped.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Destructuring initializer is not evaluated when value is not `undefined` (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+---*/
+var initCount = 0;
+function counter() {
+ initCount += 1;
+}
+
+var callCount = 0;
+function* f({ s: t = counter(), u: v = counter(), w: x = counter(), y: z = counter() } = { s: null, u: 0, w: false, y: '' }) {
+ assert.sameValue(t, null);
+ assert.sameValue(v, 0);
+ assert.sameValue(x, false);
+ assert.sameValue(z, '');
+ assert.sameValue(initCount, 0);
+
+ assert.throws(ReferenceError, function() {
+ s;
+ });
+ assert.throws(ReferenceError, function() {
+ u;
+ });
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ assert.throws(ReferenceError, function() {
+ y;
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-throws.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-throws.js
new file mode 100644
index 0000000000..9654cbf55b
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-throws.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-init-throws.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Error thrown when evaluating the initializer (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+---*/
+function thrower() {
+ throw new Test262Error();
+}
+
+function* f({ x: y = thrower() } = {}) {}
+
+assert.throws(Test262Error, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js
new file mode 100644
index 0000000000..a9a0838fd5
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-init-unresolvable.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Destructuring initializer is an unresolvable reference (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+
+ 6.2.3.1 GetValue (V)
+
+ 1. ReturnIfAbrupt(V).
+ 2. If Type(V) is not Reference, return V.
+ 3. Let base be GetBase(V).
+ 4. If IsUnresolvableReference(V), throw a ReferenceError exception.
+---*/
+
+function* f({ x: y = unresolvableReference } = {}) {}
+
+assert.throws(ReferenceError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init.js
new file mode 100644
index 0000000000..e8e0cc2755
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-init.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-init.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Binding as specified via property name, identifier, and initializer (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f({ x: y = 33 } = { }) {
+ assert.sameValue(y, 33);
+ assert.throws(ReferenceError, function() {
+ x;
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-trailing-comma.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-trailing-comma.js
new file mode 100644
index 0000000000..eb52e18c01
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id-trailing-comma.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-trailing-comma.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Trailing comma is allowed following BindingPropertyList (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+
+ ObjectBindingPattern[Yield] :
+ { }
+ { BindingPropertyList[?Yield] }
+ { BindingPropertyList[?Yield] , }
+---*/
+
+var callCount = 0;
+function* f({ x: y, } = { x: 23 }) {
+ assert.sameValue(y, 23);
+
+ assert.throws(ReferenceError, function() {
+ x;
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id.js
new file mode 100644
index 0000000000..25a935f599
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-id.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Binding as specified via property name and identifier (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f({ x: y } = { x: 23 }) {
+ assert.sameValue(y, 23);
+ assert.throws(ReferenceError, function() {
+ x;
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-init.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-init.js
new file mode 100644
index 0000000000..2a81df1362
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-init.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-obj-init.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Object binding pattern with "nested" object binding pattern using initializer (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+var callCount = 0;
+function* f({ w: { x, y, z } = { x: 4, y: 5, z: 6 } } = { w: undefined }) {
+ assert.sameValue(x, 4);
+ assert.sameValue(y, 5);
+ assert.sameValue(z, 6);
+
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-value-null.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-value-null.js
new file mode 100644
index 0000000000..254bd5f4cd
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-value-null.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-obj-value-null.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Object binding pattern with "nested" object binding pattern taking the `null` value (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+function* f({ w: { x, y, z } = { x: 4, y: 5, z: 6 } } = { w: null }) {}
+
+assert.throws(TypeError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-value-undef.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-value-undef.js
new file mode 100644
index 0000000000..bef3291660
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj-value-undef.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-obj-value-undef.case
+// - src/dstr-binding/error/gen-func-decl-dflt.template
+/*---
+description: Object binding pattern with "nested" object binding pattern taking the `null` value (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+function* f({ w: { x, y, z } = undefined } = { }) {}
+
+assert.throws(TypeError, function() {
+ f();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj.js
new file mode 100644
index 0000000000..9210c8e1b3
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-prop-obj.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-obj.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Object binding pattern with "nested" object binding pattern not using initializer (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding, default-parameters]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+var callCount = 0;
+function* f({ w: { x, y, z } = { x: 4, y: 5, z: 6 } } = { w: { x: undefined, z: 7 } }) {
+ assert.sameValue(x, undefined);
+ assert.sameValue(y, undefined);
+ assert.sameValue(z, 7);
+
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-getter.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-getter.js
new file mode 100644
index 0000000000..0b2e08c505
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-getter.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-rest-getter.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Getter is called when obj is being deconstructed to a rest Object (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [object-rest, generators, destructuring-binding, default-parameters]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+---*/
+var count = 0;
+
+var callCount = 0;
+function* f({...x} = { get v() { count++; return 2; } }) {
+ assert.sameValue(count, 1);
+
+ verifyProperty(x, "v", {
+ enumerable: true,
+ writable: true,
+ configurable: true,
+ value: 2
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js
new file mode 100644
index 0000000000..3bcf4bc03f
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-rest-skip-non-enumerable.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest object doesn't contain non-enumerable properties (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [object-rest, generators, destructuring-binding, default-parameters]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+---*/
+var o = {a: 3, b: 4};
+Object.defineProperty(o, "x", { value: 4, enumerable: false });
+
+var callCount = 0;
+function* f({...rest} = o) {
+ assert.sameValue(rest.x, undefined);
+
+ verifyProperty(rest, "a", {
+ enumerable: true,
+ writable: true,
+ configurable: true,
+ value: 3
+ });
+
+ verifyProperty(rest, "b", {
+ enumerable: true,
+ writable: true,
+ configurable: true,
+ value: 4
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-val-obj.js b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-val-obj.js
new file mode 100644
index 0000000000..2c5a0de59b
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/dflt-obj-ptrn-rest-val-obj.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-rest-val-obj.case
+// - src/dstr-binding/default/gen-func-decl-dflt.template
+/*---
+description: Rest object contains just unextracted data (generator function declaration (default parameter))
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [object-rest, generators, destructuring-binding, default-parameters]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+---*/
+
+var callCount = 0;
+function* f({a, b, ...rest} = {x: 1, y: 2, a: 5, b: 3}) {
+ assert.sameValue(rest.a, undefined);
+ assert.sameValue(rest.b, undefined);
+
+ verifyProperty(rest, "x", {
+ enumerable: true,
+ writable: true,
+ configurable: true,
+ value: 1
+ });
+
+ verifyProperty(rest, "y", {
+ enumerable: true,
+ writable: true,
+ configurable: true,
+ value: 2
+ });
+ callCount = callCount + 1;
+};
+f().next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-init-null.js b/js/src/tests/test262/language/statements/generators/dstr/obj-init-null.js
new file mode 100644
index 0000000000..c7b9ebcc6e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-init-null.js
@@ -0,0 +1,53 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-init-null.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Value specifed for object binding pattern must be object coercible (null) (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: BindingInitialization
+
+ ObjectBindingPattern : { }
+
+ 1. Return NormalCompletion(empty).
+---*/
+
+function* f({}) {}
+
+assert.throws(TypeError, function() {
+ f(null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-init-undefined.js b/js/src/tests/test262/language/statements/generators/dstr/obj-init-undefined.js
new file mode 100644
index 0000000000..a848b4ecd6
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-init-undefined.js
@@ -0,0 +1,53 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-init-undefined.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Value specifed for object binding pattern must be object coercible (undefined) (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: BindingInitialization
+
+ ObjectBindingPattern : { }
+
+ 1. Return NormalCompletion(empty).
+---*/
+
+function* f({}) {}
+
+assert.throws(TypeError, function() {
+ f(undefined);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-empty.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-empty.js
new file mode 100644
index 0000000000..9b32514df7
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-empty.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-empty.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: No property access occurs for an "empty" object binding pattern (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ Runtime Semantics: BindingInitialization
+
+ ObjectBindingPattern : { }
+
+ 1. Return NormalCompletion(empty).
+---*/
+var accessCount = 0;
+var obj = Object.defineProperty({}, 'attr', {
+ get: function() {
+ accessCount += 1;
+ }
+});
+
+var callCount = 0;
+function* f({}) {
+ assert.sameValue(accessCount, 0);
+ callCount = callCount + 1;
+};
+f(obj).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-get-value-err.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-get-value-err.js
new file mode 100644
index 0000000000..81b68df892
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-get-value-err.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-get-value-err.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Error thrown when accessing the corresponding property of the value object (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 4. Let v be GetV(value, propertyName).
+ 5. ReturnIfAbrupt(v).
+---*/
+var poisonedProperty = Object.defineProperty({}, 'poisoned', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+function* f({ poisoned }) {}
+
+assert.throws(Test262Error, function() {
+ f(poisonedProperty);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-arrow.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-arrow.js
new file mode 100644
index 0000000000..a5ed67f583
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-arrow.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-fn-name-arrow.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding assigns `name` to arrow functions (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ i. Let hasNameProperty be HasOwnProperty(v, "name").
+ ii. ReturnIfAbrupt(hasNameProperty).
+ iii. If hasNameProperty is false, perform SetFunctionName(v,
+ bindingId).
+---*/
+
+var callCount = 0;
+function* f({ arrow = () => {} }) {
+ assert.sameValue(arrow.name, 'arrow');
+ callCount = callCount + 1;
+};
+f({}).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-class.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-class.js
new file mode 100644
index 0000000000..09ceecbbdb
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-class.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-fn-name-class.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding assigns `name` to "anonymous" classes (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ i. Let hasNameProperty be HasOwnProperty(v, "name").
+ ii. ReturnIfAbrupt(hasNameProperty).
+ iii. If hasNameProperty is false, perform SetFunctionName(v,
+ bindingId).
+---*/
+
+var callCount = 0;
+function* f({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
+ assert.sameValue(cls.name, 'cls');
+ assert.notSameValue(xCls.name, 'xCls');
+ assert.notSameValue(xCls2.name, 'xCls2');
+ callCount = callCount + 1;
+};
+f({}).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-cover.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-cover.js
new file mode 100644
index 0000000000..a5b47f9827
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-cover.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-fn-name-cover.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding assigns `name` to "anonymous" functions "through" cover grammar (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ i. Let hasNameProperty be HasOwnProperty(v, "name").
+ ii. ReturnIfAbrupt(hasNameProperty).
+ iii. If hasNameProperty is false, perform SetFunctionName(v,
+ bindingId).
+---*/
+
+var callCount = 0;
+function* f({ cover = (function () {}), xCover = (0, function() {}) }) {
+ assert.sameValue(cover.name, 'cover');
+ assert.notSameValue(xCover.name, 'xCover');
+ callCount = callCount + 1;
+};
+f({}).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-fn.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-fn.js
new file mode 100644
index 0000000000..b685b28bba
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-fn.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-fn-name-fn.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding assigns name to "anonymous" functions (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ i. Let hasNameProperty be HasOwnProperty(v, "name").
+ ii. ReturnIfAbrupt(hasNameProperty).
+ iii. If hasNameProperty is false, perform SetFunctionName(v,
+ bindingId).
+---*/
+
+var callCount = 0;
+function* f({ fn = function () {}, xFn = function x() {} }) {
+ assert.sameValue(fn.name, 'fn');
+ assert.notSameValue(xFn.name, 'xFn');
+ callCount = callCount + 1;
+};
+f({}).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-gen.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-gen.js
new file mode 100644
index 0000000000..7db82c0115
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-fn-name-gen.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-fn-name-gen.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: SingleNameBinding assigns name to "anonymous" generator functions (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ d. If IsAnonymousFunctionDefinition(Initializer) is true, then
+ i. Let hasNameProperty be HasOwnProperty(v, "name").
+ ii. ReturnIfAbrupt(hasNameProperty).
+ iii. If hasNameProperty is false, perform SetFunctionName(v,
+ bindingId).
+
+---*/
+
+var callCount = 0;
+function* f({ gen = function* () {}, xGen = function* x() {} }) {
+ assert.sameValue(gen.name, 'gen');
+ assert.notSameValue(xGen.name, 'xGen');
+ callCount = callCount + 1;
+};
+f({}).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-skipped.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-skipped.js
new file mode 100644
index 0000000000..1c3121fdce
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-skipped.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-skipped.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Destructuring initializer is not evaluated when value is not `undefined` (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ [...]
+ [...]
+---*/
+var initCount = 0;
+function counter() {
+ initCount += 1;
+}
+
+var callCount = 0;
+function* f({ w = counter(), x = counter(), y = counter(), z = counter() }) {
+ assert.sameValue(w, null);
+ assert.sameValue(x, 0);
+ assert.sameValue(y, false);
+ assert.sameValue(z, '');
+ assert.sameValue(initCount, 0);
+ callCount = callCount + 1;
+};
+f({ w: null, x: 0, y: false, z: '' }).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-throws.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-throws.js
new file mode 100644
index 0000000000..189d76f211
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-throws.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-throws.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Error thrown when evaluating the initializer (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+---*/
+function thrower() {
+ throw new Test262Error();
+}
+
+function* f({ x = thrower() }) {}
+
+assert.throws(Test262Error, function() {
+ f({});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-unresolvable.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-unresolvable.js
new file mode 100644
index 0000000000..f90a60608c
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-init-unresolvable.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-init-unresolvable.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Destructuring initializer is an unresolvable reference (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 6. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+
+ 6.2.3.1 GetValue (V)
+
+ 1. ReturnIfAbrupt(V).
+ 2. If Type(V) is not Reference, return V.
+ 3. Let base be GetBase(V).
+ 4. If IsUnresolvableReference(V), throw a ReferenceError exception.
+---*/
+
+function* f({ x = unresolvableReference }) {}
+
+assert.throws(ReferenceError, function() {
+ f({});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-trailing-comma.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-trailing-comma.js
new file mode 100644
index 0000000000..2e84e3cee0
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-id-trailing-comma.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-id-trailing-comma.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Trailing comma is allowed following BindingPropertyList (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+
+ ObjectBindingPattern[Yield] :
+ { }
+ { BindingPropertyList[?Yield] }
+ { BindingPropertyList[?Yield] , }
+---*/
+
+var callCount = 0;
+function* f({ x, }) {
+ assert.sameValue(x, 23);
+ callCount = callCount + 1;
+};
+f({ x: 23 }).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-list-err.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-list-err.js
new file mode 100644
index 0000000000..61f598558e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-list-err.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-list-err.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Binding property list evaluation is interrupted by an abrupt completion (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingPropertyList : BindingPropertyList , BindingProperty
+
+ 1. Let status be the result of performing BindingInitialization for
+ BindingPropertyList using value and environment as arguments.
+ 2. ReturnIfAbrupt(status).
+---*/
+var initCount = 0;
+function thrower() {
+ throw new Test262Error();
+}
+
+function* f({ a, b = thrower(), c = ++initCount }) {}
+
+assert.throws(Test262Error, function() {
+ f({});
+});
+
+assert.sameValue(initCount, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-init.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-init.js
new file mode 100644
index 0000000000..c909c78b71
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-init.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-ary-init.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Object binding pattern with "nested" array binding pattern using initializer (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+var callCount = 0;
+function* f({ w: [x, y, z] = [4, 5, 6] }) {
+ assert.sameValue(x, 4);
+ assert.sameValue(y, 5);
+ assert.sameValue(z, 6);
+
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ callCount = callCount + 1;
+};
+f({}).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-trailing-comma.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-trailing-comma.js
new file mode 100644
index 0000000000..ff3428a01c
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-trailing-comma.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-ary-trailing-comma.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Trailing comma is allowed following BindingPropertyList (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+
+ ObjectBindingPattern[Yield] :
+ { }
+ { BindingPropertyList[?Yield] }
+ { BindingPropertyList[?Yield] , }
+---*/
+
+var callCount = 0;
+function* f({ x: [y], }) {
+ assert.sameValue(y,45);
+ callCount = callCount + 1;
+};
+f({ x: [45] }).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-value-null.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-value-null.js
new file mode 100644
index 0000000000..caed1efbf4
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary-value-null.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-ary-value-null.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Object binding pattern with "nested" array binding pattern taking the `null` value (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+function* f({ w: [x, y, z] = [4, 5, 6] }) {}
+
+assert.throws(TypeError, function() {
+ f({ w: null });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary.js
new file mode 100644
index 0000000000..45d0cc62e1
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-ary.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-ary.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Object binding pattern with "nested" array binding pattern not using initializer (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+var callCount = 0;
+function* f({ w: [x, y, z] = [4, 5, 6] }) {
+ assert.sameValue(x, 7);
+ assert.sameValue(y, undefined);
+ assert.sameValue(z, undefined);
+
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ callCount = callCount + 1;
+};
+f({ w: [7, undefined, ] }).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-eval-err.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-eval-err.js
new file mode 100644
index 0000000000..10a8a93a4c
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-eval-err.js
@@ -0,0 +1,57 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-eval-err.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Evaluation of property name returns an abrupt completion (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.5 Runtime Semantics: BindingInitialization
+
+ BindingProperty : PropertyName : BindingElement
+
+ 1. Let P be the result of evaluating PropertyName
+ 2. ReturnIfAbrupt(P).
+---*/
+function thrower() {
+ throw new Test262Error();
+}
+
+function* f({ [thrower()]: x }) {}
+
+assert.throws(Test262Error, function() {
+ f({});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-get-value-err.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-get-value-err.js
new file mode 100644
index 0000000000..0b27f0c3a1
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-get-value-err.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-get-value-err.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Error thrown when accessing the corresponding property of the value object (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ 1. Let v be GetV(value, propertyName).
+ 2. ReturnIfAbrupt(v).
+---*/
+var initEvalCount = 0;
+var poisonedProperty = Object.defineProperty({}, 'poisoned', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+function* f({ poisoned: x = ++initEvalCount }) {}
+
+assert.throws(Test262Error, function() {
+ f(poisonedProperty);
+});
+
+assert.sameValue(initEvalCount, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-skipped.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-skipped.js
new file mode 100644
index 0000000000..70ff1b6d1a
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-skipped.js
@@ -0,0 +1,78 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-init-skipped.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Destructuring initializer is not evaluated when value is not `undefined` (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+---*/
+var initCount = 0;
+function counter() {
+ initCount += 1;
+}
+
+var callCount = 0;
+function* f({ s: t = counter(), u: v = counter(), w: x = counter(), y: z = counter() }) {
+ assert.sameValue(t, null);
+ assert.sameValue(v, 0);
+ assert.sameValue(x, false);
+ assert.sameValue(z, '');
+ assert.sameValue(initCount, 0);
+
+ assert.throws(ReferenceError, function() {
+ s;
+ });
+ assert.throws(ReferenceError, function() {
+ u;
+ });
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ assert.throws(ReferenceError, function() {
+ y;
+ });
+ callCount = callCount + 1;
+};
+f({ s: null, u: 0, w: false, y: '' }).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-throws.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-throws.js
new file mode 100644
index 0000000000..7ce5179fad
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-throws.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-init-throws.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Error thrown when evaluating the initializer (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+---*/
+function thrower() {
+ throw new Test262Error();
+}
+
+function* f({ x: y = thrower() }) {}
+
+assert.throws(Test262Error, function() {
+ f({});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-unresolvable.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-unresolvable.js
new file mode 100644
index 0000000000..5abdd969a7
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init-unresolvable.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-init-unresolvable.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Destructuring initializer is an unresolvable reference (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ BindingElement : BindingPattern Initializeropt
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+
+ 6.2.3.1 GetValue (V)
+
+ 1. ReturnIfAbrupt(V).
+ 2. If Type(V) is not Reference, return V.
+ 3. Let base be GetBase(V).
+ 4. If IsUnresolvableReference(V), throw a ReferenceError exception.
+---*/
+
+function* f({ x: y = unresolvableReference }) {}
+
+assert.throws(ReferenceError, function() {
+ f({});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init.js
new file mode 100644
index 0000000000..f2be8328f7
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-init.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-init.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Binding as specified via property name, identifier, and initializer (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f({ x: y = 33 }) {
+ assert.sameValue(y, 33);
+ assert.throws(ReferenceError, function() {
+ x;
+ });
+ callCount = callCount + 1;
+};
+f({ }).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-trailing-comma.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-trailing-comma.js
new file mode 100644
index 0000000000..80d26f50a5
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id-trailing-comma.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id-trailing-comma.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Trailing comma is allowed following BindingPropertyList (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3 Destructuring Binding Patterns
+
+ ObjectBindingPattern[Yield] :
+ { }
+ { BindingPropertyList[?Yield] }
+ { BindingPropertyList[?Yield] , }
+---*/
+
+var callCount = 0;
+function* f({ x: y, }) {
+ assert.sameValue(y, 23);
+
+ assert.throws(ReferenceError, function() {
+ x;
+ });
+ callCount = callCount + 1;
+};
+f({ x: 23 }).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id.js
new file mode 100644
index 0000000000..9c1aa78c65
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-id.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-id.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Binding as specified via property name and identifier (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ SingleNameBinding : BindingIdentifier Initializeropt
+
+ [...]
+ 8. Return InitializeReferencedBinding(lhs, v).
+---*/
+
+var callCount = 0;
+function* f({ x: y }) {
+ assert.sameValue(y, 23);
+ assert.throws(ReferenceError, function() {
+ x;
+ });
+ callCount = callCount + 1;
+};
+f({ x: 23 }).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-init.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-init.js
new file mode 100644
index 0000000000..4bfe00d8ed
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-init.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-obj-init.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Object binding pattern with "nested" object binding pattern using initializer (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ a. Let defaultValue be the result of evaluating Initializer.
+ b. Let v be GetValue(defaultValue).
+ c. ReturnIfAbrupt(v).
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+var callCount = 0;
+function* f({ w: { x, y, z } = { x: 4, y: 5, z: 6 } }) {
+ assert.sameValue(x, 4);
+ assert.sameValue(y, 5);
+ assert.sameValue(z, 6);
+
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ callCount = callCount + 1;
+};
+f({ w: undefined }).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-value-null.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-value-null.js
new file mode 100644
index 0000000000..703a216c95
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-value-null.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-obj-value-null.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Object binding pattern with "nested" object binding pattern taking the `null` value (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+function* f({ w: { x, y, z } = { x: 4, y: 5, z: 6 } }) {}
+
+assert.throws(TypeError, function() {
+ f({ w: null });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-value-undef.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-value-undef.js
new file mode 100644
index 0000000000..f3ddc0a9b8
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj-value-undef.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-obj-value-undef.case
+// - src/dstr-binding/error/gen-func-decl.template
+/*---
+description: Object binding pattern with "nested" object binding pattern taking the `null` value (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+function* f({ w: { x, y, z } = undefined }) {}
+
+assert.throws(TypeError, function() {
+ f({ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj.js
new file mode 100644
index 0000000000..eac87078f3
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-prop-obj.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-prop-obj.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Object binding pattern with "nested" object binding pattern not using initializer (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [generators, destructuring-binding]
+flags: [generated]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+
+ 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
+
+ [...]
+ 3. If Initializer is present and v is undefined, then
+ [...]
+ 4. Return the result of performing BindingInitialization for BindingPattern
+ passing v and environment as arguments.
+---*/
+
+var callCount = 0;
+function* f({ w: { x, y, z } = { x: 4, y: 5, z: 6 } }) {
+ assert.sameValue(x, undefined);
+ assert.sameValue(y, undefined);
+ assert.sameValue(z, 7);
+
+ assert.throws(ReferenceError, function() {
+ w;
+ });
+ callCount = callCount + 1;
+};
+f({ w: { x: undefined, z: 7 } }).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-getter.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-getter.js
new file mode 100644
index 0000000000..a6bd6854a9
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-getter.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-rest-getter.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Getter is called when obj is being deconstructed to a rest Object (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [object-rest, generators, destructuring-binding]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+---*/
+var count = 0;
+
+var callCount = 0;
+function* f({...x}) {
+ assert.sameValue(count, 1);
+
+ verifyProperty(x, "v", {
+ enumerable: true,
+ writable: true,
+ configurable: true,
+ value: 2
+ });
+ callCount = callCount + 1;
+};
+f({ get v() { count++; return 2; } }).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-skip-non-enumerable.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-skip-non-enumerable.js
new file mode 100644
index 0000000000..f5b2501a1a
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-skip-non-enumerable.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-rest-skip-non-enumerable.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest object doesn't contain non-enumerable properties (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [object-rest, generators, destructuring-binding]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+---*/
+var o = {a: 3, b: 4};
+Object.defineProperty(o, "x", { value: 4, enumerable: false });
+
+var callCount = 0;
+function* f({...rest}) {
+ assert.sameValue(rest.x, undefined);
+
+ verifyProperty(rest, "a", {
+ enumerable: true,
+ writable: true,
+ configurable: true,
+ value: 3
+ });
+
+ verifyProperty(rest, "b", {
+ enumerable: true,
+ writable: true,
+ configurable: true,
+ value: 4
+ });
+ callCount = callCount + 1;
+};
+f(o).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-val-obj.js b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-val-obj.js
new file mode 100644
index 0000000000..5191cb3772
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/obj-ptrn-rest-val-obj.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dstr-binding/obj-ptrn-rest-val-obj.case
+// - src/dstr-binding/default/gen-func-decl.template
+/*---
+description: Rest object contains just unextracted data (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+features: [object-rest, generators, destructuring-binding]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+ GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+ [...]
+ 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+ GeneratorBody, scope, strict).
+ [...]
+
+ 9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+ [...]
+ 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+ [...]
+
+ 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+ 1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+ [...]
+
+ 9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+ [...]
+ 23. Let iteratorRecord be Record {[[iterator]]:
+ CreateListIterator(argumentsList), [[done]]: false}.
+ 24. If hasDuplicates is true, then
+ [...]
+ 25. Else,
+ b. Let formalStatus be IteratorBindingInitialization for formals with
+ iteratorRecord and env as arguments.
+ [...]
+---*/
+
+var callCount = 0;
+function* f({a, b, ...rest}) {
+ assert.sameValue(rest.a, undefined);
+ assert.sameValue(rest.b, undefined);
+
+ verifyProperty(rest, "x", {
+ enumerable: true,
+ writable: true,
+ configurable: true,
+ value: 1
+ });
+
+ verifyProperty(rest, "y", {
+ enumerable: true,
+ writable: true,
+ configurable: true,
+ value: 2
+ });
+ callCount = callCount + 1;
+};
+f({x: 1, y: 2, a: 5, b: 3}).next();
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/generators/dstr/shell.js b/js/src/tests/test262/language/statements/generators/dstr/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/statements/generators/dstr/shell.js