Chromium Code Reviews| Index: src/debug.cc |
| diff --git a/src/debug.cc b/src/debug.cc |
| index dadaa915d48e0fb17467097156c89047e57edf98..ac4d1217792ced9e12746af1a8c90ecf412973fe 100644 |
| --- a/src/debug.cc |
| +++ b/src/debug.cc |
| @@ -2685,6 +2685,67 @@ void Debugger::OnException(Handle<Object> exception, |
| } |
| +void Debugger::OnSyntaxError(Handle<Script> script) { |
| + HandleScope scope(isolate_); |
| + Debug* debug = isolate_->debug(); |
| + |
| + // No more to do if not debugging. |
| + if (!IsDebuggerActive()) return; |
| + |
| + // No compile events while compiling natives. |
| + if (compiling_natives()) return; |
| + |
| + // Store whether in debugger before entering debugger. |
| + bool in_debugger = debug->InDebugger(); |
| + |
| + // Enter the debugger. |
| + EnterDebugger debugger(isolate_); |
| + if (debugger.FailedToEnter()) return; |
| + |
| + // Save breakpoints or not, if SyntaxError ocured? |
|
vsevik
2014/06/06 16:12:01
I don't think we should care about breakpoints in
|
| + |
| + // If debugging there might be script break points registered for this |
| + // script. Make sure that these break points are set. |
| + |
| + // Get the function UpdateScriptBreakPoints (defined in debug-debugger.js). |
| + Handle<String> update_script_break_points_string = |
| + isolate_->factory()->InternalizeOneByteString( |
| + STATIC_ASCII_VECTOR("UpdateScriptBreakPoints")); |
| + Handle<GlobalObject> debug_global(debug->debug_context()->global_object()); |
| + Handle<Object> update_script_break_points = |
| + Object::GetProperty( |
| + debug_global, update_script_break_points_string).ToHandleChecked(); |
| + if (!update_script_break_points->IsJSFunction()) { |
| + return; |
| + } |
| + ASSERT(update_script_break_points->IsJSFunction()); |
| + |
| + // Wrap the script object in a proper JS object before passing it |
| + // to JavaScript. |
| + Handle<Object> wrapper = Script::GetWrapper(script); |
| + |
| + // Call UpdateScriptBreakPoints expect no exceptions. |
| + Handle<Object> argv[] = { wrapper }; |
| + if (Execution::TryCall(Handle<JSFunction>::cast(update_script_break_points), |
| + isolate_->js_builtins_object(), |
| + ARRAY_SIZE(argv), |
| + argv).is_null()) { |
| + return; |
| + } |
| + // Bail out based on state or if there is no listener for this event |
| + if (!Debugger::EventActive(v8::AfterCompile)) return; |
| + |
| + // Create the compile state object. |
| + Handle<Object> event_data; |
| + // Bail out and don't call debugger if exception. |
| + if (!MakeCompileEvent(script, false).ToHandle(&event_data)) return; |
| + |
| + // Process debug event. |
| + ProcessDebugEvent(v8::ScriptFailedToParse, |
| + Handle<JSObject>::cast(event_data), true); |
| +} |
| + |
| + |
| void Debugger::OnDebugBreak(Handle<Object> break_points_hit, |
| bool auto_continue) { |
| HandleScope scope(isolate_); |