mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
ef34ca6cb0
The previous PR only updated simple assignment expressions (where the lvalue is an identifier), this PR extends the same idea to all assignment variants. Note that there is one case that doesn't work yet, which is complex destructuring assignment as a value: ```javascript let x = makeObject(); x.foo(([[x]] = makeObject())); ``` What happens here is that we lower the destructuring to a series of steps: ``` tmp1: Destructure Const [ tmp0 ] = makeObject(); tmp2: Destructure Reassign [ x ] = tmp0; PropertyCall x, 'foo', [ tmp1 ] ``` Thankfully we can detect this case: if we have a const/let declaration with an lvalue, that's invalid. See the new error test case which shows we correctly detect & reject this case for now.