From 4c04ad23714acf0457d8ac3314949b8e2a9abdae Mon Sep 17 00:00:00 2001 From: Juan Chen Date: Thu, 26 Dec 2019 16:45:14 -0800 Subject: [PATCH] FIR: Add bindings for dispatch receiver parameters Before this commit, such descriptors have null owners, which causes problems when the getter of the owner property is called. --- .../src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt | 5 +++-- .../testData/codegen/box/bridges/fakeOverrideMultiFile.kt | 1 - compiler/testData/codegen/box/classes/kt2390.kt | 1 - .../codegen/box/defaultArguments/convention/kt9140.kt | 1 - .../codegen/box/defaultArguments/function/funInTraitChain.kt | 1 - .../inheritedFromInterfaceViaAbstractSuperclass.kt | 1 - compiler/testData/codegen/box/external/withDefaultArg.kt | 1 - compiler/testData/codegen/box/functions/defaultargs.kt | 1 - compiler/testData/codegen/box/jvm8/defaultArgs.kt | 1 - .../codegen/box/jvm8/defaults/compatibility/bridge2.kt | 1 - .../codegen/box/jvm8/defaults/compatibility/bridge3.kt | 1 - compiler/testData/codegen/box/jvm8/defaults/defaultArgs.kt | 1 - compiler/testData/codegen/box/jvm8/defaults/simpleCall.kt | 1 - .../codegen/box/jvm8/javaDefaults/defaultMethodOverride.kt | 1 - compiler/testData/codegen/box/jvm8/oneImplementation.kt | 1 - compiler/testData/codegen/box/jvm8/oneImplementation2.kt | 1 - compiler/testData/codegen/box/jvm8/simpleCall.kt | 1 - compiler/testData/codegen/box/jvm8/simpleProperty.kt | 1 - compiler/testData/codegen/box/jvmStatic/default.kt | 1 - compiler/testData/codegen/box/jvmStatic/defaultCrossFile.kt | 2 -- compiler/testData/codegen/box/jvmStatic/inline.kt | 1 - compiler/testData/codegen/box/regressions/kt3421.kt | 1 - .../codegen/box/traits/abstractClassInheritsFromInterface.kt | 1 - .../codegen/box/traits/indirectlyInheritPropertyGetter.kt | 1 - compiler/testData/codegen/box/traits/inheritJavaInterface.kt | 1 - compiler/testData/codegen/box/traits/inheritedFun.kt | 1 - .../box/traits/interfaceWithNonAbstractFunIndirect.kt | 1 - 27 files changed, 3 insertions(+), 29 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index c0a588e4083..066203b50f9 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -309,8 +309,9 @@ class Fir2IrVisitor( private fun IrFunction.addDispatchReceiverParameter(containingClass: IrClass) { val thisOrigin = IrDeclarationOrigin.DEFINED val thisType = containingClass.thisReceiver!!.type + val descriptor = WrappedValueParameterDescriptor() dispatchReceiverParameter = symbolTable.declareValueParameter( - startOffset, endOffset, thisOrigin, WrappedValueParameterDescriptor(), + startOffset, endOffset, thisOrigin, descriptor, thisType ) { symbol -> IrValueParameterImpl( @@ -318,7 +319,7 @@ class Fir2IrVisitor( Name.special(""), -1, thisType, varargElementType = null, isCrossinline = false, isNoinline = false ).setParentByParentStack() - } + }.also { descriptor.bind(it) } } private fun T.setFunctionContent( diff --git a/compiler/testData/codegen/box/bridges/fakeOverrideMultiFile.kt b/compiler/testData/codegen/box/bridges/fakeOverrideMultiFile.kt index e2aa923e8d2..af4180c9896 100644 --- a/compiler/testData/codegen/box/bridges/fakeOverrideMultiFile.kt +++ b/compiler/testData/codegen/box/bridges/fakeOverrideMultiFile.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // FILE: 1.kt class Test: Impl(), CProvider diff --git a/compiler/testData/codegen/box/classes/kt2390.kt b/compiler/testData/codegen/box/classes/kt2390.kt index 1c737860198..9d664ee825d 100644 --- a/compiler/testData/codegen/box/classes/kt2390.kt +++ b/compiler/testData/codegen/box/classes/kt2390.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR class JsonObject() { } diff --git a/compiler/testData/codegen/box/defaultArguments/convention/kt9140.kt b/compiler/testData/codegen/box/defaultArguments/convention/kt9140.kt index 60db844e804..ea677b74a84 100644 --- a/compiler/testData/codegen/box/defaultArguments/convention/kt9140.kt +++ b/compiler/testData/codegen/box/defaultArguments/convention/kt9140.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR class X { operator fun get(name: String, type: String = "none") = name + type } diff --git a/compiler/testData/codegen/box/defaultArguments/function/funInTraitChain.kt b/compiler/testData/codegen/box/defaultArguments/function/funInTraitChain.kt index d4add29af2e..50c0b9df7ae 100644 --- a/compiler/testData/codegen/box/defaultArguments/function/funInTraitChain.kt +++ b/compiler/testData/codegen/box/defaultArguments/function/funInTraitChain.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND: JVM // See KT-15971 diff --git a/compiler/testData/codegen/box/defaultArguments/inheritedFromInterfaceViaAbstractSuperclass.kt b/compiler/testData/codegen/box/defaultArguments/inheritedFromInterfaceViaAbstractSuperclass.kt index f8a841d9cb7..b74007df30e 100644 --- a/compiler/testData/codegen/box/defaultArguments/inheritedFromInterfaceViaAbstractSuperclass.kt +++ b/compiler/testData/codegen/box/defaultArguments/inheritedFromInterfaceViaAbstractSuperclass.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR interface I { fun foo(x: Int = 23): String } diff --git a/compiler/testData/codegen/box/external/withDefaultArg.kt b/compiler/testData/codegen/box/external/withDefaultArg.kt index de8d962737f..d4b27538e96 100644 --- a/compiler/testData/codegen/box/external/withDefaultArg.kt +++ b/compiler/testData/codegen/box/external/withDefaultArg.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME diff --git a/compiler/testData/codegen/box/functions/defaultargs.kt b/compiler/testData/codegen/box/functions/defaultargs.kt index 7d4293b0a55..726a4d4db10 100644 --- a/compiler/testData/codegen/box/functions/defaultargs.kt +++ b/compiler/testData/codegen/box/functions/defaultargs.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR open abstract class B { fun foo(arg: Int = 239 + 1) : Int = arg } diff --git a/compiler/testData/codegen/box/jvm8/defaultArgs.kt b/compiler/testData/codegen/box/jvm8/defaultArgs.kt index e145429801a..74ba798e823 100644 --- a/compiler/testData/codegen/box/jvm8/defaultArgs.kt +++ b/compiler/testData/codegen/box/jvm8/defaultArgs.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 diff --git a/compiler/testData/codegen/box/jvm8/defaults/compatibility/bridge2.kt b/compiler/testData/codegen/box/jvm8/defaults/compatibility/bridge2.kt index b7bc7289d6d..5e6b9ec3a41 100644 --- a/compiler/testData/codegen/box/jvm8/defaults/compatibility/bridge2.kt +++ b/compiler/testData/codegen/box/jvm8/defaults/compatibility/bridge2.kt @@ -1,5 +1,4 @@ // !JVM_DEFAULT_MODE: compatibility -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: Simple.java diff --git a/compiler/testData/codegen/box/jvm8/defaults/compatibility/bridge3.kt b/compiler/testData/codegen/box/jvm8/defaults/compatibility/bridge3.kt index e81694695a4..e200ae225bf 100644 --- a/compiler/testData/codegen/box/jvm8/defaults/compatibility/bridge3.kt +++ b/compiler/testData/codegen/box/jvm8/defaults/compatibility/bridge3.kt @@ -1,5 +1,4 @@ // !JVM_DEFAULT_MODE: compatibility -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: Simple.java diff --git a/compiler/testData/codegen/box/jvm8/defaults/defaultArgs.kt b/compiler/testData/codegen/box/jvm8/defaults/defaultArgs.kt index d301bda5886..086f7cc889d 100644 --- a/compiler/testData/codegen/box/jvm8/defaults/defaultArgs.kt +++ b/compiler/testData/codegen/box/jvm8/defaults/defaultArgs.kt @@ -1,5 +1,4 @@ // !JVM_DEFAULT_MODE: enable -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 // WITH_RUNTIME diff --git a/compiler/testData/codegen/box/jvm8/defaults/simpleCall.kt b/compiler/testData/codegen/box/jvm8/defaults/simpleCall.kt index ec02a2751e0..4156a51427c 100644 --- a/compiler/testData/codegen/box/jvm8/defaults/simpleCall.kt +++ b/compiler/testData/codegen/box/jvm8/defaults/simpleCall.kt @@ -1,5 +1,4 @@ // !JVM_DEFAULT_MODE: enable -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 // WITH_RUNTIME diff --git a/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodOverride.kt b/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodOverride.kt index b670a847549..287f7458c32 100644 --- a/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodOverride.kt +++ b/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodOverride.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // SKIP_JDK6 // TARGET_BACKEND: JVM // FILE: Simple.java diff --git a/compiler/testData/codegen/box/jvm8/oneImplementation.kt b/compiler/testData/codegen/box/jvm8/oneImplementation.kt index aff2cd59c59..b5ae79a92bb 100644 --- a/compiler/testData/codegen/box/jvm8/oneImplementation.kt +++ b/compiler/testData/codegen/box/jvm8/oneImplementation.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 interface KCallable { diff --git a/compiler/testData/codegen/box/jvm8/oneImplementation2.kt b/compiler/testData/codegen/box/jvm8/oneImplementation2.kt index 185e6d70a50..0d618e7185b 100644 --- a/compiler/testData/codegen/box/jvm8/oneImplementation2.kt +++ b/compiler/testData/codegen/box/jvm8/oneImplementation2.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 interface KCallable { diff --git a/compiler/testData/codegen/box/jvm8/simpleCall.kt b/compiler/testData/codegen/box/jvm8/simpleCall.kt index d7c894bfef3..40a4049739e 100644 --- a/compiler/testData/codegen/box/jvm8/simpleCall.kt +++ b/compiler/testData/codegen/box/jvm8/simpleCall.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 diff --git a/compiler/testData/codegen/box/jvm8/simpleProperty.kt b/compiler/testData/codegen/box/jvm8/simpleProperty.kt index 51be5ceec82..dfe8afa88fb 100644 --- a/compiler/testData/codegen/box/jvm8/simpleProperty.kt +++ b/compiler/testData/codegen/box/jvm8/simpleProperty.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 diff --git a/compiler/testData/codegen/box/jvmStatic/default.kt b/compiler/testData/codegen/box/jvmStatic/default.kt index 59d44ddde29..16ac93e173c 100644 --- a/compiler/testData/codegen/box/jvmStatic/default.kt +++ b/compiler/testData/codegen/box/jvmStatic/default.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME diff --git a/compiler/testData/codegen/box/jvmStatic/defaultCrossFile.kt b/compiler/testData/codegen/box/jvmStatic/defaultCrossFile.kt index 846906fc84a..1df37e63e21 100644 --- a/compiler/testData/codegen/box/jvmStatic/defaultCrossFile.kt +++ b/compiler/testData/codegen/box/jvmStatic/defaultCrossFile.kt @@ -1,6 +1,4 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM - // WITH_RUNTIME // FILE: 1.kt diff --git a/compiler/testData/codegen/box/jvmStatic/inline.kt b/compiler/testData/codegen/box/jvmStatic/inline.kt index 3f90a43724a..802d6b8da0b 100644 --- a/compiler/testData/codegen/box/jvmStatic/inline.kt +++ b/compiler/testData/codegen/box/jvmStatic/inline.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME diff --git a/compiler/testData/codegen/box/regressions/kt3421.kt b/compiler/testData/codegen/box/regressions/kt3421.kt index f25efb39233..a3f0590d621 100644 --- a/compiler/testData/codegen/box/regressions/kt3421.kt +++ b/compiler/testData/codegen/box/regressions/kt3421.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR public object Globals{ operator fun get(key: String, remove: Boolean = true): String { return "OK" diff --git a/compiler/testData/codegen/box/traits/abstractClassInheritsFromInterface.kt b/compiler/testData/codegen/box/traits/abstractClassInheritsFromInterface.kt index a9740c6af7e..3f232516da2 100644 --- a/compiler/testData/codegen/box/traits/abstractClassInheritsFromInterface.kt +++ b/compiler/testData/codegen/box/traits/abstractClassInheritsFromInterface.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: ExtendsKCWithT.java diff --git a/compiler/testData/codegen/box/traits/indirectlyInheritPropertyGetter.kt b/compiler/testData/codegen/box/traits/indirectlyInheritPropertyGetter.kt index 29522a96127..75cde1daa46 100644 --- a/compiler/testData/codegen/box/traits/indirectlyInheritPropertyGetter.kt +++ b/compiler/testData/codegen/box/traits/indirectlyInheritPropertyGetter.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR interface A { val str: String get() = "OK" diff --git a/compiler/testData/codegen/box/traits/inheritJavaInterface.kt b/compiler/testData/codegen/box/traits/inheritJavaInterface.kt index 0eaaee92c27..e97a48935a1 100644 --- a/compiler/testData/codegen/box/traits/inheritJavaInterface.kt +++ b/compiler/testData/codegen/box/traits/inheritJavaInterface.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: MyInt.java diff --git a/compiler/testData/codegen/box/traits/inheritedFun.kt b/compiler/testData/codegen/box/traits/inheritedFun.kt index e0fc8324e5e..756aed226c7 100644 --- a/compiler/testData/codegen/box/traits/inheritedFun.kt +++ b/compiler/testData/codegen/box/traits/inheritedFun.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR //KT-2206 interface A { fun f():Int = 239 diff --git a/compiler/testData/codegen/box/traits/interfaceWithNonAbstractFunIndirect.kt b/compiler/testData/codegen/box/traits/interfaceWithNonAbstractFunIndirect.kt index 125210cd5c1..e77b2472214 100644 --- a/compiler/testData/codegen/box/traits/interfaceWithNonAbstractFunIndirect.kt +++ b/compiler/testData/codegen/box/traits/interfaceWithNonAbstractFunIndirect.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR interface I { fun foo(): String = "foo"