| // LANGUAGE: +ForbidParenthesizedLhsInAssignments | |
| // RUN_PIPELINE_TILL: FRONTEND | |
| package lvalue_assignment | |
| open class B() { | |
| var b: Int = 2 | |
| val c: Int = 34 | |
| } | |
| class C() : B() { | |
| var x = 4 | |
| fun foo(c: C) { | |
| this.x = 34 | |
| this.b = 123 | |
| super.b = 23 | |
| this.<!VAL_REASSIGNMENT!>c<!> = 34 | |
| super.<!VAL_REASSIGNMENT!>c<!> = 3535 //repeat for 'c' | |
| <!VARIABLE_EXPECTED!>getInt()<!> = 12 | |
| } | |
| fun foo1(c: C) { | |
| super.<!VAL_REASSIGNMENT!>c<!> = 34 | |
| } | |
| fun bar(c: C) { | |
| <!VARIABLE_EXPECTED!>this<!> = c //should be an error | |
| } | |
| } | |
| fun getInt() = 0 | |
| class D() { | |
| inner class B() { | |
| fun foo() { | |
| <!VARIABLE_EXPECTED!>this@D<!> = D() | |
| } | |
| } | |
| } | |
| fun foo(): Unit {} | |
| fun cannotBe() { | |
| var i: Int = 5 | |
| <!UNRESOLVED_REFERENCE!>z<!> = 30; | |
| <!VARIABLE_EXPECTED!>""<!> = ""; | |
| <!VARIABLE_EXPECTED!>foo()<!> = Unit; | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(<!VARIABLE_EXPECTED!>i <!USELESS_CAST!>as Int<!><!>)<!> = 34 | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(<!USELESS_IS_CHECK, VARIABLE_EXPECTED!>i is Int<!>)<!> = false | |
| <!VARIABLE_EXPECTED!>A()<!> = A() | |
| <!VARIABLE_EXPECTED!>5<!> = 34 | |
| } | |
| @Retention(AnnotationRetention.SOURCE) | |
| @Target(AnnotationTarget.EXPRESSION) | |
| annotation class Ann | |
| fun canBe(i0: Int, j: Int) { | |
| var i = i0 | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(label@ i)<!> = 34 | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(label@ <!VAL_REASSIGNMENT!>j<!>)<!> = 34 //repeat for j | |
| val a = A() | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(l@ a.a)<!> = 3894 | |
| @Ann | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>l@ (i)<!> = 123 | |
| } | |
| fun canBe2(j: Int) { | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(label@ <!VAL_REASSIGNMENT!>j<!>)<!> = 34 | |
| } | |
| class A() { | |
| var a: Int = 3 | |
| } | |
| class Test() { | |
| fun testIllegalValues() { | |
| <!VARIABLE_EXPECTED!>1<!> += 23 | |
| (l@ 1) <!UNRESOLVED_REFERENCE!>+=<!> 23 | |
| <!VARIABLE_EXPECTED!>getInt()<!> += 343 | |
| (f@ getInt()) <!UNRESOLVED_REFERENCE!>+=<!> 343 | |
| <!VARIABLE_EXPECTED!>1<!>++ | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(r@ <!VARIABLE_EXPECTED!>1<!>)<!>-- | |
| <!VARIABLE_EXPECTED!>getInt()<!>++ | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(m@ <!VARIABLE_EXPECTED!>getInt()<!>)<!>-- | |
| ++<!VARIABLE_EXPECTED!>2<!> | |
| --<!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(r@ <!VARIABLE_EXPECTED!>2<!>)<!> | |
| <!VARIABLE_EXPECTED!>this<!><!UNRESOLVED_REFERENCE!>++<!> | |
| var s : String = "r" | |
| s += "ss" | |
| s += this | |
| s += (a@ 2) | |
| @Ann | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>l@ (<!VARIABLE_EXPECTED!>1<!>)<!> = 123 | |
| } | |
| fun testIllegalTypeRef(): Any { | |
| <!VARIABLE_EXPECTED!>Char<!>= | |
| return "" | |
| } | |
| fun testIncompleteSyntax() { | |
| val s = "s" | |
| <!UNRESOLVED_REFERENCE!>++<!><!VARIABLE_EXPECTED!>s<!>.<!SYNTAX!><!> | |
| } | |
| fun testVariables() { | |
| var a: Int = 34 | |
| val b: Int = 34 | |
| a += 34 | |
| (l@ a) <!UNRESOLVED_REFERENCE!>+=<!> 34 | |
| <!VAL_REASSIGNMENT!>b<!> += 34 | |
| a++ | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(@Ann l@ a)<!>-- | |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(a)<!>++ | |
| --a | |
| ++<!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(@Ann l@ a)<!> | |
| --<!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(a)<!> | |
| } | |
| fun testVariables1() { | |
| val b: Int = 34 | |
| (l@ b) <!UNRESOLVED_REFERENCE!>+=<!> 34 | |
| //repeat for b | |
| (b) <!UNRESOLVED_REFERENCE!>+=<!> 3 | |
| } | |
| fun testArrays(a: Array<Int>, ab: Ab) { | |
| a[3] = 4 | |
| a[4]++ | |
| a[6] += 43 | |
| @Ann | |
| a[7] = 7 | |
| (@Ann l@ (a))[8] = 8 | |
| ab.getArray()[54] = 23 | |
| ab.getArray()[54]++ | |
| (f@ a)[3] = 4 | |
| this<!NO_SET_METHOD!>[54]<!> = 34 | |
| } | |
| } | |
| fun Array<Int>.checkThis() { | |
| this[45] = 34 | |
| this[352]++ | |
| this[35] += 234 | |
| } | |
| abstract class Ab { | |
| abstract fun getArray() : Array<Int> | |
| } | |
| /* GENERATED_FIR_TAGS: additiveExpression, annotationDeclaration, asExpression, assignment, classDeclaration, | |
| funWithExtensionReceiver, functionDeclaration, incrementDecrementExpression, inner, integerLiteral, isExpression, | |
| localProperty, primaryConstructor, propertyDeclaration, stringLiteral, superExpression, thisExpression */ |