[FIR] Desugar increment/decrement in body resolve phase

The expression needs to be resolved first to determine if there is a
receiver that needs to be extracted to a temporary variable. Also, the
special case for prefix increment/decrement on local variable without
delegates requires resolution to check if the variable is local.

^KT-56771 Fixed
^KT-56659 Fixed
This commit is contained in:
Kirill Rakhman
2023-02-21 16:24:34 +01:00
committed by Space Team
parent 5ecf9cce25
commit 3b9724d20e
77 changed files with 1171 additions and 553 deletions
@@ -5,7 +5,7 @@
fun case1() {
var a = Case1()
val res: Any? = <!RESULT_TYPE_MISMATCH!>++a<!>
val res: Any? = <!RESULT_TYPE_MISMATCH!>++<!>a
}
@@ -22,7 +22,7 @@ class B() {}
fun case2() {
var a = Case2()
val res: Any? = <!RESULT_TYPE_MISMATCH!>++a<!>
val res: Any? = <!RESULT_TYPE_MISMATCH!>++<!>a
}
class Case2() : C() {
@@ -1,37 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION
// SKIP_TXT
// TESTCASE NUMBER: 1
fun case1() {
var a = Case1()
val res: Any? = <!RESULT_TYPE_MISMATCH!>--a<!>
}
class Case1() {
<!INAPPLICABLE_OPERATOR_MODIFIER!>operator<!> fun dec(): B {
TODO()
}
}
class B() {}
// TESTCASE NUMBER: 2
fun case2() {
var a = Case2()
val res: Any? = <!RESULT_TYPE_MISMATCH!>--a<!>
}
class Case2() : C() {
var i = 0
<!INAPPLICABLE_OPERATOR_MODIFIER!>operator<!> fun dec(): C {
TODO()
}
}
open class C() {}
@@ -1,5 +1,6 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION
// SKIP_TXT
// FIR_IDENTICAL
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)