Small optimization

This commit is contained in:
Mikhael Bogdanov
2021-09-01 15:23:56 +02:00
committed by Space
parent f9b5414453
commit cb7a59ea0e
2 changed files with 6 additions and 5 deletions
@@ -38,7 +38,7 @@ class StringConcatGenerator(val mode: JvmStringConcat, val mv: InstructionAdapte
value.encodedUTF8Size()
}
fun fitEncodingLimit() = encodedUTF8Size <= STRING_UTF8_ENCODING_BYTE_LIMIT
fun fitEncodingLimit() = if (value.isDefinitelyFitEncodingLimit()) true else encodedUTF8Size <= STRING_UTF8_ENCODING_BYTE_LIMIT
}
private val items = arrayListOf<Item>()
@@ -682,11 +682,11 @@ fun linkedLabel(): Label = LabelNode().linkWithLabel().label
// Strings in constant pool contain at most 2^16-1 = 65535 bytes.
const val STRING_UTF8_ENCODING_BYTE_LIMIT: Int = 65535
fun splitStringConstant(value: String): List<String> {
val length = value.length
//Each CHAR could be encoded maximum in 3 bytes
fun String.isDefinitelyFitEncodingLimit() = length <= STRING_UTF8_ENCODING_BYTE_LIMIT / 3
//Each CHAR could be encoded maximum in 3 bytes
return if (length <= STRING_UTF8_ENCODING_BYTE_LIMIT / 3) {
fun splitStringConstant(value: String): List<String> {
return if (value.isDefinitelyFitEncodingLimit()) {
listOf(value)
} else {
val result = arrayListOf<String>()
@@ -696,6 +696,7 @@ fun splitStringConstant(value: String): List<String> {
var accumulatedSize = 0
var charOffsetInString = 0
var lastStringBeginning = 0
val length = value.length
while (charOffsetInString < length) {
val charCode = value[charOffsetInString].code
val encodedCharSize = when {