[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 }