Index: test/cctest/compiler/test-run-jsexceptions.cc |
diff --git a/test/cctest/compiler/test-run-jsexceptions.cc b/test/cctest/compiler/test-run-jsexceptions.cc |
index 0712ab62057d742eef946eb74b3c4cc0a6e5e0ab..26aaa44ff42b21f5079e15f5e536128881ccf8d5 100644 |
--- a/test/cctest/compiler/test-run-jsexceptions.cc |
+++ b/test/cctest/compiler/test-run-jsexceptions.cc |
@@ -43,3 +43,113 @@ TEST(ThrowSourcePosition) { |
CHECK_EQ(4, message->GetLineNumber()); |
CHECK_EQ(95, message->GetStartPosition()); |
} |
+ |
+ |
+TEST(Catch) { |
titzer
2015/02/02 09:47:29
+ 1
Good to have cctests for TurboFan, yay. Can w
Michael Starzinger
2015/02/02 14:47:41
The cases covered by these cases are already cover
|
+ i::FLAG_turbo_exceptions = true; |
+ const char* src = |
+ "(function(a,b) {" |
+ " var r = '-';" |
+ " try {" |
+ " r += 'A-';" |
+ " throw 'B-';" |
+ " } catch (e) {" |
+ " r += e;" |
+ " }" |
+ " return r;" |
+ "})"; |
+ FunctionTester T(src); |
+ |
+ T.CheckCall(T.Val("-A-B-")); |
+} |
+ |
+ |
+TEST(CatchNested) { |
+ i::FLAG_turbo_exceptions = true; |
+ const char* src = |
+ "(function(a,b) {" |
+ " var r = '-';" |
+ " try {" |
+ " r += 'A-';" |
+ " throw 'C-';" |
+ " } catch (e) {" |
+ " try {" |
+ " throw 'B-';" |
+ " } catch (e) {" |
+ " r += e;" |
+ " }" |
+ " r += e;" |
+ " }" |
+ " return r;" |
+ "})"; |
+ FunctionTester T(src); |
+ |
+ T.CheckCall(T.Val("-A-B-C-")); |
+} |
+ |
+ |
+TEST(CatchBreak) { |
+ i::FLAG_turbo_exceptions = true; |
+ const char* src = |
+ "(function(a,b) {" |
+ " var r = '-';" |
+ " L: try {" |
+ " r += 'A-';" |
+ " if (a) break L;" |
+ " r += 'B-';" |
+ " throw 'C-';" |
+ " } catch (e) {" |
+ " if (b) break L;" |
+ " r += e;" |
+ " }" |
+ " r += 'D-';" |
+ " return r;" |
+ "})"; |
+ FunctionTester T(src); |
+ |
+ T.CheckCall(T.Val("-A-D-"), T.true_value(), T.false_value()); |
+ T.CheckCall(T.Val("-A-B-D-"), T.false_value(), T.true_value()); |
+ T.CheckCall(T.Val("-A-B-C-D-"), T.false_value(), T.false_value()); |
+} |
+ |
+ |
+TEST(Finally) { |
+ i::FLAG_turbo_exceptions = true; |
+ const char* src = |
+ "(function(a,b) {" |
+ " var r = '-';" |
+ " try {" |
+ " r += 'A-';" |
+ " } finally {" |
+ " r += 'B-';" |
+ " }" |
+ " return r;" |
+ "})"; |
+ FunctionTester T(src); |
+ |
+ T.CheckCall(T.Val("-A-B-")); |
+} |
+ |
+ |
+TEST(FinallyBreak) { |
+ i::FLAG_turbo_exceptions = true; |
+ const char* src = |
+ "(function(a,b) {" |
+ " var r = '-';" |
+ " L: try {" |
+ " r += 'A-';" |
+ " if (a) return r;" |
+ " r += 'B-';" |
+ " if (b) break L;" |
+ " r += 'C-';" |
+ " } finally {" |
+ " r += 'D-';" |
+ " }" |
+ " return r;" |
+ "})"; |
+ FunctionTester T(src); |
+ |
+ T.CheckCall(T.Val("-A-"), T.true_value(), T.false_value()); |
+ T.CheckCall(T.Val("-A-B-D-"), T.false_value(), T.true_value()); |
+ T.CheckCall(T.Val("-A-B-C-D-"), T.false_value(), T.false_value()); |
+} |