Minor: simplify OperatorExpressionGenerator#invokeConversionFunction

This commit is contained in:
Dmitry Petrov
2018-02-05 17:43:42 +03:00
parent 22d59bb709
commit 299eb24ca9
@@ -31,9 +31,6 @@ import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.endOffset
import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset
import org.jetbrains.kotlin.psi2ir.findSingleFunction import org.jetbrains.kotlin.psi2ir.findSingleFunction
import org.jetbrains.kotlin.psi2ir.intermediate.CallReceiver
import org.jetbrains.kotlin.psi2ir.intermediate.OnceExpressionValue
import org.jetbrains.kotlin.psi2ir.intermediate.SimpleCallReceiver
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator
@@ -257,20 +254,20 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
this this
else -> else ->
SimpleCallReceiver(OnceExpressionValue(this), null) invokeConversionFunction(
.invokeConversionFunction(
startOffset, endOffset, startOffset, endOffset,
conversionFunction ?: throw AssertionError("No conversion function for $type ~> $targetType") conversionFunction ?: throw AssertionError("No conversion function for $type ~> $targetType"),
this
) )
} }
} }
private fun CallReceiver.invokeConversionFunction( private fun invokeConversionFunction(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
functionDescriptor: FunctionDescriptor functionDescriptor: FunctionDescriptor,
receiver: IrExpression
): IrExpression = ): IrExpression =
call { dispatchReceiverValue, _ ->
IrCallImpl( IrCallImpl(
startOffset, startOffset,
endOffset, endOffset,
@@ -281,8 +278,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
origin = null, // TODO origin for widening conversions? origin = null, // TODO origin for widening conversions?
superQualifierSymbol = null superQualifierSymbol = null
).apply { ).apply {
dispatchReceiver = dispatchReceiverValue!!.load() dispatchReceiver = receiver
}
} }
private fun KotlinType.findConversionFunctionTo(targetType: KotlinType): FunctionDescriptor? { private fun KotlinType.findConversionFunctionTo(targetType: KotlinType): FunctionDescriptor? {