Index: src/debug.cc |
diff --git a/src/debug.cc b/src/debug.cc |
index b6cdd7ff499f1634a802d128aa4ab1983c60c4bc..457531fa36cd3f768812e6c5a6a118d0395a9d8b 100644 |
--- a/src/debug.cc |
+++ b/src/debug.cc |
@@ -1,4 +1,4 @@ |
-// Copyright 2011 the V8 project authors. All rights reserved. |
+// Copyright 2012 the V8 project authors. All rights reserved. |
// Redistribution and use in source and binary forms, with or without |
// modification, are permitted provided that the following conditions are |
// met: |
@@ -767,15 +767,22 @@ bool Debug::CompileDebuggerScript(int index) { |
Handle<JSFunction> function = |
factory->NewFunctionFromSharedFunctionInfo(function_info, context); |
- Execution::TryCall(function, Handle<Object>(context->global()), |
- 0, NULL, &caught_exception); |
+ Handle<Object> exception = |
+ Execution::TryCall(function, Handle<Object>(context->global()), |
+ 0, NULL, &caught_exception); |
// Check for caught exceptions. |
if (caught_exception) { |
+ ASSERT(!isolate->has_pending_exception()); |
+ MessageLocation computed_location; |
+ isolate->ComputeLocation(&computed_location); |
Handle<Object> message = MessageHandler::MakeMessageObject( |
- "error_loading_debugger", NULL, Vector<Handle<Object> >::empty(), |
- Handle<String>(), Handle<JSArray>()); |
+ "error_loading_debugger", &computed_location, |
+ Vector<Handle<Object> >::empty(), Handle<String>(), Handle<JSArray>()); |
+ ASSERT(!isolate->has_pending_exception()); |
+ isolate->set_pending_exception(*exception); |
MessageHandler::ReportMessage(Isolate::Current(), NULL, message); |
+ isolate->clear_pending_exception(); |
return false; |
} |
@@ -3232,7 +3239,7 @@ EnterDebugger::~EnterDebugger() { |
debug->SetBreak(break_frame_id_, break_id_); |
// Check for leaving the debugger. |
- if (prev_ == NULL) { |
+ if (!load_failed_ && prev_ == NULL) { |
// Clear mirror cache when leaving the debugger. Skip this if there is a |
// pending exception as clearing the mirror cache calls back into |
// JavaScript. This can happen if the v8::Debug::Call is used in which |