Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(908)

Unified Diff: tests/language/try_catch_optimized1_test.dart

Issue 14682020: Optimize functions containing try-catch. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: fixed checked mode tests failure Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tests/language/try_catch_optimized1_test.dart
===================================================================
--- tests/language/try_catch_optimized1_test.dart (revision 0)
+++ tests/language/try_catch_optimized1_test.dart (revision 0)
@@ -0,0 +1,299 @@
+// 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.
+
+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<10000; i++) f1("abc");
+ Expect.equals(99, f1("abc"));
+ Expect.equals(0, f1(null));
+
+ for (var i=0; i<10000; i++) f2("abc");
+ Expect.equals(99, f2("abc"));
+ Expect.equals(null, f2(null));
+
+ f3("123", 0);
+ for (var i=0; i<10000; i++) f3(null, 0);
+ Expect.equals(99, f3("123", 0));
+ Expect.equals(0x40000000, f3(null, 0x3fffffff));
+
+ f4(null);
+ for (var i=0; i<10000; i++) f4(123);
+ f4(null);
+
+ f5(null);
+ for (var i=0; i<10000; i++) f5(123);
+ f5(null);
+
+ f6(null, 1);
+ for (var i=0; i<10000; i++) f6(123, 1);
+ f6(null, 1);
+
+ f7("1.2");
+ f7("Infinity");
+ f7("-Infinity");
+ for (var i=0; i<10000; 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<10000; i++) f7("123456789012345");
+ Expect.equals(true, f7("Infinity"));
+ Expect.equals(true, f7("-Infinity"));
+
+ for (var i=0; i<10000; i++) f8(null);
+ f8(null);
+
+ f9(5);
+ f9(5.0);
+ for (var i=0; i<10000; i++) f9(3);
+ f9(3);
+
+ var y = 1.0;
+ Expect.equals(0, f10(null, y));
+ for (var i = 0; i < 10000; i++) f10("abc", y);
+ Expect.equals(99, f10("abc", y));
+ Expect.equals(0, f10(null, y));
+
+ for (var i=0; i<10000; i++) f11("abc");
+ Expect.equals(99, f11("abc"));
+ Expect.equals(0, f11(null));
+
+ for (var i=0; i<10000; i++) f12(null);
+ f12(null);
+
+ f13(null);
+ for (var i=0; i<10000; i++) f13("abc");
+ Expect.equals(99, f13("abc"));
+ Expect.equals(1, f13(null));
+}

Powered by Google App Engine
This is Rietveld 408576698