From f6d47aa93c1302eb990de6f75e6f064d45909d70 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Thu, 8 Jun 2017 14:05:50 +0200 Subject: [PATCH] Support handler parameter generation --- .../src/org/jetbrains/kotlin/backend/common/ir/Ir.kt | 4 +++- .../backend/common/lower/DefaultArgumentStubGenerator.kt | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt index 4453abd0864..22c9fef2521 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt @@ -16,9 +16,11 @@ import org.jetbrains.kotlin.util.OperatorNameConventions // This is what Context collects about IR. abstract class Ir(val context: T, val irModule: IrModuleFragment) { + abstract val symbols: Symbols + val defaultParameterDeclarationsCache = mutableMapOf() - abstract val symbols: Symbols + open fun shouldGenerateHandlerParameterForDefaultBodyFun() = false } open class Symbols(val context: T, private val symbolTable: SymbolTable) { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt index 2daa0937298..e264c70b519 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt @@ -368,6 +368,12 @@ private fun FunctionDescriptor.generateDefaultsFunction(context: CommonBackendCo kConstructorMarkerName, context.ir.symbols.defaultConstructorMarker.owner.defaultType) } + else if (context.ir.shouldGenerateHandlerParameterForDefaultBodyFun()) { + syntheticParameters += valueParameter(descriptor, syntheticParameters.last().index + 1, + "handler".synthesizedName, + context.ir.symbols.any.owner.defaultType) + } + descriptor.initialize( /* receiverParameterType = */ extensionReceiverParameter?.type, /* dispatchReceiverParameter = */ dispatchReceiverParameter,