JS_IR: isExpect

This commit is contained in:
Dmitry Petrov
2019-10-17 13:28:09 +03:00
parent e87517764d
commit 66b63c4296
7 changed files with 41 additions and 31 deletions
@@ -96,9 +96,10 @@ class JsDeclarationFactory : DeclarationFactory {
oldConstructor.name,
oldConstructor.visibility,
oldConstructor.returnType,
oldConstructor.isInline,
oldConstructor.isExternal,
oldConstructor.isPrimary
isInline = oldConstructor.isInline,
isExternal = oldConstructor.isExternal,
isPrimary = oldConstructor.isPrimary,
isExpect = oldConstructor.isExpect
).also {
descriptor.bind(it)
it.parent = oldConstructor.parent
@@ -48,9 +48,11 @@ class JsSharedVariablesManager(val builtIns: IrBuiltIns, val implicitDeclaration
val constructorSymbol = closureBoxConstructorDeclaration.symbol
val irCall = IrConstructorCallImpl.fromSymbolDescriptor(initializer.startOffset, initializer.endOffset, closureBoxType, constructorSymbol).apply {
putValueArgument(0, initializer)
}
val irCall =
IrConstructorCallImpl.fromSymbolDescriptor(initializer.startOffset, initializer.endOffset, closureBoxType, constructorSymbol)
.apply {
putValueArgument(0, initializer)
}
val descriptor = WrappedVariableDescriptor()
return IrVariableImpl(
@@ -127,7 +129,8 @@ class JsSharedVariablesManager(val builtIns: IrBuiltIns, val implicitDeclaration
val descriptor = WrappedClassDescriptor()
val declaration = IrClassImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, JsLoweredDeclarationOrigin.JS_CLOSURE_BOX_CLASS_DECLARATION, IrClassSymbolImpl(descriptor),
Name.identifier(boxTypeName), ClassKind.CLASS, Visibilities.PUBLIC, Modality.FINAL, false, false, false, false, false
Name.identifier(boxTypeName), ClassKind.CLASS, Visibilities.PUBLIC, Modality.FINAL,
isCompanion = false, isInner = false, isData = false, isExternal = false, isInline = false, isExpect = false
)
descriptor.bind(declaration)
@@ -135,9 +138,9 @@ class JsSharedVariablesManager(val builtIns: IrBuiltIns, val implicitDeclaration
// TODO: substitute
closureBoxType = IrSimpleTypeImpl(declaration.symbol, false, emptyList(), emptyList())
declaration.thisReceiver =
JsIrBuilder.buildValueParameter(Name.special("<this>"), -1, closureBoxType, IrDeclarationOrigin.INSTANCE_RECEIVER).apply {
parent = declaration
}
JsIrBuilder.buildValueParameter(Name.special("<this>"), -1, closureBoxType, IrDeclarationOrigin.INSTANCE_RECEIVER).apply {
parent = declaration
}
implicitDeclarationsFile.declarations += declaration
return declaration
@@ -171,7 +174,8 @@ class JsSharedVariablesManager(val builtIns: IrBuiltIns, val implicitDeclaration
val declaration = IrConstructorImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, JsLoweredDeclarationOrigin.JS_CLOSURE_BOX_CLASS_DECLARATION, symbol,
Name.special("<init>"), Visibilities.PUBLIC, closureBoxClassDeclaration.defaultType, false, false, true
Name.special("<init>"), Visibilities.PUBLIC, closureBoxClassDeclaration.defaultType,
isInline = false, isExternal = false, isPrimary = true, isExpect = false
)
descriptor.bind(declaration)
@@ -93,6 +93,7 @@ object JsIrBuilder {
isExternal: Boolean = false,
isTailrec: Boolean = false,
isSuspend: Boolean = false,
isExpect: Boolean = false,
origin: IrDeclarationOrigin = SYNTHESIZED_DECLARATION
) = buildFunction(
Name.identifier(name),
@@ -100,11 +101,12 @@ object JsIrBuilder {
parent,
visibility,
modality,
isInline,
isExternal,
isTailrec,
isSuspend,
origin
isInline = isInline,
isExternal = isExternal,
isTailrec = isTailrec,
isSuspend = isSuspend,
isExpect = isExpect,
origin = origin
)
fun buildFunction(
@@ -117,6 +119,7 @@ object JsIrBuilder {
isExternal: Boolean = false,
isTailrec: Boolean = false,
isSuspend: Boolean = false,
isExpect: Boolean = false,
origin: IrDeclarationOrigin = SYNTHESIZED_DECLARATION
): IrSimpleFunction {
val descriptor = WrappedSimpleFunctionDescriptor()
@@ -129,10 +132,11 @@ object JsIrBuilder {
visibility,
modality,
returnType,
isInline,
isExternal,
isTailrec,
isSuspend
isInline = isInline,
isExternal = isExternal,
isTailrec = isTailrec,
isSuspend = isSuspend,
isExpect = isExpect
).also {
descriptor.bind(it)
it.parent = parent
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.common.lower.irBlockBody
import org.jetbrains.kotlin.backend.common.lower.irNot
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.ir.backend.js.JsLoweredDeclarationOrigin
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
import org.jetbrains.kotlin.ir.backend.js.utils.functionSignature
@@ -126,11 +125,12 @@ class BridgesConstruction(val context: CommonBackendContext) : ClassLoweringPass
function.parent,
bridge.visibility,
bridge.modality, // TODO: should copy modality?
bridge.isInline,
bridge.isExternal,
bridge.isTailrec,
bridge.isSuspend,
origin
isInline = bridge.isInline,
isExternal = bridge.isExternal,
isTailrec = bridge.isTailrec,
isSuspend = bridge.isSuspend,
isExpect = bridge.isExpect,
origin = origin
).apply {
copyTypeParametersFrom(bridge)
// TODO: should dispatch receiver be copied?
@@ -104,7 +104,7 @@ class CreateScriptFunctionsPhase(val context: CommonBackendContext) : FileLoweri
IrSimpleFunctionSymbolImpl(descriptor),
Name.identifier(name),
Visibilities.PRIVATE, Modality.FINAL, returnType,
isInline = false, isExternal = false, isTailrec = false, isSuspend = false
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isExpect = false
).also {
descriptor.bind(it)
it.parent = irScript
@@ -192,9 +192,10 @@ class EnumClassConstructorTransformer(val context: CommonBackendContext, private
enumConstructor.name,
enumConstructor.visibility,
enumConstructor.returnType,
enumConstructor.isInline,
enumConstructor.isExternal,
enumConstructor.isPrimary
isInline = enumConstructor.isInline,
isExternal = enumConstructor.isExternal,
isPrimary = enumConstructor.isPrimary,
isExpect = enumConstructor.isExpect
).apply {
loweredConstructorDescriptor.bind(this)
parent = enumClass
@@ -163,7 +163,7 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : FileLoweringPass
startOffset, endOffset, origin,
symbol, name, visibility, modality,
returnType,
isInline, isExternal, isTailrec, isSuspend
isInline = isInline, isExternal = isExternal, isTailrec = isTailrec, isSuspend = isSuspend, isExpect = isExpect
).also {
descriptor.bind(it)
it.parent = parent