[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:
+2
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
|||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.ir.IrBuiltIns
|
import org.jetbrains.kotlin.ir.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
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.findUnitGetInstanceFunction
|
||||||
import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget
|
import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
@@ -173,6 +174,7 @@ class DeclarationGenerator(val context: WasmModuleCodegenContext) : IrElementVis
|
|||||||
|
|
||||||
override fun visitClass(declaration: IrClass) {
|
override fun visitClass(declaration: IrClass) {
|
||||||
if (declaration.isAnnotationClass) return
|
if (declaration.isAnnotationClass) return
|
||||||
|
if (declaration.isExternal) return
|
||||||
val symbol = declaration.symbol
|
val symbol = declaration.symbol
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -90,7 +90,7 @@ class WasmTypeTransformer(
|
|||||||
val klass = this.getClass()
|
val klass = this.getClass()
|
||||||
val ic = context.backendContext.inlineClassesUtils.getInlinedClass(this)
|
val ic = context.backendContext.inlineClassesUtils.getInlinedClass(this)
|
||||||
|
|
||||||
if (klass != null && klass.hasWasmForeignAnnotation()) {
|
if (klass != null && (klass.hasWasmForeignAnnotation() || klass.isExternal)) {
|
||||||
WasmExternRef
|
WasmExternRef
|
||||||
} else if (ic != null) {
|
} else if (ic != null) {
|
||||||
context.backendContext.inlineClassesUtils.getInlineClassUnderlyingType(ic).toWasmValueType()
|
context.backendContext.inlineClassesUtils.getInlineClassUnderlyingType(ic).toWasmValueType()
|
||||||
|
|||||||
Reference in New Issue
Block a user