IR BE Common: IrSimpleFunction.isOperator

This commit is contained in:
Dmitry Petrov
2019-11-26 16:49:27 +03:00
parent 4591dfdf47
commit 0681c0d956
5 changed files with 19 additions and 12 deletions
@@ -486,7 +486,8 @@ fun IrClass.addFakeOverrides() {
isTailrec = irFunction.isTailrec,
isSuspend = irFunction.isSuspend,
isExpect = irFunction.isExpect,
isFakeOverride = true
isFakeOverride = true,
isOperator = irFunction.isOperator
).apply {
descriptor.bind(this)
parent = this@addFakeOverrides
@@ -528,7 +529,8 @@ fun createStaticFunctionWithReceivers(
isTailrec = false,
isSuspend = oldFunction.isSuspend,
isExpect = oldFunction.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
isOperator = oldFunction is IrSimpleFunction && oldFunction.isOperator
).apply {
descriptor.bind(this)
parent = irParent
@@ -57,7 +57,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
protected abstract fun initializeStateMachine(coroutineConstructors: List<IrConstructor>, coroutineClassThis: IrValueDeclaration)
protected open fun IrBuilderWithScope.generateDelegatedCall(expectedType: IrType, delegatingCall: IrExpression): IrExpression = delegatingCall
protected open fun IrBuilderWithScope.generateDelegatedCall(expectedType: IrType, delegatingCall: IrExpression): IrExpression =
delegatingCall
private val builtCoroutines = mutableMapOf<IrFunction, BuiltCoroutine>()
private val suspendLambdas = mutableMapOf<IrFunction, IrFunctionReference>()
@@ -308,9 +309,7 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
private val continuationType = continuationClassSymbol.typeWith(irFunction.returnType)
// Save all arguments to fields.
private val argumentToPropertiesMap = functionParameters.associate {
it to coroutineClass.addField(it.name, it.type, false)
}
private val argumentToPropertiesMap = functionParameters.associateWith { coroutineClass.addField(it.name, it.type, false) }
private val coroutineBaseClass = getCoroutineBaseClass(irFunction)
private val coroutineBaseClassConstructor = coroutineBaseClass.owner.constructors.single { it.valueParameters.size == 1 }
@@ -491,7 +490,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isTailrec = false,
isSuspend = false,
isExpect = false,
isFakeOverride = false
isFakeOverride = false,
isOperator = false
).apply {
d.bind(this)
parent = coroutineClass
@@ -558,7 +558,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isTailrec = false,
isSuspend = true,
isExpect = false,
isFakeOverride = false
isFakeOverride = false,
isOperator = false
).apply {
d.bind(this)
parent = coroutineClass
@@ -617,7 +618,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isTailrec = stateMachineFunction.isTailrec,
isSuspend = stateMachineFunction.isSuspend,
isExpect = stateMachineFunction.isExpect,
isFakeOverride = false
isFakeOverride = false,
isOperator = false
).apply {
d.bind(this)
parent = coroutineClass
@@ -527,7 +527,8 @@ class LocalDeclarationsLowering(
isTailrec = oldDeclaration.isTailrec,
isSuspend = oldDeclaration.isSuspend,
isExpect = oldDeclaration.isExpect,
isFakeOverride = oldDeclaration.isFakeOverride
isFakeOverride = oldDeclaration.isFakeOverride,
isOperator = oldDeclaration.isOperator
)
newDescriptor.bind(newDeclaration)
@@ -85,7 +85,8 @@ class PropertiesLowering(
return IrFunctionImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, symbol, Name.identifier(name),
declaration.visibility, Modality.OPEN, context.irBuiltIns.unitType,
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isExpect = false, isFakeOverride = false
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isExpect = false, isFakeOverride = false,
isOperator = false
).apply {
descriptor.bind(this)
@@ -128,7 +128,8 @@ fun IrFunctionBuilder.buildFun(originalDescriptor: FunctionDescriptor? = null):
IrSimpleFunctionSymbolImpl(wrappedDescriptor),
name, visibility, modality, returnType,
isInline = isInline, isExternal = isExternal, isTailrec = isTailrec, isSuspend = isSuspend, isExpect = isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
isOperator = isOperator
).also {
wrappedDescriptor.bind(it)
}