// Copyright (c) 2013, 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.

// dart2js regression test for issue 8781.

class N {
  var outgoing;
  var incoming;
  N(this.outgoing, this.incoming);
}

class A {
  int offset = 0;
  var list;
  var node;

  A(node) : node = node, list = node.outgoing;

  next() {
    // dart2js used to update [offset] twice: once in the optimized
    // version, which would bailout to the non-optimized version
    // because [list] is not an Array, and once in the non-optimized
    // version.
    var edge = list[offset++];
    if (list == node.outgoing) {
      list = node.incoming;
      offset = 0;
    } else
      list = null;
    return edge;
  }
}

class L {
  final list;
  L(this.list);
  // Use noSuchMethod to defeat type inferencing.
  noSuchMethod(mirror) => mirror.invokeOn(list);
}

main () {
  var o = new A(new N(new L([1]), new L([2])));

  for (var i = 1; i <= 2; i++)
    Expect.equals(i, o.next());

  Expect.equals(null, o.list);
}
