| OLD | NEW | 
|---|
| 1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 // VMOptions=--warn_on_javascript_compatibility --warning_as_error --optimizatio
     n_counter_threshold=5 | 5 // VMOptions=--warn_on_javascript_compatibility --warning_as_error --optimizatio
     n_counter_threshold=5 | 
| 6 | 6 | 
| 7 import "package:expect/expect.dart"; | 7 import "package:expect/expect.dart"; | 
| 8 | 8 | 
| 9 f(x, y) { | 9 f(x, y) { | 
| 10   // Unoptimized code. | 10   // Unoptimized and optimized code. | 
| 11   1 is double;  /// 00: compile-time error | 11   1 is double;  /// 00: compile-time error | 
| 12   if (1 is double) { x++; }  /// 01: compile-time error | 12   if (1 is double) { x++; }  /// 01: compile-time error | 
| 13   try { 1 as double; } on CastError catch (e) { }  /// 02: compile-time error | 13   try { 1 as double; } on CastError catch (e) { }  /// 02: compile-time error | 
| 14   try { var y = 1 as double; } on CastError catch (e) { }  /// 03: compile-time 
     error | 14   try { var y = 1 as double; } on CastError catch (e) { }  /// 03: compile-time 
     error | 
| 15   1.0 is int;  /// 04: compile-time error | 15   1.0 is int;  /// 04: compile-time error | 
| 16   if (1.0 is int) { x++; }  /// 05: compile-time error | 16   if (1.0 is int) { x++; }  /// 05: compile-time error | 
| 17   try { 1.0 as int; } on CastError catch (e) { }  /// 06: compile-time error | 17   try { 1.0 as int; } on CastError catch (e) { }  /// 06: compile-time error | 
| 18   try { var z = 1.0 as int; } on CastError catch (e) { }  /// 07: compile-time e
     rror | 18   try { var z = 1.0 as int; } on CastError catch (e) { }  /// 07: compile-time e
     rror | 
| 19 | 19 | 
| 20   x is double;  /// 10: ok | 20   x is double;  /// 10: ok | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 33   "$y";  /// 24: ok | 33   "$y";  /// 24: ok | 
| 34   var z = "$y";  /// 25: ok | 34   var z = "$y";  /// 25: ok | 
| 35   y.toString();  /// 26: ok | 35   y.toString();  /// 26: ok | 
| 36   var z = y.toString();  /// 27: ok | 36   var z = y.toString();  /// 27: ok | 
| 37 | 37 | 
| 38   var a = "yz"; | 38   var a = "yz"; | 
| 39   var b = "xyz"; | 39   var b = "xyz"; | 
| 40   b = b.substring(1); | 40   b = b.substring(1); | 
| 41   if (identical(a, b)) { }  /// 28: ok | 41   if (identical(a, b)) { }  /// 28: ok | 
| 42 | 42 | 
|  | 43   if (identical(x, y)) { }  /// 29: ok | 
|  | 44   if (identical(y, x)) { }  /// 30: ok | 
|  | 45 | 
| 43   if (x > 10) { | 46   if (x > 10) { | 
| 44     // Optimized code. | 47     // Optimized code. | 
| 45     x is double;  /// 30: ok | 48     x is double;  /// 40: ok | 
| 46     if (x is double) { }  /// 31: ok | 49     if (x is double) { }  /// 41: ok | 
| 47     try { x as double; } on CastError catch (e) { }  /// 32: ok | 50     try { x as double; } on CastError catch (e) { }  /// 42: ok | 
| 48     try { var z = x as double; } on CastError catch (e) { }  /// 33: ok | 51     try { var z = x as double; } on CastError catch (e) { }  /// 43: ok | 
| 49     y is int;  /// 34: ok | 52     y is int;  /// 44: ok | 
| 50     if (y is int) { }  /// 35: ok | 53     if (y is int) { }  /// 45: ok | 
| 51     try { y as int; } on CastError catch (e) { }  /// 36: ok | 54     try { y as int; } on CastError catch (e) { }  /// 46: ok | 
| 52     try { var z = y as int; } on CastError catch (e) { }  /// 37: ok | 55     try { var z = y as int; } on CastError catch (e) { }  /// 47: ok | 
| 53 | 56 | 
| 54     "${1.0}";  /// 40: compile-time error | 57     "${1.0}";  /// 50: compile-time error | 
| 55     var z = "${1.0}";  /// 41: compile-time error | 58     var z = "${1.0}";  /// 51: compile-time error | 
| 56     (1.0).toString();  /// 42: ok | 59     (1.0).toString();  /// 52: ok | 
| 57     var z = (1.0).toString();  /// 43: ok | 60     var z = (1.0).toString();  /// 53: ok | 
| 58     "$y";  /// 44: ok | 61     "$y";  /// 54: ok | 
| 59     var z = "$y";  /// 45: ok | 62     var z = "$y";  /// 55: ok | 
| 60     y.toString();  /// 46: ok | 63     y.toString();  /// 56: ok | 
| 61     var z = y.toString();  /// 47: ok | 64     var z = y.toString();  /// 57: ok | 
| 62 | 65 | 
| 63     var a = "yz"; | 66     var a = "yz"; | 
| 64     var b = "xyz"; | 67     var b = "xyz"; | 
| 65     b = b.substring(1); | 68     b = b.substring(1); | 
| 66     if (identical(a, b)) { }  /// 48: ok | 69     if (identical(a, b)) { }  /// 58: ok | 
|  | 70 | 
|  | 71     if (identical(x, y)) { }  /// 59: ok | 
|  | 72     if (identical(y, x)) { }  /// 60: ok | 
| 67   } | 73   } | 
| 68 } | 74 } | 
| 69 | 75 | 
| 70 k(x, y) { | 76 k(x, y) { | 
| 71   // Unoptimized code. | 77   // Unoptimized and optimized code. | 
| 72   1.5 is double; | 78   1.5 is double; | 
| 73   if (1.5 is double) { x++; } | 79   if (1.5 is double) { x++; } | 
| 74   try { 1.5 as double; } on CastError catch (e) { } | 80   try { 1.5 as double; } on CastError catch (e) { } | 
| 75   try { var y = 1.5 as double; } on CastError catch (e) { } | 81   try { var y = 1.5 as double; } on CastError catch (e) { } | 
| 76   1.5 is int; | 82   1.5 is int; | 
| 77   if (1.5 is int) { x++; } | 83   if (1.5 is int) { x++; } | 
| 78   try { 1.5 as int; } on CastError catch (e) { } | 84   try { 1.5 as int; } on CastError catch (e) { } | 
| 79   try { var z = 1.5 as int; } on CastError catch (e) { } | 85   try { var z = 1.5 as int; } on CastError catch (e) { } | 
| 80 | 86 | 
| 81   1.5 is double; | 87   1.5 is double; | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 98 | 104 | 
| 99   "${1.5}"; | 105   "${1.5}"; | 
| 100   var z = "${1.5}"; | 106   var z = "${1.5}"; | 
| 101   (1.5).toString(); | 107   (1.5).toString(); | 
| 102   z = (1.5).toString(); | 108   z = (1.5).toString(); | 
| 103   "$y"; | 109   "$y"; | 
| 104   z = "$y"; | 110   z = "$y"; | 
| 105   y.toString(); | 111   y.toString(); | 
| 106   z = y.toString(); | 112   z = y.toString(); | 
| 107 | 113 | 
|  | 114   var a = "xyz"; | 
|  | 115   var b = "xyz"; | 
|  | 116   b = b.substring(1); | 
|  | 117   if (identical(a, b)) { } | 
|  | 118 | 
|  | 119   if (identical(x, y)) { } | 
|  | 120   if (identical(y, x)) { } | 
|  | 121 | 
| 108   if (x > 10) { | 122   if (x > 10) { | 
| 109     // Optimized code. | 123     // Optimized code. | 
| 110     x is double; | 124     x is double; | 
| 111     if (x is double) { } | 125     if (x is double) { } | 
| 112     try { x as double; } on CastError catch (e) { } | 126     try { x as double; } on CastError catch (e) { } | 
| 113     try { var z = x as double; } on CastError catch (e) { } | 127     try { var z = x as double; } on CastError catch (e) { } | 
| 114     y is int; | 128     y is int; | 
| 115     if (y is int) { } | 129     if (y is int) { } | 
| 116     try { y as int; } on CastError catch (e) { } | 130     try { y as int; } on CastError catch (e) { } | 
| 117     try { var z = y as int; } on CastError catch (e) { } | 131     try { var z = y as int; } on CastError catch (e) { } | 
| 118 | 132 | 
| 119     "${1.5}"; | 133     "${1.5}"; | 
| 120     var z = "${1.5}"; | 134     var z = "${1.5}"; | 
| 121     (1.5).toString(); | 135     (1.5).toString(); | 
| 122     z = (1.5).toString(); | 136     z = (1.5).toString(); | 
| 123     "$y"; | 137     "$y"; | 
| 124     z = "$y"; | 138     z = "$y"; | 
| 125     y.toString(); | 139     y.toString(); | 
| 126     z = y.toString(); | 140     z = y.toString(); | 
|  | 141 | 
|  | 142     var a = "xyz"; | 
|  | 143     var b = "xyz"; | 
|  | 144     b = b.substring(1); | 
|  | 145     if (identical(a, b)) { } | 
|  | 146 | 
|  | 147     if (identical(x, y)) { } | 
|  | 148     if (identical(y, x)) { } | 
| 127   } | 149   } | 
| 128 } | 150 } | 
| 129 | 151 | 
| 130 g(x, y) => f(x, y);  // Test inlining calls. | 152 g(x, y) => f(x, y);  // Test inlining calls. | 
| 131 h(x, y) => g(x, y); | 153 h(x, y) => g(x, y); | 
| 132 | 154 | 
| 133 // We don't test for _JavascriptCompatibilityError since it's not visible. | 155 // We don't test for _JavascriptCompatibilityError since it's not visible. | 
| 134 // It should not be visible since it doesn't exist on dart2js. | 156 // It should not be visible since it doesn't exist on dart2js. | 
| 135 bool isJavascriptCompatibilityError(e) => | 157 bool isJavascriptCompatibilityError(e) => | 
| 136     e is Error && "$e".contains("Javascript Compatibility Error"); | 158     e is Error && "$e".contains("Javascript Compatibility Error"); | 
| 137 | 159 | 
| 138 main() { | 160 main() { | 
| 139   // Since the warning (or error in case of --warning_as_error) is issued at | 161   // Since the warning (or error in case of --warning_as_error) is issued at | 
| 140   // most once per location, the Expect.throw must guard the whole loop. | 162   // most once per location, the Expect.throw must guard the whole loop. | 
| 141   Expect.throws( | 163   Expect.throws( | 
| 142       () { | 164       () { | 
| 143         for (var i = 0; i < 20; i++) { | 165         for (var i = 0; i < 20; i++) { | 
| 144           h(i, i * 1.0); | 166           h(i, i * 1.0); | 
| 145         } | 167         } | 
| 146       }, | 168       }, | 
| 147       isJavascriptCompatibilityError); | 169       isJavascriptCompatibilityError); | 
| 148 | 170 | 
| 149   // No warnings (errors) should be issued after this point. | 171   // No warnings (errors) should be issued after this point. | 
| 150   for (var i = 0; i < 20; i++) { | 172   for (var i = 0; i < 20; i++) { | 
| 151     k(i * 1.0, i); | 173     k(i * 1.0, i); | 
| 152     k(i * 1.0, i + 0.5); | 174     k(i * 1.0, i + 0.5); | 
| 153   } | 175   } | 
| 154 } | 176 } | 
| 155 | 177 | 
| OLD | NEW | 
|---|