| Index: dart/runtime/vm/debugger.h
 | 
| ===================================================================
 | 
| --- dart/runtime/vm/debugger.h	(revision 31530)
 | 
| +++ dart/runtime/vm/debugger.h	(working copy)
 | 
| @@ -27,42 +27,43 @@
 | 
|  // SourceBreakpoint.
 | 
|  class SourceBreakpoint {
 | 
|   public:
 | 
| -  SourceBreakpoint(intptr_t id, const Function& func, intptr_t token_pos);
 | 
| +  SourceBreakpoint(intptr_t id, const Script& script, intptr_t token_pos);
 | 
|  
 | 
|    RawFunction* function() const { return function_; }
 | 
|    intptr_t token_pos() const { return token_pos_; }
 | 
| -  void set_token_pos(intptr_t value) { token_pos_ = value; }
 | 
|    intptr_t id() const { return id_; }
 | 
|  
 | 
| -  RawScript* SourceCode();
 | 
| +  RawScript* script() { return script_; }
 | 
|    RawString* SourceUrl();
 | 
|    intptr_t LineNumber();
 | 
|  
 | 
| -  void GetCodeLocation(Library* lib,
 | 
| -                       Script* script,
 | 
| -                       intptr_t* token_pos) const;
 | 
| +  void GetCodeLocation(Library* lib, Script* script, intptr_t* token_pos);
 | 
|  
 | 
|    void Enable();
 | 
|    void Disable();
 | 
|    bool IsEnabled() const { return is_enabled_; }
 | 
| +  bool IsResolved() { return is_resolved_; }
 | 
|  
 | 
| -  void PrintToJSONStream(JSONStream* stream) const;
 | 
| +  void PrintToJSONStream(JSONStream* stream);
 | 
|  
 | 
|   private:
 | 
|    void VisitObjectPointers(ObjectPointerVisitor* visitor);
 | 
|  
 | 
| -  void set_function(const Function& func);
 | 
| +  void SetResolved(const Function& func, intptr_t token_pos);
 | 
|    void set_next(SourceBreakpoint* value) { next_ = value; }
 | 
|    SourceBreakpoint* next() const { return this->next_; }
 | 
|  
 | 
|    const intptr_t id_;
 | 
| -  RawFunction* function_;
 | 
| +  RawScript* script_;
 | 
|    intptr_t token_pos_;
 | 
| -  intptr_t line_number_;
 | 
| +  bool is_resolved_;
 | 
|    bool is_enabled_;
 | 
| -
 | 
|    SourceBreakpoint* next_;
 | 
|  
 | 
| +  // Valid for resolved breakpoints:
 | 
| +  RawFunction* function_;
 | 
| +  intptr_t line_number_;
 | 
| +
 | 
|    friend class Debugger;
 | 
|    DISALLOW_COPY_AND_ASSIGN(SourceBreakpoint);
 | 
|  };
 | 
| @@ -101,8 +102,6 @@
 | 
|  
 | 
|    void PatchCode();
 | 
|    void RestoreCode();
 | 
| -  void PatchFunctionReturn();
 | 
| -  void RestoreFunctionReturn();
 | 
|  
 | 
|    RawFunction* function_;
 | 
|    intptr_t pc_desc_index_;
 | 
| @@ -304,6 +303,14 @@
 | 
|    void SetStepOut();
 | 
|    bool IsStepping() const { return resume_action_ != kContinue; }
 | 
|  
 | 
| +  bool IsPaused() const { return pause_event_ != NULL; }
 | 
| +
 | 
| +  // Indicates why the debugger is currently paused.  If the debugger
 | 
| +  // is not paused, this returns NULL.  Note that the debugger can be
 | 
| +  // paused for breakpoints, isolate interruption, and (sometimes)
 | 
| +  // exceptions.
 | 
| +  const DebuggerEvent* PauseEvent() const { return pause_event_; }
 | 
| +
 | 
|    void SetExceptionPauseInfo(Dart_ExceptionPauseInfo pause_info);
 | 
|    Dart_ExceptionPauseInfo GetExceptionPauseInfo();
 | 
|  
 | 
| @@ -370,11 +377,18 @@
 | 
|      kSingleStep
 | 
|    };
 | 
|  
 | 
| +  void FindEquivalentFunctions(const Script& script,
 | 
| +                               intptr_t start_pos,
 | 
| +                               intptr_t end_pos,
 | 
| +                               GrowableObjectArray* function_list);
 | 
| +  RawFunction* FindBestFit(const Script& script, intptr_t token_pos);
 | 
| +  RawFunction* FindInnermostClosure(const Function& function,
 | 
| +                                    intptr_t token_pos);
 | 
|    intptr_t ResolveBreakpointPos(const Function& func,
 | 
| -                                intptr_t first_token_pos,
 | 
| -                                intptr_t last_token_pos);
 | 
| +                                intptr_t requested_token_pos);
 | 
|    void DeoptimizeWorld();
 | 
|    void InstrumentForStepping(const Function& target_function);
 | 
| +  SourceBreakpoint* SetBreakpoint(const Script& script, intptr_t token_pos);
 | 
|    SourceBreakpoint* SetBreakpoint(const Function& target_function,
 | 
|                                    intptr_t first_token_pos,
 | 
|                                    intptr_t last_token_pos);
 | 
| @@ -382,10 +396,9 @@
 | 
|    void UnlinkCodeBreakpoints(SourceBreakpoint* src_bpt);
 | 
|    void RegisterSourceBreakpoint(SourceBreakpoint* bpt);
 | 
|    void RegisterCodeBreakpoint(CodeBreakpoint* bpt);
 | 
| -  SourceBreakpoint* GetSourceBreakpoint(const Function& func,
 | 
| +  SourceBreakpoint* GetSourceBreakpoint(const Script& script,
 | 
|                                          intptr_t token_pos);
 | 
|    void MakeCodeBreakpointsAt(const Function& func,
 | 
| -                             intptr_t token_pos,
 | 
|                               SourceBreakpoint* bpt);
 | 
|    // Returns NULL if no breakpoint exists for the given address.
 | 
|    CodeBreakpoint* GetCodeBreakpoint(uword breakpoint_address);
 | 
| @@ -419,6 +432,10 @@
 | 
|                              const String& prefix,
 | 
|                              bool include_private_fields);
 | 
|  
 | 
| +  // Handles any events which pause vm execution.  Breakpoints,
 | 
| +  // interrupts, etc.
 | 
| +  void Pause(DebuggerEvent* event);
 | 
| +
 | 
|    Isolate* isolate_;
 | 
|    Dart_Port isolate_id_;  // A unique ID for the isolate in the debugger.
 | 
|    bool initialized_;
 | 
| @@ -426,11 +443,7 @@
 | 
|    // ID number generator.
 | 
|    intptr_t next_id_;
 | 
|  
 | 
| -  // Current stack trace. Valid while executing breakpoint callback code.
 | 
| -  DebuggerStackTrace* stack_trace_;
 | 
|  
 | 
| -  RemoteObjectCache* obj_cache_;
 | 
| -
 | 
|    SourceBreakpoint* src_breakpoints_;
 | 
|    CodeBreakpoint* code_breakpoints_;
 | 
|  
 | 
| @@ -442,10 +455,18 @@
 | 
|    // be run as a side effect of getting values of fields.
 | 
|    bool ignore_breakpoints_;
 | 
|  
 | 
| -  // True while debugger calls event_handler_. Used to prevent recursive
 | 
| -  // debugger events.
 | 
| -  bool in_event_notification_;
 | 
| +  // Indicates why the debugger is currently paused.  If the debugger
 | 
| +  // is not paused, this is NULL.  Note that the debugger can be
 | 
| +  // paused for breakpoints, isolate interruption, and (sometimes)
 | 
| +  // exceptions.
 | 
| +  DebuggerEvent* pause_event_;
 | 
|  
 | 
| +  // An id -> object map.  Valid only while IsPaused().
 | 
| +  RemoteObjectCache* obj_cache_;
 | 
| +
 | 
| +  // Current stack trace. Valid only while IsPaused().
 | 
| +  DebuggerStackTrace* stack_trace_;
 | 
| +
 | 
|    Dart_ExceptionPauseInfo exc_pause_info_;
 | 
|  
 | 
|    static EventHandler* event_handler_;
 | 
| 
 |