// 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 A cascaded method invocation has the form e..suffix where e is
/// an expression and suffix is a sequence of operator, method, getter or
/// setter invocations.
/// cascadeSection:
///   '..'  (cascadeSelector arguments*)(assignableSelector arguments*)*
/// (assignmentOperator expressionWithoutCascade)?
/// ;
/// cascadeSelector:
///   '[' expression ']' |
///   identifier
/// ;
/// @description Checks that various correct cascaded invocations do not
/// produce compile-time errors.
/// @author msyabro


class C {
  m1() {}
  m2(p1, p2) {}
  m3(p1, [p2]) {}

  operator +(other) {}
  operator -() {}
  operator [](index) {}
  operator []=(index, value) {}

  get x {}
  get y {}

  set x(v) {}
  set y(v) {}

  static statMethod() {}
  static var statVar;
}

main() {
  var o = new C();

  //instance methods
  o..m1();
  o..m2(1, 1);
  o..m3(1, 1);

  o..m1()..m2(1, 1)..m3(1);
  o..m2(0, 0)..m3(0, 1);
  o..m1()..m1()..m1();

  //getters
  o..x..y;
  o..x;
  o..x..x..x;

  //setters
  o..x = 1;
  o..x = 1..y = 2;
  o..x = 1..x = 'string'..x = [1, 2, 3];

  o..[1]..[2];
  o..[1] = 1..[2] = 2;
}
