| // Copyright (c) 2012, 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"; |
| |
| closure0() { |
| var fib; |
| fib = (i) { |
| if (i < 2) return i; |
| return fib(i - 1) + fib(i - 2); |
| }; |
| Expect.equals(5, fib(5)); |
| } |
| |
| closure1() { |
| var decr1 = 0; |
| var decr2 = 0; |
| var fib; |
| fib = (i) { |
| if (i < 2) return i; |
| return fib(i - decr1) + fib(i - decr2); |
| }; |
| decr1++; |
| decr2 += 2; |
| Expect.equals(5, fib(5)); |
| } |
| |
| closure2() { |
| var f; |
| f = (doReturnClosure) { |
| if (doReturnClosure) { |
| return () => f(false); |
| } else { |
| return 499; |
| } |
| }; |
| var g = f(true); |
| Expect.equals(499, g()); |
| } |
| |
| main() { |
| closure0(); |
| closure1(); |
| closure2(); |
| } |