Skip to content

Commit 3742270

Browse files
alex28shSpace Team
authored andcommitted
fixup! [Wasm] latin1 proper renaming (KT-79357)
1 parent 4db9f59 commit 3742270

File tree

8 files changed

+27
-24
lines changed

8 files changed

+27
-24
lines changed

compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/dce/WasmUsefulDeclarationProcessor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ internal class WasmUsefulDeclarationProcessor(
3333
override fun visitConst(expression: IrConst, data: IrDeclaration) = when (expression.kind) {
3434
is IrConstKind.Null -> expression.type.enqueueType(data, "expression type")
3535
is IrConstKind.String -> {
36-
if ((expression.value as String).all { it.code in 0..255 }) {
36+
if ((expression.value as String).fitsLatin1) {
3737
context.wasmSymbols.stringGetLiteralLatin1.owner
3838
.enqueue(data, "String literal intrinsic getter stringGetLiteralLatin1")
3939
} else {

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@ class ConstantDataIntArray(val value: List<WasmSymbol<Int>>) : ConstantDataEleme
7878
override val sizeInBytes: Int = value.size * INT_SIZE_BYTES
7979
}
8080

81-
class ConstantDataCharArray(val value: List<WasmSymbol<Char>>, val fitsOneByte: Int) : ConstantDataElement() {
82-
constructor(value: CharArray, fitsOneByte: Int) : this(value.map { WasmSymbol(it) }, fitsOneByte)
81+
class ConstantDataCharArray(val value: List<WasmSymbol<Char>>, val fitsLatin1: Int) : ConstantDataElement() {
82+
constructor(value: CharArray, fitsLatin1: Int) : this(value.map { WasmSymbol(it) }, fitsLatin1)
8383

8484
override fun toBytes(): ByteArray {
8585
return value
86-
.map { it.owner.toLittleEndianBytes(fitsOneByte != 0) }
86+
.map { it.owner.toLittleEndianBytes(fitsLatin1 != 0) }
8787
.fold(byteArrayOf(), ByteArray::plus)
8888
}
8989

@@ -93,7 +93,7 @@ class ConstantDataCharArray(val value: List<WasmSymbol<Char>>, val fitsOneByte:
9393
}
9494

9595
override val sizeInBytes: Int = value.size *
96-
if (fitsOneByte != 0) BYTE_SIZE_BYTES else CHAR_SIZE_BYTES
96+
if (fitsLatin1 != 0) BYTE_SIZE_BYTES else CHAR_SIZE_BYTES
9797
}
9898

9999
class ConstantDataStruct(val elements: List<ConstantDataElement>) : ConstantDataElement() {
@@ -129,8 +129,8 @@ fun Int.toLittleEndianBytes(): ByteArray {
129129
}
130130
}
131131

132-
fun Char.toLittleEndianBytes(fitsOneByte: Boolean): ByteArray {
133-
if (fitsOneByte) {
132+
fun Char.toLittleEndianBytes(fitsLatin1: Boolean): ByteArray {
133+
if (fitsLatin1) {
134134
return byteArrayOf((this.code and 0xFF).toByte())
135135
}
136136
return byteArrayOf((this.code and 0xFF).toByte(), (this.code ushr Byte.SIZE_BITS).toByte())

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ import org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation
3131

3232
private const val TYPE_INFO_FLAG_ANONYMOUS_CLASS = 1
3333
private const val TYPE_INFO_FLAG_LOCAL_CLASS = 2
34-
private const val TYPE_INFO_FLAG_FITS_ONE_BIT_QUALIFIER = 4
35-
private const val TYPE_INFO_FLAG_FITS_ONE_BIT_SIMPLE_NAME = 8
34+
private const val TYPE_INFO_FLAG_FITS_LATIN1_QUALIFIER = 4
35+
private const val TYPE_INFO_FLAG_FITS_LATIN1_SIMPLE_NAME = 8
3636

3737
class DeclarationGenerator(
3838
private val backendContext: WasmBackendContext,
@@ -394,9 +394,9 @@ class DeclarationGenerator(
394394

395395
val isAnonymousFlag = if (klass.isAnonymousObject) TYPE_INFO_FLAG_ANONYMOUS_CLASS else 0
396396
val isLocalFlag = if (klass.isOriginallyLocalClass) TYPE_INFO_FLAG_LOCAL_CLASS else 0
397-
val fitsOneByteQualifier = if (qualifier.all { it.code in 0..255 }) TYPE_INFO_FLAG_FITS_ONE_BIT_QUALIFIER else 0
398-
val fitsOneByteSimpleName = if (simpleName.all { it.code in 0..255 }) TYPE_INFO_FLAG_FITS_ONE_BIT_SIMPLE_NAME else 0
399-
buildConstI32(isAnonymousFlag or isLocalFlag or fitsOneByteQualifier or fitsOneByteSimpleName, location)
397+
val fitsLatin1Qualifier = if (qualifier.fitsLatin1) TYPE_INFO_FLAG_FITS_LATIN1_QUALIFIER else 0
398+
val fitsLatin1SimpleName = if (simpleName.fitsLatin1) TYPE_INFO_FLAG_FITS_LATIN1_SIMPLE_NAME else 0
399+
buildConstI32(isAnonymousFlag or isLocalFlag or fitsLatin1Qualifier or fitsLatin1SimpleName, location)
400400

401401
buildStructNew(wasmFileCodegenContext.rttiType, location)
402402
}
@@ -622,10 +622,9 @@ fun generateConstExpression(
622622
is IrConstKind.String -> {
623623
val stringValue = expression.value as String
624624
val (_, literalPoolId) = context.referenceStringLiteralAddressAndId(stringValue)
625-
val isLatin = stringValue.all { it.code in 0..255 }
626625
body.commentGroupStart { "const string: \"$stringValue\"" }
627626
body.buildConstI32Symbol(literalPoolId, location)
628-
if (isLatin) {
627+
if (stringValue.fitsLatin1) {
629628
body.buildCall(context.referenceFunction(backendContext.wasmSymbols.stringGetLiteralLatin1), location)
630629
} else {
631630
body.buildCall(context.referenceFunction(backendContext.wasmSymbols.stringGetLiteralUtf16), location)

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.compilationException
99
import org.jetbrains.kotlin.backend.common.serialization.Hash128Bits
1010
import org.jetbrains.kotlin.backend.wasm.WasmBackendContext
1111
import org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment.*
12+
import org.jetbrains.kotlin.backend.wasm.utils.fitsLatin1
1213
import org.jetbrains.kotlin.ir.backend.js.ic.IrICProgramFragment
1314
import org.jetbrains.kotlin.ir.declarations.IrDeclarationWithName
1415
import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment
@@ -560,9 +561,9 @@ class WasmCompiledModuleFragment(
560561
stringAddressAndId[string] = currentStringAddress to currentStringId
561562
addressesAndLengths.add(currentStringAddress.toLong() or (string.length.toLong() shl 32))
562563

563-
val fitsOneByte = if (string.all { it.code in 0..255 }) 1 else 0
564+
val fitsLatin1 = if (string.fitsLatin1) 1 else 0
564565

565-
val constData = ConstantDataCharArray(string.toCharArray(), fitsOneByte)
566+
val constData = ConstantDataCharArray(string.toCharArray(), fitsLatin1)
566567
stringDataSectionBytes += constData.toBytes().toList()
567568
stringDataSectionStart += constData.sizeInBytes
568569
} else {

compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/serialization/WasmDeserializer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -489,8 +489,8 @@ class WasmDeserializer(inputStream: InputStream, private val skipLocalNames: Boo
489489

490490
private fun deserializeConstantDataCharArray(): ConstantDataCharArray {
491491
val value = deserializeList { deserializeSymbol { Char(deserializeInt()) } }
492-
val fitsOneByte = deserializeInt()
493-
return ConstantDataCharArray(value, fitsOneByte)
492+
val fitsLatin1 = deserializeInt()
493+
return ConstantDataCharArray(value, fitsLatin1)
494494
}
495495

496496
private fun deserializeConstantDataCharField(): ConstantDataCharField {

compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/serialization/WasmSerializer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ class WasmSerializer(outputStream: OutputStream) {
515515

516516
private fun serializeConstantDataCharArray(constantDataCharArray: ConstantDataCharArray) {
517517
serializeList(constantDataCharArray.value) { serializeWasmSymbolReadOnly(it) { b.writeUInt32(it.code.toUInt()) } }
518-
serializeInt(constantDataCharArray.fitsOneByte)
518+
serializeInt(constantDataCharArray.fitsLatin1)
519519
}
520520

521521
private fun serializeConstantDataCharField(constantDataCharField: ConstantDataCharField) {

compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/utils/Utils.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,7 @@ internal val IrClass.isAbstractOrSealed
3434
internal fun getFunctionalInterfaceSlot(iFace: IrClass): Int {
3535
check(iFace.symbol.isFunction())
3636
return if (iFace.defaultType.isFunctionMarker()) return 0 else iFace.typeParameters.size
37-
}
37+
}
38+
39+
internal val String.fitsLatin1
40+
get() = this.all { it.code in 0..255 }

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ internal class TypeInfoData(val typeId: Long, val packageName: String, val typeN
1111

1212
private const val TYPE_INFO_FLAG_ANONYMOUS_CLASS = 1
1313
private const val TYPE_INFO_FLAG_LOCAL_CLASS = 2
14-
private const val TYPE_INFO_FLAG_FITS_ONE_BIT_QUALIFIER = 4
15-
private const val TYPE_INFO_FLAG_FITS_ONE_BIT_SIMPLE_NAME = 8
14+
private const val TYPE_INFO_FLAG_FITS_LATIN1_QUALIFIER = 4
15+
private const val TYPE_INFO_FLAG_FITS_LATIN1_SIMPLE_NAME = 8
1616

1717
@Suppress("UNUSED_PARAMETER")
1818
@WasmArrayOf(Long::class, isNullable = false, isMutable = false)
@@ -59,15 +59,15 @@ 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_ONE_BIT_QUALIFIER
62+
val flagFitsOneBitQualifier = wasmGetRttiIntField(5, rtti) and TYPE_INFO_FLAG_FITS_LATIN1_QUALIFIER
6363
return if (flagFitsOneBitQualifier != 0)
6464
stringLiteralLatin1(wasmGetRttiIntField(2, rtti))
6565
else
6666
stringLiteralUtf16(wasmGetRttiIntField(2, rtti))
6767
}
6868

6969
internal fun getSimpleName(rtti: kotlin.wasm.internal.reftypes.structref): String {
70-
val flagFitsOneBitSimpleName = wasmGetRttiIntField(5, rtti) and TYPE_INFO_FLAG_FITS_ONE_BIT_SIMPLE_NAME
70+
val flagFitsOneBitSimpleName = wasmGetRttiIntField(5, rtti) and TYPE_INFO_FLAG_FITS_LATIN1_SIMPLE_NAME
7171
return if (flagFitsOneBitSimpleName != 0)
7272
stringLiteralLatin1(wasmGetRttiIntField(3, rtti))
7373
else

0 commit comments

Comments
 (0)