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

import "package:expect/expect.dart";

class A {
  _uniqueSelector() {}
  final uniqueField = 10;
}

test1(obj) {
  var res = 0;
  for (var i = 0; i < 2; i++) {
    obj._uniqueSelector();
    // This load must not be hoisted out of the loop.
    res += obj.uniqueField as int;
  }
  return res;
}

test2(obj) {
  final objAlias = obj;
  closure() => objAlias;
  var res = 0;
  for (var i = 0; i < 2; i++) {
    obj._uniqueSelector();
    // This load must not be hoisted out of the loop.
    res += objAlias.uniqueField as int;
  }
  return res;
}

var foofoo_ = test1;

main() {
  Expect.equals(20, foofoo_(new A()));
  Expect.throws(() => foofoo_(0));

  foofoo_ = test2;

  Expect.equals(20, foofoo_(new A()));
  Expect.throws(() => foofoo_(0));
}
