[FIR] Resolve elvis call as special synthetic call
Before that commit we desugared `a ?: b` as
when (val elvis = a) {
null -> b
else -> elvis
}
It was incorrect, because `a` should be resolved in dependent mode,
but when it was `elvis` initializer it was resolved in independent
mode, so we can't infer type for `a` in some complex cases
This commit is contained in:
@@ -1359,6 +1359,12 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
||||
+"!!"
|
||||
}
|
||||
|
||||
private fun FlowContent.generate(elvisCall: FirElvisCall) {
|
||||
generate(elvisCall.lhs)
|
||||
+" ?: "
|
||||
generate(elvisCall.rhs)
|
||||
}
|
||||
|
||||
@Suppress("UNUSED_PARAMETER")
|
||||
private fun FlowContent.generate(elseIfTrueCondition: FirElseIfTrueCondition) {
|
||||
keyword("else")
|
||||
@@ -1563,6 +1569,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
||||
is FirOperatorCall -> generate(expression)
|
||||
is FirBinaryLogicExpression -> generate(expression)
|
||||
is FirCheckNotNullCall -> generate(expression)
|
||||
is FirElvisCall -> generate(expression)
|
||||
is FirVarargArgumentsExpression -> generate(expression)
|
||||
is FirResolvedReifiedParameterReference -> generate(expression)
|
||||
is FirComparisonExpression -> generate(expression)
|
||||
|
||||
Reference in New Issue
Block a user