OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #import("compiler_helper.dart"); | 5 #import("compiler_helper.dart"); |
6 | 6 |
7 final String FIB = @""" | 7 const String FIB = @""" |
8 fib(n) { | 8 fib(n) { |
9 if (n <= 1) return 1; | 9 if (n <= 1) return 1; |
10 return add(fib(n - 1), fib(n - 2)); | 10 return add(fib(n - 1), fib(n - 2)); |
11 } | 11 } |
12 | 12 |
13 // We need this artificial add method because | 13 // We need this artificial add method because |
14 // our optimizer will actually add type checks | 14 // our optimizer will actually add type checks |
15 // for the result of recursively calling fib | 15 // for the result of recursively calling fib |
16 // which introduces new variables because we | 16 // which introduces new variables because we |
17 // now have multiple users. | 17 // now have multiple users. |
18 // The 'if' has been added to avoid inlining of add. | 18 // The 'if' has been added to avoid inlining of add. |
19 add(x, y) { | 19 add(x, y) { |
20 if (x == -1) return x; | 20 if (x == -1) return x; |
21 return x + y; | 21 return x + y; |
22 } | 22 } |
23 """; | 23 """; |
24 | 24 |
25 main() { | 25 main() { |
26 // Make sure we don't introduce a new variable. | 26 // Make sure we don't introduce a new variable. |
27 RegExp regexp = new RegExp("var $anyIdentifier ="); | 27 RegExp regexp = new RegExp("var $anyIdentifier ="); |
28 compileAndDoNotMatch(FIB, 'fib', regexp); | 28 compileAndDoNotMatch(FIB, 'fib', regexp); |
29 } | 29 } |
OLD | NEW |