Skip to content

Commit 4f4f03d

Browse files
authored
Fix cacheing of module type (#1393)
This fixes an issue where the `module` type is incorrectly cached.
1 parent 6cd03c7 commit 4f4f03d

File tree

9 files changed

+226
-59
lines changed

9 files changed

+226
-59
lines changed

pkl-core/src/main/java/org/pkl/core/ast/member/PropertyTypeNode.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,11 @@ protected Object executeImpl(VirtualFrame frame) {
6969
defaultValue =
7070
typeNode.createDefaultValue(
7171
frame, VmLanguage.get(this), getSourceSection(), qualifiedPropertyName);
72-
defaultValueInitialized = true;
72+
// can't cache default value for `module` type in a non-final module because it's a self-type
73+
// (the default value changes when inherited).
74+
if (typeNode.isFinalType()) {
75+
defaultValueInitialized = true;
76+
}
7377
}
7478
return defaultValue;
7579
}

pkl-core/src/main/java/org/pkl/core/ast/type/GetParentForTypeNode.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,20 @@ private TypeNode getTypeNode(VirtualFrame frame) {
5050
@Override
5151
public Object executeGeneric(VirtualFrame frame) {
5252
if (defaultValue != null) return defaultValue;
53-
5453
CompilerDirectives.transferToInterpreterAndInvalidate();
5554

5655
var typeNode = getTypeNode(frame);
57-
defaultValue =
56+
var defaultValue =
5857
typeNode.createDefaultValue(frame, VmLanguage.get(this), sourceSection, qualifiedName);
5958

60-
if (defaultValue != null) {
59+
// can't cache default value for `module` type in a non-final module because it's a self-type
60+
// (the default value changes when inherited).
61+
if (typeNode.isFinalType() && defaultValue != null) {
6162
unresolvedTypeNode = null;
63+
this.defaultValue = defaultValue;
64+
}
65+
66+
if (defaultValue != null) {
6267
return defaultValue;
6368
}
6469

0 commit comments

Comments
 (0)