Index: runtime/vm/debugger_api_impl.cc |
=================================================================== |
--- runtime/vm/debugger_api_impl.cc (revision 21556) |
+++ runtime/vm/debugger_api_impl.cc (working copy) |
@@ -99,25 +99,37 @@ |
return Api::True(isolate); |
} |
- |
-DART_EXPORT void Dart_SetBreakpointHandler(Dart_BreakpointHandler bp_handler) { |
- BreakpointHandler* handler = |
- reinterpret_cast<BreakpointHandler*>(bp_handler); |
- Debugger::SetBreakpointHandler(handler); |
-} |
- |
- |
+static Dart_PausedEventHandler* paused_event_handler = NULL; |
static Dart_BreakpointResolvedHandler* bp_resolved_handler = NULL; |
static Dart_ExceptionThrownHandler* exc_thrown_handler = NULL; |
static Dart_IsolateEventHandler* isolate_event_handler = NULL; |
+static Dart_BreakpointHandler* legacy_bp_handler = NULL; |
+ |
static void DebuggerEventHandler(Debugger::DebuggerEvent* event) { |
Isolate* isolate = Isolate::Current(); |
ASSERT(isolate != NULL); |
ASSERT(isolate->debugger() != NULL); |
Dart_IsolateId isolate_id = isolate->debugger()->GetIsolateId(); |
- if (event->type == Debugger::kBreakpointResolved) { |
+ if (event->type == Debugger::kBreakpointReached) { |
+ if (legacy_bp_handler != NULL) { |
+ Dart_StackTrace stack_trace = |
+ reinterpret_cast<Dart_StackTrace>(isolate->debugger()->StackTrace()); |
+ (*legacy_bp_handler)(isolate_id, NULL, stack_trace); |
+ return; |
+ } |
+ if (paused_event_handler == NULL) { |
+ return; |
+ } |
+ Dart_CodeLocation location; |
+ ActivationFrame* top_frame = event->top_frame; |
+ location.script_url = Api::NewHandle(isolate, top_frame->SourceUrl()); |
+ const Library& lib = Library::Handle(top_frame->Library()); |
+ location.library_id = lib.index(); |
+ location.token_pos = top_frame->TokenPos(); |
+ (*paused_event_handler)(isolate_id, location); |
+ } else if (event->type == Debugger::kBreakpointResolved) { |
if (bp_resolved_handler == NULL) { |
return; |
} |
@@ -151,6 +163,18 @@ |
} |
+DART_EXPORT void Dart_SetBreakpointHandler(Dart_BreakpointHandler bp_handler) { |
+ legacy_bp_handler = bp_handler; |
+ Debugger::SetEventHandler(DebuggerEventHandler); |
+} |
+ |
+ |
+DART_EXPORT void Dart_SetPausedEventHandler(Dart_PausedEventHandler handler) { |
+ paused_event_handler = handler; |
+ Debugger::SetEventHandler(DebuggerEventHandler); |
+} |
+ |
+ |
DART_EXPORT void Dart_SetBreakpointResolvedHandler( |
Dart_BreakpointResolvedHandler handler) { |
bp_resolved_handler = handler; |