blob: 03d8f9a112dd0d46b07338d551988e4ee892c5d7 [file] [log] [blame]
// 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;
}