PregeneratedCall -> CallBuilder

This commit is contained in:
Dmitry Petrov
2016-08-25 08:52:23 +03:00
committed by Dmitry Petrov
parent 17758d8c00
commit 6830a7db43
6 changed files with 29 additions and 29 deletions
@@ -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)
@@ -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()
@@ -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 {
@@ -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