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, isTailrec = irFunction.isTailrec,
isSuspend = irFunction.isSuspend, isSuspend = irFunction.isSuspend,
isExpect = irFunction.isExpect, isExpect = irFunction.isExpect,
isFakeOverride = true isFakeOverride = true,
isOperator = irFunction.isOperator
).apply { ).apply {
descriptor.bind(this) descriptor.bind(this)
parent = this@addFakeOverrides parent = this@addFakeOverrides
@@ -528,7 +529,8 @@ fun createStaticFunctionWithReceivers(
isTailrec = false, isTailrec = false,
isSuspend = oldFunction.isSuspend, isSuspend = oldFunction.isSuspend,
isExpect = oldFunction.isExpect, isExpect = oldFunction.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
isOperator = oldFunction is IrSimpleFunction && oldFunction.isOperator
).apply { ).apply {
descriptor.bind(this) descriptor.bind(this)
parent = irParent parent = irParent
@@ -57,7 +57,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
protected abstract fun initializeStateMachine(coroutineConstructors: List<IrConstructor>, coroutineClassThis: IrValueDeclaration) 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 builtCoroutines = mutableMapOf<IrFunction, BuiltCoroutine>()
private val suspendLambdas = mutableMapOf<IrFunction, IrFunctionReference>() private val suspendLambdas = mutableMapOf<IrFunction, IrFunctionReference>()
@@ -308,9 +309,7 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
private val continuationType = continuationClassSymbol.typeWith(irFunction.returnType) private val continuationType = continuationClassSymbol.typeWith(irFunction.returnType)
// Save all arguments to fields. // Save all arguments to fields.
private val argumentToPropertiesMap = functionParameters.associate { private val argumentToPropertiesMap = functionParameters.associateWith { coroutineClass.addField(it.name, it.type, false) }
it to coroutineClass.addField(it.name, it.type, false)
}
private val coroutineBaseClass = getCoroutineBaseClass(irFunction) private val coroutineBaseClass = getCoroutineBaseClass(irFunction)
private val coroutineBaseClassConstructor = coroutineBaseClass.owner.constructors.single { it.valueParameters.size == 1 } private val coroutineBaseClassConstructor = coroutineBaseClass.owner.constructors.single { it.valueParameters.size == 1 }
@@ -491,7 +490,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isTailrec = false, isTailrec = false,
isSuspend = false, isSuspend = false,
isExpect = false, isExpect = false,
isFakeOverride = false isFakeOverride = false,
isOperator = false
).apply { ).apply {
d.bind(this) d.bind(this)
parent = coroutineClass parent = coroutineClass
@@ -558,7 +558,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isTailrec = false, isTailrec = false,
isSuspend = true, isSuspend = true,
isExpect = false, isExpect = false,
isFakeOverride = false isFakeOverride = false,
isOperator = false
).apply { ).apply {
d.bind(this) d.bind(this)
parent = coroutineClass parent = coroutineClass
@@ -617,7 +618,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isTailrec = stateMachineFunction.isTailrec, isTailrec = stateMachineFunction.isTailrec,
isSuspend = stateMachineFunction.isSuspend, isSuspend = stateMachineFunction.isSuspend,
isExpect = stateMachineFunction.isExpect, isExpect = stateMachineFunction.isExpect,
isFakeOverride = false isFakeOverride = false,
isOperator = false
).apply { ).apply {
d.bind(this) d.bind(this)
parent = coroutineClass parent = coroutineClass
@@ -527,7 +527,8 @@ class LocalDeclarationsLowering(
isTailrec = oldDeclaration.isTailrec, isTailrec = oldDeclaration.isTailrec,
isSuspend = oldDeclaration.isSuspend, isSuspend = oldDeclaration.isSuspend,
isExpect = oldDeclaration.isExpect, isExpect = oldDeclaration.isExpect,
isFakeOverride = oldDeclaration.isFakeOverride isFakeOverride = oldDeclaration.isFakeOverride,
isOperator = oldDeclaration.isOperator
) )
newDescriptor.bind(newDeclaration) newDescriptor.bind(newDeclaration)
@@ -85,7 +85,8 @@ class PropertiesLowering(
return IrFunctionImpl( return IrFunctionImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, symbol, Name.identifier(name), UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, symbol, Name.identifier(name),
declaration.visibility, Modality.OPEN, context.irBuiltIns.unitType, 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 { ).apply {
descriptor.bind(this) descriptor.bind(this)
@@ -128,7 +128,8 @@ fun IrFunctionBuilder.buildFun(originalDescriptor: FunctionDescriptor? = null):
IrSimpleFunctionSymbolImpl(wrappedDescriptor), IrSimpleFunctionSymbolImpl(wrappedDescriptor),
name, visibility, modality, returnType, name, visibility, modality, returnType,
isInline = isInline, isExternal = isExternal, isTailrec = isTailrec, isSuspend = isSuspend, isExpect = isExpect, isInline = isInline, isExternal = isExternal, isTailrec = isTailrec, isSuspend = isSuspend, isExpect = isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
isOperator = isOperator
).also { ).also {
wrappedDescriptor.bind(it) wrappedDescriptor.bind(it)
} }