From a32b86d016fa82cd58531d28b4333d8abba11f3f Mon Sep 17 00:00:00 2001 From: Svyatoslav Kuzmich Date: Wed, 8 Sep 2021 13:05:42 +0300 Subject: [PATCH] [Wasm] Simple support for external classes and interfaces * Map these types to Wasm externref * Don't generate any declaration code for now Casting and accessing members is not supported yet --- .../kotlin/backend/wasm/ir2wasm/DeclarationGenerator.kt | 2 ++ .../jetbrains/kotlin/backend/wasm/ir2wasm/TypeTransformer.kt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/DeclarationGenerator.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/DeclarationGenerator.kt index 2c4d1864e75..a006aef7f5b 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/DeclarationGenerator.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/DeclarationGenerator.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.backend.js.utils.isJsExport import org.jetbrains.kotlin.ir.backend.js.utils.findUnitGetInstanceFunction import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget import org.jetbrains.kotlin.ir.declarations.* @@ -173,6 +174,7 @@ class DeclarationGenerator(val context: WasmModuleCodegenContext) : IrElementVis override fun visitClass(declaration: IrClass) { if (declaration.isAnnotationClass) return + if (declaration.isExternal) return val symbol = declaration.symbol diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/TypeTransformer.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/TypeTransformer.kt index d59cf3a722f..52edad3f133 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/TypeTransformer.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/TypeTransformer.kt @@ -90,7 +90,7 @@ class WasmTypeTransformer( val klass = this.getClass() val ic = context.backendContext.inlineClassesUtils.getInlinedClass(this) - if (klass != null && klass.hasWasmForeignAnnotation()) { + if (klass != null && (klass.hasWasmForeignAnnotation() || klass.isExternal)) { WasmExternRef } else if (ic != null) { context.backendContext.inlineClassesUtils.getInlineClassUnderlyingType(ic).toWasmValueType()