Drop IrGeneralCall, pull up corresponding members to IrMemberAccessExpression.

This commit is contained in:
Dmitry Petrov
2016-09-19 11:28:28 +03:00
committed by Dmitry Petrov
parent d67d8016d3
commit 89de2a2ebe
18 changed files with 54 additions and 81 deletions
@@ -116,7 +116,7 @@ class CallGenerator(statementGenerator: StatementGenerator): StatementGeneratorE
}
}
private fun addParametersToCall(startOffset: Int, endOffset: Int, call: CallBuilder, irCall: IrGeneralCallBase, returnType: KotlinType): IrExpression =
private fun addParametersToCall(startOffset: Int, endOffset: Int, call: CallBuilder, irCall: IrCallWithIndexedArgumentsBase, returnType: KotlinType): IrExpression =
if (call.isValueArgumentReorderingRequired()) {
generateCallWithArgumentReordering(irCall, startOffset, endOffset, call, returnType)
}
@@ -129,7 +129,7 @@ class CallGenerator(statementGenerator: StatementGenerator): StatementGeneratorE
}
private fun generateCallWithArgumentReordering(
irCall: IrGeneralCall,
irCall: IrMemberAccessExpression,
startOffset: Int,
endOffset: Int,
call: CallBuilder,
@@ -40,7 +40,7 @@ class InsertImplicitCasts(val builtIns: KotlinBuiltIns): IrElementTransformerVoi
return element
}
override fun visitGeneralCall(expression: IrGeneralCall): IrExpression {
override fun visitMemberAccess(expression: IrMemberAccessExpression): IrExpression {
expression.transformChildrenVoid(this)
with(expression) {
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.ir.expressions
import org.jetbrains.kotlin.descriptors.ClassDescriptor
interface IrCall : IrGeneralCall {
interface IrCall : IrMemberAccessExpression {
val superQualifier: ClassDescriptor?
}
@@ -16,5 +16,5 @@
package org.jetbrains.kotlin.ir.expressions
interface IrCallableReference : IrGeneralCall
interface IrCallableReference : IrMemberAccessExpression
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.ir.expressions
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
interface IrDelegatingConstructorCall : IrGeneralCall {
interface IrDelegatingConstructorCall : IrMemberAccessExpression {
override val descriptor: ConstructorDescriptor
}
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
interface IrEnumConstructorCall : IrGeneralCall {
interface IrEnumConstructorCall : IrMemberAccessExpression {
override val descriptor: ConstructorDescriptor
val enumEntryDescriptor: ClassDescriptor?
}
@@ -1,44 +0,0 @@
/*
* Copyright 2010-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.ir.expressions
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
interface IrGeneralCall : IrMemberAccessExpression {
val origin: IrStatementOrigin?
override val descriptor: CallableDescriptor
fun getArgument(index: Int): IrExpression?
fun putArgument(index: Int, valueArgument: IrExpression?)
fun removeArgument(index: Int)
}
fun <T : IrGeneralCall> T.putArguments(arguments: List<IrExpression>): T {
arguments.forEachIndexed { i, irArgument ->
putArgument(i, irArgument)
}
return this
}
inline fun <T : IrGeneralCall> T.mapValueParameters(transform: (ValueParameterDescriptor) -> IrExpression): T {
descriptor.valueParameters.forEach {
putArgument(it.index, transform(it))
}
return this
}
@@ -16,8 +16,26 @@
package org.jetbrains.kotlin.ir.expressions
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
interface IrMemberAccessExpression : IrDeclarationReference {
var dispatchReceiver: IrExpression?
var extensionReceiver: IrExpression?
val origin: IrStatementOrigin?
override val descriptor: CallableDescriptor
fun getArgument(index: Int): IrExpression?
fun putArgument(index: Int, valueArgument: IrExpression?)
fun removeArgument(index: Int)
}
inline fun <T : IrMemberAccessExpression> T.mapValueParameters(transform: (ValueParameterDescriptor) -> IrExpression): T {
descriptor.valueParameters.forEach {
putArgument(it.index, transform(it))
}
return this
}
@@ -30,7 +30,7 @@ class IrCallImpl(
override val descriptor: CallableDescriptor,
override val origin: IrStatementOrigin? = null,
override val superQualifier: ClassDescriptor? = null
) : IrGeneralCallBase(startOffset, endOffset, type, descriptor.valueParameters.size), IrCall {
) : IrCallWithIndexedArgumentsBase(startOffset, endOffset, type, descriptor.valueParameters.size), IrCall {
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitCall(this, data)
}
@@ -17,18 +17,17 @@
package org.jetbrains.kotlin.ir.expressions.impl
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrGeneralCall
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.types.KotlinType
import java.lang.AssertionError
abstract class IrGeneralCallBase(
abstract class IrCallWithIndexedArgumentsBase(
startOffset: Int, endOffset: Int, type: KotlinType,
numArguments: Int,
override val origin: IrStatementOrigin? = null
) : IrMemberAccessExpressionBase(startOffset, endOffset, type), IrGeneralCall {
) : IrMemberAccessExpressionBase(startOffset, endOffset, type) {
protected val argumentsByParameterIndex =
arrayOfNulls<IrExpression>(numArguments)
@@ -28,7 +28,7 @@ class IrCallableReferenceImpl(
type: KotlinType,
override val descriptor: CallableDescriptor,
override val origin: IrStatementOrigin? = null
) : IrGeneralCallBase(startOffset, endOffset, type, descriptor.valueParameters.size, origin), IrCallableReference {
) : IrCallWithIndexedArgumentsBase(startOffset, endOffset, type, descriptor.valueParameters.size, origin), IrCallableReference {
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitCallableReference(this, data)
}
@@ -24,7 +24,7 @@ class IrDelegatingConstructorCallImpl(
startOffset: Int,
endOffset: Int,
override val descriptor: ConstructorDescriptor
) : IrGeneralCallBase(startOffset, endOffset, descriptor.returnType, descriptor.valueParameters.size), IrDelegatingConstructorCall {
) : IrCallWithIndexedArgumentsBase(startOffset, endOffset, descriptor.returnType, descriptor.valueParameters.size), IrDelegatingConstructorCall {
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitDelegatingConstructorCall(this, data)
}
@@ -26,7 +26,7 @@ class IrEnumConstructorCallImpl(
endOffset: Int,
override val descriptor: ConstructorDescriptor,
override val enumEntryDescriptor: ClassDescriptor? = null
) : IrGeneralCallBase(startOffset, endOffset, descriptor.returnType, descriptor.valueParameters.size), IrEnumConstructorCall {
) : IrCallWithIndexedArgumentsBase(startOffset, endOffset, descriptor.returnType, descriptor.valueParameters.size), IrEnumConstructorCall {
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitEnumConstructorCall(this, data)
}
@@ -95,7 +95,7 @@ class DumpIrTreeVisitor(out: Appendable): IrElementVisitor<Unit, String> {
}
}
override fun visitGeneralCall(expression: IrGeneralCall, data: String) {
override fun visitMemberAccess(expression: IrMemberAccessExpression, data: String) {
expression.dumpLabeledElementWith(data) {
expression.dispatchReceiver?.accept(this, "\$this")
expression.extensionReceiver?.accept(this, "\$receiver")
@@ -78,13 +78,13 @@ interface IrElementTransformer<in D> : IrElementVisitor<IrElement, D> {
override fun visitGetField(expression: IrGetField, data: D) = visitFieldAccess(expression, data)
override fun visitSetField(expression: IrSetField, data: D) = visitFieldAccess(expression, data)
override fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver, data: D) = visitDeclarationReference(expression, data)
override fun visitGeneralCall(expression: IrGeneralCall, data: D) = visitDeclarationReference(expression, data)
override fun visitCall(expression: IrCall, data: D) = visitGeneralCall(expression, data)
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D) = visitGeneralCall(expression, data)
override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = visitGeneralCall(expression, data)
override fun visitMemberAccess(expression: IrMemberAccessExpression, data: D): IrElement = visitDeclarationReference(expression, data)
override fun visitCall(expression: IrCall, data: D) = visitMemberAccess(expression, data)
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D) = visitMemberAccess(expression, data)
override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = visitMemberAccess(expression, data)
override fun visitGetClass(expression: IrGetClass, data: D) = visitExpression(expression, data)
override fun visitCallableReference(expression: IrCallableReference, data: D) = visitGeneralCall(expression, data)
override fun visitCallableReference(expression: IrCallableReference, data: D) = visitMemberAccess(expression, data)
override fun visitClassReference(expression: IrClassReference, data: D) = visitDeclarationReference(expression, data)
override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: D) = visitExpression(expression, data)
@@ -145,22 +145,22 @@ interface IrElementTransformerVoid : IrElementTransformer<Nothing?> {
fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver) = visitDeclarationReference(expression)
override fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver, data: Nothing?) = visitGetExtensionReceiver(expression)
fun visitGeneralCall(expression: IrGeneralCall) = visitDeclarationReference(expression)
override fun visitGeneralCall(expression: IrGeneralCall, data: Nothing?) = visitGeneralCall(expression)
fun visitMemberAccess(expression: IrMemberAccessExpression) = visitDeclarationReference(expression)
override fun visitMemberAccess(expression: IrMemberAccessExpression, data: Nothing?) = visitMemberAccess(expression)
fun visitCall(expression: IrCall) = visitGeneralCall(expression)
fun visitCall(expression: IrCall) = visitMemberAccess(expression)
override fun visitCall(expression: IrCall, data: Nothing?) = visitCall(expression)
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) = visitGeneralCall(expression)
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) = visitMemberAccess(expression)
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: Nothing?) = visitDelegatingConstructorCall(expression)
fun visitEnumConstructorCall(expression: IrEnumConstructorCall) = visitGeneralCall(expression)
fun visitEnumConstructorCall(expression: IrEnumConstructorCall) = visitMemberAccess(expression)
override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: Nothing?) = visitEnumConstructorCall(expression)
fun visitGetClass(expression: IrGetClass) = visitExpression(expression)
override fun visitGetClass(expression: IrGetClass, data: Nothing?) = visitGetClass(expression)
fun visitCallableReference(expression: IrCallableReference) = visitGeneralCall(expression)
fun visitCallableReference(expression: IrCallableReference) = visitMemberAccess(expression)
override fun visitCallableReference(expression: IrCallableReference, data: Nothing?) = visitCallableReference(expression)
fun visitClassReference(expression: IrClassReference) = visitDeclarationReference(expression)
@@ -64,13 +64,13 @@ interface IrElementVisitor<out R, in D> {
fun visitGetField(expression: IrGetField, data: D) = visitFieldAccess(expression, data)
fun visitSetField(expression: IrSetField, data: D) = visitFieldAccess(expression, data)
fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver, data: D) = visitDeclarationReference(expression, data)
fun visitGeneralCall(expression: IrGeneralCall, data: D) = visitDeclarationReference(expression, data)
fun visitCall(expression: IrCall, data: D) = visitGeneralCall(expression, data)
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D) = visitGeneralCall(expression, data)
fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = visitGeneralCall(expression, data)
fun visitMemberAccess(expression: IrMemberAccessExpression, data: D) = visitDeclarationReference(expression, data)
fun visitCall(expression: IrCall, data: D) = visitMemberAccess(expression, data)
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D) = visitMemberAccess(expression, data)
fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = visitMemberAccess(expression, data)
fun visitGetClass(expression: IrGetClass, data: D) = visitExpression(expression, data)
fun visitCallableReference(expression: IrCallableReference, data: D) = visitGeneralCall(expression, data)
fun visitCallableReference(expression: IrCallableReference, data: D) = visitMemberAccess(expression, data)
fun visitClassReference(expression: IrClassReference, data: D) = visitDeclarationReference(expression, data)
fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: D) = visitExpression(expression, data)
@@ -135,22 +135,22 @@ interface IrElementVisitorVoid : IrElementVisitor<Unit, Nothing?> {
fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver) = visitDeclarationReference(expression)
override fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver, data: Nothing?) = visitGetExtensionReceiver(expression)
fun visitGeneralCall(expression: IrGeneralCall) = visitDeclarationReference(expression)
override fun visitGeneralCall(expression: IrGeneralCall, data: Nothing?) = visitGeneralCall(expression)
fun visitMemberAccess(expression: IrMemberAccessExpression) = visitDeclarationReference(expression)
override fun visitMemberAccess(expression: IrMemberAccessExpression, data: Nothing?) = visitMemberAccess(expression)
fun visitCall(expression: IrCall) = visitGeneralCall(expression)
fun visitCall(expression: IrCall) = visitMemberAccess(expression)
override fun visitCall(expression: IrCall, data: Nothing?) = visitCall(expression)
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) = visitGeneralCall(expression)
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) = visitMemberAccess(expression)
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: Nothing?) = visitDelegatingConstructorCall(expression)
fun visitEnumConstructorCall(expression: IrEnumConstructorCall) = visitGeneralCall(expression)
fun visitEnumConstructorCall(expression: IrEnumConstructorCall) = visitMemberAccess(expression)
override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: Nothing?) = visitEnumConstructorCall(expression)
fun visitGetClass(expression: IrGetClass) = visitExpression(expression)
override fun visitGetClass(expression: IrGetClass, data: Nothing?) = visitGetClass(expression)
fun visitCallableReference(expression: IrCallableReference) = visitGeneralCall(expression)
fun visitCallableReference(expression: IrCallableReference) = visitMemberAccess(expression)
override fun visitCallableReference(expression: IrCallableReference, data: Nothing?) = visitCallableReference(expression)
fun visitClassReference(expression: IrClassReference) = visitDeclarationReference(expression)