|  | // Copyright (c) 2015, 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 version of two-argument Ackermann-Peter function. | 
|  |  | 
|  | library deferred_load_constants; | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  | import "package:async_helper/async_helper.dart"; | 
|  | import "deferred_load_constants.dart" deferred as foo; | 
|  | import "deferred_load_constants.dart"; | 
|  |  | 
|  | main() { | 
|  | asyncStart(); | 
|  | Expect.throws(() => foo.c); | 
|  | Expect.throws(() => foo.C); | 
|  | Expect.throws(() => foo.funtype); | 
|  | Expect.throws(() => foo.toplevel); | 
|  | foo.loadLibrary().whenComplete(() { | 
|  | // Reading constant declarations through deferred prefix works. | 
|  | Expect.identical(c, foo.c); | 
|  | Expect.identical(C, foo.C); | 
|  | Expect.identical(funtype, foo.funtype); | 
|  | Expect.identical(toplevel, foo.toplevel); | 
|  | Expect.identical(C.staticfun, foo.C.staticfun); | 
|  | // Access through deferred prefix is not a constant expression. | 
|  | Expect.throws(() => const [foo.c]); //           //# 01: compile-time error | 
|  | Expect.throws(() => const [foo.C]); //           //# 02: compile-time error | 
|  | Expect.throws(() => const [foo.funtype]); //     //# 03: compile-time error | 
|  | Expect.throws(() => const [foo.toplevel]); //    //# 04: compile-time error | 
|  | Expect.throws(() => const [foo.C.staticfun]); // //# 05: compile-time error | 
|  |  | 
|  | asyncEnd(); | 
|  | }); | 
|  | } |