diff --git a/docs/modules/release-notes/pages/0.31.adoc b/docs/modules/release-notes/pages/0.31.adoc index e40a361c..78b9c8c8 100644 --- a/docs/modules/release-notes/pages/0.31.adoc +++ b/docs/modules/release-notes/pages/0.31.adoc @@ -138,7 +138,7 @@ Things to watch out for when upgrading. The following bugs have been fixed. -* XXX (https://github.com/apple/pkl/issues/XXX[XXX]) +* Incorrect Function.toString() (https://github.com/apple/pkl/issues/1410[#1410]) == Contributors [small]#🙏# diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/VmFunction.java b/pkl-core/src/main/java/org/pkl/core/runtime/VmFunction.java index 2fe73ec6..c3b13c0b 100644 --- a/pkl-core/src/main/java/org/pkl/core/runtime/VmFunction.java +++ b/pkl-core/src/main/java/org/pkl/core/runtime/VmFunction.java @@ -181,4 +181,10 @@ public final class VmFunction extends VmObjectLike { public int hashCode() { return System.identityHashCode(this); } + + @Override + @TruffleBoundary + public String toString() { + return VmValueRenderer.singleLine(Integer.MAX_VALUE).render(this); + } } diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/VmValueRenderer.java b/pkl-core/src/main/java/org/pkl/core/runtime/VmValueRenderer.java index 3038df66..63c9ce82 100644 --- a/pkl-core/src/main/java/org/pkl/core/runtime/VmValueRenderer.java +++ b/pkl-core/src/main/java/org/pkl/core/runtime/VmValueRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. + * Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,8 +34,13 @@ public final class VmValueRenderer { private final String interiorNewline; private final String indent; private String currIndent = ""; + private static final VmValueRenderer maxSingleLine = + new VmValueRenderer(Integer.MAX_VALUE, " ", "; ", ""); public static VmValueRenderer singleLine(int lengthLimit) { + if (lengthLimit == Integer.MAX_VALUE) { + return maxSingleLine; + } return new VmValueRenderer(lengthLimit, " ", "; ", ""); } diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/basic/string.pkl b/pkl-core/src/test/files/LanguageSnippetTests/input/basic/string.pkl index 71fac476..39777b9f 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/input/basic/string.pkl +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/basic/string.pkl @@ -43,6 +43,10 @@ examples { "\(new Person2 { name = "Pigeon"; age = 42 })" "\(null)" "\(Null(new Person { name = "Pigeon"; age = 42 }))" + "\(() -> null)" + "\((p1) -> null)" + "\((p1, p2) -> null)" + "\((p1, p2, p3) -> null)" } ["escaping"] { diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/lambdas/lambda1.pkl b/pkl-core/src/test/files/LanguageSnippetTests/input/lambdas/lambda1.pkl index d726f9bf..797ecc94 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/input/lambdas/lambda1.pkl +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/lambdas/lambda1.pkl @@ -9,4 +9,7 @@ res3 = even.apply(11) local mult = (x, y) -> x * y -res4 = mult.apply(2, 3) \ No newline at end of file +res4 = mult.apply(2, 3) + +res5 = even.toString() +res6 = mult.toString() diff --git a/pkl-core/src/test/files/LanguageSnippetTests/output/basic/string.pcf b/pkl-core/src/test/files/LanguageSnippetTests/output/basic/string.pcf index 8b5d5a8f..65e380bd 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/output/basic/string.pcf +++ b/pkl-core/src/test/files/LanguageSnippetTests/output/basic/string.pcf @@ -34,6 +34,10 @@ examples { "My name is Pigeon and I'm 42 years old." "null" "null" + "new Function0 {}" + "new Function1 {}" + "new Function2 {}" + "new Function3 {}" } ["escaping"] { "\\\"\\(" diff --git a/pkl-core/src/test/files/LanguageSnippetTests/output/lambdas/lambda1.pcf b/pkl-core/src/test/files/LanguageSnippetTests/output/lambdas/lambda1.pcf index f84462ec..62f4b030 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/output/lambdas/lambda1.pcf +++ b/pkl-core/src/test/files/LanguageSnippetTests/output/lambdas/lambda1.pcf @@ -2,3 +2,5 @@ res1 = "abc" res2 = true res3 = false res4 = 6 +res5 = "new Function1 {}" +res6 = "new Function2 {}"