IR: fixes after rebase

This commit is contained in:
Dmitry Petrov
2019-04-23 12:03:13 +03:00
parent 339291b01f
commit 8da5f6b955
14 changed files with 381 additions and 24 deletions
@@ -12,9 +12,14 @@ import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
import org.jetbrains.kotlin.types.AbstractTypeCheckerContext
import org.jetbrains.kotlin.types.model.KotlinTypeMarker
import org.jetbrains.kotlin.types.model.SimpleTypeMarker
import org.jetbrains.kotlin.types.model.TypeArgumentMarker
import org.jetbrains.kotlin.types.model.TypeConstructorMarker
class IrTypeCheckerContext(override val irBuiltIns: IrBuiltIns) : IrTypeSystemContext, AbstractTypeCheckerContext() {
override fun anyType(): SimpleTypeMarker =
irBuiltIns.anyType as IrSimpleType
override fun substitutionSupertypePolicy(type: SimpleTypeMarker): SupertypesPolicy.DoCustomTransform {
require(type is IrSimpleType)
val parameters = extractTypeParameters((type.classifier as IrClassSymbol).owner).map { it.symbol }
@@ -60,4 +65,26 @@ class IrTypeCheckerContext(override val irBuiltIns: IrBuiltIns) : IrTypeSystemCo
// TODO remove 'Exact' annotation only
return removeAnnotations()
}
override fun KotlinTypeMarker.isUninferredParameter(): Boolean = false
override fun captureFromExpression(type: KotlinTypeMarker): KotlinTypeMarker? =
error("Captured type is unsupported in IR")
override fun SimpleTypeMarker.isPrimitiveType(): Boolean {
// TODO this is currently used in overload resolution only
return false
}
override fun KotlinTypeMarker.argumentsCount(): Int =
when (this) {
is IrSimpleType -> arguments.size
else -> 0
}
override fun KotlinTypeMarker.getArgument(index: Int): TypeArgumentMarker =
when (this) {
is IrSimpleType -> arguments[index]
else -> error("Type $this has no arguments")
}
}
@@ -65,13 +65,6 @@ interface IrTypeSystemContext : TypeSystemInferenceExtensionContext {
override fun SimpleTypeMarker.typeConstructor() = (this as IrSimpleType).classifier
override fun SimpleTypeMarker.argumentsCount(): Int = (this as IrSimpleType).arguments.size
override fun SimpleTypeMarker.getArgument(index: Int): TypeArgumentMarker {
val simpleType = this as IrSimpleType
return simpleType.arguments[index]
}
override fun KotlinTypeMarker.asTypeArgument() = this as IrTypeArgument
override fun CapturedTypeMarker.lowerType(): KotlinTypeMarker? = error("Captured Type is not valid for IrTypes")
@@ -328,6 +321,14 @@ interface IrTypeSystemContext : TypeSystemInferenceExtensionContext {
@Suppress("UNCHECKED_CAST")
override fun intersectTypes(types: List<KotlinTypeMarker>): KotlinTypeMarker =
makeTypeIntersection(types as List<IrType>)
override fun TypeConstructorMarker.isCapturedTypeConstructor(): Boolean = false
override fun createErrorTypeWithCustomConstructor(debugName: String, constructor: TypeConstructorMarker): KotlinTypeMarker =
TODO("IrTypeSystemContext doesn't support constraint system resolution")
override fun CapturedTypeMarker.captureStatus(): CaptureStatus =
error("Captured type is unsupported in IR")
}
fun extractTypeParameters(klass: IrDeclarationParent): List<IrTypeParameter> {
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl
import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.psi.psiUtil.endOffset
import org.jetbrains.kotlin.psi.psiUtil.startOffset
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe