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