From d3b21aed8a4d10ca745beb0523bbd22c4c5b696e Mon Sep 17 00:00:00 2001 From: Juan Chen Date: Fri, 3 Jan 2020 09:39:14 -0800 Subject: [PATCH] [FIR]: add missed bindings for WrappedReceiverParameterDescriptor. --- .../fir/backend/Fir2IrDeclarationStorage.kt | 16 ++++++++++++---- .../codegen/box/controlStructures/kt299.kt | 1 - .../box/functions/bigArity/callFunViaVararg.kt | 1 - .../codegen/box/functions/bigArity/subclass.kt | 1 - compiler/testData/codegen/box/traits/kt3315.kt | 1 - 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 2134d9bf821..c01615cb6d9 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -111,14 +111,18 @@ class Fir2IrDeclarationStorage( val thisOrigin = IrDeclarationOrigin.INSTANCE_RECEIVER val thisType = IrSimpleTypeImpl(symbol, false, emptyList(), emptyList()) val parent = this + val receiverDescriptor = WrappedReceiverParameterDescriptor() thisReceiver = irSymbolTable.declareValueParameter( - startOffset, endOffset, thisOrigin, WrappedReceiverParameterDescriptor(), thisType + startOffset, endOffset, thisOrigin, receiverDescriptor, thisType ) { symbol -> IrValueParameterImpl( startOffset, endOffset, thisOrigin, symbol, Name.special(""), -1, thisType, varargElementType = null, isCrossinline = false, isNoinline = false - ).apply { this.parent = parent } + ).apply { + this.parent = parent + receiverDescriptor.bind(this) + } } leaveScope(descriptor) } @@ -351,15 +355,19 @@ class Fir2IrDeclarationStorage( } if (containingClass != null && !isStatic) { val thisType = containingClass.thisReceiver!!.type + val descriptor = WrappedReceiverParameterDescriptor() dispatchReceiverParameter = irSymbolTable.declareValueParameter( - startOffset, endOffset, thisOrigin, WrappedReceiverParameterDescriptor(), + startOffset, endOffset, thisOrigin, descriptor, thisType ) { symbol -> IrValueParameterImpl( startOffset, endOffset, thisOrigin, symbol, Name.special(""), -1, thisType, varargElementType = null, isCrossinline = false, isNoinline = false - ).apply { this.parent = parent } + ).apply { + this.parent = parent + descriptor.bind(this) + } } } } diff --git a/compiler/testData/codegen/box/controlStructures/kt299.kt b/compiler/testData/codegen/box/controlStructures/kt299.kt index e215eaa3cb5..9cb4628e7da 100644 --- a/compiler/testData/codegen/box/controlStructures/kt299.kt +++ b/compiler/testData/codegen/box/controlStructures/kt299.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR class MyRange1() : ClosedRange { override val start: Int get() = 0 diff --git a/compiler/testData/codegen/box/functions/bigArity/callFunViaVararg.kt b/compiler/testData/codegen/box/functions/bigArity/callFunViaVararg.kt index fe18a02f7d6..e9b43bde121 100644 --- a/compiler/testData/codegen/box/functions/bigArity/callFunViaVararg.kt +++ b/compiler/testData/codegen/box/functions/bigArity/callFunViaVararg.kt @@ -1,5 +1,4 @@ // !LANGUAGE: +FunctionTypesWithBigArity -// IGNORE_BACKEND_FIR: JVM_IR // WITH_RUNTIME // TARGET_BACKEND: JVM // FILE: J.java diff --git a/compiler/testData/codegen/box/functions/bigArity/subclass.kt b/compiler/testData/codegen/box/functions/bigArity/subclass.kt index 59de44f024f..12c3de3993a 100644 --- a/compiler/testData/codegen/box/functions/bigArity/subclass.kt +++ b/compiler/testData/codegen/box/functions/bigArity/subclass.kt @@ -1,5 +1,4 @@ // !LANGUAGE: +FunctionTypesWithBigArity -// IGNORE_BACKEND_FIR: JVM_IR // Implementing function interface is prohibited in JavaScript // IGNORE_BACKEND: JS_IR, JS diff --git a/compiler/testData/codegen/box/traits/kt3315.kt b/compiler/testData/codegen/box/traits/kt3315.kt index 532fe3441c2..91f7f81a489 100644 --- a/compiler/testData/codegen/box/traits/kt3315.kt +++ b/compiler/testData/codegen/box/traits/kt3315.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR interface B { fun foo(dd: T): T = dd }