// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// @dart=2.19

// Enable the experiments even though the test itself is pinned to 2.19 since
// the error messages relate to patterns.

// Test to detect syntactically illegal left-hand-side (assignable)
// expressions.

class C {
  static dynamic field = 0;
}

dynamic variable = 0;

main() {
  variable = 0;
  (variable) = 0;
//^^^^^^^^^^
// [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
// [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR
//         ^
// [cfe] Can't assign to a parenthesized expression.
  (variable)++;
  //       ^
  // [cfe] Can't assign to a parenthesized expression.
  //        ^^
  // [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
  ++(variable);
  //         ^
  // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR
  // [cfe] Can't assign to a parenthesized expression.

  C.field = 0;
  (C.field) = 0;
//^^^^^^^^^
// [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
// [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR
//        ^
// [cfe] Can't assign to a parenthesized expression.
  (C.field)++;
  //      ^
  // [cfe] Can't assign to a parenthesized expression.
  //       ^^
  // [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
  ++(C.field);
  //        ^
  // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR
  // [cfe] Can't assign to a parenthesized expression.

  variable = [1, 2, 3];
  variable[0] = 0;
  (variable)[0] = 0;
  (variable[0]) = 0;
//^^^^^^^^^^^^^
// [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
// [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR
//            ^
// [cfe] Can't assign to a parenthesized expression.
  (variable[0])++;
  //          ^
  // [cfe] Can't assign to a parenthesized expression.
  //           ^^
  // [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
  ++(variable[0]);
  //            ^
  // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR
  // [cfe] Can't assign to a parenthesized expression.

  C.field = [1, 2, 3];
  (C.field[0]) = 0;
//^^^^^^^^^^^^
// [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
// [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR
//           ^
// [cfe] Can't assign to a parenthesized expression.
  (C.field[0])++;
  //         ^
  // [cfe] Can't assign to a parenthesized expression.
  //          ^^
  // [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
  ++(C.field[0]);
  //           ^
  // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR
  // [cfe] Can't assign to a parenthesized expression.

  var a = 0;
  (a) = 0;
//^^^
// [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
// [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR
//  ^
// [cfe] Can't assign to a parenthesized expression.
  (a)++;
  //^
  // [cfe] Can't assign to a parenthesized expression.
  // ^^
  // [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
  ++(a);
  //  ^
  // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR
  // [cfe] Can't assign to a parenthesized expression.

  // Neat palindrome expression. x is assignable, ((x)) is not.
  var funcnuf = (x) => ((x))=((x)) <= (x);
  //                   ^^^^^
  // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR
  //                       ^
  // [cfe] Can't assign to a parenthesized expression.
}
