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 53963790205..22e3594e185 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 @@ -450,6 +450,7 @@ fun generateDefaultInitializerForType(type: WasmType, g: WasmExpressionBuilder) WasmF64 -> g.buildConstF64(0.0) is WasmRefNullType -> g.buildRefNull(type.heapType) is WasmAnyRef -> g.buildRefNull(WasmHeapType.Simple.Any) + is WasmExternRef -> g.buildRefNull(WasmHeapType.Simple.Extern) WasmUnreachableType -> error("Unreachable type can't be initialized") else -> error("Unknown value type ${type.name}") } diff --git a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/Types.kt b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/Types.kt index 7c361a87c0f..769db51fde1 100644 --- a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/Types.kt +++ b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/Types.kt @@ -22,7 +22,8 @@ object WasmV128 : WasmType("v128", -0x5) object WasmI8 : WasmType("i8", -0x6) object WasmI16 : WasmType("i16", -0x7) object WasmFuncRef : WasmType("funcref", -0x10) -object WasmAnyRef : WasmType("anyref", -0x11) +object WasmExternRef : WasmType("externref", -0x11) +object WasmAnyRef : WasmType("anyref", -0x12) object WasmEqRef : WasmType("eqref", -0x13) data class WasmRefNullType(val heapType: WasmHeapType) : WasmType("ref null", -0x14) @@ -44,7 +45,8 @@ sealed class WasmHeapType { sealed class Simple(val name: String, val code: Byte) : WasmHeapType() { object Func : Simple("func", -0x10) - object Any : Simple("any", -0x11) + object Extern : Simple("extern", -0x11) + object Any : Simple("any", -0x12) object Eq : Simple("eq", -0x13) @Suppress("unused") @@ -71,5 +73,6 @@ fun WasmType.getHeapType(): WasmHeapType = is WasmEqRef -> WasmHeapType.Simple.Eq is WasmAnyRef -> WasmHeapType.Simple.Any is WasmFuncRef -> WasmHeapType.Simple.Func + is WasmExternRef -> WasmHeapType.Simple.Extern else -> error("Unknown heap type for type $this") } diff --git a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/convertors/WasmBinaryToIR.kt b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/convertors/WasmBinaryToIR.kt index c30a15057ee..44ef6cab879 100644 --- a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/convertors/WasmBinaryToIR.kt +++ b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/convertors/WasmBinaryToIR.kt @@ -468,6 +468,7 @@ class WasmBinaryToIR(val b: MyByteReader) { WasmI16, WasmFuncRef, WasmAnyRef, + WasmExternRef, WasmEqRef ).associateBy { it.code } @@ -490,7 +491,7 @@ class WasmBinaryToIR(val b: MyByteReader) { return when (code.toInt()) { 0x70 -> WasmFuncRef - 0x6F -> WasmAnyRef + 0x6F -> WasmExternRef else -> error("Unsupported heap type ${code.toString(16)}") } } diff --git a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/convertors/WasmIrToText.kt b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/convertors/WasmIrToText.kt index c900836ef23..82bbee2f53a 100644 --- a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/convertors/WasmIrToText.kt +++ b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/convertors/WasmIrToText.kt @@ -453,6 +453,7 @@ class WasmIrToText : SExpressionBuilder() { when (type) { is WasmFuncRef -> appendElement("func") is WasmAnyRef -> appendElement("any") + is WasmExternRef -> appendElement("extern") else -> TODO() } }