| // Copyright (c) 2014, 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"; | 
 |  | 
 | //  Regression test for issue 17645. | 
 | get never => new DateTime.now().millisecondsSinceEpoch == 0; | 
 |  | 
 | class A { | 
 |   var foo; | 
 |   A(this.foo); | 
 | } | 
 |  | 
 | var log = []; | 
 |  | 
 | test1(a, xs) { | 
 |   // Called with a = [null|exact=A] | 
 |   log.clear(); | 
 |   for (var x in xs) { | 
 |     if (a != null) { | 
 |       log.add('${a.foo}.$x'); // a.foo must not be hoisted | 
 |     } | 
 |   } | 
 |   return '$log'; | 
 | } | 
 |  | 
 | test2(a, xs) { | 
 |   // Called with a = [exact=A] | 
 |   log.clear(); | 
 |   for (var x in xs) { | 
 |     if (a != null) { | 
 |       log.add('${a.foo}.$x'); // a.foo may be hoisted | 
 |     } | 
 |   } | 
 |   return '$log'; | 
 | } | 
 |  | 
 | test3(a, xs) { | 
 |   // Called with a = [null|exact=A] | 
 |   log.clear(); | 
 |   for (var x in xs) { | 
 |     if (a is A) { | 
 |       log.add('${a.foo}.$x'); // a.foo must not be hoisted | 
 |     } | 
 |   } | 
 |   return '$log'; | 
 | } | 
 |  | 
 | test4(a, xs) { | 
 |   // Called with a = [exact=A] | 
 |   log.clear(); | 
 |   for (var x in xs) { | 
 |     if (a is A) { | 
 |       log.add('${a.foo}.$x'); // a.foo may be hoisted | 
 |     } | 
 |   } | 
 |   return '$log'; | 
 | } | 
 |  | 
 | main() { | 
 |   var a1 = new A('a1'); | 
 |   var a2 = new A('a2'); | 
 |  | 
 |   Expect.equals('[a1.11]', test1(a1, [11])); | 
 |   Expect.equals('[]', test1(null, [11])); | 
 |  | 
 |   Expect.equals('[a1.22]', test2(a1, [22])); | 
 |   Expect.equals('[a2.22]', test2(a2, [22])); | 
 |  | 
 |   Expect.equals('[a1.33]', test3(a1, [33])); | 
 |   Expect.equals('[]', test3(null, [2])); | 
 |  | 
 |   Expect.equals('[a1.44]', test4(a1, [44])); | 
 |   Expect.equals('[a2.44]', test4(a2, [44])); | 
 | } |