OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 // Test that captured variables are boxed regardless of where they are mutated. | 5 // Test that captured variables are boxed regardless of where they are mutated. |
6 | 6 |
7 /*mutateUnused:*/ | 7 /*element: mutateUnused:*/ |
8 mutateUnused() { | 8 mutateUnused() { |
9 var localVar; | 9 var localVar; |
10 /**/ () { | 10 /**/ () { |
11 // Use nothing. | 11 // Use nothing. |
12 }; | 12 }; |
13 localVar = 42; | 13 localVar = 42; |
14 return localVar; | 14 return localVar; |
15 } | 15 } |
16 | 16 |
17 /*mutateInClosure:box=(box0 which holds [localVar])*/ | 17 /*element: mutateInClosure:box=(box0 which holds [localVar])*/ |
18 mutateInClosure() { | 18 mutateInClosure() { |
19 var /*boxed*/ localVar; | 19 var /*boxed*/ localVar; |
20 /*free=[box0,localVar]*/ () { | 20 /*free=[box0,localVar]*/ () { |
21 localVar = 43; | 21 localVar = 43; |
22 }; | 22 }; |
23 return localVar; | 23 return localVar; |
24 } | 24 } |
25 | 25 |
26 /*mutateOutsideClosure:box=(box0 which holds [localVar])*/ | 26 /*element: mutateOutsideClosure:box=(box0 which holds [localVar])*/ |
27 mutateOutsideClosure() { | 27 mutateOutsideClosure() { |
28 var /*boxed*/ localVar; | 28 var /*boxed*/ localVar; |
29 /*free=[box0,localVar]*/ () { | 29 /*free=[box0,localVar]*/ () { |
30 print(localVar); | 30 print(localVar); |
31 }; | 31 }; |
32 localVar = 44; | 32 localVar = 44; |
33 return localVar; | 33 return localVar; |
34 } | 34 } |
35 | 35 |
36 /*mutateInOtherClosure:box=(box0 which holds [localVar])*/ | 36 /*element: mutateInOtherClosure:box=(box0 which holds [localVar])*/ |
37 mutateInOtherClosure() { | 37 mutateInOtherClosure() { |
38 var /*boxed*/ localVar; | 38 var /*boxed*/ localVar; |
39 /*free=[box0,localVar]*/ () { | 39 /*free=[box0,localVar]*/ () { |
40 print(localVar); | 40 print(localVar); |
41 }; | 41 }; |
42 /*free=[box0,localVar]*/ () { | 42 /*free=[box0,localVar]*/ () { |
43 localVar = 45; | 43 localVar = 45; |
44 }; | 44 }; |
45 return localVar; | 45 return localVar; |
46 } | 46 } |
47 | 47 |
48 /*mutateInNestedClosure:box=(box0 which holds [localVar])*/ | 48 /*element: mutateInNestedClosure:box=(box0 which holds [localVar])*/ |
49 mutateInNestedClosure() { | 49 mutateInNestedClosure() { |
50 var /*boxed*/ localVar; | 50 var /*boxed*/ localVar; |
51 /*free=[box0,localVar]*/ () { | 51 /*free=[box0,localVar]*/ () { |
52 print(localVar); | 52 print(localVar); |
53 /*free=[box0,localVar]*/ () { | 53 /*free=[box0,localVar]*/ () { |
54 localVar = 46; | 54 localVar = 46; |
55 }; | 55 }; |
56 }; | 56 }; |
57 return localVar; | 57 return localVar; |
58 } | 58 } |
59 | 59 |
60 main() { | 60 main() { |
61 mutateUnused(); | 61 mutateUnused(); |
62 mutateInClosure(); | 62 mutateInClosure(); |
63 mutateOutsideClosure(); | 63 mutateOutsideClosure(); |
64 mutateInOtherClosure(); | 64 mutateInOtherClosure(); |
65 mutateInNestedClosure(); | 65 mutateInNestedClosure(); |
66 } | 66 } |
OLD | NEW |