| // Copyright (c) 2012, 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. | 
 |  | 
 | import "package:expect/expect.dart"; | 
 |  | 
 | class B { | 
 |   int value; | 
 |   List trace; | 
 |   B(this.trace) : value = 100; | 
 |   operator [](index) { | 
 |     trace.add(-3); | 
 |     trace.add(index); | 
 |     trace.add(this.value); | 
 |     this.value = this.value + 1; | 
 |     return this; | 
 |   } | 
 |  | 
 |   operator []=(index, value) { | 
 |     trace.add(-5); | 
 |     trace.add(index); | 
 |     trace.add(value.value); | 
 |     this.value = this.value + 1; | 
 |   } | 
 |  | 
 |   operator +(int value) { | 
 |     trace.add(-4); | 
 |     trace.add(this.value); | 
 |     trace.add(value); | 
 |     this.value = this.value + 1; | 
 |     return this; | 
 |   } | 
 | } | 
 |  | 
 | B getB(trace) { | 
 |   trace.add(-1); | 
 |   return new B(trace); | 
 | } | 
 |  | 
 | int getIndex(trace) { | 
 |   trace.add(-2); | 
 |   return 42; | 
 | } | 
 |  | 
 | main() { | 
 |   List trace = new List(); | 
 |   getB(trace)[getIndex(trace)] += 37; | 
 |  | 
 |   Expect.listEquals([-1, -2, -3, 42, 100, -4, 101, 37, -5, 42, 102], trace); | 
 | } |