FIR body resolve: handle constant types more precisely
This commit is contained in:
+7
-6
@@ -310,12 +310,13 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun <T> transformConstExpression(constExpression: FirConstExpression<T>, data: Any?): CompositeTransformResult<FirStatement> {
|
override fun <T> transformConstExpression(constExpression: FirConstExpression<T>, data: Any?): CompositeTransformResult<FirStatement> {
|
||||||
if (data == null) return super.transformConstExpression(constExpression, data)
|
val expectedType = data as? FirTypeRef
|
||||||
val expectedType = data as FirTypeRef
|
|
||||||
|
|
||||||
if (expectedType is FirImplicitTypeRef) {
|
val kind = constExpression.kind
|
||||||
|
if (expectedType is FirImplicitTypeRef || expectedType == null ||
|
||||||
val symbol = when (constExpression.kind) {
|
kind == IrConstKind.Null || kind == IrConstKind.Boolean || kind == IrConstKind.Char
|
||||||
|
) {
|
||||||
|
val symbol = when (kind) {
|
||||||
IrConstKind.Null -> StandardClassIds.Nothing(symbolProvider)
|
IrConstKind.Null -> StandardClassIds.Nothing(symbolProvider)
|
||||||
IrConstKind.Boolean -> StandardClassIds.Boolean(symbolProvider)
|
IrConstKind.Boolean -> StandardClassIds.Boolean(symbolProvider)
|
||||||
IrConstKind.Char -> StandardClassIds.Char(symbolProvider)
|
IrConstKind.Char -> StandardClassIds.Char(symbolProvider)
|
||||||
@@ -328,7 +329,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
|
|||||||
IrConstKind.Double -> StandardClassIds.Double(symbolProvider)
|
IrConstKind.Double -> StandardClassIds.Double(symbolProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
val type = ConeClassTypeImpl(symbol.toLookupTag(), emptyArray(), isNullable = constExpression.kind == IrConstKind.Null)
|
val type = ConeClassTypeImpl(symbol.toLookupTag(), emptyArray(), isNullable = kind == IrConstKind.Null)
|
||||||
|
|
||||||
constExpression.resultType = FirResolvedTypeRefImpl(session, null, type, false, emptyList())
|
constExpression.resultType = FirResolvedTypeRefImpl(session, null, type, false, emptyList())
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user