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