OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 'dart:_js_helper' as js; | 5 import 'dart:_js_helper' as js; |
6 | 6 |
7 import 'dart:_foreign_helper' show | 7 import 'dart:_foreign_helper' show JS; |
8 JS; | |
9 | 8 |
10 import 'package:expect/expect.dart'; | 9 import 'package:expect/expect.dart'; |
11 | 10 |
12 var x; | 11 var x; |
13 | 12 |
14 foo(c) { | 13 foo(c) { |
15 x = "in foo function"; | 14 x = "in foo function"; |
16 c.c_field = x; | 15 c.c_field = x; |
17 } | 16 } |
18 | 17 |
(...skipping 16 matching lines...) Expand all Loading... |
35 | 34 |
36 @js.NoSideEffects() | 35 @js.NoSideEffects() |
37 @js.NoInline() | 36 @js.NoInline() |
38 @js.NoThrows() | 37 @js.NoThrows() |
39 baz() { | 38 baz() { |
40 throw 'in baz function'; | 39 throw 'in baz function'; |
41 } | 40 } |
42 | 41 |
43 @js.NoInline() | 42 @js.NoInline() |
44 geeNoInline() { | 43 geeNoInline() { |
45 // Use `gee` several times, so `gee` isn't used only once (and thus inlinable | 44 // Use `gee` several times, so `gee` isn't used only once (and thus inlinable |
46 // independently of its size). | 45 // independently of its size). |
47 gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); | 46 gee(); |
48 gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); | 47 gee(); |
49 gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); | 48 gee(); |
50 gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); gee(); | 49 gee(); |
| 50 gee(); |
| 51 gee(); |
| 52 gee(); |
| 53 gee(); |
| 54 gee(); |
| 55 gee(); |
| 56 gee(); |
| 57 gee(); |
| 58 gee(); |
| 59 gee(); |
| 60 gee(); |
| 61 gee(); |
| 62 gee(); |
| 63 gee(); |
| 64 gee(); |
| 65 gee(); |
| 66 gee(); |
| 67 gee(); |
| 68 gee(); |
| 69 gee(); |
| 70 gee(); |
| 71 gee(); |
| 72 gee(); |
| 73 gee(); |
| 74 gee(); |
| 75 gee(); |
| 76 gee(); |
| 77 gee(); |
| 78 gee(); |
| 79 gee(); |
| 80 gee(); |
| 81 gee(); |
| 82 gee(); |
| 83 gee(); |
| 84 gee(); |
| 85 gee(); |
51 } | 86 } |
52 | 87 |
53 @js.ForceInline() | 88 @js.ForceInline() |
54 // Big function that would normally not be inlinable. | 89 // Big function that would normally not be inlinable. |
55 gee([c]) { | 90 gee([c]) { |
56 if (c != null) { | 91 if (c != null) { |
57 x = "in gee function"; | 92 x = "in gee function"; |
58 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 93 geeNoInline(); |
59 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 94 geeNoInline(); |
60 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 95 geeNoInline(); |
61 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 96 geeNoInline(); |
62 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 97 geeNoInline(); |
63 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 98 geeNoInline(); |
64 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 99 geeNoInline(); |
65 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 100 geeNoInline(); |
66 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 101 geeNoInline(); |
67 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 102 geeNoInline(); |
68 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 103 geeNoInline(); |
69 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 104 geeNoInline(); |
70 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 105 geeNoInline(); |
71 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 106 geeNoInline(); |
72 geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); geeNoInline(); | 107 geeNoInline(); |
| 108 geeNoInline(); |
| 109 geeNoInline(); |
| 110 geeNoInline(); |
| 111 geeNoInline(); |
| 112 geeNoInline(); |
| 113 geeNoInline(); |
| 114 geeNoInline(); |
| 115 geeNoInline(); |
| 116 geeNoInline(); |
| 117 geeNoInline(); |
| 118 geeNoInline(); |
| 119 geeNoInline(); |
| 120 geeNoInline(); |
| 121 geeNoInline(); |
| 122 geeNoInline(); |
| 123 geeNoInline(); |
| 124 geeNoInline(); |
| 125 geeNoInline(); |
| 126 geeNoInline(); |
| 127 geeNoInline(); |
| 128 geeNoInline(); |
| 129 geeNoInline(); |
| 130 geeNoInline(); |
| 131 geeNoInline(); |
| 132 geeNoInline(); |
| 133 geeNoInline(); |
| 134 geeNoInline(); |
| 135 geeNoInline(); |
| 136 geeNoInline(); |
| 137 geeNoInline(); |
| 138 geeNoInline(); |
| 139 geeNoInline(); |
| 140 geeNoInline(); |
| 141 geeNoInline(); |
| 142 geeNoInline(); |
| 143 geeNoInline(); |
| 144 geeNoInline(); |
| 145 geeNoInline(); |
| 146 geeNoInline(); |
| 147 geeNoInline(); |
| 148 geeNoInline(); |
| 149 geeNoInline(); |
| 150 geeNoInline(); |
| 151 geeNoInline(); |
| 152 geeNoInline(); |
| 153 geeNoInline(); |
| 154 geeNoInline(); |
| 155 geeNoInline(); |
| 156 geeNoInline(); |
| 157 geeNoInline(); |
| 158 geeNoInline(); |
| 159 geeNoInline(); |
| 160 geeNoInline(); |
| 161 geeNoInline(); |
| 162 geeNoInline(); |
| 163 geeNoInline(); |
| 164 geeNoInline(); |
| 165 geeNoInline(); |
| 166 geeNoInline(); |
| 167 geeNoInline(); |
73 } | 168 } |
74 } | 169 } |
75 | 170 |
76 main() { | 171 main() { |
77 JS('', 'String("in main function")'); | 172 JS('', 'String("in main function")'); |
78 var c; | 173 var c; |
79 if (new DateTime.now().millisecondsSinceEpoch != 42) { | 174 if (new DateTime.now().millisecondsSinceEpoch != 42) { |
80 c = new C(); | 175 c = new C(); |
81 print(c.m()); | 176 print(c.m()); |
82 foo(c); | 177 foo(c); |
(...skipping 11 matching lines...) Expand all Loading... |
94 gee(new C()); | 189 gee(new C()); |
95 print(x); | 190 print(x); |
96 check(JS('', 'arguments.callee')); | 191 check(JS('', 'arguments.callee')); |
97 } | 192 } |
98 | 193 |
99 @js.NoInline() | 194 @js.NoInline() |
100 check(func) { | 195 check(func) { |
101 JS('', 'String("in check function")'); | 196 JS('', 'String("in check function")'); |
102 var source = JS('String', 'String(#)', func); | 197 var source = JS('String', 'String(#)', func); |
103 print(source); | 198 print(source); |
104 Expect.isTrue(source.contains('"in main function"'), | 199 Expect.isTrue(source.contains('"in main function"'), "should contain 'main'"); |
105 "should contain 'main'"); | 200 Expect.isTrue( |
106 Expect.isTrue(source.contains('"in simple function"'), | 201 source.contains('"in simple function"'), "should inline 'simple'"); |
107 "should inline 'simple'"); | 202 Expect.isTrue(source.contains('"in foo function"'), "should inline 'foo'"); |
108 Expect.isTrue(source.contains('"in foo function"'), | 203 Expect.isFalse( |
109 "should inline 'foo'"); | 204 source.contains('"in bar function"'), "should not inline 'bar'"); |
110 Expect.isFalse(source.contains('"in bar function"'), | 205 Expect.isFalse( |
111 "should not inline 'bar'"); | 206 source.contains('"in check function"'), "should not inline 'check'"); |
112 Expect.isFalse(source.contains('"in check function"'), | |
113 "should not inline 'check'"); | |
114 Expect.isFalse(source.contains('"in noinline function"'), | 207 Expect.isFalse(source.contains('"in noinline function"'), |
115 "should not inline 'noinline'"); | 208 "should not inline 'noinline'"); |
116 Expect.equals(2, new RegExp(r'\.c_field').allMatches(source).length, | 209 Expect.equals(2, new RegExp(r'\.c_field').allMatches(source).length, |
117 "should contain r'\.c_field' exactly twice"); | 210 "should contain r'\.c_field' exactly twice"); |
118 Expect.isFalse(source.contains('.d_field'), | 211 Expect.isFalse( |
119 "should not contain r'\.d_field'"); | 212 source.contains('.d_field'), "should not contain r'\.d_field'"); |
120 Expect.isTrue(source.contains('"in gee function"'), | 213 Expect.isTrue(source.contains('"in gee function"'), "must inline 'gee'"); |
121 "must inline 'gee'"); | |
122 } | 214 } |
123 | 215 |
124 simple() { | 216 simple() { |
125 JS('', 'String("in simple function")'); | 217 JS('', 'String("in simple function")'); |
126 } | 218 } |
127 | 219 |
128 @js.NoInline() | 220 @js.NoInline() |
129 noinline() { | 221 noinline() { |
130 JS('', 'String("in noinline function")'); | 222 JS('', 'String("in noinline function")'); |
131 } | 223 } |
OLD | NEW |