From 0609cef5aca3434f79f8c239043d0a384841f167 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Tue, 21 Feb 2017 17:15:03 +0300 Subject: [PATCH] TODO: hack because of IR bug --- .../kotlin/backend/konan/llvm/IrToBitcode.kt | 21 ++++++++++++------- .../backend/konan/llvm/LlvmDeclarations.kt | 10 +++++++-- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index e8e3bdd9bd5..ccaedde69ba 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -2,23 +2,25 @@ package org.jetbrains.kotlin.backend.konan.llvm import kotlinx.cinterop.* import llvm.* -import org.jetbrains.kotlin.backend.konan.* -import org.jetbrains.kotlin.backend.konan.ir.* +import org.jetbrains.kotlin.backend.konan.Context +import org.jetbrains.kotlin.backend.konan.KonanConfigKeys +import org.jetbrains.kotlin.backend.konan.KonanPhase +import org.jetbrains.kotlin.backend.konan.PhaseManager import org.jetbrains.kotlin.backend.konan.descriptors.* +import org.jetbrains.kotlin.backend.konan.ir.IrInlineFunctionBody +import org.jetbrains.kotlin.backend.konan.ir.getArguments +import org.jetbrains.kotlin.backend.konan.ir.ir2string import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.IrBuiltinOperatorDescriptorBase +import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.IrSetterCallImpl import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe @@ -1222,7 +1224,8 @@ internal class CodeGeneratorVisitor(val context: Context) : IrElementVisitorVoid private fun evaluateGetField(value: IrGetField): LLVMValueRef { context.log("evaluateGetField : ${ir2string(value)}") - if (value.descriptor.dispatchReceiverParameter != null) { + if (value.descriptor.dispatchReceiverParameter != null + || value.descriptor is IrImplementingDelegateDescriptorImpl) { // TODO: hack because of IR bug. val thisPtr = evaluateExpression(value.receiver!!) return codegen.loadSlot( fieldPtrOfClass(thisPtr, value.descriptor), value.descriptor.isVar()) @@ -1251,7 +1254,9 @@ internal class CodeGeneratorVisitor(val context: Context) : IrElementVisitorVoid private fun evaluateSetField(value: IrSetField): LLVMValueRef { context.log("evaluateSetField : ${ir2string(value)}") val valueToAssign = evaluateExpression(value.value) - if (value.descriptor.dispatchReceiverParameter != null) { + + if (value.descriptor.dispatchReceiverParameter != null + || value.descriptor is IrImplementingDelegateDescriptorImpl) { // TODO: hack because of IR bug. val thisPtr = evaluateExpression(value.receiver!!) codegen.storeAnyGlobal(valueToAssign, fieldPtrOfClass(thisPtr, value.descriptor)) } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt index b8244176c7a..d760fc9527a 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt @@ -7,6 +7,8 @@ import org.jetbrains.kotlin.backend.konan.descriptors.* import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl +import org.jetbrains.kotlin.ir.descriptors.IrPropertyDelegateDescriptorImpl import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.name.FqName @@ -296,8 +298,10 @@ private class DeclarationsGeneratorVisitor(override val context: Context) : val descriptor = declaration.descriptor val dispatchReceiverParameter = descriptor.dispatchReceiverParameter - if (dispatchReceiverParameter != null) { - val containingClass = dispatchReceiverParameter.containingDeclaration + if (dispatchReceiverParameter != null + || descriptor is IrImplementingDelegateDescriptorImpl) { // TODO: hack because of IR bug. + val containingClass = dispatchReceiverParameter?.containingDeclaration + ?: descriptor.containingDeclaration // TODO: hack because of IR bug. val classDeclarations = this.classes[containingClass] ?: error(containingClass.toString()) val allFields = classDeclarations.fields @@ -334,6 +338,8 @@ private class DeclarationsGeneratorVisitor(override val context: Context) : LLVMAddFunction(context.llvmModule, symbolName, llvmFunctionType)!! } + println("ZZZ: $descriptor") + this.functions[descriptor] = FunctionLlvmDeclarations(llvmFunction) } }