IR BE common: IrSimpleFunction.isFakeOverride

This commit is contained in:
Dmitry Petrov
2019-10-22 16:22:54 +03:00
parent 843fb88459
commit b36d8f556a
7 changed files with 24 additions and 15 deletions
@@ -485,7 +485,8 @@ fun IrClass.addFakeOverrides() {
isExternal = irFunction.isExternal,
isTailrec = irFunction.isTailrec,
isSuspend = irFunction.isSuspend,
isExpect = irFunction.isExpect
isExpect = irFunction.isExpect,
isFakeOverride = true
).apply {
descriptor.bind(this)
parent = this@addFakeOverrides
@@ -526,7 +527,8 @@ fun createStaticFunctionWithReceivers(
isExternal = false,
isTailrec = false,
isSuspend = oldFunction.isSuspend,
isExpect = oldFunction.isExpect
isExpect = oldFunction.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
).apply {
descriptor.bind(this)
parent = irParent
@@ -488,7 +488,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isExternal = false,
isTailrec = false,
isSuspend = false,
isExpect = false
isExpect = false,
isFakeOverride = false
).apply {
d.bind(this)
parent = coroutineClass
@@ -554,7 +555,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isExternal = false,
isTailrec = false,
isSuspend = true,
isExpect = false
isExpect = false,
isFakeOverride = false
).apply {
d.bind(this)
parent = coroutineClass
@@ -612,7 +614,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isExternal = stateMachineFunction.isExternal,
isTailrec = stateMachineFunction.isTailrec,
isSuspend = stateMachineFunction.isSuspend,
isExpect = stateMachineFunction.isExpect
isExpect = stateMachineFunction.isExpect,
isFakeOverride = false
).apply {
d.bind(this)
parent = coroutineClass
@@ -523,7 +523,8 @@ private fun buildFunctionDeclaration(irFunction: IrFunction, origin: IrDeclarati
isExternal = false,
isTailrec = false,
isSuspend = irFunction.isSuspend,
isExpect = irFunction.isExpect
isExpect = irFunction.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
).also {
descriptor.bind(it)
it.parent = irFunction.parent
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.backend.common.lower
import org.jetbrains.kotlin.backend.common.ClassLoweringPass
import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.backend.common.deepCopyWithWrappedDescriptors
import org.jetbrains.kotlin.backend.common.descriptors.WrappedSimpleFunctionDescriptor
import org.jetbrains.kotlin.backend.common.ir.SetDeclarationsParentVisitor
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
@@ -18,16 +17,17 @@ import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.IrBlock
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrInstanceInitializerCall
import org.jetbrains.kotlin.ir.expressions.IrStatementOriginImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
import org.jetbrains.kotlin.ir.visitors.*
import org.jetbrains.kotlin.name.Name
@@ -149,7 +149,8 @@ class InitializersLowering(
isExternal = false,
isTailrec = false,
isSuspend = false,
isExpect = false
isExpect = false,
isFakeOverride = false
).apply {
staticInitializerDescriptor.bind(this)
body = IrBlockBodyImpl(irClass.startOffset, irClass.endOffset,
@@ -522,7 +522,8 @@ class LocalDeclarationsLowering(
isExternal = oldDeclaration.isExternal,
isTailrec = oldDeclaration.isTailrec,
isSuspend = oldDeclaration.isSuspend,
isExpect = oldDeclaration.isExpect
isExpect = oldDeclaration.isExpect,
isFakeOverride = oldDeclaration.isFakeOverride
)
newDescriptor.bind(newDeclaration)
@@ -85,7 +85,7 @@ 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
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isExpect = false, isFakeOverride = false
).apply {
descriptor.bind(this)
@@ -123,7 +123,8 @@ fun IrFunctionBuilder.buildFun(originalDescriptor: FunctionDescriptor? = null):
startOffset, endOffset, origin,
IrSimpleFunctionSymbolImpl(wrappedDescriptor),
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
).also {
wrappedDescriptor.bind(it)
}