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() 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>() 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. // Strings in constant pool contain at most 2^16-1 = 65535 bytes.
const val STRING_UTF8_ENCODING_BYTE_LIMIT: Int = 65535 const val STRING_UTF8_ENCODING_BYTE_LIMIT: Int = 65535
fun splitStringConstant(value: String): List<String> { //Each CHAR could be encoded maximum in 3 bytes
val length = value.length fun String.isDefinitelyFitEncodingLimit() = length <= STRING_UTF8_ENCODING_BYTE_LIMIT / 3
//Each CHAR could be encoded maximum in 3 bytes fun splitStringConstant(value: String): List<String> {
return if (length <= STRING_UTF8_ENCODING_BYTE_LIMIT / 3) { return if (value.isDefinitelyFitEncodingLimit()) {
listOf(value) listOf(value)
} else { } else {
val result = arrayListOf<String>() val result = arrayListOf<String>()
@@ -696,6 +696,7 @@ fun splitStringConstant(value: String): List<String> {
var accumulatedSize = 0 var accumulatedSize = 0
var charOffsetInString = 0 var charOffsetInString = 0
var lastStringBeginning = 0 var lastStringBeginning = 0
val length = value.length
while (charOffsetInString < length) { while (charOffsetInString < length) {
val charCode = value[charOffsetInString].code val charCode = value[charOffsetInString].code
val encodedCharSize = when { val encodedCharSize = when {