From 6c187278ee0ceaf7bf787d2ca61d86309af3a076 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Tue, 1 Sep 2020 13:29:39 +0700 Subject: [PATCH] [C-interop] Stubs for C functions without parameter names should have non-stable names ^KT-41250 --- .../kotlin/org/jetbrains/kotlin/native/interop/gen/StubIr.kt | 3 ++- .../kotlin/native/interop/gen/StubIrElementBuilders.kt | 5 ++++- .../kotlin/native/interop/gen/StubIrMetadataEmitter.kt | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIr.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIr.kt index 1a7b31ccc7d..27be99cbac5 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIr.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIr.kt @@ -490,7 +490,8 @@ data class FunctionStub( val receiver: ReceiverParameterStub?, val modality: MemberStubModality, val typeParameters: List = emptyList(), - val isOverride: Boolean = false + val isOverride: Boolean = false, + val hasStableParameterNames: Boolean = true ) : StubElementWithOrigin, FunctionalStub { override fun accept(visitor: StubIrVisitor, data: T) = diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrElementBuilders.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrElementBuilders.kt index 8d6e68d5d49..9bba73f3e3e 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrElementBuilders.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrElementBuilders.kt @@ -475,9 +475,11 @@ internal class FunctionStubBuilder( val platform = context.platform val parameters = mutableListOf() + var hasStableParameterNames = true func.parameters.forEachIndexed { index, parameter -> val parameterName = parameter.name.let { if (it == null || it.isEmpty()) { + hasStableParameterNames = false "arg$index" } else { it @@ -547,7 +549,8 @@ internal class FunctionStubBuilder( annotations, mustBeExternal, null, - MemberStubModality.FINAL + MemberStubModality.FINAL, + hasStableParameterNames = hasStableParameterNames ) return listOf(functionStub) } diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrMetadataEmitter.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrMetadataEmitter.kt index c720c004157..4123d810a04 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrMetadataEmitter.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrMetadataEmitter.kt @@ -257,7 +257,8 @@ private class MappingExtensions( get() = flagsOfNotNull( Flag.IS_PUBLIC, Flag.Function.IS_EXTERNAL.takeIf { this.external }, - Flag.HAS_ANNOTATIONS.takeIf { annotations.isNotEmpty() } + Flag.HAS_ANNOTATIONS.takeIf { annotations.isNotEmpty() }, + Flag.Function.HAS_NON_STABLE_PARAMETER_NAMES.takeIf { !this.hasStableParameterNames } ) or modality.flags val Classifier.fqNameSerialized: String