Intrinsify some mismatching range/element combinations for in/in!

It's safe to upcast integer types to Long,
floating-point types to Double.
So we don't have to create a range instance for cases such as

fun testLongInInt(x: Long, a: Int, b: Int) =
    x in a .. b

which is equivalent to

fun testLongInInt(x: Long, a: Int, b: Int) =
    x in a.toLong() .. b.toLong()
This commit is contained in:
Dmitry Petrov
2017-07-06 17:11:21 +03:00
parent d137b04b0a
commit 9d1901fc7c
10 changed files with 130 additions and 20 deletions

View File

@@ -16,10 +16,12 @@ fun inDouble(x: Float): Boolean {
return x in 1.0..2.0
}
// 2 INVOKESPECIAL
// 2 NEW
// 2 INVOKESTATIC kotlin/ranges/RangesKt.rangeTo
// 1 longRangeContains
// 1 intRangeContains
// 1 doubleRangeContains
// 1 floatRangeContains
// 3 I2L
// 3 F2D
// 0 INVOKESPECIAL
// 0 NEW
// 0 rangeTo
// 0 longRangeContains
// 0 intRangeContains
// 0 doubleRangeContains
// 0 floatRangeContains

View File

@@ -0,0 +1,22 @@
// WITH_RUNTIME
fun byteInFloat(x: Byte, a: Float, b: Float) = x in a .. b
fun byteInDouble(x: Byte, a: Double, b: Double) = x in a .. b
fun shortInFloat(x: Short, a: Float, b: Float) = x in a .. b
fun shortInDouble(x: Short, a: Double, b: Double) = x in a .. b
fun intInFloat(x: Int, a: Float, b: Float) = x in a .. b
fun intInDouble(x: Int, a: Double, b: Double) = x in a .. b
fun longInFloat(x: Long, a: Float, b: Float) = x in a .. b
fun longInDouble(x: Long, a: Double, b: Double) = x in a .. b
fun floatInInt(x: Float, a: Int, b: Int) = x in a .. b
fun floatInLong(x: Float, a: Long, b: Long) = x in a .. b
fun doubleInInt(x: Double, a: Int, b: Int) = x in a .. b
fun doubleInLong(x: Double, a: Long, b: Long) = x in a .. b
// 4 INVOKESPECIAL
// 4 NEW
// 8 rangeTo
// 2 longRangeContains
// 2 intRangeContains
// 4 doubleRangeContains
// 4 floatRangeContains