Set type of inliner's fake variable slots to int by storing 0
Otherwise, D8 drops the whole LVT. #KT-28309 Fixed
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
class Range<T>(val min: T, val max: T)
|
||||
|
||||
class Sprite
|
||||
|
||||
class A {
|
||||
private fun calcSpriteSizeRange(layoutSize: Int,
|
||||
sprites: Map<Long, Sprite>,
|
||||
minMargin: Int,
|
||||
range: Range<Int>)
|
||||
: Pair<Range<Int>, Int> {
|
||||
val count = sprites.count()
|
||||
var spriteBounds = layoutSize / count.toFloat()
|
||||
require(spriteBounds * count <= layoutSize) {
|
||||
val result = spriteBounds * count <= layoutSize
|
||||
"Algorithm incorrect: $spriteBounds * " +
|
||||
"$count == $result <= $layoutSize"
|
||||
}
|
||||
val adjustedMargin = minMargin + (minMargin / count.toFloat())
|
||||
spriteBounds -= adjustedMargin
|
||||
var size = spriteBounds
|
||||
require((size * count) + minMargin * (count + 1)
|
||||
<= layoutSize) {
|
||||
val result = size * count + minMargin * (count + 1)
|
||||
"Algorithm incorrect: $size * $count + " +
|
||||
"$minMargin * ($count + 1) == $result <= $layoutSize"
|
||||
}
|
||||
size = kotlin.math.min(size, range.max.toFloat())
|
||||
require(size > 0) {
|
||||
"Maximum palantir size ${size.toInt()} > 0."
|
||||
}
|
||||
val minSize =
|
||||
if (range.min > size) {
|
||||
size
|
||||
} else {
|
||||
range.min.toFloat()
|
||||
}
|
||||
val margin = (layoutSize - (size * count)) / (count + 1)
|
||||
val adjustedRange = Range(minSize.toInt(), size.toInt())
|
||||
val requiredSize =
|
||||
calcRequiredLayoutSize(count, adjustedRange.max, margin.toInt())
|
||||
require(requiredSize <= layoutSize) {
|
||||
"requiredSize <= layoutSize -> " +
|
||||
"$requiredSize <= $layoutSize"
|
||||
}
|
||||
|
||||
return Pair(adjustedRange, margin.toInt())
|
||||
}
|
||||
}
|
||||
|
||||
fun calcRequiredLayoutSize(count: Int, max: Int, toInt: Int) = 0
|
||||
|
||||
// 2 ISTORE 10
|
||||
Reference in New Issue
Block a user