diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt index 34130d8655b..8b07910854e 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt @@ -45,6 +45,7 @@ fun compile( files: List, configuration: CompilerConfiguration, export: List = emptyList(), + isKlibCompilation: Boolean = false, dependencies: List = emptyList(), builtInsModule: CompiledModule? = null, moduleType: ModuleType @@ -82,24 +83,36 @@ fun compile( moduleType ) - // TODO: Split compilation into two steps: kt -> ir, ir -> js - val moduleName = configuration[CommonConfigurationKeys.MODULE_NAME]!! - when (moduleType) { - ModuleType.MAIN -> { - val moduleDependencies: List = - DFS.topologicalOrder(dependencies, CompiledModule::dependencies) - .filter { it.moduleType == ModuleType.SECONDARY } - val fileDependencies = moduleDependencies.flatMap { it.moduleFragment!!.files } + if (isKlibCompilation) { +// val declarationTable = DeclarationTable(moduleFragment.irBuiltins, DescriptorTable()) +// val serializedIr = IrModuleSerializer(context, declarationTable/*, onlyForInlines = false*/).serializedIrModule(moduleFragment) +// val serializer = KonanSerializationUtil(context, configuration.get(CommonConfigurationKeys.METADATA_VERSION)!!, declarationTable) +// val serializedData = serializer.serializeModule(analysisResult.moduleDescriptor, serializedIr) +// buildLibrary(serializedData) +// + TODO("Implemenet IrSerialization") + } else { - moduleFragment.files.addAll(0, fileDependencies) - } + // TODO: Split compilation into two steps: kt -> ir, ir -> js + val moduleName = configuration[CommonConfigurationKeys.MODULE_NAME]!! + when (moduleType) { + ModuleType.MAIN -> { + val moduleDependencies: List = + DFS.topologicalOrder(dependencies, CompiledModule::dependencies) + .filter { it.moduleType == ModuleType.SECONDARY } - ModuleType.SECONDARY -> { - return CompiledModule(moduleName, null, moduleFragment, moduleType, dependencies) - } + val fileDependencies = moduleDependencies.flatMap { it.moduleFragment!!.files } - ModuleType.TEST_RUNTIME -> { + moduleFragment.files.addAll(0, fileDependencies) + } + + ModuleType.SECONDARY -> { + return CompiledModule(moduleName, null, moduleFragment, moduleType, dependencies) + } + + ModuleType.TEST_RUNTIME -> { + } } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/FunctionInlining.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/FunctionInlining.kt index 1571131e2bb..96fa2bf9dc3 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/FunctionInlining.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/FunctionInlining.kt @@ -14,10 +14,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext -import org.jetbrains.kotlin.ir.builders.Scope -import org.jetbrains.kotlin.ir.builders.irCall -import org.jetbrains.kotlin.ir.builders.irGet -import org.jetbrains.kotlin.ir.builders.irReturn +import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl @@ -29,9 +26,7 @@ import org.jetbrains.kotlin.ir.types.toKotlinType import org.jetbrains.kotlin.ir.util.file import org.jetbrains.kotlin.ir.util.getArguments import org.jetbrains.kotlin.ir.util.parentAsClass -import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid -import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid +import org.jetbrains.kotlin.ir.visitors.* import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.inline.InlineUtil @@ -134,8 +129,6 @@ internal class FunctionInlining(val context: Context): IrElementTransformerWithC return transformedModule } - //-------------------------------------------------------------------------// - override fun visitFunctionNew(declaration: IrFunction, data: Ref): IrStatement { val descriptor = declaration.descriptor @@ -160,15 +153,14 @@ internal class FunctionInlining(val context: Context): IrElementTransformerWithC if (callee == null) { // We failed to get the declaration. val message = "Inliner failed to obtain function declaration: " + functionDescriptor.fqNameSafe.toString() - callee context.reportWarning(message, currentFile, callSite) // Report warning. return callSite } data.value = data.value or callee.second val childIsBad = Ref(inlineFunctions[functionDescriptor] ?: false) - callee.first.transformChildren(this, childIsBad) - inlineFunctions[functionDescriptor] = childIsBad.value// Process recursive inline. + callee.first.transformChildren(this, childIsBad) // Process recursive inline. + inlineFunctions[functionDescriptor] = childIsBad.value data.value = data.value or childIsBad.value val currentCalleeIsBad = argsAreBad.value or childIsBad.value or callee.second @@ -194,7 +186,7 @@ internal class FunctionInlining(val context: Context): IrElementTransformerWithC } // TODO: should we keep this at all? -private val inlineConstructor = FqName("konan.internal.InlineConstructor") +private val inlineConstructor = FqName("kotlin.native.internal.InlineConstructor") private val FunctionDescriptor.isInlineConstructor get() = annotations.hasAnnotation(inlineConstructor) //-----------------------------------------------------------------------------// @@ -328,7 +320,8 @@ private class Inliner(val globalSubstituteMap: MutableMap