// 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.

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);
}
