Skip to content

Commit c784482

Browse files
mcpiromangoodwinnk
authored andcommitted
[IR] Add *WithShape versions to IR call factory functions
KT-70057
1 parent 324cad7 commit c784482

File tree

1 file changed

+109
-6
lines changed
  • compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl

1 file changed

+109
-6
lines changed

compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/builders.kt

Lines changed: 109 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
1515
import org.jetbrains.kotlin.ir.declarations.IrVariable
1616
import org.jetbrains.kotlin.ir.expressions.*
1717
import org.jetbrains.kotlin.ir.symbols.*
18+
import org.jetbrains.kotlin.ir.symbols.impl.IrFunctionFakeOverrideSymbol
1819
import org.jetbrains.kotlin.ir.types.IrType
1920
import org.jetbrains.kotlin.ir.util.*
2021

@@ -784,7 +785,35 @@ fun IrWhileLoopImpl(
784785
origin = origin,
785786
)
786787

788+
private fun IrFunctionSymbol.getRealOwner(): IrFunction {
789+
var symbol = this
790+
if (this is IrFunctionFakeOverrideSymbol) {
791+
symbol = originalSymbol
792+
}
793+
return symbol.owner
794+
}
795+
787796
fun IrCallImpl(
797+
startOffset: Int,
798+
endOffset: Int,
799+
type: IrType,
800+
symbol: IrSimpleFunctionSymbol,
801+
typeArgumentsCount: Int = symbol.getRealOwner().typeParameters.size,
802+
valueArgumentsCount: Int = symbol.getRealOwner().valueParameters.size,
803+
origin: IrStatementOrigin? = null,
804+
superQualifierSymbol: IrClassSymbol? = null,
805+
): IrCallImpl = IrCallImplWithShape(
806+
startOffset = startOffset,
807+
endOffset = endOffset,
808+
type = type,
809+
symbol = symbol,
810+
typeArgumentsCount = typeArgumentsCount,
811+
valueArgumentsCount = valueArgumentsCount,
812+
origin = origin,
813+
superQualifierSymbol = superQualifierSymbol,
814+
)
815+
816+
fun IrCallImplWithShape(
788817
startOffset: Int,
789818
endOffset: Int,
790819
type: IrType,
@@ -806,6 +835,28 @@ fun IrCallImpl(
806835
)
807836

808837
fun IrConstructorCallImpl(
838+
startOffset: Int,
839+
endOffset: Int,
840+
type: IrType,
841+
symbol: IrConstructorSymbol,
842+
typeArgumentsCount: Int,
843+
constructorTypeArgumentsCount: Int,
844+
valueArgumentsCount: Int = symbol.owner.valueParameters.size,
845+
origin: IrStatementOrigin? = null,
846+
source: SourceElement = SourceElement.NO_SOURCE,
847+
): IrConstructorCallImpl = IrConstructorCallImplWithShape(
848+
startOffset = startOffset,
849+
endOffset = endOffset,
850+
type = type,
851+
symbol = symbol,
852+
typeArgumentsCount = typeArgumentsCount,
853+
constructorTypeArgumentsCount = constructorTypeArgumentsCount,
854+
valueArgumentsCount = valueArgumentsCount,
855+
origin = origin,
856+
source = source
857+
)
858+
859+
fun IrConstructorCallImplWithShape(
809860
startOffset: Int,
810861
endOffset: Int,
811862
type: IrType,
@@ -829,6 +880,22 @@ fun IrConstructorCallImpl(
829880
)
830881

831882
fun IrDelegatingConstructorCallImpl(
883+
startOffset: Int,
884+
endOffset: Int,
885+
type: IrType,
886+
symbol: IrConstructorSymbol,
887+
typeArgumentsCount: Int,
888+
valueArgumentsCount: Int = symbol.owner.valueParameters.size,
889+
): IrDelegatingConstructorCallImpl = IrDelegatingConstructorCallImplWithShape(
890+
startOffset = startOffset,
891+
endOffset = endOffset,
892+
type = type,
893+
symbol = symbol,
894+
typeArgumentsCount = typeArgumentsCount,
895+
valueArgumentsCount = valueArgumentsCount
896+
)
897+
898+
fun IrDelegatingConstructorCallImplWithShape(
832899
startOffset: Int,
833900
endOffset: Int,
834901
type: IrType,
@@ -847,6 +914,22 @@ fun IrDelegatingConstructorCallImpl(
847914
)
848915

849916
fun IrEnumConstructorCallImpl(
917+
startOffset: Int,
918+
endOffset: Int,
919+
type: IrType,
920+
symbol: IrConstructorSymbol,
921+
typeArgumentsCount: Int,
922+
valueArgumentsCount: Int = symbol.owner.valueParameters.size,
923+
): IrEnumConstructorCallImpl = IrEnumConstructorCallImplWithShape(
924+
startOffset = startOffset,
925+
endOffset = endOffset,
926+
type = type,
927+
symbol = symbol,
928+
typeArgumentsCount = typeArgumentsCount,
929+
valueArgumentsCount = valueArgumentsCount
930+
)
931+
932+
fun IrEnumConstructorCallImplWithShape(
850933
startOffset: Int,
851934
endOffset: Int,
852935
type: IrType,
@@ -865,6 +948,26 @@ fun IrEnumConstructorCallImpl(
865948
)
866949

867950
fun IrFunctionReferenceImpl(
951+
startOffset: Int,
952+
endOffset: Int,
953+
type: IrType,
954+
symbol: IrFunctionSymbol,
955+
typeArgumentsCount: Int,
956+
valueArgumentsCount: Int = symbol.getRealOwner().valueParameters.size,
957+
reflectionTarget: IrFunctionSymbol? = symbol,
958+
origin: IrStatementOrigin? = null,
959+
): IrFunctionReferenceImpl = IrFunctionReferenceImplWithShape(
960+
startOffset = startOffset,
961+
endOffset = endOffset,
962+
type = type,
963+
symbol = symbol,
964+
typeArgumentsCount = typeArgumentsCount,
965+
valueArgumentsCount = valueArgumentsCount,
966+
reflectionTarget = reflectionTarget,
967+
origin = origin,
968+
)
969+
970+
fun IrFunctionReferenceImplWithShape(
868971
startOffset: Int,
869972
endOffset: Int,
870973
type: IrType,
@@ -944,7 +1047,7 @@ fun IrCallImpl.Companion.fromSymbolDescriptor(
9441047
origin: IrStatementOrigin? = null,
9451048
superQualifierSymbol: IrClassSymbol? = null,
9461049
): IrCallImpl =
947-
IrCallImpl(startOffset, endOffset, type, symbol, typeArgumentsCount, valueArgumentsCount, origin, superQualifierSymbol)
1050+
IrCallImplWithShape(startOffset, endOffset, type, symbol, typeArgumentsCount, valueArgumentsCount, origin, superQualifierSymbol)
9481051

9491052
fun IrCallImpl.Companion.fromSymbolOwner(
9501053
startOffset: Int,
@@ -987,7 +1090,7 @@ fun IrConstructorCallImpl.Companion.fromSymbolDescriptor(
9871090
val classTypeParametersCount = constructorDescriptor.constructedClass.original.declaredTypeParameters.size
9881091
val totalTypeParametersCount = constructorDescriptor.typeParameters.size
9891092
val valueParametersCount = constructorDescriptor.valueParameters.size + constructorDescriptor.contextReceiverParameters.size
990-
return IrConstructorCallImpl(
1093+
return IrConstructorCallImplWithShape(
9911094
startOffset, endOffset,
9921095
type,
9931096
constructorSymbol,
@@ -1051,8 +1154,8 @@ fun IrEnumConstructorCallImpl.Companion.fromSymbolDescriptor(
10511154
endOffset: Int,
10521155
type: IrType,
10531156
symbol: IrConstructorSymbol,
1054-
typeArgumentsCount: Int
1055-
) = IrEnumConstructorCallImpl(startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.descriptor.valueParameters.size)
1157+
typeArgumentsCount: Int,
1158+
) = IrEnumConstructorCallImplWithShape(startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.descriptor.valueParameters.size)
10561159

10571160

10581161
@ObsoleteDescriptorBasedAPI
@@ -1064,7 +1167,7 @@ fun IrDelegatingConstructorCallImpl.Companion.fromSymbolDescriptor(
10641167
typeArgumentsCount: Int = symbol.descriptor.typeParametersCount,
10651168
valueArgumentsCount: Int = symbol.descriptor.valueParameters.size + symbol.descriptor.contextReceiverParameters.size,
10661169
): IrDelegatingConstructorCallImpl =
1067-
IrDelegatingConstructorCallImpl(startOffset, endOffset, type, symbol, typeArgumentsCount, valueArgumentsCount)
1170+
IrDelegatingConstructorCallImplWithShape(startOffset, endOffset, type, symbol, typeArgumentsCount, valueArgumentsCount)
10681171

10691172
@UnsafeDuringIrConstructionAPI
10701173
fun IrDelegatingConstructorCallImpl.Companion.fromSymbolOwner(
@@ -1087,7 +1190,7 @@ fun IrFunctionReferenceImpl.Companion.fromSymbolDescriptor(
10871190
typeArgumentsCount: Int,
10881191
reflectionTarget: IrFunctionSymbol?,
10891192
origin: IrStatementOrigin? = null,
1090-
): IrFunctionReferenceImpl = IrFunctionReferenceImpl(
1193+
): IrFunctionReferenceImpl = IrFunctionReferenceImplWithShape(
10911194
startOffset, endOffset,
10921195
type,
10931196
symbol,

0 commit comments

Comments
 (0)