mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 16:26:38 +00:00
139187ae5f
equal. The vm does not canonicalize all strings as javascript does. R=srdjan@google.com Review URL: https://codereview.chromium.org//312693008 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37013 260f80e4-7a28-3924-810f-c04153c831b5
156 lines
4.7 KiB
Dart
156 lines
4.7 KiB
Dart
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
// VMOptions=--warn_on_javascript_compatibility --warning_as_error --optimization_counter_threshold=5
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
f(x, y) {
|
|
// Unoptimized code.
|
|
1 is double; /// 00: compile-time error
|
|
if (1 is double) { x++; } /// 01: compile-time error
|
|
try { 1 as double; } on CastError catch (e) { } /// 02: compile-time error
|
|
try { var y = 1 as double; } on CastError catch (e) { } /// 03: compile-time error
|
|
1.0 is int; /// 04: compile-time error
|
|
if (1.0 is int) { x++; } /// 05: compile-time error
|
|
try { 1.0 as int; } on CastError catch (e) { } /// 06: compile-time error
|
|
try { var z = 1.0 as int; } on CastError catch (e) { } /// 07: compile-time error
|
|
|
|
x is double; /// 10: ok
|
|
if (x is double) { } /// 11: ok
|
|
try { x as double; } on CastError catch (e) { } /// 12: ok
|
|
try { var z = x as double; } on CastError catch (e) { } /// 13: ok
|
|
y is int; /// 14: ok
|
|
if (y is int) { } /// 15: ok
|
|
try { y as int; } on CastError catch (e) { } /// 16: ok
|
|
try { var z = y as int; } on CastError catch (e) { } /// 17: ok
|
|
|
|
"${1.0}"; /// 20: compile-time error
|
|
var z = "${1.0}"; /// 21: compile-time error
|
|
(1.0).toString(); /// 22: ok
|
|
var z = (1.0).toString(); /// 23: ok
|
|
"$y"; /// 24: ok
|
|
var z = "$y"; /// 25: ok
|
|
y.toString(); /// 26: ok
|
|
var z = y.toString(); /// 27: ok
|
|
|
|
var a = "yz";
|
|
var b = "xyz";
|
|
b = b.substring(1);
|
|
if (identical(a, b)) { } /// 28: ok
|
|
|
|
if (x > 10) {
|
|
// Optimized code.
|
|
x is double; /// 30: ok
|
|
if (x is double) { } /// 31: ok
|
|
try { x as double; } on CastError catch (e) { } /// 32: ok
|
|
try { var z = x as double; } on CastError catch (e) { } /// 33: ok
|
|
y is int; /// 34: ok
|
|
if (y is int) { } /// 35: ok
|
|
try { y as int; } on CastError catch (e) { } /// 36: ok
|
|
try { var z = y as int; } on CastError catch (e) { } /// 37: ok
|
|
|
|
"${1.0}"; /// 40: compile-time error
|
|
var z = "${1.0}"; /// 41: compile-time error
|
|
(1.0).toString(); /// 42: ok
|
|
var z = (1.0).toString(); /// 43: ok
|
|
"$y"; /// 44: ok
|
|
var z = "$y"; /// 45: ok
|
|
y.toString(); /// 46: ok
|
|
var z = y.toString(); /// 47: ok
|
|
|
|
var a = "yz";
|
|
var b = "xyz";
|
|
b = b.substring(1);
|
|
if (identical(a, b)) { } /// 48: ok
|
|
}
|
|
}
|
|
|
|
k(x, y) {
|
|
// Unoptimized code.
|
|
1.5 is double;
|
|
if (1.5 is double) { x++; }
|
|
try { 1.5 as double; } on CastError catch (e) { }
|
|
try { var y = 1.5 as double; } on CastError catch (e) { }
|
|
1.5 is int;
|
|
if (1.5 is int) { x++; }
|
|
try { 1.5 as int; } on CastError catch (e) { }
|
|
try { var z = 1.5 as int; } on CastError catch (e) { }
|
|
|
|
1.5 is double;
|
|
if (1.5 is double) { x++; }
|
|
try { 1.5 as double; } on CastError catch (e) { }
|
|
try { var y = 1.5 as double; } on CastError catch (e) { }
|
|
1.5 is int;
|
|
if (1.5 is int) { x++; }
|
|
try { 1.5 as int; } on CastError catch (e) { }
|
|
try { var z = 1.5 as int; } on CastError catch (e) { }
|
|
|
|
x is double;
|
|
if (x is double) { }
|
|
try { x as double; } on CastError catch (e) { }
|
|
try { var z = x as double; } on CastError catch (e) { }
|
|
y is int;
|
|
if (y is int) { }
|
|
try { y as int; } on CastError catch (e) { }
|
|
try { var z = y as int; } on CastError catch (e) { }
|
|
|
|
"${1.5}";
|
|
var z = "${1.5}";
|
|
(1.5).toString();
|
|
z = (1.5).toString();
|
|
"$y";
|
|
z = "$y";
|
|
y.toString();
|
|
z = y.toString();
|
|
|
|
if (x > 10) {
|
|
// Optimized code.
|
|
x is double;
|
|
if (x is double) { }
|
|
try { x as double; } on CastError catch (e) { }
|
|
try { var z = x as double; } on CastError catch (e) { }
|
|
y is int;
|
|
if (y is int) { }
|
|
try { y as int; } on CastError catch (e) { }
|
|
try { var z = y as int; } on CastError catch (e) { }
|
|
|
|
"${1.5}";
|
|
var z = "${1.5}";
|
|
(1.5).toString();
|
|
z = (1.5).toString();
|
|
"$y";
|
|
z = "$y";
|
|
y.toString();
|
|
z = y.toString();
|
|
}
|
|
}
|
|
|
|
g(x, y) => f(x, y); // Test inlining calls.
|
|
h(x, y) => g(x, y);
|
|
|
|
// We don't test for _JavascriptCompatibilityError since it's not visible.
|
|
// It should not be visible since it doesn't exist on dart2js.
|
|
bool isJavascriptCompatibilityError(e) =>
|
|
e is Error && "$e".contains("Javascript Compatibility Error");
|
|
|
|
main() {
|
|
// Since the warning (or error in case of --warning_as_error) is issued at
|
|
// most once per location, the Expect.throw must guard the whole loop.
|
|
Expect.throws(
|
|
() {
|
|
for (var i = 0; i < 20; i++) {
|
|
h(i, i * 1.0);
|
|
}
|
|
},
|
|
isJavascriptCompatibilityError);
|
|
|
|
// No warnings (errors) should be issued after this point.
|
|
for (var i = 0; i < 20; i++) {
|
|
k(i * 1.0, i);
|
|
k(i * 1.0, i + 0.5);
|
|
}
|
|
}
|
|
|