[Wasm] replace internal StringBuilder usages(KT-83156 K/Wasm)
diff --git a/libraries/stdlib/wasm/src/kotlin/text/FloatingPointParser.kt b/libraries/stdlib/wasm/src/kotlin/text/FloatingPointParser.kt
index 90235fe..94b5125 100644
--- a/libraries/stdlib/wasm/src/kotlin/text/FloatingPointParser.kt
+++ b/libraries/stdlib/wasm/src/kotlin/text/FloatingPointParser.kt
@@ -17,13 +17,14 @@
}
}
- fun parseNumber(sb: StringBuilder) {
+ fun parseNumber(): String {
+ val startIndex = index
while (index <= string.lastIndex) {
val ch = string[index]
if (ch !in '0'..'9') break
- sb.append(string[index])
index++
}
+ return string.substring(startIndex, index)
}
fun parseSign(): Boolean {
@@ -85,17 +86,17 @@
return if (!isNegative) Double.POSITIVE_INFINITY else Double.NEGATIVE_INFINITY
}
- val numberBuilder = StringBuilder()
- parseNumber(numberBuilder)
+ var numberBuilder = parseNumber()
var scale = numberBuilder.length
- if (parseDot()) parseNumber(numberBuilder)
+ if (parseDot()) {
+ numberBuilder = numberBuilder.plus(parseNumber())
+ }
if (numberBuilder.isEmpty()) numberFormatError(string)
- val numberString = numberBuilder.toString()
+ val numberString = numberBuilder
if (parseE()) {
- numberBuilder.clear()
val isExponentNegative = parseSign()
- parseNumber(numberBuilder)
+ numberBuilder = parseNumber()
if (numberBuilder.isEmpty()) numberFormatError(string)
parseUnsignificants()
if (index != string.length) numberFormatError(string)
@@ -104,7 +105,7 @@
return if (isNegative) -0.0 else 0.0
}
- val exponentScale = numberBuilder.toString().toIntOrNull() ?: run {
+ val exponentScale = numberBuilder.toIntOrNull() ?: run {
return if (isExponentNegative) {
if (isNegative) -0.0 else 0.0
} else {
diff --git a/libraries/stdlib/wasm/src/kotlin/text/StringsWasm.kt b/libraries/stdlib/wasm/src/kotlin/text/StringsWasm.kt
index 172fe4d..05d5f48 100644
--- a/libraries/stdlib/wasm/src/kotlin/text/StringsWasm.kt
+++ b/libraries/stdlib/wasm/src/kotlin/text/StringsWasm.kt
@@ -369,18 +369,16 @@
val oldValueLength = oldValue.length
val searchStep = oldValueLength.coerceAtLeast(1)
- val newLengthHint = length - oldValueLength + newValue.length
- if (newLengthHint < 0) throw OutOfMemoryError()
- val stringBuilder = StringBuilder(newLengthHint)
+ var stringBuilder = ""
var i = 0
do {
- stringBuilder.append(this, i, occurrenceIndex).append(newValue)
+ stringBuilder = stringBuilder.plus(this.substring(i, occurrenceIndex)).plus(newValue)
i = occurrenceIndex + oldValueLength
if (occurrenceIndex >= length) break
occurrenceIndex = indexOf(oldValue, occurrenceIndex + searchStep, ignoreCase)
} while (occurrenceIndex > 0)
- return stringBuilder.append(this, i, length).toString()
+ return stringBuilder.plus(this.substring(i, length))
}
}
diff --git a/libraries/stdlib/wasm/src/kotlin/text/utf8Encoding.kt b/libraries/stdlib/wasm/src/kotlin/text/utf8Encoding.kt
index c20dac6..8e5582d 100644
--- a/libraries/stdlib/wasm/src/kotlin/text/utf8Encoding.kt
+++ b/libraries/stdlib/wasm/src/kotlin/text/utf8Encoding.kt
@@ -222,52 +222,51 @@
require(startIndex >= 0 && endIndex <= bytes.size && startIndex <= endIndex)
var byteIndex = startIndex
- val stringBuilder = StringBuilder()
+ var stringBuilder = ""
while (byteIndex < endIndex) {
val byte = bytes[byteIndex++].toInt()
when {
byte >= 0 ->
- stringBuilder.append(byte.toChar())
+ stringBuilder = stringBuilder.plus(byte.toChar().toString())
byte shr 5 == -2 -> {
val code = codePointFrom2(bytes, byte, byteIndex, endIndex, throwOnMalformed)
if (code <= 0) {
- stringBuilder.append(REPLACEMENT_CHAR)
+ stringBuilder = stringBuilder.plus(REPLACEMENT_CHAR.toString())
byteIndex += -code
} else {
- stringBuilder.append(code.toChar())
+ stringBuilder = stringBuilder.plus(code.toChar().toString())
byteIndex += 1
}
}
byte shr 4 == -2 -> {
val code = codePointFrom3(bytes, byte, byteIndex, endIndex, throwOnMalformed)
if (code <= 0) {
- stringBuilder.append(REPLACEMENT_CHAR)
+ stringBuilder = stringBuilder.plus(REPLACEMENT_CHAR.toString())
byteIndex += -code
} else {
- stringBuilder.append(code.toChar())
+ stringBuilder = stringBuilder.plus(code.toChar().toString())
byteIndex += 2
}
}
byte shr 3 == -2 -> {
val code = codePointFrom4(bytes, byte, byteIndex, endIndex, throwOnMalformed)
if (code <= 0) {
- stringBuilder.append(REPLACEMENT_CHAR)
+ stringBuilder = stringBuilder.plus(REPLACEMENT_CHAR.toString())
byteIndex += -code
} else {
val high = (code - 0x10000) shr 10 or 0xD800
val low = (code and 0x3FF) or 0xDC00
- stringBuilder.append(high.toChar())
- stringBuilder.append(low.toChar())
+ stringBuilder = stringBuilder.plus(high.toChar().toString())
+ stringBuilder = stringBuilder.plus(low.toChar().toString())
byteIndex += 3
}
}
else -> {
val _ = malformed(0, byteIndex, throwOnMalformed)
- stringBuilder.append(REPLACEMENT_CHAR)
+ stringBuilder = stringBuilder.plus(REPLACEMENT_CHAR.toString())
}
}
}
-
- return stringBuilder.toString()
+ return stringBuilder
}