[JS IR BE] Load builtins from code to runtime
Bypass builtins deserialization mechanism in legacy JS backend and load bultins direcly as kotlin code. This way we won't have separated IR declarations for Enum, Char, Long Some "native" builtins are implemented in libraries/stdlib/js/irRuntime/builtins/ Other builtins are moved by MoveExternalDeclarationsToSeparatePlace and used only in compile-time
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.js.test
|
||||
|
||||
import org.jetbrains.kotlin.config.*
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.ir.backend.js.Result
|
||||
import org.jetbrains.kotlin.ir.backend.js.compile
|
||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
@@ -13,6 +14,7 @@ import org.jetbrains.kotlin.js.config.JsConfig
|
||||
import org.jetbrains.kotlin.js.facade.MainCallParameters
|
||||
import org.jetbrains.kotlin.js.facade.TranslationUnit
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
import java.io.File
|
||||
|
||||
@@ -112,7 +114,8 @@ abstract class BasicIrBoxTest(
|
||||
config.configuration,
|
||||
FqName((testPackage?.let { "$it." } ?: "") + testFunction),
|
||||
dependencies,
|
||||
irDependencies
|
||||
irDependencies,
|
||||
runtimeResult.moduleDescriptor as ModuleDescriptorImpl
|
||||
)
|
||||
|
||||
compilationCache[outputFile.name.replace(".js", ".meta.js")] = result
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.js.test
|
||||
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import java.io.File
|
||||
|
||||
private const val runtimeDir = "js/js.translator/testData/out/irBox"
|
||||
@@ -26,6 +27,29 @@ enum class JsIrTestRuntime(
|
||||
)
|
||||
}
|
||||
|
||||
// Required to compile native builtins with the rest of runtime
|
||||
private const 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"
|
||||
)
|
||||
"""
|
||||
|
||||
// Native builtins that were not implemented in JS IR runtime
|
||||
private val unimplementedNativeBuiltInsDir = KotlinTestUtils.tmpDir("unimplementedBuiltins").also { tmpDir ->
|
||||
val allBuiltins = listOfKtFilesFrom("core/builtins/native/kotlin").map { File(it).name }
|
||||
val implementedBuiltIns = listOfKtFilesFrom("libraries/stdlib/js/irRuntime/builtins/").map { File(it).name }
|
||||
val unimplementedBuiltIns = allBuiltins - implementedBuiltIns
|
||||
for (filename in unimplementedBuiltIns) {
|
||||
val originalFile = File("core/builtins/native/kotlin", filename)
|
||||
val newFile = File(tmpDir, filename)
|
||||
val sourceCode = builtInsHeader + originalFile.readText()
|
||||
newFile.writeText(sourceCode)
|
||||
}
|
||||
}
|
||||
|
||||
private val fullRuntimeSources = listOfKtFilesFrom(
|
||||
"core/builtins/src/kotlin",
|
||||
"libraries/stdlib/common/src",
|
||||
@@ -36,15 +60,8 @@ private val fullRuntimeSources = listOfKtFilesFrom(
|
||||
"libraries/stdlib/js/runtime",
|
||||
"libraries/stdlib/unsigned",
|
||||
|
||||
"core/builtins/native/kotlin/Annotation.kt",
|
||||
"core/builtins/native/kotlin/Number.kt",
|
||||
"core/builtins/native/kotlin/Comparable.kt",
|
||||
"core/builtins/native/kotlin/Collections.kt",
|
||||
"core/builtins/native/kotlin/Iterator.kt",
|
||||
"core/builtins/native/kotlin/CharSequence.kt",
|
||||
|
||||
"core/builtins/src/kotlin/Unit.kt",
|
||||
|
||||
unimplementedNativeBuiltInsDir.path,
|
||||
BasicBoxTest.COMMON_FILES_DIR_PATH
|
||||
) - listOfKtFilesFrom(
|
||||
"libraries/stdlib/common/src/kotlin/JvmAnnotationsH.kt",
|
||||
@@ -102,10 +119,6 @@ private val fullRuntimeSources = listOfKtFilesFrom(
|
||||
|
||||
val reducedRuntimeSources = fullRuntimeSources - listOfKtFilesFrom(
|
||||
"libraries/stdlib/unsigned",
|
||||
"core/builtins/src/kotlin/reflect/KParameter.kt",
|
||||
"core/builtins/src/kotlin/reflect/KType.kt",
|
||||
"core/builtins/src/kotlin/reflect/KTypeParameter.kt",
|
||||
"core/builtins/src/kotlin/reflect/KVisibility.kt",
|
||||
"libraries/stdlib/common/src/generated/_Arrays.kt",
|
||||
"libraries/stdlib/common/src/generated/_Collections.kt",
|
||||
"libraries/stdlib/common/src/generated/_Maps.kt",
|
||||
|
||||
Reference in New Issue
Block a user