Chromium Code Reviews| Index: src/debug.cc |
| diff --git a/src/debug.cc b/src/debug.cc |
| index b6cdd7ff499f1634a802d128aa4ab1983c60c4bc..6d77c8a8d3a30fbafb85d63e4db57541b3b813ff 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,27 @@ 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>()); |
| + // If a stack overflow happened white creating the message object, silently |
|
Michael Starzinger
2012/04/03 13:31:32
s/white/while/
danno
2012/04/03 13:41:28
Done.
|
| + // fail. |
| + if (isolate->has_pending_exception()) { |
|
Michael Starzinger
2012/04/03 13:31:32
Can this actually happen? If not, I would prefer a
danno
2012/04/03 13:41:28
Done.
On 2012/04/03 13:31:32, Michael Starzinger w
|
| + isolate->clear_pending_exception(); |
| + return false; |
| + } |
| + isolate->set_pending_exception(*exception); |
| MessageHandler::ReportMessage(Isolate::Current(), NULL, message); |
| + isolate->clear_pending_exception(); |
| return false; |
| } |
| @@ -3232,7 +3244,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 |