mirror of
https://github.com/apple/pkl.git
synced 2026-01-13 15:13:38 +01:00
[PR #844] [MERGED] Overhaul implementation of for-generators #768
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/apple/pkl/pull/844
Author: @odenix
Created: 12/10/2024
Status: ✅ Merged
Merged: 1/28/2025
Merged by: @bioball
Base:
main← Head:for-generator📝 Commits (5)
43ddb6aOverhaul implementation of for-generatorsf5fcc70Polish code7be3e44Reformat code80c7319Address review feedback636a2b8Address review feedback📊 Changes
57 files changed (+909 additions, -1139 deletions)
View changed files
📝
pkl-core/src/main/java/org/pkl/core/ast/MemberNode.java(+1 -6)📝
pkl-core/src/main/java/org/pkl/core/ast/VmModifier.java(+1 -8)📝
pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java(+126 -155)📝
pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java(+73 -44)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/binary/LetExprNode.java(+3 -4)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorElementNode.java(+13 -20)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorEntryNode.java(+5 -15)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorForNode.java(+55 -102)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorMemberNode.java(+35 -77)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorObjectLiteralNode.java(+33 -44)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorPredicateMemberNode.java(+5 -13)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorPropertyNode.java(+19 -26)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorSpreadNode.java(+62 -107)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorWhenNode.java(+2 -2)➕
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/ObjectData.java(+93 -0)➕
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/RestoreForBindingsNode.java(+46 -0)➖
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/WriteForVariablesNode.java(+0 -52)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/literal/AmendFunctionNode.java(+5 -43)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/literal/FunctionLiteralNode.java(+2 -3)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/literal/ObjectLiteralNode.java(+2 -2)...and 37 more files
📄 Description
Based on: https://github.com/apple/pkl/pull/837
Motivation:
Changes:
SymbolTable.enterForGenerator()RestoreForBindingsNodeduring initial AST constructioninstead of calling
MemberNode.replaceBody()later onobjectMemberInserterisInIterableexecuteAndSetEagerlyAmendFunctionNodeTypeNode.executeAndSet()ResolveVariableNodeno longer needs to search auxiliary slotsRead(Enclosing)AuxiliarySlotis no longer neededVirtualFramethat is a copy of the current frame (arguments + slots)
and stores the iteration key and value in additional slots.
childNode.execute(newFrame)owner.extraStorageif their for-generator slots may be accessed when a generated member is executed
* retrieve the corresponding frame stored in
owner.extraStorage* copy the retrieved frame's for-generator slots into slots of the current frame
Result:
generatorandAstBuilderLimitations not addressed in this PR:
This should be easy to fix.
I think this could be fixed by:
valuewithiterable[key]I think this could be fixed by:
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.