FIR: pass elvis expected type to lhs/rhs

This commit is contained in:
Jinseong Jeon
2020-12-04 11:26:09 -08:00
committed by Mikhail Glukhikh
parent 41f56729f9
commit 8f2ad57f7a
5 changed files with 37 additions and 39 deletions
@@ -587,8 +587,7 @@ class Fir2IrVisitor(
fun irGetLhsValue(): IrGetValue =
IrGetValueImpl(startOffset, endOffset, irLhsVariable.type, irLhsVariable.symbol)
// TODO: replace with .coneType
val originalType = firLhsVariable.returnTypeRef.coneTypeUnsafe<ConeKotlinType>()
val originalType = firLhsVariable.returnTypeRef.coneType
val notNullType = originalType.withNullability(ConeNullability.NOT_NULL)
val irBranches = listOf(
IrBranchImpl(
@@ -216,9 +216,12 @@ class FirControlFlowStatementsResolveTransformer(transformer: FirBodyResolveTran
): CompositeTransformResult<FirStatement> {
if (elvisExpression.calleeReference is FirResolvedNamedReference) return elvisExpression.compose()
elvisExpression.transformAnnotations(transformer, data)
elvisExpression.transformLhs(transformer, ResolutionMode.ContextDependent)
val expectedArgumentType =
if (data is ResolutionMode.WithExpectedType && data.expectedType !is FirImplicitTypeRef) data
else ResolutionMode.ContextDependent
elvisExpression.transformLhs(transformer, expectedArgumentType)
dataFlowAnalyzer.exitElvisLhs(elvisExpression)
elvisExpression.transformRhs(transformer, ResolutionMode.ContextDependent)
elvisExpression.transformRhs(transformer, expectedArgumentType)
val result = syntheticCallGenerator.generateCalleeForElvisExpression(elvisExpression, resolutionContext)?.let {
callCompleter.completeCall(it, data.expectedType).result