dillon1000/react
Commit
Browse files Codegen for scopes without dependencies
Completes a todo for the `if` condition of scopes without any inputs. In this case since there are no inputs we can check for changes, we check if the first _output_ cache slot is set to the sentinel. For this to work we need to ensure that all scopes have at least one output, which isn't currently the case. Dead code can produce output-less sentinels. So this PR also adds a pass to find scopes w/o any outputs and convert them to regular blocks. We could in theory also just delete them, but for now let's be more conservative. This is something we'd want to highlight as a diagnostic in an IDE, though existing dead code linters would almost certainly find this case too.
Changed paths67 files
First-parent comparisoncompiler/forget/src/CompilerPipeline.ts ModifiedM compiler/forget/src/ReactiveScopes/CodegenReactiveFunction.ts ModifiedA compiler/forget/src/ReactiveScopes/PruneUnusedScopes.ts AddedM compiler/forget/src/ReactiveScopes/index.ts ModifiedA compiler/forget/src/ReactiveScopes/visitors.ts AddedM compiler/forget/src/__tests__/fixtures/hir/_bug_conditional-break-labeled.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/alias-nested-member-path-mutate.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/alias-nested-member-path.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/assignment-variations.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/call.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/conditional-break.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/constructor.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/dependencies-outputs.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/dependencies.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/extend-scopes-if.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/frozen-after-alias.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/hook-call.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/hooks-freeze-arguments.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/inverted-if.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/jsx-fragment.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/logical-expression.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/mutable-lifetime-loops.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/mutable-lifetime-with-aliasing.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/mutable-liverange-loop.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/overlapping-scopes-interleaved-by-terminal.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/overlapping-scopes-interleaved.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/overlapping-scopes-shadowed.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/overlapping-scopes-while.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/reactive-scope-grouping.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/reassignment-conditional.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/reassignment.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/simple-alias.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/simple.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-arrayexpression.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-call-jsx-2.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-call-jsx.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-complex-multiple-if.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-complex-single-if.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-for-of.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-for-trivial-update.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-for.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-nested-partial-phi.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-newexpression.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-objectexpression-phi.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-objectexpression.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-property-alias-if.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-property-alias-mutate-inside-if.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-property-alias-mutate.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-property-call.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-property-mutate-2.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-property-mutate-alias.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-property-mutate.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-property.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-return.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-simple-phi.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-switch.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-throw.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/ssa-while.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/switch.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/transitive-alias-fields.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/type-args-test-binary-operator.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/type-binary-operator.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/type-field-load.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/type-test-field-load-binary-op.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/type-test-field-store.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/type-test-polymorphic.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/hir/type-test-return-type-inference.expect.md ModifiedPatch
Files changed
Rendering syntax-highlighted changes…