let doInstr stmt instr state =
!Db.progress ();
pdg_debug "doInstr sid:%d : %a" stmt.sid !Ast_printer.d_instr instr;
let state = match instr with
| Call _ when not (Db.Value.is_reachable_stmt stmt) ->
pdg_debug "call sid:%d is unreachable : skip.@." stmt.sid ;
BuildPdg.process_unreachable_call current_pdg state stmt
| _ when not (Db.Value.is_reachable_stmt stmt) ->
pdg_debug "stmt sid:%d is unreachable : skip.@." stmt.sid ;
BuildPdg.process_unreachable current_pdg state stmt
| Set (lv, exp, _) -> process_asgn current_pdg state stmt lv exp
| Call (lvaloption,funcexp,argl,_) ->
!Db.progress ();
process_call current_pdg state stmt lvaloption funcexp argl
| Code_annot _
| Skip _ -> BuildPdg.process_skip current_pdg state stmt
| Asm _ -> Extlib.not_yet_implemented "inline assembly instruction"
in match state with None -> Dataflow.Default
| Some state -> Dataflow.Done state