PregeneratedCall -> CallBuilder
This commit is contained in:
committed by
Dmitry Petrov
parent
17758d8c00
commit
6830a7db43
@@ -96,7 +96,7 @@ fun StatementGenerator.generateValueArgument(valueArgument: ResolvedValueArgumen
|
||||
TODO("Unexpected valueArgument: ${valueArgument.javaClass.simpleName}")
|
||||
}
|
||||
|
||||
fun StatementGenerator.pregenerateCall(resolvedCall: ResolvedCall<*>): PregeneratedCall {
|
||||
fun StatementGenerator.pregenerateCall(resolvedCall: ResolvedCall<*>): CallBuilder {
|
||||
val call = pregenerateCallReceivers(resolvedCall)
|
||||
|
||||
resolvedCall.valueArgumentsByIndex!!.forEachIndexed { index, valueArgument ->
|
||||
@@ -106,8 +106,8 @@ fun StatementGenerator.pregenerateCall(resolvedCall: ResolvedCall<*>): Pregenera
|
||||
return call
|
||||
}
|
||||
|
||||
fun StatementGenerator.pregenerateCallReceivers(resolvedCall: ResolvedCall<*>): PregeneratedCall {
|
||||
val call = PregeneratedCall(resolvedCall)
|
||||
fun StatementGenerator.pregenerateCallReceivers(resolvedCall: ResolvedCall<*>): CallBuilder {
|
||||
val call = CallBuilder(resolvedCall)
|
||||
|
||||
val ktDefaultCallElement = resolvedCall.call.callElement
|
||||
call.callReceiver = generateCallReceiver(ktDefaultCallElement, resolvedCall.dispatchReceiver, resolvedCall.extensionReceiver, resolvedCall.call.isSafeCall())
|
||||
|
||||
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.PregeneratedCall
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.CallBuilder
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.getValueArgumentsInParameterOrder
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.isValueArgumentReorderingRequired
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.IntermediateValue
|
||||
@@ -42,7 +42,7 @@ class CallGenerator(
|
||||
fun generateCall(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
call: PregeneratedCall,
|
||||
call: CallBuilder,
|
||||
operator: IrOperator? = null
|
||||
): IrExpression {
|
||||
val descriptor = call.descriptor
|
||||
@@ -61,7 +61,7 @@ class CallGenerator(
|
||||
descriptor: PropertyDescriptor,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
call: PregeneratedCall
|
||||
call: CallBuilder
|
||||
): IrExpression {
|
||||
return call.callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
||||
IrGetterCallImpl(startOffset, endOffset, descriptor.getter!!,
|
||||
@@ -76,7 +76,7 @@ class CallGenerator(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
operator: IrOperator?,
|
||||
call: PregeneratedCall
|
||||
call: CallBuilder
|
||||
): IrExpression {
|
||||
val returnType = descriptor.returnType
|
||||
|
||||
@@ -105,7 +105,7 @@ class CallGenerator(
|
||||
irCall: IrCall,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
call: PregeneratedCall,
|
||||
call: CallBuilder,
|
||||
resultType: KotlinType?
|
||||
): IrExpression {
|
||||
val resolvedCall = call.original
|
||||
@@ -141,8 +141,8 @@ class CallGenerator(
|
||||
}
|
||||
}
|
||||
|
||||
fun CallGenerator.generateCall(ktElement: KtElement, call: PregeneratedCall, operator: IrOperator? = null) =
|
||||
fun CallGenerator.generateCall(ktElement: KtElement, call: CallBuilder, operator: IrOperator? = null) =
|
||||
generateCall(ktElement.startOffset, ktElement.endOffset, call, operator)
|
||||
|
||||
fun CallGenerator.generateCall(irExpression: IrExpression, call: PregeneratedCall, operator: IrOperator? = null) =
|
||||
fun CallGenerator.generateCall(irExpression: IrExpression, call: CallBuilder, operator: IrOperator? = null) =
|
||||
generateCall(irExpression.startOffset, irExpression.endOffset, call, operator)
|
||||
|
||||
+3
-3
@@ -24,8 +24,8 @@ import java.lang.AssertionError
|
||||
class ArrayAccessAssignmentReceiver(
|
||||
val irArray: IrExpression,
|
||||
val irIndices: List<IrExpression>,
|
||||
val indexedGetCall: PregeneratedCall?,
|
||||
val indexedSetCall: PregeneratedCall?,
|
||||
val indexedGetCall: CallBuilder?,
|
||||
val indexedSetCall: CallBuilder?,
|
||||
val callGenerator: CallGenerator,
|
||||
val startOffset: Int,
|
||||
val endOffset: Int,
|
||||
@@ -54,7 +54,7 @@ class ArrayAccessAssignmentReceiver(
|
||||
return irBlock
|
||||
}
|
||||
|
||||
private fun PregeneratedCall.fillArrayAndIndexArguments(arrayValue: IntermediateValue, indexValues: List<IntermediateValue>) {
|
||||
private fun CallBuilder.fillArrayAndIndexArguments(arrayValue: IntermediateValue, indexValues: List<IntermediateValue>) {
|
||||
setExplicitReceiverValue(arrayValue)
|
||||
indexValues.forEachIndexed { i, irIndexValue ->
|
||||
irValueArgumentsByIndex[i] = irIndexValue.load()
|
||||
|
||||
+11
-11
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.psi2ir.isValueArgumentReorderingRequired
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class PregeneratedCall(val original: ResolvedCall<*>) {
|
||||
class CallBuilder(val original: ResolvedCall<*>) {
|
||||
val descriptor: CallableDescriptor = original.resultingDescriptor
|
||||
|
||||
var superQualifier: ClassDescriptor? = null
|
||||
@@ -38,34 +38,34 @@ class PregeneratedCall(val original: ResolvedCall<*>) {
|
||||
irValueArgumentsByIndex[valueParameterDescriptor.index]
|
||||
}
|
||||
|
||||
val PregeneratedCall.argumentsCount: Int get() =
|
||||
val CallBuilder.argumentsCount: Int get() =
|
||||
irValueArgumentsByIndex.size
|
||||
|
||||
fun PregeneratedCall.getValueArgumentsInParameterOrder(): List<IrExpression?> =
|
||||
fun CallBuilder.getValueArgumentsInParameterOrder(): List<IrExpression?> =
|
||||
descriptor.valueParameters.map { irValueArgumentsByIndex[it.index] }
|
||||
|
||||
fun PregeneratedCall.isValueArgumentReorderingRequired() =
|
||||
fun CallBuilder.isValueArgumentReorderingRequired() =
|
||||
original.isValueArgumentReorderingRequired()
|
||||
|
||||
val PregeneratedCall.hasExtensionReceiver: Boolean get() =
|
||||
val CallBuilder.hasExtensionReceiver: Boolean get() =
|
||||
descriptor.extensionReceiverParameter != null
|
||||
|
||||
val PregeneratedCall.hasDispatchReceiver: Boolean get() =
|
||||
val CallBuilder.hasDispatchReceiver: Boolean get() =
|
||||
descriptor.dispatchReceiverParameter != null
|
||||
|
||||
val PregeneratedCall.extensionReceiverType: KotlinType? get() =
|
||||
val CallBuilder.extensionReceiverType: KotlinType? get() =
|
||||
descriptor.extensionReceiverParameter?.type
|
||||
|
||||
val PregeneratedCall.dispatchReceiverType: KotlinType? get() =
|
||||
val CallBuilder.dispatchReceiverType: KotlinType? get() =
|
||||
descriptor.dispatchReceiverParameter?.type
|
||||
|
||||
val PregeneratedCall.explicitReceiverParameter: ReceiverParameterDescriptor? get() =
|
||||
val CallBuilder.explicitReceiverParameter: ReceiverParameterDescriptor? get() =
|
||||
descriptor.extensionReceiverParameter ?: descriptor.dispatchReceiverParameter
|
||||
|
||||
val PregeneratedCall.explicitReceiverType: KotlinType? get() =
|
||||
val CallBuilder.explicitReceiverType: KotlinType? get() =
|
||||
explicitReceiverParameter?.type
|
||||
|
||||
fun PregeneratedCall.setExplicitReceiverValue(explicitReceiverValue: IntermediateValue) {
|
||||
fun CallBuilder.setExplicitReceiverValue(explicitReceiverValue: IntermediateValue) {
|
||||
val previousCallReceiver = callReceiver
|
||||
callReceiver = object : CallReceiver {
|
||||
override fun call(withDispatchAndExtensionReceivers: (IntermediateValue?, IntermediateValue?) -> IrExpression): IrExpression {
|
||||
+3
-3
@@ -20,14 +20,14 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrOperator
|
||||
import org.jetbrains.kotlin.psi2ir.generators.CallGenerator
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.PregeneratedCall
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.CallBuilder
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.argumentsCount
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class LValueWithGetterAndSetterCalls(
|
||||
val callGenerator: CallGenerator,
|
||||
val getterCall: PregeneratedCall?,
|
||||
val setterCall: PregeneratedCall?,
|
||||
val getterCall: CallBuilder?,
|
||||
val setterCall: CallBuilder?,
|
||||
val startOffset: Int,
|
||||
val endOffset: Int,
|
||||
val operator: IrOperator? = null
|
||||
|
||||
@@ -20,12 +20,12 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrOperator
|
||||
import org.jetbrains.kotlin.psi2ir.generators.CallGenerator
|
||||
import org.jetbrains.kotlin.psi2ir.generators.StatementGenerator
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.PregeneratedCall
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.CallBuilder
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class OnceCallValue(
|
||||
val statementGenerator: StatementGenerator,
|
||||
val call: PregeneratedCall,
|
||||
val call: CallBuilder,
|
||||
val startOffset: Int,
|
||||
val endOffset: Int,
|
||||
val operator: IrOperator? = null
|
||||
|
||||
Reference in New Issue
Block a user