dillon1000/react
Commit
Browse files 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.
Changed paths25 files
First-parent comparisoncompiler/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 AddedPatch
Files changed
Rendering syntax-highlighted changes…