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, isExternal = irFunction.isExternal,
isTailrec = irFunction.isTailrec, isTailrec = irFunction.isTailrec,
isSuspend = irFunction.isSuspend, isSuspend = irFunction.isSuspend,
isExpect = irFunction.isExpect isExpect = irFunction.isExpect,
isFakeOverride = true
).apply { ).apply {
descriptor.bind(this) descriptor.bind(this)
parent = this@addFakeOverrides parent = this@addFakeOverrides
@@ -526,7 +527,8 @@ fun createStaticFunctionWithReceivers(
isExternal = false, isExternal = false,
isTailrec = false, isTailrec = false,
isSuspend = oldFunction.isSuspend, isSuspend = oldFunction.isSuspend,
isExpect = oldFunction.isExpect isExpect = oldFunction.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
).apply { ).apply {
descriptor.bind(this) descriptor.bind(this)
parent = irParent parent = irParent
@@ -488,7 +488,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isExternal = false, isExternal = false,
isTailrec = false, isTailrec = false,
isSuspend = false, isSuspend = false,
isExpect = false isExpect = false,
isFakeOverride = false
).apply { ).apply {
d.bind(this) d.bind(this)
parent = coroutineClass parent = coroutineClass
@@ -554,7 +555,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isExternal = false, isExternal = false,
isTailrec = false, isTailrec = false,
isSuspend = true, isSuspend = true,
isExpect = false isExpect = false,
isFakeOverride = false
).apply { ).apply {
d.bind(this) d.bind(this)
parent = coroutineClass parent = coroutineClass
@@ -612,7 +614,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isExternal = stateMachineFunction.isExternal, isExternal = stateMachineFunction.isExternal,
isTailrec = stateMachineFunction.isTailrec, isTailrec = stateMachineFunction.isTailrec,
isSuspend = stateMachineFunction.isSuspend, isSuspend = stateMachineFunction.isSuspend,
isExpect = stateMachineFunction.isExpect isExpect = stateMachineFunction.isExpect,
isFakeOverride = false
).apply { ).apply {
d.bind(this) d.bind(this)
parent = coroutineClass parent = coroutineClass
@@ -523,7 +523,8 @@ private fun buildFunctionDeclaration(irFunction: IrFunction, origin: IrDeclarati
isExternal = false, isExternal = false,
isTailrec = false, isTailrec = false,
isSuspend = irFunction.isSuspend, isSuspend = irFunction.isSuspend,
isExpect = irFunction.isExpect isExpect = irFunction.isExpect,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
).also { ).also {
descriptor.bind(it) descriptor.bind(it)
it.parent = irFunction.parent 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.ClassLoweringPass
import org.jetbrains.kotlin.backend.common.CommonBackendContext 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.descriptors.WrappedSimpleFunctionDescriptor
import org.jetbrains.kotlin.backend.common.ir.SetDeclarationsParentVisitor import org.jetbrains.kotlin.backend.common.ir.SetDeclarationsParentVisitor
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase 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.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl 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.IrBlockBodyImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl 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.symbols.impl.IrSimpleFunctionSymbolImpl
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
import org.jetbrains.kotlin.ir.visitors.* import org.jetbrains.kotlin.ir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -149,7 +149,8 @@ class InitializersLowering(
isExternal = false, isExternal = false,
isTailrec = false, isTailrec = false,
isSuspend = false, isSuspend = false,
isExpect = false isExpect = false,
isFakeOverride = false
).apply { ).apply {
staticInitializerDescriptor.bind(this) staticInitializerDescriptor.bind(this)
body = IrBlockBodyImpl(irClass.startOffset, irClass.endOffset, body = IrBlockBodyImpl(irClass.startOffset, irClass.endOffset,
@@ -522,7 +522,8 @@ class LocalDeclarationsLowering(
isExternal = oldDeclaration.isExternal, isExternal = oldDeclaration.isExternal,
isTailrec = oldDeclaration.isTailrec, isTailrec = oldDeclaration.isTailrec,
isSuspend = oldDeclaration.isSuspend, isSuspend = oldDeclaration.isSuspend,
isExpect = oldDeclaration.isExpect isExpect = oldDeclaration.isExpect,
isFakeOverride = oldDeclaration.isFakeOverride
) )
newDescriptor.bind(newDeclaration) newDescriptor.bind(newDeclaration)
@@ -85,7 +85,7 @@ 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 isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isExpect = false, isFakeOverride = false
).apply { ).apply {
descriptor.bind(this) descriptor.bind(this)
@@ -123,7 +123,8 @@ fun IrFunctionBuilder.buildFun(originalDescriptor: FunctionDescriptor? = null):
startOffset, endOffset, origin, startOffset, endOffset, origin,
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
).also { ).also {
wrappedDescriptor.bind(it) wrappedDescriptor.bind(it)
} }