mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 03:56:57 +00:00
bb1b39deaf
Change-Id: I71498e6b3d8c6b11ee53fc78b5b1b72dbe8c9fd8 Reviewed-on: https://dart-review.googlesource.com/12299 Commit-Queue: Florian Loitsch <floitsch@google.com> Reviewed-by: Jakob Roland Andersen <jakobr@google.com>
291 lines
5.2 KiB
Dart
291 lines
5.2 KiB
Dart
// Copyright (c) 2013, 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=--optimization-counter-threshold=10 --no-background-compilation
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
maythrow(x) {
|
|
if (x == null) throw 42;
|
|
return 99;
|
|
}
|
|
|
|
f1(x) {
|
|
var result = 123;
|
|
try {
|
|
result = maythrow(x);
|
|
if (result > 100) throw 42;
|
|
} catch (e) {
|
|
Expect.equals(result, 123);
|
|
Expect.equals(42, e);
|
|
result = 0;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
class A {
|
|
maythrow(x) {
|
|
if (x == null) throw 42;
|
|
return 99;
|
|
}
|
|
}
|
|
|
|
f2(x) {
|
|
var result = 123;
|
|
var a = new A();
|
|
try {
|
|
result++;
|
|
result = a.maythrow(x);
|
|
} catch (e) {
|
|
Expect.equals(124, result);
|
|
result = x;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
f3(x, y) {
|
|
var result = 123;
|
|
var a = new A();
|
|
try {
|
|
result++;
|
|
result = a.maythrow(x);
|
|
} catch (e) {
|
|
result = y + 1; // Deopt on overflow
|
|
}
|
|
return result;
|
|
}
|
|
|
|
f4(x) {
|
|
try {
|
|
maythrow(x);
|
|
} catch (e) {
|
|
check_f4(e, "abc");
|
|
}
|
|
}
|
|
|
|
check_f4(e, s) {
|
|
if (e != 42) throw "ERROR";
|
|
if (s != "abc") throw "ERROR";
|
|
}
|
|
|
|
f5(x) {
|
|
try {
|
|
maythrow(x);
|
|
} catch (e) {
|
|
check_f5(e, "abc");
|
|
}
|
|
|
|
try {
|
|
maythrow(x);
|
|
} catch (e) {
|
|
check_f5(e, "abc");
|
|
}
|
|
}
|
|
|
|
check_f5(e, s) {
|
|
if (e != 42) throw "ERROR";
|
|
if (s != "abc") throw "ERROR";
|
|
}
|
|
|
|
f6(x, y) {
|
|
var a = x;
|
|
var b = y;
|
|
var c = 123;
|
|
check_f6(42, null, 1, 123, null, 1);
|
|
try {
|
|
maythrow(x);
|
|
} catch (e) {
|
|
check_f6(e, a, b, c, x, y);
|
|
}
|
|
}
|
|
|
|
check_f6(e, a, b, c, x, y) {
|
|
if (e != 42) throw "ERROR";
|
|
if (a != null) throw "ERROR";
|
|
if (b != 1) throw "ERROR";
|
|
if (c != 123) throw "ERROR";
|
|
if (x != null) throw "ERROR";
|
|
if (y != 1) throw "ERROR";
|
|
}
|
|
|
|
bool f7(String str) {
|
|
double d = double.parse(str);
|
|
var t = d;
|
|
try {
|
|
var a = d.toInt();
|
|
return false;
|
|
} on UnsupportedError catch (e) {
|
|
Expect.equals(true, identical(t, d));
|
|
return true;
|
|
}
|
|
}
|
|
|
|
f8(x, [a = 3, b = 4]) {
|
|
var c = 123;
|
|
var y = a;
|
|
try {
|
|
maythrow(x);
|
|
} catch (e, s) {
|
|
check_f8(e, s, a, b, c, x, y);
|
|
}
|
|
}
|
|
|
|
check_f8(e, s, a, b, c, x, y) {
|
|
if (e != 42) throw "ERROR";
|
|
if (s is! StackTrace) throw "ERROR";
|
|
if (a != 3) {
|
|
print(a);
|
|
throw "ERROR";
|
|
}
|
|
if (b != 4) throw "ERROR";
|
|
if (c != 123) throw "ERROR";
|
|
if (x != null) throw "ERROR";
|
|
if (y != a) throw "ERROR";
|
|
}
|
|
|
|
f9(x, [a = 3, b = 4]) {
|
|
var c = 123;
|
|
var y = a;
|
|
try {
|
|
if (x < a) maythrow(null);
|
|
maythrow(x);
|
|
} catch (e, s) {
|
|
check_f9(e, s, a, b, c, x, y);
|
|
}
|
|
}
|
|
|
|
check_f9(e, s, a, b, c, x, y) {
|
|
if (e != 42) throw "ERROR";
|
|
if (s is! StackTrace) throw "ERROR";
|
|
if (a != 3) {
|
|
print(a);
|
|
throw "ERROR";
|
|
}
|
|
if (b != 4) throw "ERROR";
|
|
if (c != 123) throw "ERROR";
|
|
if (x != null) throw "ERROR";
|
|
if (y != a) throw "ERROR";
|
|
}
|
|
|
|
f10(x, y) {
|
|
var result = 123;
|
|
try {
|
|
result = maythrow(x);
|
|
} catch (e) {
|
|
Expect.equals(123, result);
|
|
Expect.equals(0.5, y / 2.0);
|
|
result = 0;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
f11(x) {
|
|
var result = 123;
|
|
var tmp = x;
|
|
try {
|
|
result = maythrow(x);
|
|
if (result > 100) throw 42;
|
|
} catch (e, s) {
|
|
Expect.equals(123, result);
|
|
Expect.equals(true, identical(tmp, x));
|
|
Expect.equals(true, s is StackTrace);
|
|
result = 0;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
f12([x = null]) {
|
|
try {
|
|
maythrow(x);
|
|
} catch (e) {
|
|
check_f12(e, x);
|
|
}
|
|
}
|
|
|
|
check_f12(e, x) {
|
|
if (e != 42) throw "ERROR";
|
|
if (x != null) throw "ERROR";
|
|
}
|
|
|
|
f13(x) {
|
|
var result = 123;
|
|
try {
|
|
try {
|
|
result = maythrow(x);
|
|
if (result > 100) throw 42;
|
|
} catch (e) {
|
|
Expect.equals(123, result);
|
|
result = 0;
|
|
}
|
|
maythrow(x);
|
|
} catch (e) {
|
|
result++;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
main() {
|
|
for (var i = 0; i < 20; i++) f1("abc");
|
|
Expect.equals(99, f1("abc"));
|
|
Expect.equals(0, f1(null));
|
|
|
|
for (var i = 0; i < 20; i++) f2("abc");
|
|
Expect.equals(99, f2("abc"));
|
|
Expect.equals(null, f2(null));
|
|
|
|
f3("123", 0);
|
|
for (var i = 0; i < 20; i++) f3(null, 0);
|
|
Expect.equals(99, f3("123", 0));
|
|
Expect.equals(0x40000000, f3(null, 0x3fffffff));
|
|
|
|
f4(null);
|
|
for (var i = 0; i < 20; i++) f4(123);
|
|
f4(null);
|
|
|
|
f5(null);
|
|
for (var i = 0; i < 20; i++) f5(123);
|
|
f5(null);
|
|
|
|
f6(null, 1);
|
|
for (var i = 0; i < 20; i++) f6(123, 1);
|
|
f6(null, 1);
|
|
|
|
f7("1.2");
|
|
f7("Infinity");
|
|
f7("-Infinity");
|
|
for (var i = 0; i < 20; i++) f7("1.2");
|
|
Expect.equals(false, f7("1.2"));
|
|
Expect.equals(true, f7("Infinity"));
|
|
Expect.equals(true, f7("-Infinity"));
|
|
Expect.equals(false, f7("123456789012345")); // Deopt.
|
|
for (var i = 0; i < 20; i++) f7("123456789012345");
|
|
Expect.equals(true, f7("Infinity"));
|
|
Expect.equals(true, f7("-Infinity"));
|
|
|
|
for (var i = 0; i < 20; i++) f8(null);
|
|
f8(null);
|
|
|
|
f9(5);
|
|
f9(5.0);
|
|
for (var i = 0; i < 20; i++) f9(3);
|
|
f9(3);
|
|
|
|
var y = 1.0;
|
|
Expect.equals(0, f10(null, y));
|
|
for (var i = 0; i < 20; i++) f10("abc", y);
|
|
Expect.equals(99, f10("abc", y));
|
|
Expect.equals(0, f10(null, y));
|
|
|
|
for (var i = 0; i < 20; i++) f11("abc");
|
|
Expect.equals(99, f11("abc"));
|
|
Expect.equals(0, f11(null));
|
|
|
|
for (var i = 0; i < 20; i++) f12(null);
|
|
f12(null);
|
|
|
|
f13(null);
|
|
for (var i = 0; i < 20; i++) f13("abc");
|
|
Expect.equals(99, f13("abc"));
|
|
Expect.equals(1, f13(null));
|
|
}
|