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> {
|
||||
if (data == null) return super.transformConstExpression(constExpression, data)
|
||||
val expectedType = data as FirTypeRef
|
||||
val expectedType = data as? FirTypeRef
|
||||
|
||||
if (expectedType is FirImplicitTypeRef) {
|
||||
|
||||
val symbol = when (constExpression.kind) {
|
||||
val kind = constExpression.kind
|
||||
if (expectedType is FirImplicitTypeRef || expectedType == null ||
|
||||
kind == IrConstKind.Null || kind == IrConstKind.Boolean || kind == IrConstKind.Char
|
||||
) {
|
||||
val symbol = when (kind) {
|
||||
IrConstKind.Null -> StandardClassIds.Nothing(symbolProvider)
|
||||
IrConstKind.Boolean -> StandardClassIds.Boolean(symbolProvider)
|
||||
IrConstKind.Char -> StandardClassIds.Char(symbolProvider)
|
||||
@@ -328,7 +329,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
|
||||
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())
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user