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

// @dart = 2.9

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();
    res += obj.uniqueField; // This load must not be hoisted out of the loop.
  }
  return res;
}

test2(obj) {
  final objAlias = obj;
  closure() => objAlias;
  var res = 0;
  for (var i = 0; i < 2; i++) {
    obj._uniqueSelector();
    res +=
        objAlias.uniqueField; // This load must not be hoisted out of the loop.
  }
  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));
}
