66 lines
2.1 KiB
OCaml
66 lines
2.1 KiB
OCaml
(***********************************************************************)
|
|
(* *)
|
|
(* Objective Caml *)
|
|
(* *)
|
|
(* Jerome Vouillon, projet Cristal, INRIA Rocquencourt *)
|
|
(* Objective Caml port by John Malecki and Xavier Leroy *)
|
|
(* *)
|
|
(* Copyright 1996 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. All rights reserved. This file is distributed *)
|
|
(* under the terms of the Q Public License version 1.0. *)
|
|
(* *)
|
|
(***********************************************************************)
|
|
|
|
(* $Id$ *)
|
|
|
|
(********************************* Events ******************************)
|
|
|
|
open Instruct
|
|
open Primitives
|
|
open Checkpoints
|
|
|
|
(* Previous `pc'. *)
|
|
(* Save time if `update_current_event' is called *)
|
|
(* several times at the same point. *)
|
|
let old_pc = ref (None : int option)
|
|
|
|
(*** Current events. ***)
|
|
|
|
(* Event at current position *)
|
|
let current_event =
|
|
ref (None : debug_event option)
|
|
|
|
(* Recompute the current event *)
|
|
let update_current_event () =
|
|
match current_pc () with
|
|
None ->
|
|
current_event := None;
|
|
old_pc := None
|
|
| (Some pc) as opt_pc when opt_pc <> !old_pc ->
|
|
current_event := begin try
|
|
Some (Symbols.event_at_pc pc)
|
|
with Not_found ->
|
|
None
|
|
end;
|
|
old_pc := opt_pc
|
|
| _ ->
|
|
()
|
|
|
|
(* Current position in source. *)
|
|
(* Raise `Not_found' if not on an event (beginning or end of program). *)
|
|
let current_point () =
|
|
match !current_event with
|
|
None ->
|
|
raise Not_found
|
|
| Some {ev_char = point; ev_module = mdle} ->
|
|
(mdle, point.Lexing.pos_cnum)
|
|
|
|
let current_event_is_before () =
|
|
match !current_event with
|
|
None ->
|
|
raise Not_found
|
|
| Some {ev_kind = Event_before} ->
|
|
true
|
|
| _ ->
|
|
false
|