diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt index 137839e1af2..79197f7fe9a 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt @@ -79,7 +79,7 @@ class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationG // This is part of a hack for implicit receivers that converted to value parameters below // The proper schema would be to get properly indexed parameters from frontend (descriptor.implicitReceiversParameters), // but it seems would require a proper remapping for the script body - // TODO: implement implicit receiver parameters handlin properly + // TODO: implement implicit receiver parameters handling properly var parametersIndex = 0 irScript.earlierScripts = context.extensions.getPreviousScripts()?.filter { @@ -101,8 +101,13 @@ class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationG } irScript.explicitCallParameters = descriptor.explicitConstructorParameters.map { valueParameterDescriptor -> - parametersIndex++ - valueParameterDescriptor.toIrValueParameter(startOffset, endOffset, IrDeclarationOrigin.SCRIPT_CALL_PARAMETER).also { it.parent = irScript } + context.irFactory.createValueParameter( + startOffset, endOffset, IrDeclarationOrigin.SCRIPT_CALL_PARAMETER, IrValueParameterSymbolImpl(), + valueParameterDescriptor.name, parametersIndex++, + valueParameterDescriptor.type.toIrType(), valueParameterDescriptor.varargElementType?.toIrType(), + valueParameterDescriptor.isCrossinline, valueParameterDescriptor.isNoinline, + false, false + ).also { it.parent = irScript } } irScript.implicitReceiversParameters = descriptor.implicitReceivers.map { diff --git a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ReplTest.kt b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ReplTest.kt index 5df15802764..61ee31fa645 100644 --- a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ReplTest.kt +++ b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ReplTest.kt @@ -16,6 +16,8 @@ import kotlin.script.experimental.jvm.BasicJvmReplEvaluator import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration import kotlin.script.experimental.jvm.updateClasspath import kotlin.script.experimental.jvm.util.classpathFromClass +import kotlin.script.experimental.jvmhost.createJvmScriptDefinitionFromTemplate +import kotlin.script.templates.standard.ScriptTemplateWithArgs class ReplTest : TestCase() { @@ -231,6 +233,26 @@ class ReplTest : TestCase() { assertTrue("Refinement handler on annotation is not invoked", handlerInvoked) } + @Test + fun testDefinitionWithConstructorArgs() { + val scriptDef = createJvmScriptDefinitionFromTemplate( + evaluation = { + constructorArgs(arrayOf("a")) + } + ) + + checkEvaluateInRepl( + sequenceOf( + "args[0]", + "res0+args[0]", + "res1+args[0]" + ), + sequenceOf("a", "aa", "aaa"), + scriptDef.compilationConfiguration, + scriptDef.evaluationConfiguration + ) + } + companion object { private fun evaluateInRepl( snippets: Sequence,