diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFunctionBuilder.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFunctionBuilder.kt index 7780cb4ca10..fe09ac59dfa 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFunctionBuilder.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/IrFunctionBuilder.kt @@ -23,6 +23,7 @@ class IrFunctionBuilder : IrDeclarationBuilder() { var isTailrec: Boolean = false var isSuspend: Boolean = false var isExpect: Boolean = false + var isOperator: Boolean = false var isPrimary: Boolean = false @@ -37,10 +38,12 @@ class IrFunctionBuilder : IrDeclarationBuilder() { modality = from.modality isTailrec = from.isTailrec isSuspend = from.isSuspend + isOperator = from.isOperator } else { modality = Modality.FINAL isTailrec = false isSuspend = false + isOperator = false } if (from is IrConstructor) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt index c224ee660e2..a62fc8d5ee5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt @@ -29,6 +29,7 @@ interface IrSimpleFunction : val isTailrec: Boolean val isSuspend: Boolean val isFakeOverride: Boolean + val isOperator: Boolean var correspondingPropertySymbol: IrPropertySymbol? } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt index b3853b64b95..a37710b351e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.declarations.IrProperty import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol @@ -32,6 +31,7 @@ class IrFunctionImpl( isExternal: Boolean, override val isTailrec: Boolean, override val isSuspend: Boolean, + override val isOperator: Boolean, isExpect: Boolean, override val isFakeOverride: Boolean ) : @@ -57,7 +57,8 @@ class IrFunctionImpl( isTailrec = symbol.descriptor.isTailrec, isSuspend = symbol.descriptor.isSuspend, isExpect = symbol.descriptor.isExpect, - isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE + isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE, + isOperator = symbol.descriptor.isOperator ) override val descriptor: FunctionDescriptor = symbol.descriptor diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt index b3e2fb1c7e7..33464000aff 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.declarations.IrProperty import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol @@ -35,6 +34,7 @@ class IrLazyFunction( override val isSuspend: Boolean, isExpect: Boolean, override val isFakeOverride: Boolean, + override val isOperator: Boolean, stubGenerator: DeclarationStubGenerator, typeTranslator: TypeTranslator ) : @@ -59,6 +59,7 @@ class IrLazyFunction( isSuspend = symbol.descriptor.isSuspend, isExpect = symbol.descriptor.isExpect, isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE, + isOperator = symbol.descriptor.isOperator, stubGenerator = stubGenerator, typeTranslator = TypeTranslator ) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrOperators.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrOperators.kt index e70ad06ead2..15e4d729eb3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrOperators.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrOperators.kt @@ -31,13 +31,20 @@ class IrBuiltInOperator( name: Name, returnType: IrType, val suffix: String -) : IrSimpleFunction, IrBuiltinWithMangle, IrFunctionBase( - UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrBuiltIns.BUILTIN_OPERATOR, name, Visibilities.PUBLIC, false, false, false, returnType -) { +) : + IrSimpleFunction, + IrBuiltinWithMangle, + IrFunctionBase( + UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrBuiltIns.BUILTIN_OPERATOR, + name, Visibilities.PUBLIC, false, false, false, + returnType + ) { + override val modality get() = Modality.FINAL override val isTailrec get() = false override val isSuspend get() = false override val isFakeOverride get() = false + override val isOperator: Boolean get() = false override var correspondingPropertySymbol: IrPropertySymbol? get() = null set(_) {} @@ -57,6 +64,7 @@ class IrBuiltInOperator( class IrBuiltInOperatorValueParameter(override val symbol: IrValueParameterSymbol, override val index: Int, override val type: IrType) : IrValueParameter, IrDeclarationBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrBuiltIns.BUILTIN_OPERATOR) { + override val descriptor: ParameterDescriptor get() = symbol.descriptor override val varargElementType: IrType? get() = null override val isCrossinline: Boolean get() = false @@ -84,6 +92,7 @@ class IrBuiltInOperatorTypeParameter( override val index: Int, override val isReified: Boolean ) : IrTypeParameter, IrDeclarationBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrBuiltIns.BUILTIN_OPERATOR) { + override val descriptor: TypeParameterDescriptor get() = symbol.descriptor override val superTypes: MutableList = SmartList() override val name: Name = Name.identifier("T$index") 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 a2de99691a2..b7e64eb5881 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 @@ -167,7 +167,8 @@ open class DeepCopyIrTreeWithSymbols( isTailrec = declaration.isTailrec, isSuspend = declaration.isSuspend, isExpect = declaration.isExpect, - isFakeOverride = declaration.isFakeOverride + isFakeOverride = declaration.isFakeOverride, + isOperator = declaration.isOperator ).apply { declaration.overriddenSymbols.mapTo(overriddenSymbols) { symbolRemapper.getReferencedFunction(it) as IrSimpleFunctionSymbol 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 9dd8395e19d..94a28b9e0ae 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 @@ -383,7 +383,8 @@ class RenderIrElementVisitor(private val normalizeNames: Boolean = false) : IrEl "external".takeIf { isExternal }, "suspend".takeIf { isSuspend }, "expect".takeIf { isExpect }, - "fake_override".takeIf { isFakeOverride } + "fake_override".takeIf { isFakeOverride }, + "operator".takeIf { isOperator } ) private fun IrFunction.renderTypeParameters(): String =