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 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) {
@@ -29,6 +29,7 @@ interface IrSimpleFunction :
val isTailrec: Boolean
val isSuspend: Boolean
val isFakeOverride: Boolean
val isOperator: Boolean
var correspondingPropertySymbol: IrPropertySymbol?
}
@@ -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
@@ -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
)
@@ -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<IrType> = SmartList()
override val name: Name = Name.identifier("T$index")
@@ -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
@@ -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 =