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