[kotlin compiler] 1.2.50-dev-321

- Fix code after type argument refactoring in Kotlin (cherry picked from commit e6b9131910d5440272e6613856365a8277b1f58d)
This commit is contained in:
Vasily Levchenko
2018-04-03 17:00:42 +03:00
committed by Vasily Levchenko
parent 21079ae644
commit 063ccf07f3
6 changed files with 37 additions and 26 deletions
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.backend.konan.irasdescriptors.referenceAllTypeExtern
import org.jetbrains.kotlin.backend.konan.lower.* import org.jetbrains.kotlin.backend.konan.lower.*
import org.jetbrains.kotlin.backend.konan.lower.DefaultArgumentStubGenerator import org.jetbrains.kotlin.backend.konan.lower.DefaultArgumentStubGenerator
import org.jetbrains.kotlin.backend.konan.lower.DefaultParameterInjector import org.jetbrains.kotlin.backend.konan.lower.DefaultParameterInjector
import org.jetbrains.kotlin.backend.konan.lower.InitializersLowering
import org.jetbrains.kotlin.backend.konan.lower.LateinitLowering import org.jetbrains.kotlin.backend.konan.lower.LateinitLowering
import org.jetbrains.kotlin.backend.konan.lower.LocalDeclarationsLowering import org.jetbrains.kotlin.backend.konan.lower.LocalDeclarationsLowering
import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFile
@@ -196,12 +196,17 @@ internal class IrPrivateFunctionCallImpl(startOffset: Int,
type: KotlinType, type: KotlinType,
override val symbol: IrFunctionSymbol, override val symbol: IrFunctionSymbol,
override val descriptor: FunctionDescriptor, override val descriptor: FunctionDescriptor,
typeArguments: Map<TypeParameterDescriptor, KotlinType>?, typeArgumentsCount: Int,
override val moduleDescriptor: ModuleDescriptor, override val moduleDescriptor: ModuleDescriptor,
override val totalFunctions: Int, override val totalFunctions: Int,
override val functionIndex: Int override val functionIndex: Int
) : IrPrivateFunctionCall, ) : IrPrivateFunctionCall, IrCallWithIndexedArgumentsBase(
IrCallWithIndexedArgumentsBase(startOffset, endOffset, type, symbol.descriptor.valueParameters.size, typeArguments) { startOffset,
endOffset,
type,
typeArgumentsCount = typeArgumentsCount,
valueArgumentsCount = symbol.descriptor.valueParameters.size
) {
override val superQualifierSymbol: IrClassSymbol? override val superQualifierSymbol: IrClassSymbol?
get() = null get() = null
@@ -487,11 +487,14 @@ internal class DeepCopyIrTreeWithDescriptors(val targetDescriptor: FunctionDescr
startOffset = expression.startOffset, startOffset = expression.startOffset,
endOffset = expression.endOffset, endOffset = expression.endOffset,
type = newDescriptor.returnType!!, type = newDescriptor.returnType!!,
calleeDescriptor = newDescriptor, descriptor = newDescriptor,
typeArguments = substituteTypeArguments(expression.transformTypeArguments(newDescriptor)), typeArgumentsCount = expression.typeArgumentsCount,
origin = expression.origin, origin = expression.origin,
superQualifierDescriptor = mapSuperQualifier(expression.superQualifier) superQualifierDescriptor = mapSuperQualifier(expression.superQualifier)
).transformValueArguments(expression) ).apply {
transformValueArguments(expression)
substituteTypeArguments(expression)
}
} }
//---------------------------------------------------------------------// //---------------------------------------------------------------------//
@@ -622,18 +625,12 @@ internal class DeepCopyIrTreeWithDescriptors(val targetDescriptor: FunctionDescr
//-------------------------------------------------------------------------// //-------------------------------------------------------------------------//
private fun substituteTypeArguments(oldTypeArguments: Map <TypeParameterDescriptor, KotlinType>?): Map <TypeParameterDescriptor, KotlinType>? { private fun IrMemberAccessExpression.substituteTypeArguments(original: IrMemberAccessExpression) {
for (index in 0 until original.typeArgumentsCount) {
if (oldTypeArguments == null) return null val originalTypeArgument = original.getTypeArgument(index)
if (typeSubstitutor == null) return oldTypeArguments val newTypeArgument = substituteType(originalTypeArgument)!!
this.putTypeArgument(index, newTypeArgument)
val newTypeArguments = oldTypeArguments.entries.associate {
val typeParameterDescriptor = it.key
val oldTypeArgument = it.value
val newTypeArgument = substituteType(oldTypeArgument)!!
typeParameterDescriptor to newTypeArgument
} }
return newTypeArguments
} }
//-------------------------------------------------------------------------// //-------------------------------------------------------------------------//
@@ -745,10 +742,12 @@ class DescriptorSubstitutorForExternalScope(val globalSubstituteMap: MutableMap<
type = newDescriptor.returnType!!, type = newDescriptor.returnType!!,
symbol = createFunctionSymbol(newDescriptor), symbol = createFunctionSymbol(newDescriptor),
descriptor = newDescriptor, descriptor = newDescriptor,
typeArguments = oldExpression.typeArguments, typeArgumentsCount = oldExpression.typeArgumentsCount,
origin = oldExpression.origin, origin = oldExpression.origin,
superQualifierSymbol = createClassSymbolOrNull(oldExpression.superQualifier) superQualifierSymbol = createClassSymbolOrNull(oldExpression.superQualifier)
).apply { ).apply {
copyTypeArgumentsFrom(oldExpression)
oldExpression.descriptor.valueParameters.forEach { oldExpression.descriptor.valueParameters.forEach {
val valueArgument = oldExpression.getValueArgument(it) val valueArgument = oldExpression.getValueArgument(it)
putValueArgument(it.index, valueArgument) putValueArgument(it.index, valueArgument)
@@ -47,6 +47,8 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.calls.components.hasDefaultValue import org.jetbrains.kotlin.resolve.calls.components.hasDefaultValue
import org.jetbrains.kotlin.resolve.inline.InlineUtil import org.jetbrains.kotlin.resolve.inline.InlineUtil
import org.jetbrains.kotlin.types.TypeConstructor
import org.jetbrains.kotlin.types.TypeProjection
import org.jetbrains.kotlin.types.TypeProjectionImpl import org.jetbrains.kotlin.types.TypeProjectionImpl
import org.jetbrains.kotlin.types.TypeSubstitutor import org.jetbrains.kotlin.types.TypeSubstitutor
@@ -241,12 +243,13 @@ private class Inliner(val globalSubstituteMap: MutableMap<DeclarationDescriptor,
//-------------------------------------------------------------------------// //-------------------------------------------------------------------------//
private fun createTypeSubstitutor(irCall: IrCall): TypeSubstitutor? { private fun createTypeSubstitutor(irCall: IrCall): TypeSubstitutor? {
val typeArgumentsMap = (irCall as IrMemberAccessExpressionBase).typeArguments if (irCall.typeArgumentsCount == 0) return null
if (typeArgumentsMap == null) return null
val descriptor = irCall.descriptor.resolveFakeOverride().original val descriptor = irCall.descriptor.resolveFakeOverride().original
val typeParameters = descriptor.propertyIfAccessor.typeParameters val typeParameters = descriptor.propertyIfAccessor.typeParameters
val substitutionContext = typeArgumentsMap.entries.associate { (typeParameter, typeArgument) -> val substitutionContext = mutableMapOf<TypeConstructor, TypeProjection>()
typeParameters[typeParameter.index].typeConstructor to TypeProjectionImpl(typeArgument) for (index in 0 until irCall.typeArgumentsCount) {
val typeArgument = irCall.getTypeArgument(index) ?: continue
substitutionContext[typeParameters[index].typeConstructor] = TypeProjectionImpl(typeArgument)
} }
return TypeSubstitutor.create(substitutionContext) return TypeSubstitutor.create(substitutionContext)
} }
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.copyTypeArgumentsFrom
import org.jetbrains.kotlin.ir.expressions.getValueArgument import org.jetbrains.kotlin.ir.expressions.getValueArgument
import org.jetbrains.kotlin.ir.expressions.impl.IrBranchImpl import org.jetbrains.kotlin.ir.expressions.impl.IrBranchImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
@@ -1025,11 +1026,13 @@ internal object Devirtualization {
type = actualType, type = actualType,
symbol = callee.symbol, symbol = callee.symbol,
descriptor = callee.descriptor, descriptor = callee.descriptor,
typeArguments = (callee as? IrCallImpl)?.typeArguments, typeArgumentsCount = callee.typeArgumentsCount,
moduleDescriptor = devirtualizedCallee.module.descriptor, moduleDescriptor = devirtualizedCallee.module.descriptor,
totalFunctions = devirtualizedCallee.module.numberOfFunctions, totalFunctions = devirtualizedCallee.module.numberOfFunctions,
functionIndex = devirtualizedCallee.symbolTableIndex functionIndex = devirtualizedCallee.symbolTableIndex
) ).apply {
copyTypeArgumentsFrom(callee)
}
}) })
} }
+2 -2
View File
@@ -20,8 +20,8 @@ remoteRoot=konan_tests
#kotlinCompilerModule=org.jetbrains.kotlin:kotlin-compiler:1.1-SNAPSHOT #kotlinCompilerModule=org.jetbrains.kotlin:kotlin-compiler:1.1-SNAPSHOT
# Download artifacts of https://teamcity.jetbrains.com/viewType.html?buildTypeId=Kotlin_120_Compiler # Download artifacts of https://teamcity.jetbrains.com/viewType.html?buildTypeId=Kotlin_120_Compiler
testDataVersion=1226829:id testDataVersion=1226829:id
kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.2.50-dev-139,tag:kotlin-native,pinned:true/artifacts/content/maven kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.2.50-dev-321,tag:kotlin-native,pinned:true/artifacts/content/maven
kotlinVersion=1.2.50-dev-139 kotlinVersion=1.2.50-dev-321
konanVersion=0.6.2 konanVersion=0.6.2
org.gradle.jvmargs='-Dfile.encoding=UTF-8' org.gradle.jvmargs='-Dfile.encoding=UTF-8'