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.visibility,
defaultType,
false,
false,
isPrimary
isInline = false,
isExternal = false,
isPrimary = isPrimary,
isExpect = false
).also { constructor ->
descriptor.bind(constructor)
constructor.parent = this
@@ -481,10 +482,11 @@ fun IrClass.addFakeOverrides() {
Visibilities.INHERITED,
irFunction.modality,
irFunction.returnType,
irFunction.isInline,
irFunction.isExternal,
irFunction.isTailrec,
irFunction.isSuspend
isInline = irFunction.isInline,
isExternal = irFunction.isExternal,
isTailrec = irFunction.isTailrec,
isSuspend = irFunction.isSuspend,
isExpect = irFunction.isExpect
).apply {
descriptor.bind(this)
parent = this@addFakeOverrides
@@ -521,7 +523,10 @@ fun createStaticFunctionWithReceivers(
modality,
oldFunction.returnType,
isInline = oldFunction.isInline,
isExternal = false, isTailrec = false, isSuspend = oldFunction.isSuspend
isExternal = false,
isTailrec = false,
isSuspend = oldFunction.isSuspend,
isExpect = oldFunction.isExpect
).apply {
descriptor.bind(this)
parent = irParent
@@ -290,7 +290,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isInner = false,
isData = false,
isExternal = false,
isInline = false
isInline = false,
isExpect = false
).apply {
d.bind(this)
parent = irFunction.parent
@@ -392,7 +393,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
coroutineClass.defaultType,
isInline = false,
isExternal = false,
isPrimary = true
isPrimary = true,
isExpect = false
).apply {
d.bind(this)
parent = coroutineClass
@@ -437,7 +439,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
coroutineClass.defaultType,
isInline = false,
isExternal = false,
isPrimary = false
isPrimary = false,
isExpect = false
).apply {
d.bind(this)
parent = coroutineClass
@@ -484,7 +487,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isInline = false,
isExternal = false,
isTailrec = false,
isSuspend = false
isSuspend = false,
isExpect = false
).apply {
d.bind(this)
parent = coroutineClass
@@ -549,7 +553,8 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
isInline = false,
isExternal = false,
isTailrec = false,
isSuspend = true
isSuspend = true,
isExpect = false
).apply {
d.bind(this)
parent = coroutineClass
@@ -603,10 +608,11 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
stateMachineFunction.visibility,
Modality.FINAL,
context.irBuiltIns.anyNType,
stateMachineFunction.isInline,
stateMachineFunction.isExternal,
stateMachineFunction.isTailrec,
stateMachineFunction.isSuspend
isInline = stateMachineFunction.isInline,
isExternal = stateMachineFunction.isExternal,
isTailrec = stateMachineFunction.isTailrec,
isSuspend = stateMachineFunction.isSuspend,
isExpect = stateMachineFunction.isExpect
).apply {
d.bind(this)
parent = coroutineClass
@@ -493,9 +493,10 @@ private fun buildFunctionDeclaration(irFunction: IrFunction, origin: IrDeclarati
irFunction.name,
irFunction.visibility,
irFunction.returnType,
irFunction.isInline,
false,
false
isInline = irFunction.isInline,
isExternal = false,
isPrimary = false,
isExpect = false
).also {
descriptor.bind(it)
it.parent = irFunction.parent
@@ -516,10 +517,11 @@ private fun buildFunctionDeclaration(irFunction: IrFunction, origin: IrDeclarati
irFunction.visibility,
Modality.FINAL,
irFunction.returnType,
irFunction.isInline,
false,
false,
irFunction.isSuspend
isInline = irFunction.isInline,
isExternal = false,
isTailrec = false,
isSuspend = irFunction.isSuspend,
isExpect = irFunction.isExpect
).also {
descriptor.bind(it)
it.parent = irFunction.parent
@@ -551,8 +553,8 @@ private fun IrFunction.valueParameter(index: Int, name: Name, type: IrType): IrV
index,
type,
null,
false,
false
isCrossinline = false,
isNoinline = false
).also {
parameterDescriptor.bind(it)
it.parent = this
@@ -137,7 +137,8 @@ class InitializersLowering(
// TODO: mark as synthesized
val staticInitializerDescriptor = WrappedSimpleFunctionDescriptor()
val staticInitializer = IrFunctionImpl(
irClass.startOffset, irClass.endOffset,
irClass.startOffset,
irClass.endOffset,
declarationOrigin,
IrSimpleFunctionSymbolImpl(staticInitializerDescriptor),
clinitName,
@@ -147,7 +148,8 @@ class InitializersLowering(
isInline = false,
isExternal = false,
isTailrec = false,
isSuspend = false
isSuspend = false,
isExpect = false
).apply {
staticInitializerDescriptor.bind(this)
body = IrBlockBodyImpl(irClass.startOffset, irClass.endOffset,
@@ -518,10 +518,11 @@ class LocalDeclarationsLowering(
Visibilities.PRIVATE,
Modality.FINAL,
oldDeclaration.returnType,
oldDeclaration.isInline,
oldDeclaration.isExternal,
oldDeclaration.isTailrec,
oldDeclaration.isSuspend
isInline = oldDeclaration.isInline,
isExternal = oldDeclaration.isExternal,
isTailrec = oldDeclaration.isTailrec,
isSuspend = oldDeclaration.isSuspend,
isExpect = oldDeclaration.isExpect
)
newDescriptor.bind(newDeclaration)
@@ -611,8 +612,11 @@ class LocalDeclarationsLowering(
val newDeclaration = IrConstructorImpl(
oldDeclaration.startOffset, oldDeclaration.endOffset, oldDeclaration.origin,
newSymbol, oldDeclaration.name, loweredConstructorVisibility, oldDeclaration.returnType, oldDeclaration.isInline,
oldDeclaration.isExternal, oldDeclaration.isPrimary
newSymbol, oldDeclaration.name, loweredConstructorVisibility, oldDeclaration.returnType,
isInline = oldDeclaration.isInline,
isExternal = oldDeclaration.isExternal,
isPrimary = oldDeclaration.isPrimary,
isExpect = oldDeclaration.isExpect
)
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.descriptors.WrappedSimpleFunctionDescriptor
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.Modality
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.typeWith
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.visitors.*
import org.jetbrains.kotlin.name.Name
@@ -87,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
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isExpect = false
).apply {
descriptor.bind(this)
@@ -26,7 +26,8 @@ fun IrClassBuilder.buildClass(): IrClass {
return IrClassImpl(
startOffset, endOffset, origin,
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 {
wrappedDescriptor.bind(it)
}
@@ -74,7 +75,8 @@ fun IrPropertyBuilder.buildProperty(): IrProperty {
return IrPropertyImpl(
startOffset, endOffset, origin,
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 {
wrappedDescriptor.bind(it)
}
@@ -121,7 +123,7 @@ fun IrFunctionBuilder.buildFun(originalDescriptor: FunctionDescriptor? = null):
startOffset, endOffset, origin,
IrSimpleFunctionSymbolImpl(wrappedDescriptor),
name, visibility, modality, returnType,
isInline = isInline, isExternal = isExternal, isTailrec = isTailrec, isSuspend = isSuspend
isInline = isInline, isExternal = isExternal, isTailrec = isTailrec, isSuspend = isSuspend, isExpect = isExpect
).also {
wrappedDescriptor.bind(it)
}
@@ -134,7 +136,7 @@ fun IrFunctionBuilder.buildConstructor(): IrConstructorImpl {
IrConstructorSymbolImpl(wrappedDescriptor),
Name.special("<init>"),
visibility, returnType,
isInline = isInline, isExternal = isExternal, isPrimary = isPrimary
isInline = isInline, isExternal = isExternal, isPrimary = isPrimary, isExpect = isExpect
).also {
wrappedDescriptor.bind(it)
}