[scripting] Move earlierScripts to the frontend descriptor

^KT-20488 fixed
This commit is contained in:
Ilya Muradyan
2021-11-13 00:28:06 +03:00
parent 4149b91c0d
commit 6917ff7d2a
15 changed files with 94 additions and 65 deletions
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.psi2ir.generators
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.ParameterDescriptor
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.assertCast
import org.jetbrains.kotlin.ir.builders.declarations.IrFunctionBuilder
@@ -86,19 +87,9 @@ class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationG
irScript.earlierScripts?.forEach {
context.symbolTable.introduceValueParameter(it.owner.thisReceiver)
}
irScript.earlierScriptsParameter = irScript.earlierScripts?.takeIf { it.isNotEmpty() }?.let {
val baseType = context.irBuiltIns.anyType
val arrayType = baseType.toArrayOrPrimitiveArrayType(context.irBuiltIns)
context.irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrDeclarationOrigin.SCRIPT_EARLIER_SCRIPTS, IrValueParameterSymbolImpl(),
Name.special("<earlierScripts>"), parametersIndex++,
arrayType, null,
false, false, false, false
).also { it.parent = irScript }
}
irScript.explicitCallParameters = descriptor.explicitConstructorParameters.map { valueParameterDescriptor ->
context.irFactory.createValueParameter(
fun createValueParameter(valueParameterDescriptor: ValueParameterDescriptor): IrValueParameter {
return context.irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
IrDeclarationOrigin.SCRIPT_CALL_PARAMETER, IrValueParameterSymbolImpl(),
valueParameterDescriptor.name, parametersIndex++,
@@ -108,6 +99,10 @@ class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationG
).also { it.parent = irScript }
}
irScript.earlierScriptsParameter = descriptor.earlierScriptsConstructorParameter?.let(::createValueParameter)
irScript.explicitCallParameters = descriptor.explicitConstructorParameters.map(::createValueParameter)
irScript.implicitReceiversParameters = descriptor.implicitReceivers.map {
makeParameter(it.thisAsReceiverParameter, IrDeclarationOrigin.SCRIPT_IMPLICIT_RECEIVER, parametersIndex++)
}