diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt b/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt index 3ef823086b6..1ab93208db5 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt @@ -33,17 +33,20 @@ class FunctionCodegen(override val state: TranslationState, LLVMInstanceOfStandardType(it.name.toString(), it.type) }) + returnType = LLVMInstanceOfStandardType("instance", descriptor.returnType!!) + external = isExternal() + name = "${function.fqName}${if (args.size > 0 && !external) "_${args.joinToString(separator = "_", transform = { it.type.mangle() })}" else ""}" + if (isExtensionDeclaration) { val receiverType = descriptor.extensionReceiverParameter!!.type val translatorType = LLVMMapStandardType(receiverType) functionNamePrefix += translatorType.toString() + "." + + val extensionFunctionsOfThisType = state.extensionFunctions.getOrDefault(translatorType.toString(), HashMap()) + extensionFunctionsOfThisType.put(name, this) + state.extensionFunctions.put(translatorType.toString(), extensionFunctionsOfThisType) } - - returnType = LLVMInstanceOfStandardType("instance", descriptor.returnType!!) - external = isExternal() - name = "${function.fqName}${if (args.size > 0 && !external) "_${args.joinToString(separator = "_", transform = { it.type.mangle() })}" else ""}" - val retType = returnType!!.type when (retType) { is LLVMReferenceType -> { @@ -98,10 +101,6 @@ class FunctionCodegen(override val state: TranslationState, val receiverType = receiverParameter.type val translatorType = LLVMMapStandardType(receiverType) - val extensionFunctionsOfThisType = state.extensionFunctions.getOrDefault(translatorType.toString(), HashMap()) - extensionFunctionsOfThisType.put(name, this) - state.extensionFunctions.put(translatorType.toString(), extensionFunctionsOfThisType) - val classVal = LLVMVariable("classvariable.this", translatorType, pointer = 0) variableManager.addVariable("this", classVal, 0) actualArgs.add(classVal) diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/ProjectTranslator.kt b/translator/src/main/kotlin/org/kotlinnative/translator/ProjectTranslator.kt index 89bd8111213..ba1bd530065 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/ProjectTranslator.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/ProjectTranslator.kt @@ -41,12 +41,12 @@ class ProjectTranslator(val files: List, val state: TranslationState) { private fun generateProjectBody() { with(state) { - externalFunctions.values.map { it.generate() } - functions.values.filter { it.isExtensionDeclaration }.map { it.generate() } - functions.values.filter { !it.isExtensionDeclaration }.map { it.generate() } properties.values.map { it.generate() } objects.values.map { it.generate() } classes.values.map { it.generate() } + externalFunctions.values.map { it.generate() } + functions.values.filter { it.isExtensionDeclaration }.map { it.generate() } + functions.values.filter { !it.isExtensionDeclaration }.map { it.generate() } } }