@@ -3,7 +3,7 @@ use crate::{
33 expr_loader:: ExprLoader ,
44 task:: {
55 Action , BranchesTaken , CoreTrace , FlowEvent , FlowStep , FlowUpdate , FlowUpdateState , FlowUpdateStateKind ,
6- FlowMode , FlowViewUpdate , Iteration , Location , Loop , LoopId , LoopIterationSteps , Position , RRTicks , StepCount
6+ FlowMode , FlowViewUpdate , Iteration , Location , Loop , LoopId , LoopIterationSteps , Position , RRTicks , StepCount , TraceKind ,
77 } ,
88 replay:: Replay ,
99 value:: Value ,
@@ -27,13 +27,13 @@ impl FlowPreloader {
2727 }
2828 }
2929
30- pub fn load ( & mut self , location : Location , mode : FlowMode , replay : & mut dyn Replay ) -> FlowUpdate {
30+ pub fn load ( & mut self , location : Location , mode : FlowMode , kind : TraceKind , replay : & mut dyn Replay ) -> FlowUpdate {
3131 info ! ( "flow: load: {:?}" , location) ;
3232 let path_buf = PathBuf :: from ( & location. path ) ;
3333 match self . expr_loader . load_file ( & path_buf) {
3434 Ok ( _) => {
3535 info ! ( "Expression loader complete!" ) ;
36- let mut call_flow_preloader: CallFlowPreloader = CallFlowPreloader :: new ( self , location. clone ( ) , HashSet :: new ( ) , HashSet :: new ( ) , mode) ;
36+ let mut call_flow_preloader: CallFlowPreloader = CallFlowPreloader :: new ( self , location. clone ( ) , HashSet :: new ( ) , HashSet :: new ( ) , mode, kind ) ;
3737 call_flow_preloader. load_flow ( location, replay)
3838 }
3939 Err ( e) => {
@@ -43,7 +43,7 @@ impl FlowPreloader {
4343 }
4444 }
4545
46- pub fn load_diff_flow ( & mut self , diff_lines : HashSet < ( PathBuf , i64 ) > , db : & Db , replay : & mut dyn Replay ) -> FlowUpdate {
46+ pub fn load_diff_flow ( & mut self , diff_lines : HashSet < ( PathBuf , i64 ) > , db : & Db , trace_kind : TraceKind , replay : & mut dyn Replay ) -> FlowUpdate {
4747 info ! ( "load_diff_flow" ) ;
4848 for diff_line in & diff_lines {
4949 match self . expr_loader . load_file ( & diff_line. 0 ) {
@@ -69,7 +69,7 @@ impl FlowPreloader {
6969 }
7070 }
7171
72- let mut call_flow_preloader = CallFlowPreloader :: new ( self , Location :: default ( ) , diff_lines, diff_call_keys, FlowMode :: Diff ) ;
72+ let mut call_flow_preloader = CallFlowPreloader :: new ( self , Location :: default ( ) , diff_lines, diff_call_keys, FlowMode :: Diff , trace_kind ) ;
7373 let location = Location { line : 1 , ..Location :: default ( ) } ;
7474 call_flow_preloader. load_flow ( location, replay)
7575 }
@@ -97,10 +97,17 @@ pub struct CallFlowPreloader<'a> {
9797 diff_lines : HashSet < ( PathBuf , i64 ) > ,
9898 diff_call_keys : HashSet < i64 > , // TODO: if we add Eq, Hash it seems we can do CallKey
9999 mode : FlowMode ,
100+ trace_kind : TraceKind ,
100101}
101102
102103impl < ' a > CallFlowPreloader < ' a > {
103- pub fn new ( flow_preloader : & ' a FlowPreloader , location : Location , diff_lines : HashSet < ( PathBuf , i64 ) > , diff_call_keys : HashSet < i64 > , mode : FlowMode ) -> Self {
104+ pub fn new (
105+ flow_preloader : & ' a FlowPreloader ,
106+ location : Location ,
107+ diff_lines : HashSet < ( PathBuf , i64 ) > ,
108+ diff_call_keys : HashSet < i64 > ,
109+ mode : FlowMode ,
110+ trace_kind : TraceKind ) -> Self {
104111 CallFlowPreloader {
105112 flow_preloader,
106113 location,
@@ -110,6 +117,7 @@ impl<'a> CallFlowPreloader<'a> {
110117 diff_lines,
111118 diff_call_keys,
112119 mode,
120+ trace_kind,
113121 }
114122 }
115123
@@ -236,11 +244,17 @@ impl<'a> CallFlowPreloader<'a> {
236244 }
237245
238246 fn move_to_first_step ( & self , from_step_id : StepId , replay : & mut dyn Replay ) -> Result < ( StepId , bool ) , Box < dyn Error > > {
239- let ( step_id, progressing) = match self . mode {
247+ let ( mut step_id, mut progressing) = match self . mode {
240248 FlowMode :: Call => ( from_step_id, true ) ,
241249 FlowMode :: Diff => self . next_diff_flow_step ( StepId ( 0 ) , true , replay) ,
242250 } ;
243- replay. jump_to ( step_id) ?;
251+ if self . trace_kind == TraceKind :: DB {
252+ replay. jump_to ( step_id) ?;
253+ } else {
254+ let location = replay. jump_to_call ( & self . location ) ?;
255+ step_id = StepId ( location. rr_ticks . 0 ) ;
256+ progressing = true ;
257+ }
244258 Ok ( ( step_id, progressing) )
245259 }
246260
0 commit comments