| Index: test/codegen/expect/language/cascade_precedence_test.js | 
| diff --git a/test/codegen/expect/language/cascade_precedence_test.js b/test/codegen/expect/language/cascade_precedence_test.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..eef51afb266f3fe9cd9ad2b866690e7289d503ad | 
| --- /dev/null | 
| +++ b/test/codegen/expect/language/cascade_precedence_test.js | 
| @@ -0,0 +1,169 @@ | 
| +dart_library.library('language/cascade_precedence_test', null, /* Imports */[ | 
| +  'dart_sdk', | 
| +  'expect' | 
| +], function load__cascade_precedence_test(exports, dart_sdk, expect) { | 
| +  'use strict'; | 
| +  const core = dart_sdk.core; | 
| +  const dart = dart_sdk.dart; | 
| +  const dartx = dart_sdk.dartx; | 
| +  const expect$ = expect.expect; | 
| +  const cascade_precedence_test = Object.create(null); | 
| +  let VoidToFunction = () => (VoidToFunction = dart.constFn(dart.definiteFunctionType(core.Function, [])))(); | 
| +  let VoidTodynamic = () => (VoidTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))(); | 
| +  cascade_precedence_test.A = class A extends core.Object { | 
| +    new(value) { | 
| +      this.value = value; | 
| +    } | 
| +    set(value) { | 
| +      this.value = value; | 
| +    } | 
| +    get() { | 
| +      return this.value; | 
| +    } | 
| +    get(index) { | 
| +      return dart.notNull(this.value) + dart.notNull(index); | 
| +    } | 
| +    set(index, newValue) { | 
| +      this.value = dart.notNull(this.value) + (-dart.notNull(index) + dart.notNull(newValue)); | 
| +      return newValue; | 
| +    } | 
| +    test(expected) { | 
| +      expect$.Expect.equals(expected, this.value); | 
| +    } | 
| +    limp(n) { | 
| +      if (n == 0) return dart.bind(this, 'set'); | 
| +      return dart.fn(() => this.limp(dart.notNull(n) - 1), VoidToFunction()); | 
| +    } | 
| +    get self() { | 
| +      return this; | 
| +    } | 
| +    ['+'](other) { | 
| +      this.value = dart.notNull(this.value) + dart.notNull(other.value); | 
| +      return this; | 
| +    } | 
| +  }; | 
| +  dart.setSignature(cascade_precedence_test.A, { | 
| +    constructors: () => ({new: dart.definiteFunctionType(cascade_precedence_test.A, [core.int])}), | 
| +    methods: () => ({ | 
| +      set: dart.definiteFunctionType(dart.void, [core.int]), | 
| +      get: dart.definiteFunctionType(core.int, []), | 
| +      get: dart.definiteFunctionType(core.int, [core.int]), | 
| +      set: dart.definiteFunctionType(dart.void, [core.int, core.int]), | 
| +      test: dart.definiteFunctionType(dart.void, [core.int]), | 
| +      limp: dart.definiteFunctionType(core.Function, [core.int]), | 
| +      '+': dart.definiteFunctionType(cascade_precedence_test.A, [cascade_precedence_test.A]) | 
| +    }) | 
| +  }); | 
| +  cascade_precedence_test.Box = class Box extends core.Object { | 
| +    new(value) { | 
| +      this.value = value; | 
| +    } | 
| +    get(pos) { | 
| +      return this.value; | 
| +    } | 
| +    set(pos, a) { | 
| +      this.value = a; | 
| +      return a; | 
| +    } | 
| +    get x() { | 
| +      return this.value; | 
| +    } | 
| +    set x(a) { | 
| +      this.value = a; | 
| +    } | 
| +  }; | 
| +  dart.setSignature(cascade_precedence_test.Box, { | 
| +    constructors: () => ({new: dart.definiteFunctionType(cascade_precedence_test.Box, [cascade_precedence_test.A])}), | 
| +    methods: () => ({ | 
| +      get: dart.definiteFunctionType(cascade_precedence_test.A, [core.int]), | 
| +      set: dart.definiteFunctionType(dart.void, [core.int, cascade_precedence_test.A]) | 
| +    }) | 
| +  }); | 
| +  cascade_precedence_test.main = function() { | 
| +    let a = new cascade_precedence_test.A(42); | 
| +    let original = a; | 
| +    let b = new cascade_precedence_test.A(87); | 
| +    function fa() { | 
| +      return a; | 
| +    } | 
| +    dart.fn(fa, VoidTodynamic()); | 
| +    let box = new cascade_precedence_test.Box(a); | 
| +    expect$.Expect.equals(a, ((() => { | 
| +      a.set(37); | 
| +      a.get(); | 
| +      return a; | 
| +    })())); | 
| +    a.test(37); | 
| +    expect$.Expect.equals(a, (() => { | 
| +      let _ = fa(); | 
| +      dart.dsend(_, 'set', 42); | 
| +      dart.dsend(_, 'get'); | 
| +      return _; | 
| +    })()); | 
| +    a.test(42); | 
| +    expect$.Expect.equals(a, (() => { | 
| +      let _ = box.x; | 
| +      _.set(37); | 
| +      _.get(); | 
| +      return _; | 
| +    })()); | 
| +    a.test(37); | 
| +    expect$.Expect.equals(b, (() => { | 
| +      let _ = b['+'](a); | 
| +      _.test(124); | 
| +      _.set(117); | 
| +      _.get(); | 
| +      return _; | 
| +    })()); | 
| +    b.test(117); | 
| +    a.test(37); | 
| +    (a.value == 37 ? a : b).set(42); | 
| +    a.test(42); | 
| +    let c = new cascade_precedence_test.A(21); | 
| +    a.set(c.get()); | 
| +    c = a; | 
| +    expect$.Expect.equals(a, c); | 
| +    expect$.Expect.equals(original, a); | 
| +    a.test(21); | 
| +    c = null; | 
| +    box.x = c = a; | 
| +    box.x.test(21); | 
| +    c.test(21); | 
| +    c = null; | 
| +    box.x = ((() => { | 
| +      a.test(21); | 
| +      return c = a; | 
| +    })()); | 
| +    box.x.test(21); | 
| +    c.test(21); | 
| +    c = null; | 
| +    box.x = ((() => { | 
| +      a.test(21); | 
| +      return c = a; | 
| +    })()); | 
| +    box.x.test(21); | 
| +    c.test(21); | 
| +    ((() => { | 
| +      a.set(42); | 
| +      return a; | 
| +    })()).test(42); | 
| +    a.set(21); | 
| +    a.test(21); | 
| +    c = null; | 
| +    let originalBox = box; | 
| +    box.x = a.value == 21 ? b : c; | 
| +    box.x.test(117); | 
| +    box = box; | 
| +    expect$.Expect.equals(originalBox, box); | 
| +    expect$.Expect.equals(box.value, b); | 
| +    box.x = ((() => { | 
| +      a.set(42); | 
| +      a.test(42); | 
| +      return a; | 
| +    })()); | 
| +    box.x.test(42); | 
| +  }; | 
| +  dart.fn(cascade_precedence_test.main, VoidTodynamic()); | 
| +  // Exports: | 
| +  exports.cascade_precedence_test = cascade_precedence_test; | 
| +}); | 
|  |