blob: 1494ae5f077c695ae4a900807e8d031caa73ce36 [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 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
* @reviewer iefremov
*/
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;
}