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

Unified Diff: runtime/vm/isolate.cc

Issue 796003006: - Remove entirely disconnected unhandled exception handler. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 11 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
« no previous file with comments | « runtime/vm/isolate.h ('k') | runtime/vm/object_store.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/isolate.cc
===================================================================
--- runtime/vm/isolate.cc (revision 42724)
+++ runtime/vm/isolate.cc (working copy)
@@ -97,8 +97,6 @@
#endif
bool IsCurrentIsolate() const;
virtual Isolate* isolate() const { return isolate_; }
- bool UnhandledExceptionCallbackHandler(const Object& message,
- const UnhandledException& error);
private:
// Keep in sync with isolate_patch.dart.
@@ -117,8 +115,7 @@
// processing of further events.
bool HandleLibMessage(const Array& message);
- bool ProcessUnhandledException(const Object& message, const Error& result);
- RawFunction* ResolveCallbackFunction();
+ bool ProcessUnhandledException(const Error& result);
Isolate* isolate_;
};
@@ -272,8 +269,7 @@
msg_handler = DartLibraryCalls::LookupHandler(message->dest_port());
if (msg_handler.IsError()) {
delete message;
- return ProcessUnhandledException(Object::null_instance(),
- Error::Cast(msg_handler));
+ return ProcessUnhandledException(Error::Cast(msg_handler));
}
if (msg_handler.IsNull()) {
// If the port has been closed then the message will be dropped at this
@@ -293,8 +289,7 @@
if (msg_obj.IsError()) {
// An error occurred while reading the message.
delete message;
- return ProcessUnhandledException(Object::null_instance(),
- Error::Cast(msg_obj));
+ return ProcessUnhandledException(Error::Cast(msg_obj));
}
if (!msg_obj.IsNull() && !msg_obj.IsInstance()) {
// TODO(turnidge): We need to decide what an isolate does with
@@ -356,7 +351,7 @@
const Object& result = Object::Handle(I,
DartLibraryCalls::HandleMessage(msg_handler, msg));
if (result.IsError()) {
- success = ProcessUnhandledException(msg, Error::Cast(result));
+ success = ProcessUnhandledException(Error::Cast(result));
} else {
ASSERT(result.IsNull());
}
@@ -366,71 +361,6 @@
}
-RawFunction* IsolateMessageHandler::ResolveCallbackFunction() {
- ASSERT(I->object_store()->unhandled_exception_handler() != NULL);
- String& callback_name = String::Handle(I);
- if (I->object_store()->unhandled_exception_handler() != String::null()) {
- callback_name = I->object_store()->unhandled_exception_handler();
- } else {
- callback_name = String::New("_unhandledExceptionCallback");
- }
- Library& lib = Library::Handle(I, I->object_store()->isolate_library());
- Function& func = Function::Handle(I, lib.LookupLocalFunction(callback_name));
- if (func.IsNull()) {
- lib = I->object_store()->root_library();
- // Note: bootstrap code in builtin library may attempt to resolve a
- // callback function before the script is fully loaded, in which case
- // the root library may not be registered yet.
- if (!lib.IsNull()) {
- func = lib.LookupLocalFunction(callback_name);
- }
- }
- return func.raw();
-}
-
-
-bool IsolateMessageHandler::UnhandledExceptionCallbackHandler(
- const Object& message, const UnhandledException& error) {
- const Instance& cause = Instance::Handle(I, error.exception());
- const Instance& stacktrace = Instance::Handle(I, error.stacktrace());
-
- // Wrap these args into an IsolateUncaughtException object.
- const Array& exception_args = Array::Handle(I, Array::New(3));
- exception_args.SetAt(0, message);
- exception_args.SetAt(1, cause);
- exception_args.SetAt(2, stacktrace);
- const Object& exception = Object::Handle(I,
- Exceptions::Create(Exceptions::kIsolateUnhandledException,
- exception_args));
- if (exception.IsError()) {
- return false;
- }
- ASSERT(exception.IsInstance());
-
- // Invoke script's callback function.
- Object& function = Object::Handle(I, ResolveCallbackFunction());
- if (function.IsNull() || function.IsError()) {
- return false;
- }
- const Array& callback_args = Array::Handle(I, Array::New(1));
- callback_args.SetAt(0, exception);
- const Object& result = Object::Handle(I,
- DartEntry::InvokeFunction(Function::Cast(function), callback_args));
- if (result.IsError()) {
- const Error& err = Error::Cast(result);
- OS::PrintErr("failed calling unhandled exception callback: %s\n",
- err.ToErrorCString());
- return false;
- }
-
- ASSERT(result.IsBool());
- bool continue_from_exception = Bool::Cast(result).value();
- if (continue_from_exception) {
- I->object_store()->clear_sticky_error();
- }
- return continue_from_exception;
-}
-
#if defined(DEBUG)
void IsolateMessageHandler::CheckAccess() {
ASSERT(IsCurrentIsolate());
@@ -443,10 +373,10 @@
}
-bool IsolateMessageHandler::ProcessUnhandledException(
- const Object& message, const Error& result) {
+bool IsolateMessageHandler::ProcessUnhandledException(const Error& result) {
+ // Notify the debugger about specific unhandled exceptions which are withheld
+ // when being thrown.
if (result.IsUnhandledException()) {
- // Invoke the isolate's uncaught exception handler, if it exists.
const UnhandledException& error = UnhandledException::Cast(result);
RawInstance* exception = error.exception();
if ((exception == I->object_store()->out_of_memory()) ||
@@ -454,12 +384,6 @@
// We didn't notify the debugger when the stack was full. Do it now.
I->debugger()->SignalExceptionThrown(Instance::Handle(exception));
}
- if ((exception != I->object_store()->out_of_memory()) &&
- (exception != I->object_store()->stack_overflow())) {
- if (UnhandledExceptionCallbackHandler(message, error)) {
- return true;
- }
- }
}
// Invoke the isolate's unhandled exception callback if there is one.
@@ -929,12 +853,6 @@
return false;
}
- // Set up specific unhandled exception handler.
- const String& callback_name = String::Handle(
- isolate, String::New(state->exception_callback_name()));
- isolate->object_store()->
- set_unhandled_exception_handler(callback_name);
-
Object& result = Object::Handle();
result = state->ResolveFunction();
bool is_spawn_uri = state->is_spawn_uri();
@@ -1551,7 +1469,6 @@
library_url_(NULL),
class_name_(NULL),
function_name_(NULL),
- exception_callback_name_(NULL),
serialized_args_(NULL),
serialized_args_len_(0),
serialized_message_(NULL),
@@ -1569,7 +1486,6 @@
const String& class_name = String::Handle(cls.Name());
class_name_ = strdup(class_name.ToCString());
}
- exception_callback_name_ = strdup("_unhandledExceptionCallback");
SerializeObject(message, &serialized_message_, &serialized_message_len_);
}
@@ -1586,7 +1502,6 @@
library_url_(NULL),
class_name_(NULL),
function_name_(NULL),
- exception_callback_name_(NULL),
serialized_args_(NULL),
serialized_args_len_(0),
serialized_message_(NULL),
@@ -1598,7 +1513,6 @@
}
library_url_ = NULL;
function_name_ = strdup("main");
- exception_callback_name_ = strdup("_unhandledExceptionCallback");
SerializeObject(args, &serialized_args_, &serialized_args_len_);
SerializeObject(message, &serialized_message_, &serialized_message_len_);
}
@@ -1610,7 +1524,6 @@
free(library_url_);
free(function_name_);
free(class_name_);
- free(exception_callback_name_);
free(serialized_args_);
free(serialized_message_);
}
« no previous file with comments | « runtime/vm/isolate.h ('k') | runtime/vm/object_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698