From 1f2ca606a55179f0e9a443856a1a09c3dc6c3667 Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Tue, 15 Sep 2020 13:42:42 +0200 Subject: [PATCH] [IR] Add isAssignable property to IrValueParameter. Use it to check that only the value parameters that are explicitly marked assignable are assigned. Currently, the only parameters marked assignable are those for default argument stubs. --- .../org/jetbrains/kotlin/fir/backend/ConversionUtils.kt | 2 +- .../kotlin/fir/backend/Fir2IrDeclarationStorage.kt | 4 ++-- .../kotlin/fir/backend/generators/AdapterGenerator.kt | 3 ++- .../fir/backend/generators/DataClassMembersGenerator.kt | 2 +- .../kotlin/backend/common/CheckIrElementVisitor.kt | 5 ++++- .../src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt | 8 +++++--- .../backend/common/lower/DefaultArgumentStubGenerator.kt | 3 ++- .../ir/builders/declarations/declarationBuilders.kt | 5 ++--- .../kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt | 2 +- .../psi2ir/generators/ReflectionReferencesGenerator.kt | 2 +- .../kotlin/ir/declarations/impl/IrFactoryImpl.kt | 5 +++-- .../kotlin/ir/declarations/impl/IrValueParameterImpl.kt | 3 ++- .../ir/declarations/persistent/PersistentIrFactory.kt | 5 +++-- .../declarations/persistent/PersistentIrValueParameter.kt | 3 ++- .../src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt | 3 ++- .../jetbrains/kotlin/ir/declarations/IrValueParameter.kt | 5 +++++ .../kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt | 2 +- .../src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt | 4 ++-- .../jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt | 6 ++++-- .../jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt | 3 ++- .../jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt | 2 +- .../jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt | 3 ++- .../src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt | 2 +- .../src/org/jetbrains/kotlin/ir/util/SymbolTable.kt | 2 +- .../backend/common/serialization/IrFileDeserializer.kt | 3 ++- .../serialization/compiler/backend/ir/GeneratorHelpers.kt | 2 +- 26 files changed, 55 insertions(+), 34 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index 12f1a174c45..61ec62e1e1a 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -356,7 +356,7 @@ internal fun IrDeclarationParent.declareThisReceiverParameter( symbolTable.irFactory.createValueParameter( startOffset, endOffset, thisOrigin, symbol, Name.special(""), -1, thisType, - varargElementType = null, isCrossinline = false, isNoinline = false + varargElementType = null, isCrossinline = false, isNoinline = false, isAssignable = false ).apply { this.parent = this@declareThisReceiverParameter receiverDescriptor.bind(this) 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 5503cbfeb4f..f60b6bd4336 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 @@ -256,7 +256,7 @@ class Fir2IrDeclarationStorage( startOffset, endOffset, IrDeclarationOrigin.DEFINED, symbol, Name.special(""), 0, type, varargElementType = null, - isCrossinline = false, isNoinline = false + isCrossinline = false, isNoinline = false, isAssignable = false ).apply { this.parent = parent descriptor.bind(this) @@ -843,7 +843,7 @@ class Fir2IrDeclarationStorage( valueParameter.name, index, type, if (!valueParameter.isVararg) null else valueParameter.returnTypeRef.coneType.arrayElementType()?.toIrType(typeContext), - valueParameter.isCrossinline, valueParameter.isNoinline + valueParameter.isCrossinline, valueParameter.isNoinline, false ).apply { descriptor.bind(this) if (valueParameter.defaultValue.let { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt index eafe4644470..e2c3fd81446 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt @@ -274,7 +274,8 @@ internal class AdapterGenerator( type, varargElementType = null, isCrossinline = false, - isNoinline = false + isNoinline = false, + isAssignable = false ).also { irAdapterValueParameter -> descriptor.bind(irAdapterValueParameter) irAdapterValueParameter.parent = adapterFunction diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt index 176cd4b3570..db7c12f43d4 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt @@ -281,7 +281,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) { ) { symbol -> components.irFactory.createValueParameter( UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, symbol, name, index, type, null, - isCrossinline = false, isNoinline = false + isCrossinline = false, isNoinline = false, isAssignable = false ) }.apply { parent = irFunction diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt index b9c9278f9cb..34109a82cf8 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt @@ -137,7 +137,10 @@ class CheckIrElementVisitor( override fun visitSetValue(expression: IrSetValue) { super.visitSetValue(expression) - + val declaration = expression.symbol.owner + if (declaration is IrValueParameter && !declaration.isAssignable) { + reportError(expression, "Assignment to value parameters not marked assignable") + } expression.ensureTypeIs(irBuiltIns.unitType) } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index 22eff0f0ea7..76e6655fe22 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -126,7 +126,8 @@ fun IrValueParameter.copyTo( varargElementType: IrType? = this.varargElementType, // TODO: remapTypeParameters here as well defaultValue: IrExpressionBody? = this.defaultValue, isCrossinline: Boolean = this.isCrossinline, - isNoinline: Boolean = this.isNoinline + isNoinline: Boolean = this.isNoinline, + isAssignable: Boolean = this.isAssignable ): IrValueParameter { val descriptor = if (index < 0) { WrappedReceiverParameterDescriptor() @@ -143,7 +144,7 @@ fun IrValueParameter.copyTo( } return factory.createValueParameter( startOffset, endOffset, origin, symbol, - name, index, type, varargElementType, isCrossinline, isNoinline + name, index, type, varargElementType, isCrossinline, isNoinline, isAssignable = isAssignable ).also { descriptor.bind(it) it.parent = irFunction @@ -171,7 +172,7 @@ fun IrFunction.copyReceiverParametersFrom(from: IrFunction) { startOffset, endOffset, origin, IrValueParameterSymbolImpl(newDescriptor), name, - index, type, varargElementType, isCrossinline, isNoinline + index, type, varargElementType, isCrossinline, isNoinline, false ).also { parameter -> parameter.parent = this@copyReceiverParametersFrom newDescriptor.bind(this) @@ -422,6 +423,7 @@ fun IrFunction.createDispatchReceiverParameter(origin: IrDeclarationOrigin? = nu parentAsClass.defaultType, null, false, + false, false ).apply { parent = this@createDispatchReceiverParameter diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt index 8c094a17d0e..a67f57ba6f3 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt @@ -586,7 +586,8 @@ private fun IrFunction.generateDefaultsFunctionImpl( type = if (makeNullable) newType.makeNullable() else newType, defaultValue = if (it.defaultValue != null) { factory.createExpressionBody(IrErrorExpressionImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, it.type, "Default Stub")) - } else null + } else null, + isAssignable = it.defaultValue != null ) } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt index 010e26f0673..485a27f5b81 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource import org.jetbrains.kotlin.types.Variance @PublishedApi @@ -213,7 +212,7 @@ fun buildReceiverParameter( parent.factory.createValueParameter( startOffset, endOffset, origin, IrValueParameterSymbolImpl(wrappedDescriptor), - RECEIVER_PARAMETER_NAME, -1, type, null, isCrossinline = false, isNoinline = false + RECEIVER_PARAMETER_NAME, -1, type, null, isCrossinline = false, isNoinline = false, isAssignable = false ).also { wrappedDescriptor.bind(it) it.parent = parent @@ -227,7 +226,7 @@ internal fun IrFactory.buildValueParameter(builder: IrValueParameterBuilder, par return createValueParameter( startOffset, endOffset, origin, IrValueParameterSymbolImpl(wrappedDescriptor), - name, index, type, varargElementType, isCrossInline, isNoinline, isHidden + name, index, type, varargElementType, isCrossInline, isNoinline, isHidden, false ).also { wrappedDescriptor.bind(it) it.parent = parent diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt index 88370a15cc6..c35b0639380 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt @@ -415,7 +415,7 @@ private fun StatementGenerator.createFunctionForSuspendConversion( Name.identifier("p$index"), index, irParameterType, - varargElementType = null, isCrossinline = false, isNoinline = false + varargElementType = null, isCrossinline = false, isNoinline = false, isAssignable = false ) }.also { adaptedParameterDescriptor.bind(it) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt index 4a68ef12752..a540983e706 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt @@ -392,7 +392,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St name, index, type.toIrType(), - varargElementType = null, isCrossinline = false, isNoinline = false + varargElementType = null, isCrossinline = false, isNoinline = false, isAssignable = false ).also { irAdapterValueParameter -> descriptor.bind(irAdapterValueParameter) } diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt index e069cd8a68b..cf68503e852 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt @@ -235,10 +235,11 @@ object IrFactoryImpl : IrFactory { varargElementType: IrType?, isCrossinline: Boolean, isNoinline: Boolean, - isHidden: Boolean + isHidden: Boolean, + isAssignable: Boolean, ): IrValueParameter = IrValueParameterImpl( - startOffset, endOffset, origin, symbol, name, index, type, varargElementType, isCrossinline, isNoinline, isHidden + startOffset, endOffset, origin, symbol, name, index, type, varargElementType, isCrossinline, isNoinline, isHidden, isAssignable ) override fun createExpressionBody( diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt index ae8a326a129..1e92a75769b 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt @@ -39,7 +39,8 @@ class IrValueParameterImpl( override var varargElementType: IrType?, override val isCrossinline: Boolean, override val isNoinline: Boolean, - override val isHidden: Boolean = false + override val isHidden: Boolean = false, + override val isAssignable: Boolean = false ) : IrValueParameter() { @ObsoleteDescriptorBasedAPI override val descriptor: ParameterDescriptor diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt index 64cbff6a1a6..13fa08ea6a0 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt @@ -237,10 +237,11 @@ object PersistentIrFactory : IrFactory { varargElementType: IrType?, isCrossinline: Boolean, isNoinline: Boolean, - isHidden: Boolean + isHidden: Boolean, + isAssignable: Boolean ): IrValueParameter = PersistentIrValueParameter( - startOffset, endOffset, origin, symbol, name, index, type, varargElementType, isCrossinline, isNoinline, isHidden + startOffset, endOffset, origin, symbol, name, index, type, varargElementType, isCrossinline, isNoinline, isHidden, isAssignable ) override fun createExpressionBody( diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt index 4854471e787..a7e6212d0da 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt @@ -41,7 +41,8 @@ internal class PersistentIrValueParameter( varargElementType: IrType?, override val isCrossinline: Boolean, override val isNoinline: Boolean, - override val isHidden: Boolean = false + override val isHidden: Boolean = false, + override val isAssignable: Boolean ) : IrValueParameter(), PersistentIrDeclarationBase, ValueParameterCarrier { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt index ec04456661d..6ad4e6cfcda 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt @@ -199,7 +199,8 @@ interface IrFactory { varargElementType: IrType?, isCrossinline: Boolean, isNoinline: Boolean, - isHidden: Boolean = false + isHidden: Boolean = false, + isAssignable: Boolean = false ): IrValueParameter // Bodies diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt index dd3db5a6a42..aca9cb2fd47 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt @@ -39,6 +39,11 @@ abstract class IrValueParameter : IrValueDeclaration(), IrSymbolDeclaration accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt index 8fec4b2a37a..3a8829bc43f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt @@ -32,7 +32,7 @@ interface IrLazyDeclarationBase : IrDeclaration { fun ReceiverParameterDescriptor.generateReceiverParameterStub(): IrValueParameter = factory.createValueParameter( UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, IrValueParameterSymbolImpl(this), - name, -1, type.toIrType(), null, isCrossinline = false, isNoinline = false + name, -1, type.toIrType(), null, isCrossinline = false, isNoinline = false, isAssignable = false ) fun generateMemberStubs(memberScope: MemberScope, container: MutableList) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt index 998fe2ec9e4..4b47ecf8410 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt @@ -80,7 +80,7 @@ class IrBuiltIns( val valueParameterSymbol = IrValueParameterSymbolImpl(valueParameterDescriptor) irFactory.createValueParameter( UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR, valueParameterSymbol, Name.identifier("arg$i"), i, - valueParameterType, null, isCrossinline = false, isNoinline = false + valueParameterType, null, isCrossinline = false, isNoinline = false, isAssignable = false ).apply { parent = operator } @@ -165,7 +165,7 @@ class IrBuiltIns( val valueParameterSymbol = IrValueParameterSymbolImpl(valueParameterDescriptor) val valueParameter = irFactory.createValueParameter( UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR, valueParameterSymbol, Name.identifier("arg0"), 0, - valueIrType, null, isCrossinline = false, isNoinline = false + valueIrType, null, isCrossinline = false, isNoinline = false, isAssignable = false ) valueParameter.parent = operator diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt index 30b470ff085..e66d28dfba4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt @@ -268,7 +268,8 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa val vDeclaration = irFactory.createValueParameter( offset, offset, classOrigin, vSymbol, Name.special(""), -1, type, null, isCrossinline = false, - isNoinline = false + isNoinline = false, + isAssignable = false ) if (vDescriptor is WrappedReceiverParameterDescriptor) vDescriptor.bind(vDeclaration) @@ -332,7 +333,8 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa val vDeclaration = irFactory.createValueParameter( offset, offset, memberOrigin, vSymbol, Name.identifier("p$i"), i - 1, vType, null, isCrossinline = false, - isNoinline = false + isNoinline = false, + isAssignable = false ) vDeclaration.parent = fDeclaration if (vDescriptor is WrappedValueParameterDescriptor) vDescriptor.bind(vDeclaration) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt index 2e73d66f715..4bfb6faeeb1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt @@ -95,7 +95,8 @@ class FakeOverrideCopier( declaration.type.remapType(), declaration.varargElementType?.remapType(), declaration.isCrossinline, - declaration.isNoinline + declaration.isNoinline, + false ).apply { transformAnnotations(declaration) // Don't set the default value for fake overrides. diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt index 300442145ba..03da280a824 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt @@ -242,7 +242,7 @@ class DeclarationStubGenerator( internal fun generateValueParameterStub(descriptor: ValueParameterDescriptor): IrValueParameter = with(descriptor) { symbolTable.irFactory.createValueParameter( UNDEFINED_OFFSET, UNDEFINED_OFFSET, computeOrigin(this), IrValueParameterSymbolImpl(this), name, index, type.toIrType(), - varargElementType?.toIrType(), isCrossinline, isNoinline + varargElementType?.toIrType(), isCrossinline, isNoinline, false ).also { irValueParameter -> if (descriptor.declaresDefaultValue()) { irValueParameter.defaultValue = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt index 11d81fbc943..92396f3fba9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt @@ -348,7 +348,8 @@ open class DeepCopyIrTreeWithSymbols( declaration.type.remapType(), declaration.varargElementType?.remapType(), declaration.isCrossinline, - declaration.isNoinline + declaration.isNoinline, + false ).apply { transformAnnotations(declaration) defaultValue = declaration.defaultValue?.transform() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt index 2788ef155b7..598cacd0f1e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt @@ -524,7 +524,7 @@ class RenderIrElementVisitor(private val normalizeNames: Boolean = false) : IrEl renderFlagsList( "vararg".takeIf { varargElementType != null }, "crossinline".takeIf { isCrossinline }, - "noinline".takeIf { isNoinline } + "noinline".takeIf { isNoinline }, ) override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: Nothing?): String = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index 62649f7978a..66d89e8e664 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -896,7 +896,7 @@ class SymbolTable( valueParameterFactory: (IrValueParameterSymbol) -> IrValueParameter = { irFactory.createValueParameter( startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(descriptor), - descriptor.indexOrMinusOne, type, varargElementType, descriptor.isCrossinline, descriptor.isNoinline + descriptor.indexOrMinusOne, type, varargElementType, descriptor.isCrossinline, descriptor.isNoinline, false ) } ): IrValueParameter = diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt index c663e12ffeb..c37e866c856 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt @@ -1009,7 +1009,8 @@ abstract class IrFileDeserializer( if (proto.hasVarargElementType()) deserializeIrType(proto.varargElementType) else null, flags.isCrossInline, flags.isNoInline, - flags.isHidden + flags.isHidden, + false ).apply { if (proto.hasDefaultValue()) defaultValue = irFactory.createExpressionBody(deserializeExpressionBody(proto.defaultValue)) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt index 35ee1319393..9f29b0fcd42 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt @@ -379,7 +379,7 @@ interface IrBuilderExtension { fun irValueParameter(descriptor: ParameterDescriptor): IrValueParameter = with(descriptor) { factory.createValueParameter( function.startOffset, function.endOffset, SERIALIZABLE_PLUGIN_ORIGIN, IrValueParameterSymbolImpl(this), - name, indexOrMinusOne, type.toIrType(), varargElementType?.toIrType(), isCrossinline, isNoinline + name, indexOrMinusOne, type.toIrType(), varargElementType?.toIrType(), isCrossinline, isNoinline, false ).also { it.parent = function }