[PR #922] [CLOSED] WIP: constraint details #809

Closed
opened 2025-12-30 01:26:56 +01:00 by adam · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/apple/pkl/pull/922
Author: @bioball
Created: 1/31/2025
Status: Closed

Base: mainHead: constraint-details


📝 Commits (3)

  • 8d79f25 WIP: constraint details
  • 860154e Use frame arguments to control eager/lazy typechecks
  • 703fa70 Polish

📊 Changes

79 files changed (+948 additions, -538 deletions)

View changed files

📝 pkl-cli/src/test/kotlin/org/pkl/cli/CliMainTest.kt (+5 -2)
📝 pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java (+1 -1)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/binary/ComparatorNode.java (+3 -2)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/binary/LetExprNode.java (+1 -1)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/binary/PipeNode.java (+4 -3)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/binary/SubscriptNode.java (+20 -9)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorPredicateMemberNode.java (+1 -1)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/literal/AmendFunctionNode.java (+4 -3)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/member/InferParentWithinPropertyNode.java (+6 -3)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/member/InvokeMethodDirectNode.java (+6 -4)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/member/InvokeMethodLexicalNode.java (+5 -4)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/member/InvokeMethodVirtualNode.java (+21 -16)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/member/InvokeSuperMethodNode.java (+5 -4)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadLocalPropertyNode.java (+2 -2)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadPropertyNode.java (+11 -3)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadSuperEntryNode.java (+10 -5)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadSuperPropertyNode.java (+3 -3)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/member/ResolveMethodNode.java (+5 -3)
📝 pkl-core/src/main/java/org/pkl/core/ast/expression/primary/ResolveVariableNode.java (+2 -1)
📝 pkl-core/src/main/java/org/pkl/core/ast/lambda/ApplyVmFunction0Node.java (+9 -4)

...and 59 more files

📄 Description

Fixes https://github.com/apple/pkl/issues/918

This causes Pkl to eagerly check type nodes that are executed through a constraint.

In the following snippet, the lambda parameter type (Listing<Person>) because an eager typecheck.

foo: Listing(firstOneIsSandy)

local firstOneIsSandy = (it: Listing<Person>) -> it[0].name == "Sandy"

This adds a new implicit frame argument to every frame: the 0th frame argument is now EnumSet<FrameMarkers>.

A frame's argument layout changes to>

index description
0 Frame markers
1 Receiver
2 Owner
3+ Generic arguments

Frame markers get propagated through child call nodes.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/apple/pkl/pull/922 **Author:** [@bioball](https://github.com/bioball) **Created:** 1/31/2025 **Status:** ❌ Closed **Base:** `main` ← **Head:** `constraint-details` --- ### 📝 Commits (3) - [`8d79f25`](https://github.com/apple/pkl/commit/8d79f25fc219503fa43d51f6142d4ae0997505ee) WIP: constraint details - [`860154e`](https://github.com/apple/pkl/commit/860154e1d3a56795ce54393a780115b9559ec8a7) Use frame arguments to control eager/lazy typechecks - [`703fa70`](https://github.com/apple/pkl/commit/703fa7045f624d9f1fc1eea8e4b8da08ae7aadc5) Polish ### 📊 Changes **79 files changed** (+948 additions, -538 deletions) <details> <summary>View changed files</summary> 📝 `pkl-cli/src/test/kotlin/org/pkl/cli/CliMainTest.kt` (+5 -2) 📝 `pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java` (+1 -1) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/binary/ComparatorNode.java` (+3 -2) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/binary/LetExprNode.java` (+1 -1) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/binary/PipeNode.java` (+4 -3) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/binary/SubscriptNode.java` (+20 -9) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorPredicateMemberNode.java` (+1 -1) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/literal/AmendFunctionNode.java` (+4 -3) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/member/InferParentWithinPropertyNode.java` (+6 -3) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/member/InvokeMethodDirectNode.java` (+6 -4) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/member/InvokeMethodLexicalNode.java` (+5 -4) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/member/InvokeMethodVirtualNode.java` (+21 -16) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/member/InvokeSuperMethodNode.java` (+5 -4) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadLocalPropertyNode.java` (+2 -2) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadPropertyNode.java` (+11 -3) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadSuperEntryNode.java` (+10 -5) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadSuperPropertyNode.java` (+3 -3) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/member/ResolveMethodNode.java` (+5 -3) 📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/primary/ResolveVariableNode.java` (+2 -1) 📝 `pkl-core/src/main/java/org/pkl/core/ast/lambda/ApplyVmFunction0Node.java` (+9 -4) _...and 59 more files_ </details> ### 📄 Description Fixes https://github.com/apple/pkl/issues/918 This causes Pkl to eagerly check type nodes that are executed through a constraint. In the following snippet, the lambda parameter type (`Listing<Person>`) because an eager typecheck. ```pkl foo: Listing(firstOneIsSandy) local firstOneIsSandy = (it: Listing<Person>) -> it[0].name == "Sandy" ``` This adds a new implicit frame argument to every frame: the 0th frame argument is now `EnumSet<FrameMarkers>`. A frame's argument layout changes to> | index | description | | --- | --- | | 0 | Frame markers | | 1 | Receiver | | 2 | Owner | | 3+ | Generic arguments | Frame markers get propagated through child call nodes. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
adam added the pull-request label 2025-12-30 01:26:56 +01:00
adam closed this issue 2025-12-30 01:26:56 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/pkl#809