IR BE common: isExpect

This commit is contained in:
Dmitry Petrov
2019-10-17 13:07:59 +03:00
parent 1d229b6dca
commit 6bdc9ee65b
7 changed files with 60 additions and 41 deletions
@@ -67,9 +67,10 @@ fun IrClass.addSimpleDelegatingConstructor(
superConstructor.name, superConstructor.name,
superConstructor.visibility, superConstructor.visibility,
defaultType, defaultType,
false, isInline = false,
false, isExternal = false,
isPrimary isPrimary = isPrimary,
isExpect = false
).also { constructor -> ).also { constructor ->
descriptor.bind(constructor) descriptor.bind(constructor)
constructor.parent = this constructor.parent = this
@@ -481,10 +482,11 @@ fun IrClass.addFakeOverrides() {
Visibilities.INHERITED, Visibilities.INHERITED,
irFunction.modality, irFunction.modality,
irFunction.returnType, irFunction.returnType,
irFunction.isInline, isInline = irFunction.isInline,
irFunction.isExternal, isExternal = irFunction.isExternal,
irFunction.isTailrec, isTailrec = irFunction.isTailrec,
irFunction.isSuspend isSuspend = irFunction.isSuspend,
isExpect = irFunction.isExpect
).apply { ).apply {
descriptor.bind(this) descriptor.bind(this)
parent = this@addFakeOverrides parent = this@addFakeOverrides
@@ -521,7 +523,10 @@ fun createStaticFunctionWithReceivers(
modality, modality,
oldFunction.returnType, oldFunction.returnType,
isInline = oldFunction.isInline, isInline = oldFunction.isInline,
isExternal = false, isTailrec = false, isSuspend = oldFunction.isSuspend isExternal = false,
isTailrec = false,
isSuspend = oldFunction.isSuspend,
isExpect = oldFunction.isExpect
).apply { ).apply {
descriptor.bind(this) descriptor.bind(this)
parent = irParent parent = irParent
@@ -290,7 +290,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isInner = false, isInner = false,
isData = false, isData = false,
isExternal = false, isExternal = false,
isInline = false isInline = false,
isExpect = false
).apply { ).apply {
d.bind(this) d.bind(this)
parent = irFunction.parent parent = irFunction.parent
@@ -392,7 +393,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
coroutineClass.defaultType, coroutineClass.defaultType,
isInline = false, isInline = false,
isExternal = false, isExternal = false,
isPrimary = true isPrimary = true,
isExpect = false
).apply { ).apply {
d.bind(this) d.bind(this)
parent = coroutineClass parent = coroutineClass
@@ -437,7 +439,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
coroutineClass.defaultType, coroutineClass.defaultType,
isInline = false, isInline = false,
isExternal = false, isExternal = false,
isPrimary = false isPrimary = false,
isExpect = false
).apply { ).apply {
d.bind(this) d.bind(this)
parent = coroutineClass parent = coroutineClass
@@ -484,7 +487,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isInline = false, isInline = false,
isExternal = false, isExternal = false,
isTailrec = false, isTailrec = false,
isSuspend = false isSuspend = false,
isExpect = false
).apply { ).apply {
d.bind(this) d.bind(this)
parent = coroutineClass parent = coroutineClass
@@ -549,7 +553,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isInline = false, isInline = false,
isExternal = false, isExternal = false,
isTailrec = false, isTailrec = false,
isSuspend = true isSuspend = true,
isExpect = false
).apply { ).apply {
d.bind(this) d.bind(this)
parent = coroutineClass parent = coroutineClass
@@ -603,10 +608,11 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
stateMachineFunction.visibility, stateMachineFunction.visibility,
Modality.FINAL, Modality.FINAL,
context.irBuiltIns.anyNType, context.irBuiltIns.anyNType,
stateMachineFunction.isInline, isInline = stateMachineFunction.isInline,
stateMachineFunction.isExternal, isExternal = stateMachineFunction.isExternal,
stateMachineFunction.isTailrec, isTailrec = stateMachineFunction.isTailrec,
stateMachineFunction.isSuspend isSuspend = stateMachineFunction.isSuspend,
isExpect = stateMachineFunction.isExpect
).apply { ).apply {
d.bind(this) d.bind(this)
parent = coroutineClass parent = coroutineClass
@@ -493,9 +493,10 @@ private fun buildFunctionDeclaration(irFunction: IrFunction, origin: IrDeclarati
irFunction.name, irFunction.name,
irFunction.visibility, irFunction.visibility,
irFunction.returnType, irFunction.returnType,
irFunction.isInline, isInline = irFunction.isInline,
false, isExternal = false,
false isPrimary = false,
isExpect = false
).also { ).also {
descriptor.bind(it) descriptor.bind(it)
it.parent = irFunction.parent it.parent = irFunction.parent
@@ -516,10 +517,11 @@ private fun buildFunctionDeclaration(irFunction: IrFunction, origin: IrDeclarati
irFunction.visibility, irFunction.visibility,
Modality.FINAL, Modality.FINAL,
irFunction.returnType, irFunction.returnType,
irFunction.isInline, isInline = irFunction.isInline,
false, isExternal = false,
false, isTailrec = false,
irFunction.isSuspend isSuspend = irFunction.isSuspend,
isExpect = irFunction.isExpect
).also { ).also {
descriptor.bind(it) descriptor.bind(it)
it.parent = irFunction.parent it.parent = irFunction.parent
@@ -551,8 +553,8 @@ private fun IrFunction.valueParameter(index: Int, name: Name, type: IrType): IrV
index, index,
type, type,
null, null,
false, isCrossinline = false,
false isNoinline = false
).also { ).also {
parameterDescriptor.bind(it) parameterDescriptor.bind(it)
it.parent = this it.parent = this
@@ -137,7 +137,8 @@ class InitializersLowering(
// TODO: mark as synthesized // TODO: mark as synthesized
val staticInitializerDescriptor = WrappedSimpleFunctionDescriptor() val staticInitializerDescriptor = WrappedSimpleFunctionDescriptor()
val staticInitializer = IrFunctionImpl( val staticInitializer = IrFunctionImpl(
irClass.startOffset, irClass.endOffset, irClass.startOffset,
irClass.endOffset,
declarationOrigin, declarationOrigin,
IrSimpleFunctionSymbolImpl(staticInitializerDescriptor), IrSimpleFunctionSymbolImpl(staticInitializerDescriptor),
clinitName, clinitName,
@@ -147,7 +148,8 @@ class InitializersLowering(
isInline = false, isInline = false,
isExternal = false, isExternal = false,
isTailrec = false, isTailrec = false,
isSuspend = false isSuspend = false,
isExpect = false
).apply { ).apply {
staticInitializerDescriptor.bind(this) staticInitializerDescriptor.bind(this)
body = IrBlockBodyImpl(irClass.startOffset, irClass.endOffset, body = IrBlockBodyImpl(irClass.startOffset, irClass.endOffset,
@@ -518,10 +518,11 @@ class LocalDeclarationsLowering(
Visibilities.PRIVATE, Visibilities.PRIVATE,
Modality.FINAL, Modality.FINAL,
oldDeclaration.returnType, oldDeclaration.returnType,
oldDeclaration.isInline, isInline = oldDeclaration.isInline,
oldDeclaration.isExternal, isExternal = oldDeclaration.isExternal,
oldDeclaration.isTailrec, isTailrec = oldDeclaration.isTailrec,
oldDeclaration.isSuspend isSuspend = oldDeclaration.isSuspend,
isExpect = oldDeclaration.isExpect
) )
newDescriptor.bind(newDeclaration) newDescriptor.bind(newDeclaration)
@@ -611,8 +612,11 @@ class LocalDeclarationsLowering(
val newDeclaration = IrConstructorImpl( val newDeclaration = IrConstructorImpl(
oldDeclaration.startOffset, oldDeclaration.endOffset, oldDeclaration.origin, oldDeclaration.startOffset, oldDeclaration.endOffset, oldDeclaration.origin,
newSymbol, oldDeclaration.name, loweredConstructorVisibility, oldDeclaration.returnType, oldDeclaration.isInline, newSymbol, oldDeclaration.name, loweredConstructorVisibility, oldDeclaration.returnType,
oldDeclaration.isExternal, oldDeclaration.isPrimary isInline = oldDeclaration.isInline,
isExternal = oldDeclaration.isExternal,
isPrimary = oldDeclaration.isPrimary,
isExpect = oldDeclaration.isExpect
) )
newDescriptor.bind(newDeclaration) newDescriptor.bind(newDeclaration)
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.backend.common.BackendContext
import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.descriptors.WrappedSimpleFunctionDescriptor import org.jetbrains.kotlin.backend.common.descriptors.WrappedSimpleFunctionDescriptor
import org.jetbrains.kotlin.backend.common.ir.copyTo import org.jetbrains.kotlin.backend.common.ir.copyTo
import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
@@ -23,7 +22,6 @@ import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
import org.jetbrains.kotlin.ir.types.classifierOrFail import org.jetbrains.kotlin.ir.types.classifierOrFail
import org.jetbrains.kotlin.ir.types.typeWith import org.jetbrains.kotlin.ir.types.typeWith
import org.jetbrains.kotlin.ir.util.isEffectivelyExternal import org.jetbrains.kotlin.ir.util.isEffectivelyExternal
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.ir.util.transformDeclarationsFlat import org.jetbrains.kotlin.ir.util.transformDeclarationsFlat
import org.jetbrains.kotlin.ir.visitors.* import org.jetbrains.kotlin.ir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -87,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 isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isExpect = false
).apply { ).apply {
descriptor.bind(this) descriptor.bind(this)
@@ -26,7 +26,8 @@ fun IrClassBuilder.buildClass(): IrClass {
return IrClassImpl( return IrClassImpl(
startOffset, endOffset, origin, startOffset, endOffset, origin,
IrClassSymbolImpl(wrappedDescriptor), IrClassSymbolImpl(wrappedDescriptor),
name, kind, visibility, modality, isCompanion, isInner, isData, isExternal, isInline name, kind, visibility, modality,
isCompanion = isCompanion, isInner = isInner, isData = isData, isExternal = isExternal, isInline = isInline, isExpect = isExpect
).also { ).also {
wrappedDescriptor.bind(it) wrappedDescriptor.bind(it)
} }
@@ -74,7 +75,8 @@ fun IrPropertyBuilder.buildProperty(): IrProperty {
return IrPropertyImpl( return IrPropertyImpl(
startOffset, endOffset, origin, startOffset, endOffset, origin,
IrPropertySymbolImpl(wrappedDescriptor), IrPropertySymbolImpl(wrappedDescriptor),
name, visibility, modality, isVar, isConst, isLateinit, isDelegated, isExternal name, visibility, modality,
isVar = isVar, isConst = isConst, isLateinit = isLateinit, isDelegated = isDelegated, isExpect = isExpect, isExternal = isExternal
).also { ).also {
wrappedDescriptor.bind(it) wrappedDescriptor.bind(it)
} }
@@ -121,7 +123,7 @@ 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 isInline = isInline, isExternal = isExternal, isTailrec = isTailrec, isSuspend = isSuspend, isExpect = isExpect
).also { ).also {
wrappedDescriptor.bind(it) wrappedDescriptor.bind(it)
} }
@@ -134,7 +136,7 @@ fun IrFunctionBuilder.buildConstructor(): IrConstructorImpl {
IrConstructorSymbolImpl(wrappedDescriptor), IrConstructorSymbolImpl(wrappedDescriptor),
Name.special("<init>"), Name.special("<init>"),
visibility, returnType, visibility, returnType,
isInline = isInline, isExternal = isExternal, isPrimary = isPrimary isInline = isInline, isExternal = isExternal, isPrimary = isPrimary, isExpect = isExpect
).also { ).also {
wrappedDescriptor.bind(it) wrappedDescriptor.bind(it)
} }