Extending an abstract class **without** overriding an abstract property crashes with ambiguous message #354

Open
opened 2025-12-30 01:23:47 +01:00 by adam · 3 comments
Owner

Originally created by @StefMa on GitHub (Oct 28, 2025).

Given:

abstract class Bird {
  abstract name: String
  function greet(bird: Bird): String = "Hello, \(bird.name)!"
}

class Pigeon extends Bird {
  // Here, I forgot to overried `name`
}

pigeon: Pigeon = new {}

Leads to:

pkl failed with error Error: Command failed: /var/task/node_modules/@pkl-community/pkl-linux-x64/bin/pkl eval - --no-project --format json --allowed-modules pkl:,repl: --allowed-modules package: --cache-dir /tmp/pkl
An unexpected error has occurred. Would you mind filing a bug report?
Cmd+Double-click the link below to open an issue.
Please copy and paste the entire error output into the issue's description, provided you can share it.

https://github.com/apple/pkl/issues/newjava.lang.IllegalArgumentException%3A%20Cannot%20convert%20VM%20value%20with%20unexpected%20type%3A%20null

–– Pkl Error ––
Cannot convert VM value with unexpected type: null

394 | external function renderDocument(value: Any): String
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
at pkl.base#JsonRenderer.renderDocument (https://github.com/apple/pkl/blob/0.25.1/stdlib/base.pkl#L394)

106 | text = renderer.renderDocument(value)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
at pkl.base#Module.output.text (https://github.com/apple/pkl/blob/0.25.1/stdlib/base.pkl#L106)

Pkl 0.25.1 (Linux 5.15.0-1050-aws, native)

java.lang.IllegalArgumentException: Cannot convert VM value with unexpected type: null
	at org.pkl.core.runtime.VmValueConverter.convert(VmValueConverter.java:100)
	at org.pkl.core.stdlib.AbstractRenderer.doVisitProperty(AbstractRenderer.java:193)
	at org.pkl.core.stdlib.AbstractRenderer.lambda$visitTyped$0(AbstractRenderer.java:256)
	at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132)
	at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148)
	at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:141)
	at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124)
	at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117)
	at org.pkl.core.stdlib.AbstractRenderer.visitTyped(AbstractRenderer.java:252)
	at org.pkl.core.runtime.VmTyped.accept(VmTyped.java:168)
	at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65)
	at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126)
	at org.pkl.core.stdlib.base.JsonRendererNodes$JsonRenderer.visitProperty(JsonRendererNodes.java:230)
	at org.pkl.core.stdlib.AbstractRenderer.doVisitProperty(AbstractRenderer.java:195)
	at org.pkl.core.stdlib.AbstractRenderer.lambda$visitTyped$0(AbstractRenderer.java:256)
	at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132)
	at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148)
	at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124)
	at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117)
	at org.pkl.core.stdlib.AbstractRenderer.visitTyped(AbstractRenderer.java:252)
	at org.pkl.core.runtime.VmTyped.accept(VmTyped.java:168)
	at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65)
	at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126)
	at org.pkl.core.stdlib.base.JsonRendererNodes$JsonRenderer.visitDocument(JsonRendererNodes.java:73)
	at org.pkl.core.stdlib.AbstractRenderer.renderDocument(AbstractRenderer.java:101)
	at org.pkl.core.stdlib.base.JsonRendererNodes$renderDocument.eval(JsonRendererNodes.java:37)
	at org.pkl.core.stdlib.base.JsonRendererNodesFactory$renderDocumentNodeGen.executeAndSpecialize(JsonRendererNodesFactory.java:65)
	at org.pkl.core.stdlib.base.JsonRendererNodesFactory$renderDocumentNodeGen.executeGeneric(JsonRendererNodesFactory.java:57)
	at org.pkl.core.ast.member.FunctionNode.execute(FunctionNode.java:119)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:115)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:194)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:97)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:495)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:68)
	at org.pkl.core.ast.expression.member.InvokeMethodVirtualNode.evalCached(InvokeMethodVirtualNode.java:136)
	at org.pkl.core.ast.expression.member.InvokeMethodVirtualNodeGen.executeAndSpecialize(InvokeMethodVirtualNodeGen.java:214)
	at org.pkl.core.ast.expression.member.InvokeMethodVirtualNodeGen.executeGeneric(InvokeMethodVirtualNodeGen.java:131)
	at org.pkl.core.ast.PklRootNode.executeBody(PklRootNode.java:41)
	at org.pkl.core.ast.MemberNode.executeBody(MemberNode.java:71)
	at org.pkl.core.ast.member.TypeCheckedPropertyNode.evalTypedObjectCached(TypeCheckedPropertyNode.java:55)
	at org.pkl.core.ast.member.TypeCheckedPropertyNodeGen.executeAndSpecialize(TypeCheckedPropertyNodeGen.java:100)
	at org.pkl.core.ast.member.TypeCheckedPropertyNodeGen.execute(TypeCheckedPropertyNodeGen.java:61)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:115)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:194)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:97)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callIndirect(OptimizedCallTarget.java:477)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:458)
	at org.graalvm.truffle/com.oracle.truffle.api.nodes.IndirectCallNode$1.call(IndirectCallNode.java:91)
	at org.pkl.core.runtime.VmUtils.doReadMember(VmUtils.java:297)
	at org.pkl.core.runtime.VmUtils.readMemberOrNull(VmUtils.java:237)
	at org.pkl.core.runtime.VmUtils.readMemberOrNull(VmUtils.java:200)
	at org.pkl.core.runtime.VmUtils.readMember(VmUtils.java:180)
	at org.pkl.core.runtime.VmUtils.readTextProperty(VmUtils.java:170)
	at org.pkl.core.EvaluatorImpl.lambda$evaluateOutputText$3(EvaluatorImpl.java:137)
	at org.pkl.core.EvaluatorImpl.lambda$doEvaluate$13(EvaluatorImpl.java:352)
	at org.pkl.core.EvaluatorImpl.doEvaluate(EvaluatorImpl.java:300)
	at org.pkl.core.EvaluatorImpl.doEvaluate(EvaluatorImpl.java:348)
	at org.pkl.core.EvaluatorImpl.evaluateOutputText(EvaluatorImpl.java:133)
	at org.pkl.core.EvaluatorImpl.evaluateExpressionString(EvaluatorImpl.java:209)
	at org.pkl.cli.CliEvaluator.writeOutput(CliEvaluator.kt:179)
	at org.pkl.cli.CliEvaluator.doRun(CliEvaluator.kt:99)
	at org.pkl.commons.cli.CliCommand.run(CliCommand.kt:45)
	at org.pkl.cli.commands.EvalCommand.run(EvalCommand.kt:86)
	at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:198)
	at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:211)
	at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:18)
	at com.github.ajalt.clikt.core.CliktCommand.parse(CliktCommand.kt:400)
	at com.github.ajalt.clikt.core.CliktCommand.parse$default(CliktCommand.kt:397)
	at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:415)
	at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:440)
	at org.pkl.cli.Main$main$1.invoke$lambda-0(Main.kt:45)
	at java.base@11.0.18/java.lang.Thread.run(Thread.java:829)
	at com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:775)
	at com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:203)
 and stderr:
 An unexpected error has occurred. Would you mind filing a bug report?
Cmd+Double-click the link below to open an issue.
Please copy and paste the entire error output into the issue's description, provided you can share it.

https://github.com/apple/pkl/issues/newjava.lang.IllegalArgumentException%3A%20Cannot%20convert%20VM%20value%20with%20unexpected%20type%3A%20null

–– Pkl Error ––
Cannot convert VM value with unexpected type: null

394 | external function renderDocument(value: Any): String
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
at pkl.base#JsonRenderer.renderDocument (https://github.com/apple/pkl/blob/0.25.1/stdlib/base.pkl#L394)

106 | text = renderer.renderDocument(value)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
at pkl.base#Module.output.text (https://github.com/apple/pkl/blob/0.25.1/stdlib/base.pkl#L106)

Pkl 0.25.1 (Linux 5.15.0-1050-aws, native)

java.lang.IllegalArgumentException: Cannot convert VM value with unexpected type: null
	at org.pkl.core.runtime.VmValueConverter.convert(VmValueConverter.java:100)
	at org.pkl.core.stdlib.AbstractRenderer.doVisitProperty(AbstractRenderer.java:193)
	at org.pkl.core.stdlib.AbstractRenderer.lambda$visitTyped$0(AbstractRenderer.java:256)
	at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132)
	at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148)
	at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:141)
	at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124)
	at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117)
	at org.pkl.core.stdlib.AbstractRenderer.visitTyped(AbstractRenderer.java:252)
	at org.pkl.core.runtime.VmTyped.accept(VmTyped.java:168)
	at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65)
	at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126)
	at org.pkl.core.stdlib.base.JsonRendererNodes$JsonRenderer.visitProperty(JsonRendererNodes.java:230)
	at org.pkl.core.stdlib.AbstractRenderer.doVisitProperty(AbstractRenderer.java:195)
	at org.pkl.core.stdlib.AbstractRenderer.lambda$visitTyped$0(AbstractRenderer.java:256)
	at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132)
	at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148)
	at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124)
	at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117)
	at org.pkl.core.stdlib.AbstractRenderer.visitTyped(AbstractRenderer.java:252)
	at org.pkl.core.runtime.VmTyped.accept(VmTyped.java:168)
	at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65)
	at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126)
	at org.pkl.core.stdlib.base.JsonRendererNodes$JsonRenderer.visitDocument(JsonRendererNodes.java:73)
	at org.pkl.core.stdlib.AbstractRenderer.renderDocument(AbstractRenderer.java:101)
	at org.pkl.core.stdlib.base.JsonRendererNodes$renderDocument.eval(JsonRendererNodes.java:37)
	at org.pkl.core.stdlib.base.JsonRendererNodesFactory$renderDocumentNodeGen.executeAndSpecialize(JsonRendererNodesFactory.java:65)
	at org.pkl.core.stdlib.base.JsonRendererNodesFactory$renderDocumentNodeGen.executeGeneric(JsonRendererNodesFactory.java:57)
	at org.pkl.core.ast.member.FunctionNode.execute(FunctionNode.java:119)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:115)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:194)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:97)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:495)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:68)
	at org.pkl.core.ast.expression.member.InvokeMethodVirtualNode.evalCached(InvokeMethodVirtualNode.java:136)
	at org.pkl.core.ast.expression.member.InvokeMethodVirtualNodeGen.executeAndSpecialize(InvokeMethodVirtualNodeGen.java:214)
	at org.pkl.core.ast.expression.member.InvokeMethodVirtualNodeGen.executeGeneric(InvokeMethodVirtualNodeGen.java:131)
	at org.pkl.core.ast.PklRootNode.executeBody(PklRootNode.java:41)
	at org.pkl.core.ast.MemberNode.executeBody(MemberNode.java:71)
	at org.pkl.core.ast.member.TypeCheckedPropertyNode.evalTypedObjectCached(TypeCheckedPropertyNode.java:55)
	at org.pkl.core.ast.member.TypeCheckedPropertyNodeGen.executeAndSpecialize(TypeCheckedPropertyNodeGen.java:100)
	at org.pkl.core.ast.member.TypeCheckedPropertyNodeGen.execute(TypeCheckedPropertyNodeGen.java:61)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:115)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:194)
	at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:97)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callIndirect(OptimizedCallTarget.java:477)
	at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:458)
	at org.graalvm.truffle/com.oracle.truffle.api.nodes.IndirectCallNode$1.call(IndirectCallNode.java:91)
	at org.pkl.core.runtime.VmUtils.doReadMember(VmUtils.java:297)
	at org.pkl.core.runtime.VmUtils.readMemberOrNull(VmUtils.java:237)
	at org.pkl.core.runtime.VmUtils.readMemberOrNull(VmUtils.java:200)
	at org.pkl.core.runtime.VmUtils.readMember(VmUtils.java:180)
	at org.pkl.core.runtime.VmUtils.readTextProperty(VmUtils.java:170)
	at org.pkl.core.EvaluatorImpl.lambda$evaluateOutputText$3(EvaluatorImpl.java:137)
	at org.pkl.core.EvaluatorImpl.lambda$doEvaluate$13(EvaluatorImpl.java:352)
	at org.pkl.core.EvaluatorImpl.doEvaluate(EvaluatorImpl.java:300)
	at org.pkl.core.EvaluatorImpl.doEvaluate(EvaluatorImpl.java:348)
	at org.pkl.core.EvaluatorImpl.evaluateOutputText(EvaluatorImpl.java:133)
	at org.pkl.core.EvaluatorImpl.evaluateExpressionString(EvaluatorImpl.java:209)
	at org.pkl.cli.CliEvaluator.writeOutput(CliEvaluator.kt:179)
	at org.pkl.cli.CliEvaluator.doRun(CliEvaluator.kt:99)
	at org.pkl.commons.cli.CliCommand.run(CliCommand.kt:45)
	at org.pkl.cli.commands.EvalCommand.run(EvalCommand.kt:86)
	at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:198)
	at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:211)
	at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:18)
	at com.github.ajalt.clikt.core.CliktCommand.parse(CliktCommand.kt:400)
	at com.github.ajalt.clikt.core.CliktCommand.parse$default(CliktCommand.kt:397)
	at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:415)
	at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:440)
	at org.pkl.cli.Main$main$1.invoke$lambda-0(Main.kt:45)
	at java.base@11.0.18/java.lang.Thread.run(Thread.java:829)
	at com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:775)
	at com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:203)

See also: https://pkl-playground.vercel.app/?share=bad-tone-whispered

I've the same issue locally with the latest 0.29.1 version:

 Pkl 0.29.1 (macOS 26.0, native)
Originally created by @StefMa on GitHub (Oct 28, 2025). Given: ```pkl abstract class Bird { abstract name: String function greet(bird: Bird): String = "Hello, \(bird.name)!" } class Pigeon extends Bird { // Here, I forgot to overried `name` } pigeon: Pigeon = new {} ``` Leads to: <details> ``` pkl failed with error Error: Command failed: /var/task/node_modules/@pkl-community/pkl-linux-x64/bin/pkl eval - --no-project --format json --allowed-modules pkl:,repl: --allowed-modules package: --cache-dir /tmp/pkl An unexpected error has occurred. Would you mind filing a bug report? Cmd+Double-click the link below to open an issue. Please copy and paste the entire error output into the issue's description, provided you can share it. https://github.com/apple/pkl/issues/newjava.lang.IllegalArgumentException%3A%20Cannot%20convert%20VM%20value%20with%20unexpected%20type%3A%20null –– Pkl Error –– Cannot convert VM value with unexpected type: null 394 | external function renderDocument(value: Any): String ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ at pkl.base#JsonRenderer.renderDocument (https://github.com/apple/pkl/blob/0.25.1/stdlib/base.pkl#L394) 106 | text = renderer.renderDocument(value) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ at pkl.base#Module.output.text (https://github.com/apple/pkl/blob/0.25.1/stdlib/base.pkl#L106) Pkl 0.25.1 (Linux 5.15.0-1050-aws, native) java.lang.IllegalArgumentException: Cannot convert VM value with unexpected type: null at org.pkl.core.runtime.VmValueConverter.convert(VmValueConverter.java:100) at org.pkl.core.stdlib.AbstractRenderer.doVisitProperty(AbstractRenderer.java:193) at org.pkl.core.stdlib.AbstractRenderer.lambda$visitTyped$0(AbstractRenderer.java:256) at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132) at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148) at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:141) at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124) at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117) at org.pkl.core.stdlib.AbstractRenderer.visitTyped(AbstractRenderer.java:252) at org.pkl.core.runtime.VmTyped.accept(VmTyped.java:168) at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65) at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126) at org.pkl.core.stdlib.base.JsonRendererNodes$JsonRenderer.visitProperty(JsonRendererNodes.java:230) at org.pkl.core.stdlib.AbstractRenderer.doVisitProperty(AbstractRenderer.java:195) at org.pkl.core.stdlib.AbstractRenderer.lambda$visitTyped$0(AbstractRenderer.java:256) at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132) at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148) at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124) at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117) at org.pkl.core.stdlib.AbstractRenderer.visitTyped(AbstractRenderer.java:252) at org.pkl.core.runtime.VmTyped.accept(VmTyped.java:168) at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65) at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126) at org.pkl.core.stdlib.base.JsonRendererNodes$JsonRenderer.visitDocument(JsonRendererNodes.java:73) at org.pkl.core.stdlib.AbstractRenderer.renderDocument(AbstractRenderer.java:101) at org.pkl.core.stdlib.base.JsonRendererNodes$renderDocument.eval(JsonRendererNodes.java:37) at org.pkl.core.stdlib.base.JsonRendererNodesFactory$renderDocumentNodeGen.executeAndSpecialize(JsonRendererNodesFactory.java:65) at org.pkl.core.stdlib.base.JsonRendererNodesFactory$renderDocumentNodeGen.executeGeneric(JsonRendererNodesFactory.java:57) at org.pkl.core.ast.member.FunctionNode.execute(FunctionNode.java:119) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:115) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:194) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:97) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:495) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:68) at org.pkl.core.ast.expression.member.InvokeMethodVirtualNode.evalCached(InvokeMethodVirtualNode.java:136) at org.pkl.core.ast.expression.member.InvokeMethodVirtualNodeGen.executeAndSpecialize(InvokeMethodVirtualNodeGen.java:214) at org.pkl.core.ast.expression.member.InvokeMethodVirtualNodeGen.executeGeneric(InvokeMethodVirtualNodeGen.java:131) at org.pkl.core.ast.PklRootNode.executeBody(PklRootNode.java:41) at org.pkl.core.ast.MemberNode.executeBody(MemberNode.java:71) at org.pkl.core.ast.member.TypeCheckedPropertyNode.evalTypedObjectCached(TypeCheckedPropertyNode.java:55) at org.pkl.core.ast.member.TypeCheckedPropertyNodeGen.executeAndSpecialize(TypeCheckedPropertyNodeGen.java:100) at org.pkl.core.ast.member.TypeCheckedPropertyNodeGen.execute(TypeCheckedPropertyNodeGen.java:61) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:115) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:194) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:97) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callIndirect(OptimizedCallTarget.java:477) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:458) at org.graalvm.truffle/com.oracle.truffle.api.nodes.IndirectCallNode$1.call(IndirectCallNode.java:91) at org.pkl.core.runtime.VmUtils.doReadMember(VmUtils.java:297) at org.pkl.core.runtime.VmUtils.readMemberOrNull(VmUtils.java:237) at org.pkl.core.runtime.VmUtils.readMemberOrNull(VmUtils.java:200) at org.pkl.core.runtime.VmUtils.readMember(VmUtils.java:180) at org.pkl.core.runtime.VmUtils.readTextProperty(VmUtils.java:170) at org.pkl.core.EvaluatorImpl.lambda$evaluateOutputText$3(EvaluatorImpl.java:137) at org.pkl.core.EvaluatorImpl.lambda$doEvaluate$13(EvaluatorImpl.java:352) at org.pkl.core.EvaluatorImpl.doEvaluate(EvaluatorImpl.java:300) at org.pkl.core.EvaluatorImpl.doEvaluate(EvaluatorImpl.java:348) at org.pkl.core.EvaluatorImpl.evaluateOutputText(EvaluatorImpl.java:133) at org.pkl.core.EvaluatorImpl.evaluateExpressionString(EvaluatorImpl.java:209) at org.pkl.cli.CliEvaluator.writeOutput(CliEvaluator.kt:179) at org.pkl.cli.CliEvaluator.doRun(CliEvaluator.kt:99) at org.pkl.commons.cli.CliCommand.run(CliCommand.kt:45) at org.pkl.cli.commands.EvalCommand.run(EvalCommand.kt:86) at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:198) at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:211) at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:18) at com.github.ajalt.clikt.core.CliktCommand.parse(CliktCommand.kt:400) at com.github.ajalt.clikt.core.CliktCommand.parse$default(CliktCommand.kt:397) at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:415) at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:440) at org.pkl.cli.Main$main$1.invoke$lambda-0(Main.kt:45) at java.base@11.0.18/java.lang.Thread.run(Thread.java:829) at com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:775) at com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:203) and stderr: An unexpected error has occurred. Would you mind filing a bug report? Cmd+Double-click the link below to open an issue. Please copy and paste the entire error output into the issue's description, provided you can share it. https://github.com/apple/pkl/issues/newjava.lang.IllegalArgumentException%3A%20Cannot%20convert%20VM%20value%20with%20unexpected%20type%3A%20null –– Pkl Error –– Cannot convert VM value with unexpected type: null 394 | external function renderDocument(value: Any): String ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ at pkl.base#JsonRenderer.renderDocument (https://github.com/apple/pkl/blob/0.25.1/stdlib/base.pkl#L394) 106 | text = renderer.renderDocument(value) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ at pkl.base#Module.output.text (https://github.com/apple/pkl/blob/0.25.1/stdlib/base.pkl#L106) Pkl 0.25.1 (Linux 5.15.0-1050-aws, native) java.lang.IllegalArgumentException: Cannot convert VM value with unexpected type: null at org.pkl.core.runtime.VmValueConverter.convert(VmValueConverter.java:100) at org.pkl.core.stdlib.AbstractRenderer.doVisitProperty(AbstractRenderer.java:193) at org.pkl.core.stdlib.AbstractRenderer.lambda$visitTyped$0(AbstractRenderer.java:256) at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132) at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148) at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:141) at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124) at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117) at org.pkl.core.stdlib.AbstractRenderer.visitTyped(AbstractRenderer.java:252) at org.pkl.core.runtime.VmTyped.accept(VmTyped.java:168) at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65) at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126) at org.pkl.core.stdlib.base.JsonRendererNodes$JsonRenderer.visitProperty(JsonRendererNodes.java:230) at org.pkl.core.stdlib.AbstractRenderer.doVisitProperty(AbstractRenderer.java:195) at org.pkl.core.stdlib.AbstractRenderer.lambda$visitTyped$0(AbstractRenderer.java:256) at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132) at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148) at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124) at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117) at org.pkl.core.stdlib.AbstractRenderer.visitTyped(AbstractRenderer.java:252) at org.pkl.core.runtime.VmTyped.accept(VmTyped.java:168) at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65) at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126) at org.pkl.core.stdlib.base.JsonRendererNodes$JsonRenderer.visitDocument(JsonRendererNodes.java:73) at org.pkl.core.stdlib.AbstractRenderer.renderDocument(AbstractRenderer.java:101) at org.pkl.core.stdlib.base.JsonRendererNodes$renderDocument.eval(JsonRendererNodes.java:37) at org.pkl.core.stdlib.base.JsonRendererNodesFactory$renderDocumentNodeGen.executeAndSpecialize(JsonRendererNodesFactory.java:65) at org.pkl.core.stdlib.base.JsonRendererNodesFactory$renderDocumentNodeGen.executeGeneric(JsonRendererNodesFactory.java:57) at org.pkl.core.ast.member.FunctionNode.execute(FunctionNode.java:119) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:115) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:194) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:97) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:495) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:68) at org.pkl.core.ast.expression.member.InvokeMethodVirtualNode.evalCached(InvokeMethodVirtualNode.java:136) at org.pkl.core.ast.expression.member.InvokeMethodVirtualNodeGen.executeAndSpecialize(InvokeMethodVirtualNodeGen.java:214) at org.pkl.core.ast.expression.member.InvokeMethodVirtualNodeGen.executeGeneric(InvokeMethodVirtualNodeGen.java:131) at org.pkl.core.ast.PklRootNode.executeBody(PklRootNode.java:41) at org.pkl.core.ast.MemberNode.executeBody(MemberNode.java:71) at org.pkl.core.ast.member.TypeCheckedPropertyNode.evalTypedObjectCached(TypeCheckedPropertyNode.java:55) at org.pkl.core.ast.member.TypeCheckedPropertyNodeGen.executeAndSpecialize(TypeCheckedPropertyNodeGen.java:100) at org.pkl.core.ast.member.TypeCheckedPropertyNodeGen.execute(TypeCheckedPropertyNodeGen.java:61) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:115) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:194) at com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:97) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callIndirect(OptimizedCallTarget.java:477) at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:458) at org.graalvm.truffle/com.oracle.truffle.api.nodes.IndirectCallNode$1.call(IndirectCallNode.java:91) at org.pkl.core.runtime.VmUtils.doReadMember(VmUtils.java:297) at org.pkl.core.runtime.VmUtils.readMemberOrNull(VmUtils.java:237) at org.pkl.core.runtime.VmUtils.readMemberOrNull(VmUtils.java:200) at org.pkl.core.runtime.VmUtils.readMember(VmUtils.java:180) at org.pkl.core.runtime.VmUtils.readTextProperty(VmUtils.java:170) at org.pkl.core.EvaluatorImpl.lambda$evaluateOutputText$3(EvaluatorImpl.java:137) at org.pkl.core.EvaluatorImpl.lambda$doEvaluate$13(EvaluatorImpl.java:352) at org.pkl.core.EvaluatorImpl.doEvaluate(EvaluatorImpl.java:300) at org.pkl.core.EvaluatorImpl.doEvaluate(EvaluatorImpl.java:348) at org.pkl.core.EvaluatorImpl.evaluateOutputText(EvaluatorImpl.java:133) at org.pkl.core.EvaluatorImpl.evaluateExpressionString(EvaluatorImpl.java:209) at org.pkl.cli.CliEvaluator.writeOutput(CliEvaluator.kt:179) at org.pkl.cli.CliEvaluator.doRun(CliEvaluator.kt:99) at org.pkl.commons.cli.CliCommand.run(CliCommand.kt:45) at org.pkl.cli.commands.EvalCommand.run(EvalCommand.kt:86) at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:198) at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:211) at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:18) at com.github.ajalt.clikt.core.CliktCommand.parse(CliktCommand.kt:400) at com.github.ajalt.clikt.core.CliktCommand.parse$default(CliktCommand.kt:397) at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:415) at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:440) at org.pkl.cli.Main$main$1.invoke$lambda-0(Main.kt:45) at java.base@11.0.18/java.lang.Thread.run(Thread.java:829) at com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:775) at com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:203) ``` </details> See also: https://pkl-playground.vercel.app/?share=bad-tone-whispered I've the same issue locally with the latest 0.29.1 version: ``` Pkl 0.29.1 (macOS 26.0, native) ```
adam added the bug label 2025-12-30 01:23:47 +01:00
Author
Owner

@StefMa commented on GitHub (Oct 28, 2025):

If I go with abstract hidden name: String, it works perfectly fine.
Even wihtout overriding it in the child-class.
Seems also wrong to me 👀

abstract class Bird {
  abstract hidden name: String
  function greet(bird: Bird): String = "Hello, \(bird.name)!"
}

class Pigeon extends Bird {
  // Here, I forgot to overried `name`
}

pigeon: Pigeon = new {}

☝️ Works without any issues

https://pkl-playground.vercel.app/?share=transportation-announced-explanation

@StefMa commented on GitHub (Oct 28, 2025): If I go with `abstract hidden name: String`, it works perfectly fine. Even wihtout overriding it in the child-class. Seems also wrong to me 👀 ```pkl abstract class Bird { abstract hidden name: String function greet(bird: Bird): String = "Hello, \(bird.name)!" } class Pigeon extends Bird { // Here, I forgot to overried `name` } pigeon: Pigeon = new {} ``` ☝️ Works without any issues https://pkl-playground.vercel.app/?share=transportation-announced-explanation
Author
Owner

@HT154 commented on GitHub (Oct 28, 2025):

The second one is definitely expected behavior: hidden properties are not rendered, and because Pkl evaluation is lazy the entire property is not evaluated, so the error never occurs.

@HT154 commented on GitHub (Oct 28, 2025): The second one is definitely expected behavior: `hidden` properties are not rendered, and because Pkl evaluation is lazy the entire property is not evaluated, so the error never occurs.
Author
Owner

@bioball commented on GitHub (Oct 28, 2025):

Thanks for the report!

@bioball commented on GitHub (Oct 28, 2025): Thanks for the report!
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/pkl#354