IR: IrSimpleFunction.isOperator

This commit is contained in:
Dmitry Petrov
2019-11-26 16:48:31 +03:00
parent ec03c3b85d
commit d6db6becb9
7 changed files with 25 additions and 8 deletions
@@ -23,6 +23,7 @@ class IrFunctionBuilder : IrDeclarationBuilder() {
var isTailrec: Boolean = false var isTailrec: Boolean = false
var isSuspend: Boolean = false var isSuspend: Boolean = false
var isExpect: Boolean = false var isExpect: Boolean = false
var isOperator: Boolean = false
var isPrimary: Boolean = false var isPrimary: Boolean = false
@@ -37,10 +38,12 @@ class IrFunctionBuilder : IrDeclarationBuilder() {
modality = from.modality modality = from.modality
isTailrec = from.isTailrec isTailrec = from.isTailrec
isSuspend = from.isSuspend isSuspend = from.isSuspend
isOperator = from.isOperator
} else { } else {
modality = Modality.FINAL modality = Modality.FINAL
isTailrec = false isTailrec = false
isSuspend = false isSuspend = false
isOperator = false
} }
if (from is IrConstructor) { if (from is IrConstructor) {
@@ -29,6 +29,7 @@ interface IrSimpleFunction :
val isTailrec: Boolean val isTailrec: Boolean
val isSuspend: Boolean val isSuspend: Boolean
val isFakeOverride: Boolean val isFakeOverride: Boolean
val isOperator: Boolean
var correspondingPropertySymbol: IrPropertySymbol? var correspondingPropertySymbol: IrPropertySymbol?
} }
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin 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.IrSimpleFunction
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
@@ -32,6 +31,7 @@ class IrFunctionImpl(
isExternal: Boolean, isExternal: Boolean,
override val isTailrec: Boolean, override val isTailrec: Boolean,
override val isSuspend: Boolean, override val isSuspend: Boolean,
override val isOperator: Boolean,
isExpect: Boolean, isExpect: Boolean,
override val isFakeOverride: Boolean override val isFakeOverride: Boolean
) : ) :
@@ -57,7 +57,8 @@ class IrFunctionImpl(
isTailrec = symbol.descriptor.isTailrec, isTailrec = symbol.descriptor.isTailrec,
isSuspend = symbol.descriptor.isSuspend, isSuspend = symbol.descriptor.isSuspend,
isExpect = symbol.descriptor.isExpect, isExpect = symbol.descriptor.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
isOperator = symbol.descriptor.isOperator
) )
override val descriptor: FunctionDescriptor = symbol.descriptor override val descriptor: FunctionDescriptor = symbol.descriptor
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin 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.IrSimpleFunction
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
@@ -35,6 +34,7 @@ class IrLazyFunction(
override val isSuspend: Boolean, override val isSuspend: Boolean,
isExpect: Boolean, isExpect: Boolean,
override val isFakeOverride: Boolean, override val isFakeOverride: Boolean,
override val isOperator: Boolean,
stubGenerator: DeclarationStubGenerator, stubGenerator: DeclarationStubGenerator,
typeTranslator: TypeTranslator typeTranslator: TypeTranslator
) : ) :
@@ -59,6 +59,7 @@ class IrLazyFunction(
isSuspend = symbol.descriptor.isSuspend, isSuspend = symbol.descriptor.isSuspend,
isExpect = symbol.descriptor.isExpect, isExpect = symbol.descriptor.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE, isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
isOperator = symbol.descriptor.isOperator,
stubGenerator = stubGenerator, stubGenerator = stubGenerator,
typeTranslator = TypeTranslator typeTranslator = TypeTranslator
) )
@@ -31,13 +31,20 @@ class IrBuiltInOperator(
name: Name, name: Name,
returnType: IrType, returnType: IrType,
val suffix: String 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 modality get() = Modality.FINAL
override val isTailrec get() = false override val isTailrec get() = false
override val isSuspend get() = false override val isSuspend get() = false
override val isFakeOverride get() = false override val isFakeOverride get() = false
override val isOperator: Boolean get() = false
override var correspondingPropertySymbol: IrPropertySymbol? override var correspondingPropertySymbol: IrPropertySymbol?
get() = null get() = null
set(_) {} set(_) {}
@@ -57,6 +64,7 @@ class IrBuiltInOperator(
class IrBuiltInOperatorValueParameter(override val symbol: IrValueParameterSymbol, override val index: Int, override val type: IrType) : class IrBuiltInOperatorValueParameter(override val symbol: IrValueParameterSymbol, override val index: Int, override val type: IrType) :
IrValueParameter, IrDeclarationBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrBuiltIns.BUILTIN_OPERATOR) { IrValueParameter, IrDeclarationBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrBuiltIns.BUILTIN_OPERATOR) {
override val descriptor: ParameterDescriptor get() = symbol.descriptor override val descriptor: ParameterDescriptor get() = symbol.descriptor
override val varargElementType: IrType? get() = null override val varargElementType: IrType? get() = null
override val isCrossinline: Boolean get() = false override val isCrossinline: Boolean get() = false
@@ -84,6 +92,7 @@ class IrBuiltInOperatorTypeParameter(
override val index: Int, override val index: Int,
override val isReified: Boolean override val isReified: Boolean
) : IrTypeParameter, IrDeclarationBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrBuiltIns.BUILTIN_OPERATOR) { ) : IrTypeParameter, IrDeclarationBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrBuiltIns.BUILTIN_OPERATOR) {
override val descriptor: TypeParameterDescriptor get() = symbol.descriptor override val descriptor: TypeParameterDescriptor get() = symbol.descriptor
override val superTypes: MutableList<IrType> = SmartList() override val superTypes: MutableList<IrType> = SmartList()
override val name: Name = Name.identifier("T$index") override val name: Name = Name.identifier("T$index")
@@ -167,7 +167,8 @@ open class DeepCopyIrTreeWithSymbols(
isTailrec = declaration.isTailrec, isTailrec = declaration.isTailrec,
isSuspend = declaration.isSuspend, isSuspend = declaration.isSuspend,
isExpect = declaration.isExpect, isExpect = declaration.isExpect,
isFakeOverride = declaration.isFakeOverride isFakeOverride = declaration.isFakeOverride,
isOperator = declaration.isOperator
).apply { ).apply {
declaration.overriddenSymbols.mapTo(overriddenSymbols) { declaration.overriddenSymbols.mapTo(overriddenSymbols) {
symbolRemapper.getReferencedFunction(it) as IrSimpleFunctionSymbol symbolRemapper.getReferencedFunction(it) as IrSimpleFunctionSymbol
@@ -383,7 +383,8 @@ class RenderIrElementVisitor(private val normalizeNames: Boolean = false) : IrEl
"external".takeIf { isExternal }, "external".takeIf { isExternal },
"suspend".takeIf { isSuspend }, "suspend".takeIf { isSuspend },
"expect".takeIf { isExpect }, "expect".takeIf { isExpect },
"fake_override".takeIf { isFakeOverride } "fake_override".takeIf { isFakeOverride },
"operator".takeIf { isOperator }
) )
private fun IrFunction.renderTypeParameters(): String = private fun IrFunction.renderTypeParameters(): String =