// Copyright (c) 2011, 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.

/// @assertion Assignable expressions are expressions that can appear on the
/// left hand side of an assignment.
/// assignableExpression:
///   primary (arguments* assignableSelector)+ |
///   super unconditionalAssignableSelector |
///   identifier
/// ;
/// unconditionalAssignableSelector:
///   '[' expression ']' |
///   '.' identifier
/// ;
/// assignableSelector:
///   unconditionalAssignableSelector |
///   '?.' identifier
/// ;
/// An assignable expression is either:
/// • An identifier.
/// • An invocation (possibly conditional) of a getter or list access operator
///   on an expression e.
/// • An invocation of a getter or list access operator on super.
/// @description Checks that super with an unconditionalAssignableSelector
/// can be used in the left hand side of an assignment.
/// @author msyabro


class S {
  operator [](var index) {}
  operator []=(var index, var value) {}
  var prop;
}
class A extends S {
  test() {
    super["key"] = null;
    super.prop = null;
  }
}

main() {
  A a = new A();
  a.test();
}
