[Wasm/WASI] Extract js-wasi mode to context property
This commit is contained in:
committed by
Space Team
parent
1f0fb5a1a8
commit
c80854eb7c
@@ -29,6 +29,8 @@ import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
|
|||||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||||
import org.jetbrains.kotlin.ir.util.addChild
|
import org.jetbrains.kotlin.ir.util.addChild
|
||||||
import org.jetbrains.kotlin.ir.util.file
|
import org.jetbrains.kotlin.ir.util.file
|
||||||
|
import org.jetbrains.kotlin.js.config.WasmTarget
|
||||||
|
import org.jetbrains.kotlin.js.config.wasmTarget
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -46,6 +48,8 @@ class WasmBackendContext(
|
|||||||
override val scriptMode = false
|
override val scriptMode = false
|
||||||
override val irFactory: IrFactory = symbolTable.irFactory
|
override val irFactory: IrFactory = symbolTable.irFactory
|
||||||
|
|
||||||
|
val isWasmJsTarget: Boolean = configuration.wasmTarget == WasmTarget.JS
|
||||||
|
|
||||||
// Place to store declarations excluded from code generation
|
// Place to store declarations excluded from code generation
|
||||||
private val excludedDeclarations = mutableMapOf<FqName, IrPackageFragment>()
|
private val excludedDeclarations = mutableMapOf<FqName, IrPackageFragment>()
|
||||||
|
|
||||||
|
|||||||
@@ -380,11 +380,7 @@ class WasmSymbols(
|
|||||||
private val wasmExportClass = getIrClass(FqName("kotlin.wasm.WasmExport"))
|
private val wasmExportClass = getIrClass(FqName("kotlin.wasm.WasmExport"))
|
||||||
val wasmExportConstructor by lazy { wasmExportClass.constructors.single() }
|
val wasmExportConstructor by lazy { wasmExportClass.constructors.single() }
|
||||||
|
|
||||||
private val jsRelatedSymbolsIfNonWasi =
|
private val jsRelatedSymbolsIfNonWasi = if (context.isWasmJsTarget) JsRelatedSymbols() else null
|
||||||
when (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.JS) {
|
|
||||||
true -> JsRelatedSymbols()
|
|
||||||
else -> null
|
|
||||||
}
|
|
||||||
|
|
||||||
val jsRelatedSymbols get() = jsRelatedSymbolsIfNonWasi ?: error("Cannot access to js related std in wasi mode")
|
val jsRelatedSymbols get() = jsRelatedSymbolsIfNonWasi ?: error("Cannot access to js related std in wasi mode")
|
||||||
|
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ fun compileWasm(
|
|||||||
val byteArray = os.toByteArray()
|
val byteArray = os.toByteArray()
|
||||||
val jsUninstantiatedWrapper: String?
|
val jsUninstantiatedWrapper: String?
|
||||||
val jsWrapper: String
|
val jsWrapper: String
|
||||||
if (backendContext.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.JS) {
|
if (backendContext.isWasmJsTarget) {
|
||||||
jsUninstantiatedWrapper = compiledWasmModule.generateAsyncJsWrapper(
|
jsUninstantiatedWrapper = compiledWasmModule.generateAsyncJsWrapper(
|
||||||
"./$baseFileName.wasm",
|
"./$baseFileName.wasm",
|
||||||
backendContext.jsModuleAndQualifierReferences
|
backendContext.jsModuleAndQualifierReferences
|
||||||
|
|||||||
+1
-1
@@ -59,7 +59,7 @@ class BuiltInsLowering(val context: WasmBackendContext) : FileLoweringPass {
|
|||||||
irBuiltins.eqeqeqSymbol -> {
|
irBuiltins.eqeqeqSymbol -> {
|
||||||
fun callRefIsNull(expr: IrExpression): IrCall {
|
fun callRefIsNull(expr: IrExpression): IrCall {
|
||||||
if (
|
if (
|
||||||
context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI &&
|
!context.isWasmJsTarget &&
|
||||||
expr.type.erasedUpperBound?.isExternal == true
|
expr.type.erasedUpperBound?.isExternal == true
|
||||||
) {
|
) {
|
||||||
error("Unexpected external refs in wasi mode")
|
error("Unexpected external refs in wasi mode")
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ class JsCodeCallsLowering(val context: WasmBackendContext) : FileLoweringPass {
|
|||||||
private val jsRelatedSymbols get() = context.wasmSymbols.jsRelatedSymbols
|
private val jsRelatedSymbols get() = context.wasmSymbols.jsRelatedSymbols
|
||||||
|
|
||||||
override fun lower(irFile: IrFile) {
|
override fun lower(irFile: IrFile) {
|
||||||
if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) return
|
if (!context.isWasmJsTarget) return
|
||||||
irFile.transformDeclarationsFlat { declaration ->
|
irFile.transformDeclarationsFlat { declaration ->
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is IrSimpleFunction -> transformFunction(declaration)
|
is IrSimpleFunction -> transformFunction(declaration)
|
||||||
|
|||||||
+2
-2
@@ -50,7 +50,7 @@ class JsInteropFunctionsLowering(val context: WasmBackendContext) : DeclarationT
|
|||||||
lateinit var currentParent: IrDeclarationParent
|
lateinit var currentParent: IrDeclarationParent
|
||||||
|
|
||||||
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
|
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
|
||||||
if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) return null
|
if (!context.isWasmJsTarget) return null
|
||||||
|
|
||||||
if (declaration.isFakeOverride) return null
|
if (declaration.isFakeOverride) return null
|
||||||
if (declaration !is IrSimpleFunction) return null
|
if (declaration !is IrSimpleFunction) return null
|
||||||
@@ -923,7 +923,7 @@ internal fun StringBuilder.appendParameterList(size: Int, name: String = "p", is
|
|||||||
*/
|
*/
|
||||||
class JsInteropFunctionCallsLowering(val context: WasmBackendContext) : BodyLoweringPass {
|
class JsInteropFunctionCallsLowering(val context: WasmBackendContext) : BodyLoweringPass {
|
||||||
override fun lower(irBody: IrBody, container: IrDeclaration) {
|
override fun lower(irBody: IrBody, container: IrDeclaration) {
|
||||||
if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) return
|
if (!context.isWasmJsTarget) return
|
||||||
irBody.transformChildrenVoid(object : IrElementTransformerVoid() {
|
irBody.transformChildrenVoid(object : IrElementTransformerVoid() {
|
||||||
override fun visitCall(expression: IrCall): IrExpression {
|
override fun visitCall(expression: IrCall): IrExpression {
|
||||||
expression.transformChildrenVoid()
|
expression.transformChildrenVoid()
|
||||||
|
|||||||
+1
-1
@@ -133,7 +133,7 @@ internal class UnhandledExceptionLowering(val context: WasmBackendContext) : Fil
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun lower(irFile: IrFile) {
|
override fun lower(irFile: IrFile) {
|
||||||
if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) return
|
if (!context.isWasmJsTarget) return
|
||||||
for (declaration in irFile.declarations) {
|
for (declaration in irFile.declarations) {
|
||||||
if (declaration is IrFunction && declaration.isExported()) {
|
if (declaration is IrFunction && declaration.isExported()) {
|
||||||
processExportFunction(declaration)
|
processExportFunction(declaration)
|
||||||
|
|||||||
+2
-2
@@ -215,7 +215,7 @@ class WasmBaseTypeOperatorTransformer(val context: WasmBackendContext) : IrEleme
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (fromClass.isExternal && !toClass.isExternal) {
|
if (fromClass.isExternal && !toClass.isExternal) {
|
||||||
if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) {
|
if (!context.isWasmJsTarget) {
|
||||||
TODO("Implement externalize adapter for wasi mode")
|
TODO("Implement externalize adapter for wasi mode")
|
||||||
}
|
}
|
||||||
val narrowingToAny = builder.irCall(jsToKotlinAnyAdapter).also {
|
val narrowingToAny = builder.irCall(jsToKotlinAnyAdapter).also {
|
||||||
@@ -226,7 +226,7 @@ class WasmBaseTypeOperatorTransformer(val context: WasmBackendContext) : IrEleme
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (toClass.isExternal && !fromClass.isExternal) {
|
if (toClass.isExternal && !fromClass.isExternal) {
|
||||||
if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) {
|
if (!context.isWasmJsTarget) {
|
||||||
TODO("Implement internalize adapter for wasi mode")
|
TODO("Implement internalize adapter for wasi mode")
|
||||||
}
|
}
|
||||||
return builder.irCall(kotlinToJsAnyAdapter).also {
|
return builder.irCall(kotlinToJsAnyAdapter).also {
|
||||||
|
|||||||
+3
-3
@@ -19,9 +19,9 @@ import org.jetbrains.kotlin.name.FqName
|
|||||||
* Mark declarations from [exportedFqNames] with @JsExport annotation
|
* Mark declarations from [exportedFqNames] with @JsExport annotation
|
||||||
*/
|
*/
|
||||||
fun markExportedDeclarations(context: WasmBackendContext, irFile: IrFile, exportedFqNames: Set<FqName>) {
|
fun markExportedDeclarations(context: WasmBackendContext, irFile: IrFile, exportedFqNames: Set<FqName>) {
|
||||||
val exportConstructor = when (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS)) {
|
val exportConstructor = when (context.isWasmJsTarget) {
|
||||||
WasmTarget.WASI -> context.wasmSymbols.wasmExportConstructor
|
true -> context.wasmSymbols.jsRelatedSymbols.jsExportConstructor
|
||||||
else -> context.wasmSymbols.jsRelatedSymbols.jsExportConstructor
|
else -> context.wasmSymbols.wasmExportConstructor
|
||||||
}
|
}
|
||||||
|
|
||||||
for (declaration in irFile.declarations) {
|
for (declaration in irFile.declarations) {
|
||||||
|
|||||||
Reference in New Issue
Block a user