Skip to content

Commit 1e9bf5c

Browse files
bashorSpace Team
authored andcommitted
[Wasm] Temporarily return old versions of some runtime functions and call them when wasmAbiVersion is < 1
1 parent 474b526 commit 1e9bf5c

File tree

4 files changed

+37
-6
lines changed

4 files changed

+37
-6
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1556,7 +1556,7 @@ class BodyGenerator(
15561556
}
15571557

15581558
companion object {
1559-
val wasmAbiVersion = WasmSymbol(0)
1559+
val wasmAbiVersion = WasmSymbol(1)
15601560
val anyVtableFieldId = WasmSymbol(0)
15611561
val anyITableFieldId = WasmSymbol(1)
15621562
val anyRttiFieldId = WasmSymbol(2)

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,12 @@ class DeclarationGenerator(
390390
buildConstI32Symbol(packageNamePoolId, location)
391391
buildConstI32Symbol(simpleNamePoolId, location)
392392

393+
// TODO remove after bootstrap
394+
buildConstI32(0, location)
395+
buildConstI32(0, location)
396+
buildConstI32(0, location)
397+
buildConstI32(0, location)
398+
393399
buildConstI64(wasmFileCodegenContext.referenceTypeId(symbol), location)
394400

395401
val isAnonymousFlag = if (klass.isAnonymousObject) TYPE_INFO_FLAG_ANONYMOUS_CLASS else 0

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,13 @@ class WasmCompiledModuleFragment(
236236
WasmStructFieldDeclaration("superClassRtti", WasmRefNullType(WasmHeapType.Type(rttiTypeDeclarationSymbol)), false),
237237
WasmStructFieldDeclaration("packageNamePoolId", WasmI32, false),
238238
WasmStructFieldDeclaration("simpleNamePoolId", WasmI32, false),
239+
240+
// TODO remove after bootstrap
241+
WasmStructFieldDeclaration("dummy0", WasmI32, false),
242+
WasmStructFieldDeclaration("dummy1", WasmI32, false),
243+
WasmStructFieldDeclaration("dummy2", WasmI32, false),
244+
WasmStructFieldDeclaration("dummy3", WasmI32, false),
245+
239246
WasmStructFieldDeclaration("klassId", WasmI64, false),
240247
WasmStructFieldDeclaration("typeInfoFlag", WasmI32, false),
241248
),

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

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ internal fun getQualifiedName(rtti: kotlin.wasm.internal.reftypes.structref): St
5959
}
6060

6161
internal fun getPackageName(rtti: kotlin.wasm.internal.reftypes.structref): String {
62-
val flagFitsOneBitQualifier = wasmGetRttiIntField(5, rtti) and TYPE_INFO_FLAG_FITS_LATIN1_QUALIFIER
62+
if (getWasmAbiVersion() < 1) return getPackageName0(rtti)
63+
64+
val flagFitsOneBitQualifier = wasmGetRttiIntField(9, rtti) and TYPE_INFO_FLAG_FITS_LATIN1_QUALIFIER
6365
val poolId = wasmGetRttiIntField(2, rtti)
6466
return if (flagFitsOneBitQualifier != 0)
6567
stringLiteralLatin1(poolId)
@@ -68,7 +70,9 @@ internal fun getPackageName(rtti: kotlin.wasm.internal.reftypes.structref): Stri
6870
}
6971

7072
internal fun getSimpleName(rtti: kotlin.wasm.internal.reftypes.structref): String {
71-
val flagFitsOneBitSimpleName = wasmGetRttiIntField(5, rtti) and TYPE_INFO_FLAG_FITS_LATIN1_SIMPLE_NAME
73+
if (getWasmAbiVersion() < 1) return getSimpleName0(rtti)
74+
75+
val flagFitsOneBitSimpleName = wasmGetRttiIntField(9, rtti) and TYPE_INFO_FLAG_FITS_LATIN1_SIMPLE_NAME
7276
val poolId = wasmGetRttiIntField(3, rtti)
7377
return if (flagFitsOneBitSimpleName != 0)
7478
stringLiteralLatin1(poolId)
@@ -77,13 +81,13 @@ internal fun getSimpleName(rtti: kotlin.wasm.internal.reftypes.structref): Strin
7781
}
7882

7983
internal fun getTypeId(rtti: kotlin.wasm.internal.reftypes.structref): Long =
80-
wasmGetRttiLongField(4, rtti)
84+
wasmGetRttiLongField(8, rtti)
8185

8286
internal fun isAnonymousClass(rtti: kotlin.wasm.internal.reftypes.structref): Boolean =
83-
(wasmGetRttiIntField(5, rtti) and TYPE_INFO_FLAG_ANONYMOUS_CLASS) != 0
87+
(wasmGetRttiIntField(9, rtti) and TYPE_INFO_FLAG_ANONYMOUS_CLASS) != 0
8488

8589
internal fun isLocalClass(rtti: kotlin.wasm.internal.reftypes.structref): Boolean =
86-
(wasmGetRttiIntField(5, rtti) and TYPE_INFO_FLAG_LOCAL_CLASS) != 0
90+
(wasmGetRttiIntField(9, rtti) and TYPE_INFO_FLAG_LOCAL_CLASS) != 0
8791

8892
@Suppress("UNUSED_PARAMETER")
8993
@ExcludedFromCodegen
@@ -121,3 +125,17 @@ internal fun wasmGetRttiLongField(intFieldIndex: Int, obj: kotlin.wasm.internal.
121125
@ExcludedFromCodegen
122126
internal fun wasmGetRttiSuperClass(rtti: kotlin.wasm.internal.reftypes.structref): kotlin.wasm.internal.reftypes.structref? =
123127
implementedAsIntrinsic
128+
129+
// TODO remove following *0 declarations after bootstrap
130+
131+
internal fun getPackageName0(rtti: kotlin.wasm.internal.reftypes.structref): String = stringLiteral(
132+
start = wasmGetRttiIntField(2, rtti),
133+
length = wasmGetRttiIntField(3, rtti),
134+
poolId = wasmGetRttiIntField(4, rtti),
135+
)
136+
137+
internal fun getSimpleName0(rtti: kotlin.wasm.internal.reftypes.structref): String = stringLiteral(
138+
start = wasmGetRttiIntField(5, rtti),
139+
length = wasmGetRttiIntField(6, rtti),
140+
poolId = wasmGetRttiIntField(7, rtti),
141+
)

0 commit comments

Comments
 (0)