Skip to content

Commit 31ae44b

Browse files
alex28shSpace Team
authored andcommitted
[Wasm] array_new_data with body for bootstrap (KT-79357)
1 parent 34725e2 commit 31ae44b

File tree

6 files changed

+24
-7
lines changed

6 files changed

+24
-7
lines changed

compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmSymbols.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ class WasmSymbols(
212212
val refCastNull = getInternalFunction("wasm_ref_cast_null")
213213
val wasmArrayCopy = getInternalFunction("wasm_array_copy")
214214
val wasmArrayNewData0 = getInternalFunction("array_new_data0")
215-
val wasmArrayNewData1 = getInternalFunction("array_new_data1")
215+
val wasmArrayNewData = getInternalFunction("array_new_data")
216216
val wasmArrayNewData0CharArray = maybeGetFunction("array_new_data0_char_array", wasmInternalFqName)
217217

218218
val intToLong = getInternalFunction("wasm_i64_extend_i32_s")

compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,11 +1148,15 @@ class BodyGenerator(
11481148
body.buildInstr(WasmOp.ARRAY_NEW_DATA, location, arrayGcType, WasmImmediate.DataIdx(0))
11491149
}
11501150

1151-
wasmSymbols.wasmArrayNewData1 -> {
1151+
wasmSymbols.wasmArrayNewData -> {
11521152
val arrayGcType = WasmImmediate.GcType(
11531153
wasmFileCodegenContext.referenceGcType(call.typeArguments[0]!!.getRuntimeClass(irBuiltIns).symbol)
11541154
)
1155-
body.buildInstr(WasmOp.ARRAY_NEW_DATA, location, arrayGcType, WasmImmediate.DataIdx(1))
1155+
val dataIdx = (call.arguments[2] as? IrConst)?.value as? Int ?: error("Data idx argument should be int")
1156+
// if (dataIdxIrConst.kind != IrConstKind.Int) error("")
1157+
// val dataIdx = dataIdxIrConst.value as Int
1158+
body.buildDrop(location)
1159+
body.buildInstr(WasmOp.ARRAY_NEW_DATA, location, arrayGcType, WasmImmediate.DataIdx(dataIdx))
11561160
}
11571161

11581162
wasmSymbols.wasmArrayNewData0CharArray -> {

compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/WasmTypeOperatorLowering.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,8 @@ class WasmBaseTypeOperatorTransformer(val context: WasmBackendContext) : IrEleme
328328
is IrCall -> {
329329
val function = expression.symbol.owner
330330

331+
if (function.symbol == context.wasmSymbols.wasmArrayNewData) return false
332+
331333
val packageFragment = function.getPackageFragment()
332334
if (context.getExcludedPackageFragment(packageFragment.packageFqName) == packageFragment) return false
333335

libraries/stdlib/wasm/internal/kotlin/wasm/internal/Runtime.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ internal fun stringGetPoolSize(): Int =
128128
@OptIn(ExperimentalStdlibApi::class)
129129
@EagerInitialization
130130
internal val stringAddressesAndLengths: WasmLongArray =
131-
array_new_data1<WasmLongArray>(0, stringGetPoolSize())
131+
array_new_data<WasmLongArray>(0, stringGetPoolSize(), 1)
132132

133133
// This initializer is a special case in FieldInitializersLowering
134134
@Suppress("DEPRECATION")

libraries/stdlib/wasm/internal/kotlin/wasm/internal/WasmInstructions.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ internal fun <T> wasm_array_copy(destination: T, destinationIndex: Int, source:
3232
internal fun <T> array_new_data0(address: Int, length: Int): T =
3333
implementedAsIntrinsic
3434

35-
internal fun <T> array_new_data1(address: Int, length: Int): T =
36-
implementedAsIntrinsic
37-
3835
internal fun array_new_data0_char_array(address: Int, length: Int): WasmCharArray =
3936
implementedAsIntrinsic
4037

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* Copyright 2010-2025 JetBrains s.r.o. and Kotlin Programming Language contributors.
3+
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
4+
*/
5+
6+
package kotlin.wasm.internal
7+
8+
// TODO: move to WasmInstructions and remove upper bound and implemntation
9+
@Suppress("warnings")
10+
internal fun <T : WasmLongArray> array_new_data(address: Int, length: Int, dataIdx: Int): T {
11+
return WasmLongArray(0) as T
12+
}
13+
//@ExcludedFromCodegen
14+
//internal fun <T> array_new_data(address: Int, length: Int, dataIdx: Int): T = implementedAsIntrinsic

0 commit comments

Comments
 (0)