translator: fix indexes(extension functions)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -41,12 +41,12 @@ class ProjectTranslator(val files: List<KtFile>, 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() }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user