[IR] Add returnType to consturcotrs of IrFunctionBase

This commit is contained in:
Svyatoslav Kuzmich
2018-11-19 16:03:32 +03:00
parent fe6b36391d
commit d5f8c63130
31 changed files with 131 additions and 71 deletions
@@ -122,12 +122,11 @@ fun IrClass.addSimpleDelegatingConstructor(
)
constructorDescriptor.returnType = superConstructorDescriptor.returnType
return IrConstructorImpl(startOffset, endOffset, origin, constructorDescriptor).also { constructor ->
return IrConstructorImpl(startOffset, endOffset, origin, constructorDescriptor, this.defaultType).also { constructor ->
assert(superConstructor.dispatchReceiverParameter == null) // Inner classes aren't supported.
constructor.valueParameters += valueParameters
constructor.returnType = this.defaultType
constructor.body = IrBlockBodyImpl(
startOffset, endOffset,
@@ -429,6 +429,7 @@ private fun buildFunctionDeclaration(irFunction: IrFunction, origin: IrDeclarati
IrConstructorSymbolImpl(descriptor),
irFunction.name,
irFunction.visibility,
irFunction.returnType,
irFunction.isInline,
false,
false
@@ -449,6 +450,7 @@ private fun buildFunctionDeclaration(irFunction: IrFunction, origin: IrDeclarati
name,
irFunction.visibility,
Modality.FINAL,
irFunction.returnType,
irFunction.isInline,
false,
false,
@@ -137,10 +137,10 @@ class InitializersLowering(
IrFunctionImpl(
irClass.startOffset, irClass.endOffset, declarationOrigin,
staticInitializerDescriptor,
context.irBuiltIns.unitType,
IrBlockBodyImpl(irClass.startOffset, irClass.endOffset,
staticInitializerStatements.map { it.copy(irClass) })
).apply {
returnType = context.irBuiltIns.unitType
accept(SetDeclarationsParentVisitor, this)
}
)
@@ -227,6 +227,12 @@ class InlineClassLowering(val context: BackendContext) {
private fun createStaticBodilessMethod(function: IrFunction): IrSimpleFunction {
val descriptor = WrappedSimpleFunctionDescriptor()
val returnType = when (function) {
is IrSimpleFunction -> function.returnType
is IrConstructor -> function.parentAsClass.defaultType
else -> error("Unknown function type")
}
return IrFunctionImpl(
function.startOffset,
function.endOffset,
@@ -235,18 +241,14 @@ class InlineClassLowering(val context: BackendContext) {
function.name.toInlineClassImplementationName(),
function.visibility,
Modality.FINAL,
returnType,
function.isInline,
function.isExternal,
(function is IrSimpleFunction && function.isTailrec),
(function is IrSimpleFunction && function.isSuspend)
).apply {
descriptor.bind(this)
returnType = when (function) {
is IrSimpleFunction -> function.returnType
is IrConstructor -> function.parentAsClass.defaultType
else -> error("Unknown function type")
}
typeParameters += function.typeParameters
copyTypeParametersFrom(function)
annotations += function.annotations
dispatchReceiverParameter = null
extensionReceiverParameter = function.extensionReceiverParameter?.copyTo(this)
@@ -536,6 +536,7 @@ open class LocalDeclarationsLowering(
// TODO: change to PRIVATE when issue with CallableReferenceLowering in Jvm BE is fixed
if (isJVM) Visibilities.PUBLIC else Visibilities.PRIVATE,
Modality.FINAL,
oldDeclaration.returnType,
oldDeclaration.isInline,
oldDeclaration.isExternal,
oldDeclaration.isTailrec,
@@ -546,7 +547,6 @@ open class LocalDeclarationsLowering(
localFunctionContext.transformedDeclaration = newDeclaration
newDeclaration.parent = memberOwner
newDeclaration.returnType = oldDeclaration.returnType
newDeclaration.copyTypeParametersFrom(oldDeclaration)
newDeclaration.dispatchReceiverParameter = newDispatchReceiverParameter
newDeclaration.extensionReceiverParameter = oldDeclaration.extensionReceiverParameter?.run {
@@ -615,7 +615,7 @@ open class LocalDeclarationsLowering(
val newDeclaration = IrConstructorImpl(
oldDeclaration.startOffset, oldDeclaration.endOffset, oldDeclaration.origin,
newSymbol, oldDeclaration.name, loweredConstructorVisibility, oldDeclaration.isInline,
newSymbol, oldDeclaration.name, loweredConstructorVisibility, oldDeclaration.returnType, oldDeclaration.isInline,
oldDeclaration.isExternal, oldDeclaration.isPrimary
)
@@ -624,7 +624,6 @@ open class LocalDeclarationsLowering(
constructorContext.transformedDeclaration = newDeclaration
newDeclaration.parent = localClassContext.declaration
newDeclaration.returnType = oldDeclaration.returnType
newDeclaration.copyTypeParametersFrom(oldDeclaration)
// TODO: should dispatch receiver be copied?