js compiler running
diff --git a/compiler/ir/backend.js/build.gradle.kts b/compiler/ir/backend.js/build.gradle.kts
index 011fe36..e230aec 100644
--- a/compiler/ir/backend.js/build.gradle.kts
+++ b/compiler/ir/backend.js/build.gradle.kts
@@ -13,6 +13,7 @@
 
 dependencies {
     compileOnly(KOTLIN_COMPOSE_STDLIB)
+    compileOnly(project(":compiler:serialization.js"))
     compileOnly("org.jetbrains.kotlin:kotlin-compiler:$COMPOSE_VERSION")
     compileOnly("org.jetbrains.kotlin:kotlin-plugin:$COMPOSE_VERSION")
     compileOnly("org.jetbrains.kotlin:kotlin-intellij-core:$COMPOSE_VERSION")
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt
index a92ca8c..e1289cb 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt
@@ -173,7 +173,7 @@
 )
 
 private val localDeclarationsLoweringPhase = makeJsModulePhase(
-    ::LocalDeclarationsLowering,
+    { context -> LocalDeclarationsLowering(context) },
     name = "LocalDeclarationsLowering",
     description = "Move local declarations into nearest declaration container",
     prerequisite = setOf(sharedVariablesLoweringPhase, localDelegatedPropertiesLoweringPhase)
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 3324a7c..6f7d75e 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
@@ -25,7 +25,7 @@
     return DFS.topologicalOrder(dependencies) { m ->
         val descriptor = m.descriptor
         descriptor.allDependencyModules.filter { it != descriptor }.map { mapping[it] }
-    }.reversed()
+    }.reversed() as Collection<IrModuleFragment>
 }
 
 fun compile(
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ConstLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ConstLowering.kt
index b3408b7..9b3cf94 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ConstLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ConstLowering.kt
@@ -41,17 +41,18 @@
     }
 
     private fun createLong(v: Long): IrExpression =
-        lowerConst(context.intrinsics.longClassSymbol, IrConstImpl<*>::int, v.toInt(), (v shr 32).toInt())
+        lowerConst(context.intrinsics.longClassSymbol, IrConstImpl.Companion::int, v.toInt(), (v shr 32)
+            .toInt())
 
     override fun <T> visitConst(expression: IrConst<T>): IrExpression {
         with(context.intrinsics) {
             if (expression.type.isUnsigned()) {
                 return when (expression.type.classifierOrNull) {
-                    uByteClassSymbol -> lowerConst(uByteClassSymbol, IrConstImpl<*>::byte, IrConstKind.Byte.valueOf(expression))
+                    uByteClassSymbol -> lowerConst(uByteClassSymbol, IrConstImpl.Companion::byte, IrConstKind.Byte.valueOf(expression))
 
-                    uShortClassSymbol -> lowerConst(uShortClassSymbol, IrConstImpl<*>::short, IrConstKind.Short.valueOf(expression))
+                    uShortClassSymbol -> lowerConst(uShortClassSymbol, IrConstImpl.Companion::short, IrConstKind.Short.valueOf(expression))
 
-                    uIntClassSymbol -> lowerConst(uIntClassSymbol, IrConstImpl<*>::int, IrConstKind.Int.valueOf(expression))
+                    uIntClassSymbol -> lowerConst(uIntClassSymbol, IrConstImpl.Companion::int, IrConstKind.Int.valueOf(expression))
 
                     uLongClassSymbol -> lowerConst(uLongClassSymbol, { _, _, _, v -> createLong(v) }, IrConstKind.Long.valueOf(expression))
 
@@ -60,7 +61,7 @@
             }
             return when {
                 expression.kind is IrConstKind.Char ->
-                    lowerConst(charClassSymbol, IrConstImpl<*>::int, IrConstKind.Char.valueOf(expression).toInt())
+                    lowerConst(charClassSymbol, IrConstImpl.Companion::int, IrConstKind.Char.valueOf(expression).toInt())
 
                 expression.kind is IrConstKind.Long ->
                     createLong(IrConstKind.Long.valueOf(expression))
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt
index 8797a0b..4142118 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt
@@ -14,6 +14,7 @@
 import org.jetbrains.kotlin.backend.common.lower.irBlockBody
 import org.jetbrains.kotlin.backend.common.lower.irIfThen
 import org.jetbrains.kotlin.descriptors.Visibilities
+import org.jetbrains.kotlin.ir.IrElement
 import org.jetbrains.kotlin.ir.IrStatement
 import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
 import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
@@ -336,11 +337,11 @@
         val entryInstances = createEnumEntryInstanceVariables()
 
         // Create boolean flag that indicates if entry instances were initialized.
-        val entryInstancesInitializedVar = createEntryInstancesInitializedVar()
+        val entryInstancesInitializedVar: IrField = createEntryInstancesInitializedVar()
 
         // Create function that initializes all enum entry instances using `IrEnumEntry.initializationExpression`.
         // It should be called on the first `IrGetEnumValue`, consecutive calls to this function will do nothing.
-        val initEntryInstancesFun = createInitEntryInstancesFun(entryInstancesInitializedVar, entryInstances)
+        val initEntryInstancesFun: IrSimpleFunction = createInitEntryInstancesFun(entryInstancesInitializedVar, entryInstances)
 
         // Create entry instance getters. These are used to lower `IrGetEnumValue`.
         val entryGetInstanceFuns = createGetEntryInstanceFuns(initEntryInstancesFun, entryInstances)
@@ -351,7 +352,13 @@
         // Remove IrEnumEntry nodes from class declarations. Replace them with corresponding class declarations (if they have them).
         replaceIrEntriesWithCorrespondingClasses()
 
-        return listOf(irClass) + entryInstances + listOf(entryInstancesInitializedVar, initEntryInstancesFun) + entryGetInstanceFuns
+        val x: List<IrClass> = listOf(irClass)
+        val y: List<IrDeclaration> = entryInstances
+        val z: List<IrDeclaration> = listOf(entryInstancesInitializedVar,
+            initEntryInstancesFun)
+        val z1: List<IrSimpleFunction> = entryGetInstanceFuns
+
+        return x + y + z + z1
     }
 
 
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt
index a0b5366..7c940fa 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt
@@ -520,8 +520,9 @@
 
     override fun visitReturn(expression: IrReturn) {
         expression.acceptChildrenVoid(this)
-        if (expression.returnTargetSymbol is IrReturnableBlockSymbol) {
-            val (exitState, varSymbol) = returnableBlockMap[expression.returnTargetSymbol]!!
+        val rts = expression.returnTargetSymbol
+        if (rts is IrReturnableBlockSymbol) {
+            val (exitState, varSymbol) = returnableBlockMap[rts]!!
             if (varSymbol != null) {
                 transformLastExpression { JsIrBuilder.buildSetVariable(varSymbol, it, it.type) }
             }
diff --git a/compiler/ir/serialization.js/build.gradle.kts b/compiler/ir/serialization.js/build.gradle.kts
index dcaa8d4..011fe36 100644
--- a/compiler/ir/serialization.js/build.gradle.kts
+++ b/compiler/ir/serialization.js/build.gradle.kts
@@ -1,197 +1,28 @@
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
 plugins {
     kotlin("jvm")
-    id("jps-compatible")
+}
+
+val COMPOSE_VERSION = "1.3.50-compose-20190806"
+val KOTLIN_COMPOSE_STDLIB = "org.jetbrains.kotlin:kotlin-stdlib:$COMPOSE_VERSION"
+
+repositories {
+    maven(project.rootProject.projectDir.resolve("../../prebuilts/androidx/external").absolutePath)
 }
 
 dependencies {
-    compile(project(":compiler:ir.psi2ir"))
-    compile(project(":compiler:ir.serialization.common"))
-    compile(project(":js:js.frontend"))
-
-    compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
-
-    testCompile(intellijCoreDep()) { includeJars("intellij-core") }
-    testCompile(project(":compiler:frontend"))
-    testCompile(project(":compiler:cli"))
-    testCompile(project(":compiler:util"))
-
-    testRuntime(intellijDep()) { includeJars("picocontainer", "trove4j", "guava", "jdom", rootProject = rootProject) }
+    compileOnly(KOTLIN_COMPOSE_STDLIB)
+    compileOnly("org.jetbrains.kotlin:kotlin-compiler:$COMPOSE_VERSION")
+    compileOnly("org.jetbrains.kotlin:kotlin-plugin:$COMPOSE_VERSION")
+    compileOnly("org.jetbrains.kotlin:kotlin-intellij-core:$COMPOSE_VERSION")
+    compileOnly("org.jetbrains.kotlin:kotlin-platform-api:$COMPOSE_VERSION")
 }
 
-sourceSets {
-    "main" { projectDefault() }
-    "test" { projectDefault() }
-}
-
-val unimplementedNativeBuiltIns =
-    (file("$rootDir/core/builtins/native/kotlin/").list().toSet() - file("$rootDir/libraries/stdlib/js-ir/builtins/").list())
-        .map { "core/builtins/native/kotlin/$it" }
-
-// Required to compile native builtins with the rest of runtime
-val builtInsHeader = """@file:Suppress(
-    "NON_ABSTRACT_FUNCTION_WITH_NO_BODY",
-    "MUST_BE_INITIALIZED_OR_BE_ABSTRACT",
-    "EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE",
-    "PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED",
-    "WRONG_MODIFIER_TARGET"
-)
-"""
-
-val fullRuntimeSources by task<Sync> {
-
-    val sources = listOf(
-        "core/builtins/src/kotlin/",
-        "libraries/stdlib/common/src/",
-        "libraries/stdlib/src/kotlin/",
-        "libraries/stdlib/unsigned/",
-        "libraries/stdlib/js/src/",
-        "libraries/stdlib/js/runtime/",
-        "libraries/stdlib/js-ir/builtins/",
-        "libraries/stdlib/js-ir/src/",
-        "libraries/stdlib/js-ir/runtime/",
-
-        // TODO get rid - move to test module
-        "js/js.translator/testData/_commonFiles/"
-    ) + unimplementedNativeBuiltIns
-
-    val excluded = listOf(
-        // stdlib/js/src/generated is used exclusively for current `js-v1` backend.
-        "libraries/stdlib/js/src/generated/**",
-
-        // JS-specific optimized version of emptyArray() already defined
-        "core/builtins/src/kotlin/ArrayIntrinsics.kt"
-    )
-
-    sources.forEach { path ->
-        from("$rootDir/$path") {
-            into(path.dropLastWhile { it != '/' })
-            excluded.filter { it.startsWith(path) }.forEach {
-                exclude(it.substring(path.length))
-            }
-        }
-    }
-
-    into("$buildDir/fullRuntime/src")
-
-    doLast {
-        unimplementedNativeBuiltIns.forEach { path ->
-            val file = File("$buildDir/fullRuntime/src/$path")
-            val sourceCode = builtInsHeader + file.readText()
-            file.writeText(sourceCode)
-        }
+tasks.withType<KotlinCompile>().all {
+    kotlinOptions {
+        jvmTarget = "1.8"
     }
 }
 
-val reducedRuntimeSources by task<Sync> {
-    dependsOn(fullRuntimeSources)
-
-    from(fullRuntimeSources.outputs.files.singleFile) {
-        exclude(
-            listOf(
-                "libraries/stdlib/unsigned/**",
-                "libraries/stdlib/common/src/generated/_Arrays.kt",
-                "libraries/stdlib/common/src/generated/_Collections.kt",
-                "libraries/stdlib/common/src/generated/_Comparisons.kt",
-                "libraries/stdlib/common/src/generated/_Maps.kt",
-                "libraries/stdlib/common/src/generated/_Sequences.kt",
-                "libraries/stdlib/common/src/generated/_Sets.kt",
-                "libraries/stdlib/common/src/generated/_Strings.kt",
-                "libraries/stdlib/common/src/generated/_UArrays.kt",
-                "libraries/stdlib/common/src/generated/_URanges.kt",
-                "libraries/stdlib/common/src/generated/_UCollections.kt",
-                "libraries/stdlib/common/src/generated/_UComparisons.kt",
-                "libraries/stdlib/common/src/generated/_USequences.kt",
-                "libraries/stdlib/common/src/kotlin/SequencesH.kt",
-                "libraries/stdlib/common/src/kotlin/TextH.kt",
-                "libraries/stdlib/common/src/kotlin/UMath.kt",
-                "libraries/stdlib/common/src/kotlin/collections/**",
-                "libraries/stdlib/common/src/kotlin/ioH.kt",
-                "libraries/stdlib/js-ir/runtime/collectionsHacks.kt",
-                "libraries/stdlib/js-ir/src/generated/**",
-                "libraries/stdlib/js-ir/src/kotlin/text/**",
-                "libraries/stdlib/js/src/jquery/**",
-                "libraries/stdlib/js/src/org.w3c/**",
-                "libraries/stdlib/js/src/kotlin/char.kt",
-                "libraries/stdlib/js/src/kotlin/collections.kt",
-                "libraries/stdlib/js/src/kotlin/collections/**",
-                "libraries/stdlib/js/src/kotlin/time/**",
-                "libraries/stdlib/js/src/kotlin/console.kt",
-                "libraries/stdlib/js/src/kotlin/coreDeprecated.kt",
-                "libraries/stdlib/js/src/kotlin/date.kt",
-                "libraries/stdlib/js/src/kotlin/debug.kt",
-                "libraries/stdlib/js/src/kotlin/grouping.kt",
-                "libraries/stdlib/js/src/kotlin/json.kt",
-                "libraries/stdlib/js/src/kotlin/promise.kt",
-                "libraries/stdlib/js/src/kotlin/regexp.kt",
-                "libraries/stdlib/js/src/kotlin/sequence.kt",
-                "libraries/stdlib/js/src/kotlin/text/**",
-                "libraries/stdlib/src/kotlin/collections/**",
-                "libraries/stdlib/src/kotlin/experimental/bitwiseOperations.kt",
-                "libraries/stdlib/src/kotlin/properties/Delegates.kt",
-                "libraries/stdlib/src/kotlin/random/URandom.kt",
-                "libraries/stdlib/src/kotlin/text/**",
-                "libraries/stdlib/src/kotlin/time/**",
-                "libraries/stdlib/src/kotlin/util/KotlinVersion.kt",
-                "libraries/stdlib/src/kotlin/util/Tuples.kt",
-                "libraries/stdlib/js/src/kotlin/dom/**",
-                "libraries/stdlib/js/src/kotlin/browser/**"
-            )
-        )
-    }
-
-    from("$rootDir/libraries/stdlib/js-ir/smallRuntime") {
-        into("libraries/stdlib/js-ir/runtime/")
-    }
-
-    into("$buildDir/reducedRuntime/src")
-}
-
-
-fun JavaExec.buildKLib(sources: List<String>, dependencies: List<String>, outPath: String, commonSources: List<String>) {
-    inputs.files(sources)
-    outputs.dir(file(outPath).parent)
-
-    classpath = sourceSets.test.get().runtimeClasspath
-    main = "org.jetbrains.kotlin.ir.backend.js.GenerateIrRuntimeKt"
-    workingDir = rootDir
-    args = sources.toList() + listOf("-o", outPath) + dependencies.flatMap { listOf("-d", it) } + commonSources.flatMap { listOf("-c", it) }
-
-    passClasspathInJar()
-}
-
-val generateFullRuntimeKLib by task<NoDebugJavaExec> {
-    dependsOn(fullRuntimeSources)
-
-    buildKLib(sources = listOf(fullRuntimeSources.outputs.files.singleFile.path),
-              dependencies = emptyList(),
-              outPath = "$buildDir/fullRuntime/klib",
-              commonSources = listOf("common", "src", "unsigned").map { "$buildDir/fullRuntime/src/libraries/stdlib/$it" }
-    )
-}
-
-val generateReducedRuntimeKLib by task<NoDebugJavaExec> {
-    dependsOn(reducedRuntimeSources)
-
-    buildKLib(sources = listOf(reducedRuntimeSources.outputs.files.singleFile.path),
-              dependencies = emptyList(),
-              outPath = "$buildDir/reducedRuntime/klib",
-              commonSources = listOf("common", "src", "unsigned").map { "$buildDir/reducedRuntime/src/libraries/stdlib/$it" }
-    )
-}
-
-val kotlinTestCommonSources = listOf(
-    "$rootDir/libraries/kotlin.test/annotations-common/src/main",
-    "$rootDir/libraries/kotlin.test/common/src/main"
-)
-val generateKotlinTestKLib by task<NoDebugJavaExec> {
-    dependsOn(generateFullRuntimeKLib)
-
-    buildKLib(
-        sources = listOf("$rootDir/libraries/kotlin.test/js/src/main") + kotlinTestCommonSources,
-        dependencies = listOf("${generateFullRuntimeKLib.outputs.files.singleFile.path}/klib"),
-        outPath = "$buildDir/kotlin.test/klib",
-        commonSources = kotlinTestCommonSources
-    )
-}
-
-testsJar {}
+sourceSets.maybeCreate("main").java.srcDirs("src")
\ No newline at end of file