[FIR] Implement Int -> Long conversions for literals and operators over them
^KT-38895 ^KT-50996 Fixed ^KT-51000 Fixed ^KT-51003 Fixed ^KT-51018 Fixed
This commit is contained in:
committed by
teamcity
parent
cc86ca2a0f
commit
52b72a7dac
@@ -1,22 +0,0 @@
|
||||
// LANGUAGE: -ApproximateIntegerLiteralTypesInReceiverPosition
|
||||
// ISSUE: Kt-47447, KT-47729
|
||||
|
||||
fun takeLong(value : Long) {}
|
||||
fun takeInt(value : Int) {}
|
||||
fun takeAny(value : Any) {}
|
||||
fun takeLongX(value : Long?) {}
|
||||
fun takeIntX(value : Int?) {}
|
||||
fun takeAnyX(value : Any?) {}
|
||||
fun <A> takeGeneric(value : A) {}
|
||||
fun <A> takeGenericX(value : A?) {}
|
||||
|
||||
fun test_1() {
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>1 + 1<!>) // ok
|
||||
takeInt(1 + 1) // ok
|
||||
takeAny(1 + 1) // ok
|
||||
takeLongX(<!ARGUMENT_TYPE_MISMATCH!>1 + 1<!>) // ok
|
||||
takeIntX(1 + 1) // ok
|
||||
takeAnyX(1 + 1) // ok
|
||||
takeGeneric(1 + 1) // ok
|
||||
takeGenericX(1 + 1) // ok
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// LANGUAGE: -ApproximateIntegerLiteralTypesInReceiverPosition
|
||||
// ISSUE: Kt-47447, KT-47729
|
||||
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
// LANGUAGE: -ApproximateIntegerLiteralTypesInReceiverPosition
|
||||
// ISSUE: Kt-47447, KT-47729
|
||||
|
||||
fun takeLong(x: Long) {}
|
||||
|
||||
object Foo {
|
||||
var longProperty: Long = 0
|
||||
|
||||
infix fun infixOperator(x: Long) {}
|
||||
}
|
||||
|
||||
// Should be ok in all places
|
||||
fun test() {
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>1 + 1<!>)
|
||||
takeLong((<!ARGUMENT_TYPE_MISMATCH!>1 + 1<!>))
|
||||
Foo.longProperty = 1 + 1
|
||||
Foo.longProperty = (1 + 1)
|
||||
Foo infixOperator <!ARGUMENT_TYPE_MISMATCH!>1 + 1<!>
|
||||
Foo infixOperator (<!ARGUMENT_TYPE_MISMATCH!>1 + 1<!>)
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// LANGUAGE: -ApproximateIntegerLiteralTypesInReceiverPosition
|
||||
// ISSUE: Kt-47447, KT-47729
|
||||
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
// !LANGUAGE: -ApproximateIntegerLiteralTypesInReceiverPosition
|
||||
|
||||
fun foo(ttlMillis: Long = <!TYPE_MISMATCH!>5 * 60 * 1000<!>) {}
|
||||
|
||||
const val cacheSize: Long = <!TYPE_MISMATCH!>4096 * 4<!>
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: -ApproximateIntegerLiteralTypesInReceiverPosition
|
||||
|
||||
fun foo(ttlMillis: Long = 5 * 60 * 1000) {}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
// LANGUAGE: +ApproximateIntegerLiteralTypesInReceiverPosition
|
||||
|
||||
fun foo(ttlMillis: Long = 5 * 60 * 1000) {}
|
||||
|
||||
const val cacheSize: Long = 4096 * 4
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// FIR_IDENTICAL
|
||||
// LANGUAGE: +ApproximateIntegerLiteralTypesInReceiverPosition
|
||||
|
||||
fun foo(ttlMillis: Long = <!TYPE_MISMATCH!>5 * 60 * 1000<!>) {}
|
||||
|
||||
+22
-22
@@ -7,21 +7,21 @@ abstract class C<L> {
|
||||
}
|
||||
|
||||
fun testLongDotCall(c1: C<Long>) {
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.plus(2)<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.minus(2)<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.times(2)<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.div(2)<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.rem(2)<!>)
|
||||
c1.takeT(1.plus(2))
|
||||
c1.takeT(1.minus(2))
|
||||
c1.takeT(1.times(2))
|
||||
c1.takeT(1.div(2))
|
||||
c1.takeT(1.rem(2))
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.inc()<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.dec()<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.unaryPlus()<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.unaryMinus()<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.shl(2)<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.shr(2)<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.ushr(2)<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.and(2)<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.or(2)<!>)
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.xor(2)<!>)
|
||||
c1.takeT(1.shl(2))
|
||||
c1.takeT(1.shr(2))
|
||||
c1.takeT(1.ushr(2))
|
||||
c1.takeT(1.and(2))
|
||||
c1.takeT(1.or(2))
|
||||
c1.takeT(1.xor(2))
|
||||
c1.takeT(<!ARGUMENT_TYPE_MISMATCH!>1.inv()<!>)
|
||||
}
|
||||
|
||||
@@ -42,19 +42,19 @@ fun testByteDotCall(c3: C<Byte>) {
|
||||
}
|
||||
|
||||
fun testLongOperatorInfixCall(c4: C<Long>) {
|
||||
c4.takeT(<!ARGUMENT_TYPE_MISMATCH!>1 + 2<!>)
|
||||
c4.takeT(<!ARGUMENT_TYPE_MISMATCH!>1 - 2<!>)
|
||||
c4.takeT(<!ARGUMENT_TYPE_MISMATCH!>1 * 2<!>)
|
||||
c4.takeT(<!ARGUMENT_TYPE_MISMATCH!>1 / 2<!>)
|
||||
c4.takeT(<!ARGUMENT_TYPE_MISMATCH!>1 % 2<!>)
|
||||
c4.takeT(1 + 2)
|
||||
c4.takeT(1 - 2)
|
||||
c4.takeT(1 * 2)
|
||||
c4.takeT(1 / 2)
|
||||
c4.takeT(1 % 2)
|
||||
c4.takeT(+1)
|
||||
c4.takeT(-1)
|
||||
c4.takeT(<!ARGUMENT_TYPE_MISMATCH!>1 shl 2<!>)
|
||||
c4.takeT(<!ARGUMENT_TYPE_MISMATCH!>1 shr 2<!>)
|
||||
c4.takeT(<!ARGUMENT_TYPE_MISMATCH!>1 ushr 2<!>)
|
||||
c4.takeT(<!ARGUMENT_TYPE_MISMATCH!>1 and 2<!>)
|
||||
c4.takeT(<!ARGUMENT_TYPE_MISMATCH!>1 or 2<!>)
|
||||
c4.takeT(<!ARGUMENT_TYPE_MISMATCH!>1 xor 2<!>)
|
||||
c4.takeT(1 shl 2)
|
||||
c4.takeT(1 shr 2)
|
||||
c4.takeT(1 ushr 2)
|
||||
c4.takeT(1 and 2)
|
||||
c4.takeT(1 or 2)
|
||||
c4.takeT(1 xor 2)
|
||||
}
|
||||
|
||||
fun testShortOperatorInfixCall(c5: C<Short>) {
|
||||
|
||||
Vendored
+16
-16
@@ -41,24 +41,24 @@ fun testByteUnaryOperators() {
|
||||
}
|
||||
|
||||
fun testLongBinaryOperators() {
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 + 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 - 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 * 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 / 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 % 1<!>)
|
||||
takeLong(2 + 1)
|
||||
takeLong(2 - 1)
|
||||
takeLong(2 * 1)
|
||||
takeLong(2 / 1)
|
||||
takeLong(2 % 1)
|
||||
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2.plus(1)<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2.minus(1)<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2.times(1)<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2.div(1)<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2.rem(1)<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 shl 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 shr 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 ushr 1<!>)
|
||||
takeLong(2.plus(1))
|
||||
takeLong(2.minus(1))
|
||||
takeLong(2.times(1))
|
||||
takeLong(2.div(1))
|
||||
takeLong(2.rem(1))
|
||||
takeLong(2 shl 1)
|
||||
takeLong(2 shr 1)
|
||||
takeLong(2 ushr 1)
|
||||
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 and 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 or 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 xor 1<!>)
|
||||
takeLong(2 and 1)
|
||||
takeLong(2 or 1)
|
||||
takeLong(2 xor 1)
|
||||
|
||||
// positive
|
||||
takeLong(2 * 100000000000)
|
||||
|
||||
+16
-16
@@ -42,24 +42,24 @@ fun testByteUnaryOperators() {
|
||||
|
||||
// all positive
|
||||
fun testLongBinaryOperators() {
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 + 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 - 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 * 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 / 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 % 1<!>)
|
||||
takeLong(2 + 1)
|
||||
takeLong(2 - 1)
|
||||
takeLong(2 * 1)
|
||||
takeLong(2 / 1)
|
||||
takeLong(2 % 1)
|
||||
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2.plus(1)<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2.minus(1)<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2.times(1)<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2.div(1)<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2.rem(1)<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 shl 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 shr 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 ushr 1<!>)
|
||||
takeLong(2.plus(1))
|
||||
takeLong(2.minus(1))
|
||||
takeLong(2.times(1))
|
||||
takeLong(2.div(1))
|
||||
takeLong(2.rem(1))
|
||||
takeLong(2 shl 1)
|
||||
takeLong(2 shr 1)
|
||||
takeLong(2 ushr 1)
|
||||
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 and 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 or 1<!>)
|
||||
takeLong(<!ARGUMENT_TYPE_MISMATCH!>2 xor 1<!>)
|
||||
takeLong(2 and 1)
|
||||
takeLong(2 or 1)
|
||||
takeLong(2 xor 1)
|
||||
|
||||
takeLong(2 * 100000000000)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user