| Index: test/cctest/test-api.cc
|
| ===================================================================
|
| --- test/cctest/test-api.cc (revision 924)
|
| +++ test/cctest/test-api.cc (working copy)
|
| @@ -1648,6 +1648,15 @@
|
| }
|
|
|
|
|
| +v8::Handle<Value> CCatcher(const v8::Arguments& args) {
|
| + if (args.Length() < 1) return v8::Boolean::New(false);
|
| + v8::HandleScope scope;
|
| + v8::TryCatch try_catch;
|
| + v8::Script::Compile(args[0]->ToString())->Run();
|
| + return v8::Boolean::New(try_catch.HasCaught());
|
| +}
|
| +
|
| +
|
| THREADED_TEST(APICatch) {
|
| v8::HandleScope scope;
|
| Local<ObjectTemplate> templ = ObjectTemplate::New();
|
| @@ -1678,6 +1687,25 @@
|
| }
|
|
|
|
|
| +// Test that a try-finally block doesn't shadow a try-catch block
|
| +// when setting up an external handler.
|
| +THREADED_TEST(TryCatchInTryFinally) {
|
| + v8::HandleScope scope;
|
| + Local<ObjectTemplate> templ = ObjectTemplate::New();
|
| + templ->Set(v8_str("CCatcher"),
|
| + v8::FunctionTemplate::New(CCatcher));
|
| + LocalContext context(0, templ);
|
| + Local<Value> result = CompileRun("try {"
|
| + " try {"
|
| + " CCatcher('throw 7;');"
|
| + " } finally {"
|
| + " }"
|
| + "} catch (e) {"
|
| + "}");
|
| + CHECK(result->IsTrue());
|
| +}
|
| +
|
| +
|
| static void receive_message(v8::Handle<v8::Message> message,
|
| v8::Handle<v8::Value> data) {
|
| message_received = true;
|
|
|