IR: IrSimpleFunction.isOperator
This commit is contained in:
+3
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user