OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 "package:expect/expect.dart"; | 5 import "package:expect/expect.dart"; |
6 | 6 |
7 // Test that optimized 'null + x' and slow path '+' produce the same error. | 7 // Test that optimized 'null + x' and slow path '+' produce the same error. |
8 // | 8 // |
9 // They don't, sometimes we generate null.$add, sometimes JSNull_methods.$add. | 9 // They don't, sometimes we generate null.$add, sometimes JSNull_methods.$add. |
10 | 10 |
11 | |
12 @NoInline() | 11 @NoInline() |
13 @AssumeDynamic() | 12 @AssumeDynamic() |
14 confuse(x) => x; | 13 confuse(x) => x; |
15 | 14 |
16 void check2(String name, name1, f1, name2, f2) { | 15 void check2(String name, name1, f1, name2, f2) { |
17 Error trap(part, f) { | 16 Error trap(part, f) { |
18 try { | 17 try { |
19 f(); | 18 f(); |
20 } catch (e) { | 19 } catch (e) { |
21 return e; | 20 return e; |
22 } | 21 } |
23 Expect.fail('should throw: $name.$part'); | 22 Expect.fail('should throw: $name.$part'); |
24 } | 23 } |
| 24 |
25 var e1 = trap(name1, f1); | 25 var e1 = trap(name1, f1); |
26 var e2 = trap(name2, f2); | 26 var e2 = trap(name2, f2); |
27 var s1 = '$e1'; | 27 var s1 = '$e1'; |
28 var s2 = '$e2'; | 28 var s2 = '$e2'; |
29 Expect.equals(s1, s2, '\n $name.$name1: "$s1"\n $name.$name2: "$s2"\n'); | 29 Expect.equals(s1, s2, '\n $name.$name1: "$s1"\n $name.$name2: "$s2"\n'); |
30 } | 30 } |
31 | 31 |
32 void check(String name, f1, f2, [f3, f4, f5, f6]) { | 32 void check(String name, f1, f2, [f3, f4, f5, f6]) { |
33 check2(name, 'f1', f1, 'f2', f2); | 33 check2(name, 'f1', f1, 'f2', f2); |
34 if (f3 != null) check2(name, 'f1', f1, 'f3', f3); | 34 if (f3 != null) check2(name, 'f1', f1, 'f3', f3); |
35 if (f4 != null) check2(name, 'f1', f1, 'f4', f4); | 35 if (f4 != null) check2(name, 'f1', f1, 'f4', f4); |
36 if (f5 != null) check2(name, 'f1', f1, 'f5', f5); | 36 if (f5 != null) check2(name, 'f1', f1, 'f5', f5); |
37 if (f6 != null) check2(name, 'f1', f1, 'f6', f6); | 37 if (f6 != null) check2(name, 'f1', f1, 'f6', f6); |
38 } | 38 } |
39 | 39 |
40 | |
41 class NullPlusInt { | 40 class NullPlusInt { |
42 static f1() { | 41 static f1() { |
43 return confuse(null) + confuse(1); | 42 return confuse(null) + confuse(1); |
44 } | 43 } |
45 | 44 |
46 static f2() { | 45 static f2() { |
47 return confuse(null) + 1; | 46 return confuse(null) + 1; |
48 } | 47 } |
49 | 48 |
50 static f3() { | 49 static f3() { |
(...skipping 22 matching lines...) Expand all Loading... |
73 check('NullPlusInt', f3, f3); | 72 check('NullPlusInt', f3, f3); |
74 check('NullPlusInt', f4, f4); | 73 check('NullPlusInt', f4, f4); |
75 check('NullPlusInt', f5, f5); | 74 check('NullPlusInt', f5, f5); |
76 check('NullPlusInt', f6, f6); | 75 check('NullPlusInt', f6, f6); |
77 } | 76 } |
78 } | 77 } |
79 | 78 |
80 main() { | 79 main() { |
81 NullPlusInt.test(); | 80 NullPlusInt.test(); |
82 } | 81 } |
OLD | NEW |