@@ -15,6 +15,7 @@ use crate::event_db::{EventDb, SingleTableId};
1515use crate :: expr_loader:: ExprLoader ;
1616use crate :: flow_preloader:: FlowPreloader ;
1717use crate :: program_search_tool:: ProgramSearchTool ;
18+ use crate :: rr_dispatcher:: { RRDispatcher } ;
1819// use crate::response::{};
1920use crate :: dap_types;
2021// use crate::dap_types::Source;
@@ -51,9 +52,18 @@ pub struct Handler {
5152 pub raw_diff_index : Option < String > ,
5253 pub previous_step_id : StepId ,
5354
55+ pub trace_kind : TraceKind ,
56+ pub rr : RRDispatcher ,
5457 pub breakpoint_list : Vec < HashMap < usize , BreakpointRecord > > ,
5558}
5659
60+ #[ derive( Debug , Clone ) ]
61+ pub enum TraceKind {
62+ DB ,
63+ RR
64+ }
65+
66+
5767#[ derive( Debug , Clone , Serialize , Deserialize ) ]
5868pub struct BreakpointRecord {
5969 pub is_active : bool ,
@@ -80,11 +90,11 @@ type LineTraceMap = HashMap<usize, Vec<(usize, String)>>;
8090// sender.
8191
8292impl Handler {
83- pub fn new ( db : Box < Db > ) -> Handler {
84- Self :: construct ( db, false )
93+ pub fn new ( trace_kind : TraceKind , db : Box < Db > ) -> Handler {
94+ Self :: construct ( trace_kind , db, false )
8595 }
8696
87- pub fn construct ( db : Box < Db > , indirect_send : bool ) -> Handler {
97+ pub fn construct ( trace_kind : TraceKind , db : Box < Db > , indirect_send : bool ) -> Handler {
8898 let calltrace = Calltrace :: new ( & db) ;
8999 let trace = CoreTrace :: default ( ) ;
90100 let mut expr_loader = ExprLoader :: new ( trace. clone ( ) ) ;
@@ -93,6 +103,7 @@ impl Handler {
93103 let step_lines_loader = StepLinesLoader :: new ( & db, & mut expr_loader) ;
94104 // let sender = sender::Sender::new();
95105 Handler {
106+ trace_kind,
96107 db,
97108 step_id : StepId ( 0 ) ,
98109 last_call_key : CallKey ( 0 ) ,
@@ -107,6 +118,7 @@ impl Handler {
107118 step_lines_loader,
108119 dap_client : DapClient :: default ( ) ,
109120 previous_step_id : StepId ( 0 ) ,
121+ rr : RRDispatcher :: new ( ) ,
110122 resulting_dap_messages : vec ! [ ] ,
111123 raw_diff_index : None ,
112124 }
@@ -273,7 +285,14 @@ impl Handler {
273285 }
274286
275287 pub fn run_to_entry ( & mut self , _req : dap:: Request ) -> Result < ( ) , Box < dyn Error > > {
276- self . step_id_jump ( StepId ( 0 ) ) ;
288+ match self . trace_kind {
289+ TraceKind :: DB => {
290+ self . step_id_jump ( StepId ( 0 ) ) ;
291+ } ,
292+ TraceKind :: RR => {
293+ self . rr . run_to_entry ( ) ?;
294+ } ,
295+ }
277296 self . complete_move ( true ) ?;
278297 Ok ( ( ) )
279298 }
@@ -1814,6 +1833,7 @@ mod tests {
18141833 }
18151834 let trace_metadata_file = path. join ( "trace_metadata.json" ) ;
18161835 let trace = load_trace_data ( & trace_file, trace_file_format) . expect ( "expected that it can load the trace file" ) ;
1836+ info ! ( "trace {:?}" , trace) ;
18171837 let trace_metadata =
18181838 load_trace_metadata ( & trace_metadata_file) . expect ( "expected that it can load the trace metadata file" ) ;
18191839 let mut db = Db :: new ( & trace_metadata. workdir ) ;
0 commit comments