[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
This commit is contained in:
Svyatoslav Kuzmich
2021-09-08 13:05:42 +03:00
parent 35a5c9ea71
commit a32b86d016
2 changed files with 3 additions and 1 deletions
@@ -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
@@ -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()