Skip to content
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

Destructuring: Fix handling of impure computed keys with object rest #9416

Merged
merged 1 commit into from Mar 27, 2019

Conversation

@motiz88
Copy link
Contributor

commented Jan 26, 2019

Q                       A
Fixed Issues? described in PR
Patch: Bug Fix? 👍
Major: Breaking Change?
Minor: New Feature?
Tests Added + Pass? Yes
Documentation PR Link
Any Dependency Changes?
License MIT

Fixes an issue in destructuring where impure computed keys in object patterns would be evaluated twice in the presence of rest properties.

// Input
var { [fn()]: x, ...y } = z;

// Old output
var _z = z,
  x = _z[fn()],
  y = _objectWithoutProperties(_z, [fn()].map(_toPropertyKey));

// New output
var _z = z,
    _fn = fn(),
    x = _z[_fn],
    y = babelHelpers.objectWithoutProperties(_z, [_fn].map(babelHelpers.toPropertyKey));

The object-rest-spread plugin handles this correctly (with an implementation that couldn't be directly copied into destructuring, unfortunately) and is the source of the exec test I've added here. I've also amended this test in both plugins to assert that the RHS expression is evaluated before the computed key expressions.

@motiz88 motiz88 force-pushed the motiz88:fix-destructuring-object-rest-computed branch from 919999f to 445d99d Jan 26, 2019

@babel-bot

This comment has been minimized.

Copy link
Collaborator

commented Jan 26, 2019

Build successful! You can test your changes in the REPL here: https://babeljs.io/repl/build/9920/

@danez
danez approved these changes Mar 27, 2019
@nicolo-ribaudo
Copy link
Member

left a comment

I'd like to merge the detructuring and object-rest plugins in the future (like I did for classes), to avoid duplicating all this logic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
6 participants
You can’t perform that action at this time.