dillon1000/react

Commit

RHS member expression converts to PropertyLoad

This is an incremental step to removing `Place.memberPath`. This PR changes how 
we handle MemberExpressions in rvalue position, converting to a new 
`PropertyLoad` InstructionValue variant. Example: 

``` 

let x = a.b; 

x.y = b.c; 

=> 

Const tmp1 = PropertyLoad a, 'b'; 

Const x = Place tmp1; 

Const tmp2 = PropertyLoad b, 'c'; 

Reassign x.y = tmp2 

``` 

That we already recently made a chance to ensure that _if_ the lvalue is a 
member expression, that we convert the RHS to a Place. So although `x.y = b.c` 
could technically be lowered to a single instruction (with the`b.c` as a 
PropertyLoad), we force this to a temporary to ensure that we can independently 
memoize the RHS value. 

The net result is that the following combinations are possible: 

* `x = y`, lvalue identifier, rvalue identifier 

* `x.y = y` lvalue member path, rvalue identifier 

* `x = y.z` lvalue identifier, rvalue property load 

As noted above, `x.y = a.b` no longer occurs (and there's an invariant for this 
in one of the passes). 

A follow-up PR will add a PropertyStore instruction so that we can remove member 
paths in lvalue position too.
Browse files
Changed paths25 files
First-parent comparison
M compiler/forget/src/CompilerPipeline.ts ModifiedM compiler/forget/src/HIR/BuildHIR.ts ModifiedM compiler/forget/src/HIR/Codegen.ts ModifiedM compiler/forget/src/HIR/HIR.ts ModifiedM compiler/forget/src/HIR/InferAlias.ts ModifiedM compiler/forget/src/HIR/InferMutableRanges.ts ModifiedM compiler/forget/src/HIR/InferReferenceEffects.ts ModifiedM compiler/forget/src/HIR/PrintHIR.ts ModifiedM compiler/forget/src/HIR/visitors.ts ModifiedM compiler/forget/src/ReactiveScopes/InferReactiveScopeVariables.ts ModifiedM compiler/forget/src/ReactiveScopes/PropagateScopeDependencies.ts ModifiedM compiler/forget/src/Utils/DisjointSet.ts ModifiedM compiler/forget/src/Utils/logger.ts ModifiedA compiler/forget/src/__tests__/fixtures/hir/_bug_invalid-scope.expect.md AddedA compiler/forget/src/__tests__/fixtures/hir/_bug_invalid-scope.js AddedA compiler/forget/src/__tests__/fixtures/hir/assignment-variations-complex-lvalue.expect.md AddedA compiler/forget/src/__tests__/fixtures/hir/assignment-variations-complex-lvalue.js AddedM compiler/forget/src/__tests__/fixtures/hir/assignment-variations.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/assignment-variations.js ModifiedM compiler/forget/src/__tests__/fixtures/hir/component.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/issue933-disjoint-set-infinite-loop.expect.md ModifiedA compiler/forget/src/__tests__/fixtures/hir/simple-scope.expect.md AddedA compiler/forget/src/__tests__/fixtures/hir/simple-scope.js AddedA compiler/forget/src/__tests__/fixtures/hir/while-property.expect.md AddedA compiler/forget/src/__tests__/fixtures/hir/while-property.js Added
Patch

Files changed

Rendering syntax-highlighted changes…