| Index: tests/language_strong/cascade_precedence_test.dart
 | 
| diff --git a/tests/language_strong/cascade_precedence_test.dart b/tests/language_strong/cascade_precedence_test.dart
 | 
| index acbb37364484c73a13a984f0eb8831f259d920b5..3ddf252809584c2d6b6fbc8b9fc9b27d91ba000f 100644
 | 
| --- a/tests/language_strong/cascade_precedence_test.dart
 | 
| +++ b/tests/language_strong/cascade_precedence_test.dart
 | 
| @@ -4,23 +4,30 @@
 | 
|  
 | 
|  import "package:expect/expect.dart";
 | 
|  
 | 
| -
 | 
|  class A {
 | 
|    int value;
 | 
|    A(this.value);
 | 
| -  void set(int value) { this.value = value; }
 | 
| +  void set(int value) {
 | 
| +    this.value = value;
 | 
| +  }
 | 
| +
 | 
|    int get() => value;
 | 
| -  int operator[](int index) => value + index;
 | 
| -  void operator[]=(int index, int newValue) { value += -index + newValue; }
 | 
| +  int operator [](int index) => value + index;
 | 
| +  void operator []=(int index, int newValue) {
 | 
| +    value += -index + newValue;
 | 
| +  }
 | 
| +
 | 
|    void test(int expected) {
 | 
|      Expect.equals(expected, value);
 | 
|    }
 | 
| +
 | 
|    Function limp(int n) {
 | 
|      if (n == 0) return set;
 | 
|      return () => limp(n - 1);
 | 
|    }
 | 
| +
 | 
|    A get self => this;
 | 
| -  A operator+(A other) {
 | 
| +  A operator +(A other) {
 | 
|      this.value += other.value;
 | 
|      return this;
 | 
|    }
 | 
| @@ -29,10 +36,15 @@ class A {
 | 
|  class Box {
 | 
|    A value;
 | 
|    Box(this.value);
 | 
| -  A operator[](int pos) => value;
 | 
| -  void operator[]=(int pos, A a) { value = a; }
 | 
| +  A operator [](int pos) => value;
 | 
| +  void operator []=(int pos, A a) {
 | 
| +    value = a;
 | 
| +  }
 | 
| +
 | 
|    A get x => value;
 | 
| -  void set x(A a) { value = a; }
 | 
| +  void set x(A a) {
 | 
| +    value = a;
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  // Subset of grammar being tested.
 | 
| @@ -83,57 +95,89 @@ main() {
 | 
|    Box box = new Box(a);
 | 
|    // Different expressions on the left-hand side of '..'.
 | 
|    //  conditionalExpression >> postfixExpression > primary selector*
 | 
| -  Expect.equals(a, a..set(37)..get());
 | 
| +  Expect.equals(
 | 
| +      a,
 | 
| +      a
 | 
| +        ..set(37)
 | 
| +        ..get());
 | 
|    a.test(37);
 | 
| -  Expect.equals(a, fa()..set(42)..get());
 | 
| +  Expect.equals(
 | 
| +      a,
 | 
| +      fa()
 | 
| +        ..set(42)
 | 
| +        ..get());
 | 
|    a.test(42);
 | 
| -  Expect.equals(a, box.x..set(37)..get());
 | 
| +  Expect.equals(
 | 
| +      a,
 | 
| +      box.x
 | 
| +        ..set(37)
 | 
| +        ..get());
 | 
|    a.test(37);
 | 
|    // '..' binds to 'b + a', i.e., to the 'b' object, not to 'a'.
 | 
| -  Expect.equals(b, b + a..test(124)..set(117)..get());
 | 
| +  Expect.equals(
 | 
| +      b,
 | 
| +      b + a
 | 
| +        ..test(124)
 | 
| +        ..set(117)
 | 
| +        ..get());
 | 
|    b.test(117);
 | 
|    a.test(37);
 | 
|  
 | 
|    // expression :: conditionalExpression cascadeSection
 | 
|    // and conditionalExpression ends in expressionWithoutCascade.
 | 
|    // I.e., '..' binds to the entire condition expression, not to 'b'.
 | 
| -  (a.value == 37) ? a : b..set(42);
 | 
| +  (a.value == 37) ? a : b
 | 
| +    ..set(42);
 | 
|    a.test(42);
 | 
|  
 | 
|    // This binds .. to 'a', not 'c=a', and performs assignment after reading
 | 
|    // c.get().
 | 
|    A c = new A(21);
 | 
| -  c = a..set(c.get());  // FAILING.
 | 
| +  c = a..set(c.get()); // FAILING.
 | 
|    Expect.equals(a, c);
 | 
|    Expect.equals(original, a);
 | 
| -  a.test(21);  // Fails as 42 if above is parsed as (c = a)..set(c.get()).
 | 
| +  a.test(21); // Fails as 42 if above is parsed as (c = a)..set(c.get()).
 | 
|  
 | 
|    // Should be parsed as (box..x = (c = a))..x.test(21).
 | 
|    c = null;
 | 
| -  box..x = c = a..x.test(21);
 | 
| +  box
 | 
| +    ..x = c = a
 | 
| +    ..x.test(21);
 | 
|    c.test(21);
 | 
|    // Other variants
 | 
|    c = null;
 | 
| -  box..x = c = (a..test(21))..x.test(21);
 | 
| +  box
 | 
| +    ..x = c = (a..test(21))
 | 
| +    ..x.test(21);
 | 
|    c.test(21);
 | 
|  
 | 
|    c = null;
 | 
| -  box..x = (c = a..test(21))..x.test(21);
 | 
| +  box
 | 
| +    ..x = (c = a..test(21))
 | 
| +    ..x.test(21);
 | 
|    c.test(21);
 | 
|  
 | 
|    // Should work the same:
 | 
|    (a..set(42))..test(42);
 | 
| -  a..set(21)..test(21);
 | 
| +  a
 | 
| +    ..set(21)
 | 
| +    ..test(21);
 | 
|  
 | 
|    c = null;
 | 
|    Box originalBox = box;
 | 
|    // Should parse as:
 | 
|    // box = (box..x = (a.value == 21 ? b : c)..x.test(117));
 | 
| -  box = box..x = a.value == 21 ? b : c..x.test(117);
 | 
| +  box = box
 | 
| +    ..x = a.value == 21 ? b : c
 | 
| +    ..x.test(117);
 | 
|    Expect.equals(originalBox, box);
 | 
|    Expect.equals(box.value, b);
 | 
|  
 | 
|    // New cascades are allowed inside an expressionWithoutCascade if properly
 | 
|    // delimited.
 | 
| -  box..x = (a..set(42)..test(42))..x.test(42);
 | 
| +  box
 | 
| +    ..x = (a
 | 
| +      ..set(42)
 | 
| +      ..test(42))
 | 
| +    ..x.test(42);
 | 
|  }
 | 
| 
 |