Skip to content

Implement Object ...rest Assignment in for of loop #758

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions nova_vm/src/engine/bytecode/bytecode_compiler/assignment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -371,8 +371,10 @@ impl<'s> CompileEvaluation<'s> for ast::ObjectAssignmentTarget<'s> {
ctx.add_instruction(Instruction::Store);
}
}
if let Some(_rest) = &self.rest {
todo!()
if let Some(rest) = &self.rest {
rest.target.compile(ctx);
ctx.add_instruction(Instruction::StoreCopy);
ctx.add_instruction(Instruction::CopyDataProperties);
}
}
}
Expand Down
80 changes: 26 additions & 54 deletions tests/expectations.json
Original file line number Diff line number Diff line change
Expand Up @@ -9097,31 +9097,22 @@
"language/expressions/assignment/dstr/array-elem-iter-thrw-close.js": "FAIL",
"language/expressions/assignment/dstr/array-elem-trlg-iter-list-thrw-close-err.js": "FAIL",
"language/expressions/assignment/dstr/array-elem-trlg-iter-list-thrw-close.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-computed-property-no-strict.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-computed-property.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-descriptors.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-empty-obj.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-getter-abrupt-get-error.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-getter.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-1.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-1dot.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-1dot0.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-1e0.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-array-1.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-array-1e0.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-string-1.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-computed-property-no-strict.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-computed-property.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-descriptors.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-1.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-1dot.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-1dot0.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-1e0.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-array-1.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-array-1e0.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-non-string-computed-property-string-1.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-number.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-order.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-put-const.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-same-name.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-skip-non-enumerable.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-same-name.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-skip-non-enumerable.js": "FAIL",
"language/expressions/assignment/dstr/obj-rest-str-val.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-symbol-val.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-to-property-with-setter.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-to-property.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-val-null.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-val-undefined.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-valid-object.js": "CRASH",
"language/expressions/assignment/dstr/obj-rest-valid-object.js": "FAIL",
"language/expressions/assignment/target-member-computed-reference-null.js": "FAIL",
"language/expressions/assignment/target-member-computed-reference-undefined.js": "FAIL",
"language/expressions/assignment/target-member-computed-reference.js": "FAIL",
Expand Down Expand Up @@ -9606,7 +9597,7 @@
"language/expressions/class/elements/static-field-redeclaration.js": "FAIL",
"language/expressions/class/elements/static-private-fields-proxy-default-handler-throws.js": "FAIL",
"language/expressions/class/elements/static-private-methods-proxy-default-handler-throws.js": "FAIL",
"language/expressions/class/elements/super-access-from-arrow-func-on-field.js": "CRASH",
"language/expressions/class/elements/super-access-from-arrow-func-on-field.js": "FAIL",
"language/expressions/class/elements/syntax/valid/grammar-field-accessor.js": "CRASH",
"language/expressions/class/elements/syntax/valid/grammar-privatemeth-duplicate-get-set.js": "CRASH",
"language/expressions/class/elements/wrapped-in-sc-rs-static-async-generator-method-privatename-identifier-alt.js": "FAIL",
Expand Down Expand Up @@ -9710,7 +9701,7 @@
"language/expressions/division/S11.5.2_A4_T10.js": "FAIL",
"language/expressions/division/S11.5.2_A4_T5.js": "FAIL",
"language/expressions/division/S11.5.2_A4_T8.js": "FAIL",
"language/expressions/does-not-equals/bigint-and-number-extremes.js": "CRASH",
"language/expressions/does-not-equals/bigint-and-number-extremes.js": "FAIL",
"language/expressions/dynamic-import/always-create-new-promise.js": "CRASH",
"language/expressions/dynamic-import/assign-expr-get-value-abrupt-throws.js": "CRASH",
"language/expressions/dynamic-import/assignment-expression/additive-expr.js": "CRASH",
Expand Down Expand Up @@ -10266,7 +10257,7 @@
"language/expressions/dynamic-import/usage/top-level-import-then-is-call-expression-square-brackets.js": "CRASH",
"language/expressions/dynamic-import/usage/top-level-import-then-returns-thenable.js": "CRASH",
"language/expressions/dynamic-import/usage/top-level-import-then-specifier-tostring.js": "CRASH",
"language/expressions/equals/bigint-and-number-extremes.js": "CRASH",
"language/expressions/equals/bigint-and-number-extremes.js": "FAIL",
"language/expressions/exponentiation/applying-the-exp-operator_A15.js": "FAIL",
"language/expressions/exponentiation/applying-the-exp-operator_A21.js": "FAIL",
"language/expressions/exponentiation/applying-the-exp-operator_A6.js": "FAIL",
Expand Down Expand Up @@ -11572,7 +11563,6 @@
"language/statements/class/elements/private-static-setter-visible-to-direct-eval.js": "FAIL",
"language/statements/class/elements/privatefield-on-proxy.js": "FAIL",
"language/statements/class/elements/privatefieldadd-typeerror.js": "FAIL",
"language/statements/class/elements/privatefieldset-typeerror-11.js": "CRASH",
"language/statements/class/elements/privategetter-on-proxy.js": "FAIL",
"language/statements/class/elements/privatemethods-on-proxy.js": "FAIL",
"language/statements/class/elements/public-class-field-initialization-is-visible-to-proxy.js": "FAIL",
Expand Down Expand Up @@ -11600,7 +11590,7 @@
"language/statements/class/elements/static-field-init-with-this.js": "FAIL",
"language/statements/class/elements/static-field-redeclaration.js": "FAIL",
"language/statements/class/elements/static-private-fields-proxy-default-handler-throws.js": "FAIL",
"language/statements/class/elements/super-access-from-arrow-func-on-field.js": "CRASH",
"language/statements/class/elements/super-access-from-arrow-func-on-field.js": "FAIL",
"language/statements/class/elements/syntax/valid/grammar-field-accessor.js": "CRASH",
"language/statements/class/elements/syntax/valid/grammar-privatemeth-duplicate-get-set.js": "CRASH",
"language/statements/class/elements/wrapped-in-sc-rs-static-async-generator-method-privatename-identifier-alt.js": "FAIL",
Expand All @@ -11616,7 +11606,7 @@
"language/statements/class/gen-method/dflt-params-ref-self.js": "FAIL",
"language/statements/class/method-length-dflt.js": "FAIL",
"language/statements/class/static-init-await-binding-valid.js": "FAIL",
"language/statements/class/static-init-super-property.js": "CRASH",
"language/statements/class/static-init-super-property.js": "FAIL",
"language/statements/class/static-method-length-dflt.js": "FAIL",
"language/statements/class/subclass-builtins/subclass-ArrayBuffer.js": "FAIL",
"language/statements/class/subclass-builtins/subclass-Promise.js": "FAIL",
Expand Down Expand Up @@ -11654,27 +11644,19 @@
"language/statements/do-while/cptn-normal.js": "FAIL",
"language/statements/do-while/tco-body.js": "CRASH",
"language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js": "FAIL",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-descriptors.js": "CRASH",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-empty-obj.js": "CRASH",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-getter.js": "CRASH",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-descriptors.js": "FAIL",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-number.js": "CRASH",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-same-name.js": "CRASH",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-skip-non-enumerable.js": "CRASH",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-skip-non-enumerable.js": "FAIL",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-str-val.js": "CRASH",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-symbol-val.js": "CRASH",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-to-property-with-setter.js": "CRASH",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-to-property.js": "CRASH",
"language/statements/for-await-of/async-func-decl-dstr-obj-rest-valid-object.js": "CRASH",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-descriptors.js": "CRASH",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-empty-obj.js": "CRASH",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-getter.js": "CRASH",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-descriptors.js": "FAIL",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-number.js": "CRASH",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-same-name.js": "CRASH",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-skip-non-enumerable.js": "CRASH",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-skip-non-enumerable.js": "FAIL",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-str-val.js": "CRASH",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-symbol-val.js": "CRASH",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-to-property-with-setter.js": "CRASH",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-to-property.js": "CRASH",
"language/statements/for-await-of/async-gen-decl-dstr-obj-rest-valid-object.js": "CRASH",
"language/statements/for-await-of/ticks-with-async-iter-resolved-promise-and-constructor-lookup-two.js": "FAIL",
"language/statements/for-await-of/ticks-with-sync-iter-resolved-promise-and-constructor-lookup.js": "FAIL",
Expand All @@ -11698,10 +11680,7 @@
"language/statements/for-of/dstr/array-elem-trlg-iter-list-thrw-close.js": "FAIL",
"language/statements/for-of/dstr/obj-rest-computed-property-no-strict.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-computed-property.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-descriptors.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-empty-obj.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-getter-abrupt-get-error.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-getter.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-descriptors.js": "FAIL",
"language/statements/for-of/dstr/obj-rest-non-string-computed-property-1.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-non-string-computed-property-1dot.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-non-string-computed-property-1dot0.js": "CRASH",
Expand All @@ -11710,16 +11689,10 @@
"language/statements/for-of/dstr/obj-rest-non-string-computed-property-array-1e0.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-non-string-computed-property-string-1.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-number.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-order.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-put-const.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-same-name.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-skip-non-enumerable.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-skip-non-enumerable.js": "FAIL",
"language/statements/for-of/dstr/obj-rest-str-val.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-symbol-val.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-to-property-with-setter.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-to-property.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-val-null.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-val-undefined.js": "CRASH",
"language/statements/for-of/dstr/obj-rest-valid-object.js": "CRASH",
"language/statements/for-of/string-astral-truncated.js": "FAIL",
"language/statements/for-of/string-astral.js": "CRASH",
Expand Down Expand Up @@ -12647,14 +12620,13 @@
"staging/sm/class/superPropProxies.js": "FAIL",
"staging/sm/class/superPropStrictAssign.js": "FAIL",
"staging/sm/class/superThisStrictNoBoxing.js": "FAIL",
"staging/sm/destructuring/bug1396261.js": "CRASH",
"staging/sm/destructuring/order-super.js": "FAIL",
"staging/sm/destructuring/order.js": "FAIL",
"staging/sm/expressions/ToPropertyKey-symbols.js": "FAIL",
"staging/sm/expressions/destructuring-array-default-class.js": "FAIL",
"staging/sm/expressions/destructuring-array-default-simple.js": "CRASH",
"staging/sm/expressions/destructuring-object-__proto__-1.js": "FAIL",
"staging/sm/expressions/destructuring-object-__proto__-2.js": "CRASH",
"staging/sm/expressions/destructuring-object-__proto__-2.js": "FAIL",
"staging/sm/expressions/nested-delete-name-in-evalcode.js": "CRASH",
"staging/sm/expressions/nullish-coalescing.js": "FAIL",
"staging/sm/expressions/object-literal-__proto__.js": "FAIL",
Expand Down Expand Up @@ -12709,7 +12681,7 @@
"staging/sm/lexical-environment/block-scoped-functions-annex-b-same-name.js": "FAIL",
"staging/sm/lexical-environment/block-scoped-functions-annex-b-with.js": "CRASH",
"staging/sm/lexical-environment/block-scoped-functions-annex-b.js": "FAIL",
"staging/sm/lexical-environment/block-scoped-functions-deprecated-redecl.js": "CRASH",
"staging/sm/lexical-environment/block-scoped-functions-deprecated-redecl.js": "FAIL",
"staging/sm/lexical-environment/bug-1216623.js": "FAIL",
"staging/sm/lexical-environment/implicit-this-in-with.js": "CRASH",
"staging/sm/lexical-environment/unscopables-basics.js": "CRASH",
Expand Down
6 changes: 3 additions & 3 deletions tests/metrics.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"results": {
"crash": 1446,
"fail": 11360,
"pass": 35093,
"crash": 1392,
"fail": 11386,
"pass": 35121,
"skip": 2695,
"timeout": 0,
"unresolved": 0
Expand Down
Loading