From f4983c51bed14090084855497e840800c3b4eabb Mon Sep 17 00:00:00 2001 From: Daniel Chao Date: Mon, 5 Aug 2024 10:27:50 -0700 Subject: [PATCH] Fix: globbing--read extra storage from owner instead of receiver (#607) This fixes an issue where a PklBugException is thrown when a globbed read/import is amended. --- .../unary/ImportGlobMemberBodyNode.java | 2 +- .../unary/ReadGlobMemberBodyNode.java | 2 +- .../input/basic/importGlob.pkl | 10 ++++++++ .../input/basic/readGlob.pkl | 8 +++++++ .../output/basic/importGlob.pcf | 15 ++++++++++++ .../output/basic/readGlob.pcf | 24 +++++++++++++++++++ 6 files changed, 59 insertions(+), 2 deletions(-) diff --git a/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ImportGlobMemberBodyNode.java b/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ImportGlobMemberBodyNode.java index fde8c329..7796b878 100644 --- a/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ImportGlobMemberBodyNode.java +++ b/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ImportGlobMemberBodyNode.java @@ -45,7 +45,7 @@ public final class ImportGlobMemberBodyNode extends ExpressionNode { @Override public Object executeGeneric(VirtualFrame frame) { - var mapping = VmUtils.getObjectReceiver(frame); + var mapping = VmUtils.getOwner(frame); var path = (String) VmUtils.getMemberKey(frame); return importModule(mapping, path); } diff --git a/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ReadGlobMemberBodyNode.java b/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ReadGlobMemberBodyNode.java index 838122ca..9cb86b06 100644 --- a/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ReadGlobMemberBodyNode.java +++ b/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ReadGlobMemberBodyNode.java @@ -33,7 +33,7 @@ public class ReadGlobMemberBodyNode extends ExpressionNode { @Override public Object executeGeneric(VirtualFrame frame) { - var mapping = VmUtils.getObjectReceiver(frame); + var mapping = VmUtils.getOwner(frame); var path = (String) VmUtils.getMemberKey(frame); return readResource(mapping, path); } diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/basic/importGlob.pkl b/pkl-core/src/test/files/LanguageSnippetTests/input/basic/importGlob.pkl index 521284f5..3a16590e 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/input/basic/importGlob.pkl +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/basic/importGlob.pkl @@ -16,6 +16,16 @@ examples { import*("../../input-helper/globtest/**.pkl").keys.toListing() } + ["amended"] { + (import*("../../input-helper/globtest/**.pkl")) { + [[true]] { + output { + renderer = new YamlRenderer {} + } + } + }.toMap().values.map((it) -> it.output.text).join("\n---\n") + } + ["globstar then up one level"] { import*("../../input-helper/globtest/**/../*.pkl").keys.toListing() } diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/basic/readGlob.pkl b/pkl-core/src/test/files/LanguageSnippetTests/input/basic/readGlob.pkl index 8f7b8adb..f8754f54 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/input/basic/readGlob.pkl +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/basic/readGlob.pkl @@ -8,6 +8,14 @@ examples { read*("globtest/*.txt") } + ["amended"] { + (read*("../../input-helper/globtest/**.pkl")) { + [[true]] { + text = "hi" + } + } + } + ["env:"] { // doesn't match names that include slashes read*("env:*") diff --git a/pkl-core/src/test/files/LanguageSnippetTests/output/basic/importGlob.pcf b/pkl-core/src/test/files/LanguageSnippetTests/output/basic/importGlob.pcf index e39d3d2a..5e82fd04 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/output/basic/importGlob.pcf +++ b/pkl-core/src/test/files/LanguageSnippetTests/output/basic/importGlob.pcf @@ -21,6 +21,21 @@ examples { "../../input-helper/globtest/child/moduleC.pkl" } } + ["amended"] { + """ + {} + + --- + name: moduleA + + --- + name: moduleB + + --- + name: child/moduleC + + """ + } ["globstar then up one level"] { new { "../../input-helper/globtest/child/../module with [weird] ~!characters.pkl" diff --git a/pkl-core/src/test/files/LanguageSnippetTests/output/basic/readGlob.pcf b/pkl-core/src/test/files/LanguageSnippetTests/output/basic/readGlob.pcf index 6fedc704..ade69180 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/output/basic/readGlob.pcf +++ b/pkl-core/src/test/files/LanguageSnippetTests/output/basic/readGlob.pcf @@ -50,6 +50,30 @@ examples { } } } + ["amended"] { + new { + ["../../input-helper/globtest/module with [weird] ~!characters.pkl"] { + uri = "file:///$snippetsDir/input-helper/globtest/module%20with%20%5Bweird%5D%20~!characters.pkl" + text = "hi" + base64 = "" + } + ["../../input-helper/globtest/moduleA.pkl"] { + uri = "file:///$snippetsDir/input-helper/globtest/moduleA.pkl" + text = "hi" + base64 = "bmFtZSA9ICJtb2R1bGVBIgo=" + } + ["../../input-helper/globtest/moduleB.pkl"] { + uri = "file:///$snippetsDir/input-helper/globtest/moduleB.pkl" + text = "hi" + base64 = "bmFtZSA9ICJtb2R1bGVCIgo=" + } + ["../../input-helper/globtest/child/moduleC.pkl"] { + uri = "file:///$snippetsDir/input-helper/globtest/child/moduleC.pkl" + text = "hi" + base64 = "bmFtZSA9ICJjaGlsZC9tb2R1bGVDIgo=" + } + } + } ["env:"] { new { ["env:NAME1"] = "value1"