camlspotter avatar camlspotter committed 4a26f45 Merge

merged with dev

Comments (0)

Files changed (27)

 spoteval.cmi : utils.cmi spot.cmi
 spotfile.cmi : spoteval.cmi spot.cmi
 treeset.cmi : xset.cmi
-ttfold.cmi :
 typeFix.cmi :
 typeexpand.cmi :
 utils.cmi :
     spotconfig.cmx spot.cmx pathreparse.cmx ext.cmx command.cmx cmt.cmx
 pathreparse.cmo : utils.cmi spot.cmi locident.cmi ext.cmo pathreparse.cmi
 pathreparse.cmx : utils.cmx spot.cmx locident.cmx ext.cmx pathreparse.cmi
-spot.cmo : utils.cmi ttfold.cmi treeset.cmi ext.cmo cmt.cmi checksum.cmo \
+spot.cmo : utils.cmi ttfold.cmo treeset.cmi ext.cmo cmt.cmi checksum.cmo \
     spot.cmi
 spot.cmx : utils.cmx ttfold.cmx treeset.cmx ext.cmx cmt.cmx checksum.cmx \
     spot.cmi
     cmt.cmx spotfile.cmi
 treeset.cmo : xset.cmi treeset.cmi
 treeset.cmx : xset.cmx treeset.cmi
-ttfold.cmo : ttfold.cmi
-ttfold.cmx : ttfold.cmi
+ttfold.cmo :
+ttfold.cmx :
+ttfold.out.cmo :
+ttfold.out.cmx :
+ttfoldx.cmo :
+ttfoldx.cmx :
 typeFix.cmo : utils.cmi name.cmi typeFix.cmi
 typeFix.cmx : utils.cmx name.cmx typeFix.cmi
 typeexpand.cmo : utils.cmi typeexpand.cmi
-.*\.(cm.*|annot|o|opt)$
+.*\.(cm.*|annot|o|opt|orig)$
 .*~$
 ocamlspot$
 
 INCLUDES_DEP=-I +compiler-libs
 
 # Requires unix!
-COMPFLAGS= $(INCLUDES_DEP) -I +unix
+COMPFLAGS= -g $(INCLUDES_DEP) -I +unix
 
 MODULES= utils checksum dotfile xset treeset command typeexpand \
 	xlongident name xident xpath locident typeFix xprinttyp ext ttfold cmt spot spoteval spotconfig_intf spotconfig spotfile pathreparse ocamlspot
   end in
   Envaux.reset_cache ();
   Envaux.env_from_summary (Env.summary env) Subst.identity
-
   
   let build_dir = ref None in
   let set name ref v =
     match !ref with
-    | Some _ -> failwith (Printf.sprintf "key %s is defined twice" name)
+    | Some _ -> failwithf "key %s is defined twice" name
     | None -> ref := Some v
   in
   let ic = open_in s in
     | "build_dir", Some s -> 
         set "build_dir" build_dir s;
         load ()
-    | "build_dir", None -> failwith (Printf.sprintf "key %S must have a value" key)
-    | key, _ -> failwith (Printf.sprintf "unknown key %S" key)
+    | "build_dir", None -> failwithf "key %S must have a value" key
+    | key, _ -> failwithf "unknown key %S" key
   in
   try load () with End_of_file ->
     close_in ic;
   (if (file-exists-p path)
       (find-file-other-window path)
     (ocamlspot-message-add (format "ERROR: source file %s was not found" path))
-    nil))
+    (error (format "ERROR: source file %s was not found" path))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Queries
 
   (with-current-buffer (get-buffer-create ocamlspot-process-buffer)
     (ocamlspot-process-mode t)
     (erase-buffer)
-    (let ((command (concat ocamlspot-command " " args)))
-      (insert command)
-      (insert "\n")
-      ;; chdir is required
-      (if chdir (cd chdir))
-      (let ((args (if ocamlspot-debug (concat "-debug " args) args)))
-	(call-process shell-file-name nil t nil shell-command-switch
-		      command)))))
+    (insert (prin1-to-string (cons ocamlspot-command args)))
+    (insert "\n")
+    ;; chdir is required
+    (if chdir (cd chdir))
+    (let ((args (if ocamlspot-debug (cons "--debug" args) args)))
+      (print (append '(call-process ocamlspot-command nil t nil) args))
+      (eval (append '(call-process ocamlspot-command nil t nil) args)))))
 
 ;; Creates the query location string of the point
 (defun ocamlspot-query-string-at-cursor ()
 (defun ocamlspot-query-at-cursor (pre_extra_args &optional post_extra_args)
   ;; arguments
   (let ((file-name (buffer-file-name))
-	(arg (ocamlspot-query-string-at-cursor))
-	(post_sep (if post_extra_args " " "")))
-    (ocamlspot-run-query (concat pre_extra_args " " arg post_sep post_extra_args) 
+	(arg (ocamlspot-query-string-at-cursor)))
+    (ocamlspot-run-query (append pre_extra_args (list arg) post_extra_args)
 			 (file-name-directory file-name))))
 
 ;; Search ocamlspot-process-buffer from the top and return the first line which matches with ^<pattern>: "
   (ocamlspot-message-init (buffer-file-name))
   (ocamlspot-type-init)
   (ocamlspot-delete-overlays-now)
-  (ocamlspot-query-at-cursor "-n")  
+  (ocamlspot-query-at-cursor '("-n"))  
   (if (ocamlspot-find-tree)
       (save-current-buffer
         (ocamlspot-find-val-or-type to-kill)))
   (ocamlspot-message-init (buffer-file-name))
   (ocamlspot-type-init)
   (ocamlspot-delete-overlays-now)
-  (ocamlspot-query-at-cursor "-n")
+  (ocamlspot-query-at-cursor '("-n"))
   (if (ocamlspot-find-tree)
       (save-current-buffer
         (ocamlspot-find-xtype)))
   (ocamlspot-message-init (buffer-file-name))
   (ocamlspot-type-init)
   (ocamlspot-delete-overlays-now)
-  (ocamlspot-query-at-cursor "-n")
+  (ocamlspot-query-at-cursor '("-n"))
   (if (ocamlspot-find-tree)
       (save-current-buffer
         (ocamlspot-find-use)))
     (ocamlspot-message-init (buffer-file-name))
     (ocamlspot-type-init)
     (ocamlspot-delete-overlays-now)
-    (ocamlspot-query-at-cursor "use" dir)
+    (ocamlspot-query-at-cursor '("use" dir))
     (if (ocamlspot-find-tree)
 	(progn
 	 (ocamlspot-find-spot)
   (interactive)
   (ocamlspot-message-init (buffer-file-name))
   (ocamlspot-type-init)
-  (ocamlspot-query-at-cursor "-n --type-expand")
+  (ocamlspot-query-at-cursor '("-n --type-expand"))
   (let ((expansion (ocamlspot-find-query-result "Expand")))
     (if expansion
 	(let ((start-end (ocamlspot-find-tree)))
 	(if query
 	    (progn
 	      (message query)
-	      (ocamlspot-run-query query)
+	      (ocamlspot-run-query '(query))
 	      (ocamlspot-find-spot)
 	      (ocamlspot-wait))
 	  (message "query empty"))))
 
 module File = Spotfile
 module C = Spotconfig
-
 module SAbs = Spot.Abstraction
 
 module Dump = struct
     let file = File.load ~load_paths: ["."] path in
     
     if C.dump_file then Dump.unit file; (* CR jfuruse: to be fixed *)
-    if C.dump_rannots = `Full then Dump.rannots_full file;
+    if C.dump_tree then Dump.tree file;
+    if C.dump_top  then Dump.top  file;
+    if C.dump_flat then Dump.flat file;
+    if C.dump_rannots = `Full    then Dump.rannots_full    file;
     if C.dump_rannots = `Summary then Dump.rannots_summary file;
-    if C.dump_tree then Dump.tree file;
-    if C.dump_top then Dump.top file;
-    if C.dump_flat then Dump.flat file;
 
     file
   ;;
       | body, (".cmi" | ".mli" | ".cmti") -> body ^ ".spit"
       | body, _ -> body ^ ".spot"
     in
+    Debug.format "Writing %s@." spot;
+    (* CR jfuruse: BUG in ocamlbuild _build setting, the output file is written into the source dir, not the dest dir *)
     Spot.File.save spot (Spot.Unit.to_file file)
 
   let query_by_kind_path file kind path = 
     try Some (File.find_path_in_flat file (kind, path)) with Not_found -> None
   ;;
 
+  (* CR jfuruse: In the case of a.mll => a.ml => a.cmt,
+     a.ml often does not exist. ocamlspot should warn you when a.ml
+     does not exist and propose creation of a.ml from a.mll. *)
   let print_query_result kind = function
     | None -> printf "Spot: no spot@."
     | Some (pident, res) -> match res with
 	| File.File_itself ->
             printf "Spot: <%s:all>@." pident.PIdent.path
 	| File.Found_at region ->
-            printf "Spot: <%s:%s>@."
-              pident.PIdent.path
+            printf "Spot: <%s>@."
+              (* pident.PIdent.path *)
               (Region.to_string region)
 	| File.Predefined ->
             printf "Spot: %a: predefined %s@."
               (Kind.name kind);
   ;;
     
-  let query_by_pos file pos = 
-    let probe = Region.point pos in
+  let query_by_pos file orig_path pos = 
+    (* CR jfuruse: probe should be created outside *)
+    let probe = Region.complete orig_path (Region.point orig_path pos) in
+    Debug.format "probing by %s@." (Region.to_string probe);
     let treepath = 
-      (* subtree is not used *)
       List.map fst (Tree.find_path_contains probe !!(file.Unit.tree))
     in
     match treepath with
-    | [] -> failwith (Printf.sprintf "nothing at %s" (Position.to_string pos))
-    | { Regioned.region = r; _ } :: _ ->
+    | [] -> failwithf "nothing at %s" (Position.to_string pos)
+    | { Regioned.region = r; _ } :: _ -> (* [r] is innermost region *)
 	
-	(* find annots bound to the region *)
+	(* Find annots bound to the region.
+           CR jfuruse: do we need to scan all the paths?
+        *)
         let annots = 
 	  List.concat_map (fun rannot ->
 	    if Region.compare r rannot.Regioned.region = `Same then 
 	    treepath
         in
 
-	(* annots and region improvement by path *)
+	(* annots and region improvement by subpath *)
 	let annots, r = 
 	  match 
 	    (* only the first Use *)
 	    List.find_map_opt (function
 	      | Annot.Use (_, path) -> 
 		  (* Find subpath *)
+                  (* CR jfuruse: subpath does not work for now *)
 		  begin match Pathreparse.get file.Unit.path r pos path with    
 		  | None -> None
 		  | Some (path', r) -> 
 	  | None -> annots, r
 	  | Some (annots, r) -> annots, r
 	in
-	  
         List.iter (printf "@[<v>%a@]@." Annot.format) annots;
 
 	(* Tree is an older format. XTree is a newer which is the same as one for Spot *)
-        printf "Tree: %s@." (Region.to_string r);
-        printf "XTree: <%s:%s>@." file.Unit.path (Region.to_string r);
+        printf "Tree: %s@." (Region.to_string_no_path r);
+        printf "XTree: <%s>@." (* file.Unit.path *) (Region.to_string r);
 
 	(* Find the innermost module *)
         let find_module_path treepath = List.concat_map (fun { Regioned.value = annots } ->
           (String.concat "." (List.map Ident0.name (List.rev (find_module_path treepath))));
 
         (* print "Val: val name : type" if it is a Str: val *)
+        (* CR jfuruse: only the first entry is used *)
         let print_sig_entry annots =
           let rec find_type = function
             | Annot.Type (typ, _, _) :: _ -> Some typ
         print_sig_entry annots;
 
         (* print_type_decl: if one Type is found *)
+        (* CR jfuruse: only the first one is used *)
         if C.type_expand then begin
           match List.filter (function Annot.Type _ -> true | _ -> false) annots with
           (* CR jfuruse: Sometimes more than one Annot.Type are found at the same place... *)
 	annots
   ;;
 
-  let query path spec = 
+  let query orig_path spec = 
     (* CR jfuruse: dup *)
-    Debug.format "ocamlspot %s%s@." path (C.SearchSpec.to_string spec);
+    Debug.format "ocamlspot %s%s@." orig_path (C.SearchSpec.to_string spec);
     Debug.format "cwd: %s@." (Sys.getcwd ());
-    let path = Cmt.of_path path in
+    let path = Cmt.of_path orig_path in
     let file = load path in
 
     let query_kind_path k path = print_query_result k (query_by_kind_path file k path) in
     begin match spec with
     | C.SearchSpec.Kind (k,path) -> query_kind_path k path
     | C.SearchSpec.Pos pos -> 
-	let annots = query_by_pos file pos in
+	let annots = query_by_pos file orig_path pos in
         if not C.no_definition_analysis then begin
           List.iter (function
             | Annot.Use (k, path) -> query_kind_path k path
     let file = load path in
 
     let find_by_kind_path k path found =
-      Unix.find targets ~f:(fun pathname ->
-	match Filename.split_extension pathname.Unix.base with
+      Find.find targets ~f:(fun pathname ->
+	match Filename.split_extension pathname.Find.base with
 	| _body, (".cmti" | ".cmt") ->
-	  let file = load pathname.Unix.path in
-	  Debug.format "Searching %s@." pathname.Unix.path;
+	  let file = load pathname.Find.path in
+	  Debug.format "Searching %s@." pathname.Find.path;
 	  let base_ident = function
 	    | Path.Pident id -> Ident0.name id
 	    | Path.Pdot (_, name, _) -> name
 	    | None -> None
 	    end
 	| Annot.Use (kind, path) -> Some (`Use (kind, path))
-	| _ -> None) (query_by_pos file pos)
+	| _ -> None) (query_by_pos file file.Unit.path pos)
       with
       | Some (`Def (k, id))   -> by_kind_path file k (Path.Pident id)
       | Some (`Use (k, path)) -> by_kind_path file k path
    [path] : the path of the whole region
 *)
 let get mlpath region pos path = 
-  let region = Region.complete mlpath region in
-  let str = snd (Region.substring mlpath region) in
   try
-    let pos = Position.complete mlpath pos in
-    let pos = 
-      match pos.Position.bytes, region.Region.start.Position.bytes with 
-      | Some pos_bytes, Some start_bytes -> pos_bytes - start_bytes
-      | _ -> failwith "The given position is not clear enough"
-    in
-    
-    let lexbuf = Lexing.from_string str in
-    let locid = Parser.locident Lexer.token lexbuf in
-    let loc_in locid =
-      locid.lident_loc.Location.loc_start.Lexing.pos_cnum <= pos 
-      && pos < locid.lident_loc.Location.loc_end.Lexing.pos_cnum
-    in
-    let position_add pos_start diff =
-      { Position.line_column = 
-	  Option.map pos_start.Position.line_column ~f:(fun (line,col) ->
-	    if diff.Lexing.pos_lnum = 1 then (* no new line *)
-	      (line, col + diff.Lexing.pos_cnum)
-	    else
-	      (line + diff.Lexing.pos_lnum - 1, diff.Lexing.pos_cnum));
-        bytes = 
-	  Option.map pos_start.Position.bytes ~f:(fun bytes ->
-	    bytes + diff.Lexing.pos_cnum ) }
-    in
-    let subregion locid =
-      { Region.start = position_add region.Region.start locid.lident_loc.Location.loc_start;
-        end_ = position_add region.Region.start locid.lident_loc.Location.loc_end }
-    in
-    let search path locid = 
-      (* The last id name can be different. For example,
-	   module M = struct type t = Foo end
-	   let x = M.Foo
-	 M.Foo is not recorded as a use of M.Foo for now but as a use of M.t.
-      *)
-      let rec search ignore_suffix_diff path locid =
-	match path, locid.lident_desc with
-	| Pident _, LLident _ -> path, locid
-	| Pdot (path', pname, _), LLdot (locid', lname) ->
-	    if ignore_suffix_diff || pname = lname then
- 	      if loc_in locid' then search false path' locid'
-	      else path, locid
-	    else failwith "mismatch"
-	| Papply (path1, path2), LLapply (locid1, locid2) ->
- 	    if loc_in locid1 then search false path1 locid1
- 	    else if loc_in locid2 then search false path2 locid2
-	    else path, locid
-	| Pdot (_, pname, _), LLident lname -> 
-	    if pname = lname then path, locid
-	    else failwith "mismatch"
-	| _ -> assert false
+    let region = Region.complete mlpath region in
+    let str = snd (Region.substring mlpath region) in
+    try
+      let pos = Position.complete mlpath pos in
+      let pos = 
+        match pos.Position.bytes, region.Region.start.Position.bytes with 
+        | Some pos_bytes, Some start_bytes -> pos_bytes - start_bytes
+        | _ -> failwith "The given position is not clear enough"
       in
-      try search true path locid with
-      | Failure s -> 
-	  Format.eprintf "Error: pathreparse: %s (path) <> %a (from source)@."
-	    (Path.name path) 
-	    Locident.format locid;
-	  failwith s
-    in
-    if loc_in locid then 
-      let path, locid = search path locid in
-      Some (path, subregion locid)
-    else None
+      
+      let lexbuf = Lexing.from_string str in
+      let locid = Parser.locident Lexer.token lexbuf in
+      let loc_in locid =
+        locid.lident_loc.Location.loc_start.Lexing.pos_cnum <= pos 
+        && pos < locid.lident_loc.Location.loc_end.Lexing.pos_cnum
+      in
+      let position_add pos_start diff =
+        { Position.line_column = 
+  	  Option.map pos_start.Position.line_column ~f:(fun (line,col) ->
+  	    if diff.Lexing.pos_lnum = 1 then (* no new line *)
+  	      (line, col + diff.Lexing.pos_cnum)
+  	    else
+  	      (line + diff.Lexing.pos_lnum - 1, diff.Lexing.pos_cnum));
+          bytes = 
+  	  Option.map pos_start.Position.bytes ~f:(fun bytes ->
+  	    bytes + diff.Lexing.pos_cnum ) }
+      in
+      let subregion locid = Region.change_positions region 
+        (position_add region.Region.start locid.lident_loc.Location.loc_start)
+        (position_add region.Region.start locid.lident_loc.Location.loc_end)
+      in
+      let search path locid = 
+        (* The last id name can be different. For example,
+  	   module M = struct type t = Foo end
+  	   let x = M.Foo
+  	 M.Foo is not recorded as a use of M.Foo for now but as a use of M.t.
+        *)
+        let rec search ignore_suffix_diff path locid =
+  	match path, locid.lident_desc with
+  	| Pident _, LLident _ -> path, locid
+  	| Pdot (path', pname, _), LLdot (locid', lname) ->
+  	    if ignore_suffix_diff || pname = lname then
+   	      if loc_in locid' then search false path' locid'
+  	      else path, locid
+  	    else failwith "mismatch"
+  	| Papply (path1, path2), LLapply (locid1, locid2) ->
+   	    if loc_in locid1 then search false path1 locid1
+   	    else if loc_in locid2 then search false path2 locid2
+  	    else path, locid
+  	| Pdot (_, pname, _), LLident lname -> 
+  	    if pname = lname then path, locid
+  	    else failwith "mismatch"
+  	| _ -> assert false
+        in
+        try search true path locid with
+        | Failure s -> 
+  	  Format.eprintf "Error: pathreparse: %s (path) <> %a (from source)@."
+  	    (Path.name path) 
+  	    Locident.format locid;
+  	  failwith s
+      in
+      if loc_in locid then 
+        let path, locid = search path locid in
+        Some (path, subregion locid)
+      else None
+    with
+    | e -> 
+        Format.printf  "Pathreparse: not supported: %s (%s)@." 
+  	str
+  	(Printexc.to_string e);
+        None;
   with
-  | e -> 
-      Format.printf  "Pathreparse: not supported: %s (%s)@." 
-	str
-	(Printexc.to_string e);
-      None;
+  | e ->
+        Format.printf  "Pathreparse: not supported: (%s)@." 
+  	(Printexc.to_string e);
+        None;
 ;;
             close_in ic;
             { line_column = Some (lines, remain); bytes = Some bytes }
           end else begin
-            ignore (input_line ic);
-            iter (lines+1) new_remain
+            if try ignore (input_line ic); true with End_of_file -> false then
+              iter (lines+1) new_remain
+            else
+              { line_column = Some (lines+1, new_remain); bytes = Some bytes }    
           end
         in
         iter 0 bytes
 
 end
 
-module Region = struct
+module Region : sig
+
+  type t = private { 
+    fname : (string * (int * int) option) option; 
+    (* filename and device/inode. None = "_none_" *)
+    start : Position.t;
+    end_ : Position.t
+  }
+    
+  val compare : t -> t -> [> `Included | `Includes | `Left | `Overwrap | `Right | `Same ]
+
+  val to_string : t -> string
+  val to_string_no_path : t -> string
+  val of_parsing : string -> Location.t -> t
+  val split : t -> by:t -> (t * t) option
+  val point_by_byte : string -> int -> t  
+    (** works only if bytes are available *)
+  val point : string -> Position.t -> t
+  val change_positions : t -> Position.t -> Position.t -> t
+  val length_in_bytes : t -> int
+  val is_complete : t -> bool
+  val complete : string -> t -> t
+  val substring : string -> t -> t * string
+
+end = struct
+
   type t = { 
+    fname : (string * (int * int) option) option; 
+    (* filename and device/inode. None = "_none_" *)
     start : Position.t;
     end_ : Position.t
   }
 
+  let cache = Hashtbl.create 1023
+
+  let fname = function
+    | "_none_" -> None
+    | s ->
+        let s =
+          if Filename.is_relative s then 
+            Unix.getcwd () ^/ s
+          else s
+        in
+        Some (try 
+            Hashtbl.find cache s 
+          with
+          | Not_found ->
+              let dev_inode = Unix.dev_inode s in
+              if dev_inode = None then Format.eprintf "%s does not exist@." s;
+              let v = s, dev_inode in
+              Hashtbl.replace cache s v;
+              v
+        )
+
   let to_string t =
+    Printf.sprintf "%s:%s:%s"
+      (match t.fname with Some (fname, _) -> fname | None -> "_none_")
+      (Position.to_string t.start)
+      (Position.to_string t.end_)
+
+  let to_string_no_path t =
     Printf.sprintf "%s:%s"
       (Position.to_string t.start)
       (Position.to_string t.end_)
 
-  let of_parsing l =
+  (* CR jfuruse: we should have path cache *)
+
+  let of_parsing builddir l =
+    let fname1 = l.Location.loc_start.Lexing.pos_fname in
+    let fname2 = l.Location.loc_end.Lexing.pos_fname in
+    if fname1 <> fname2 then
+      Format.eprintf "Warning: A location contains strange file names %s and %s@." fname1 fname2;
+    let fname = fname (if fname1 = "_none_" then fname1 else builddir ^/ fname1) in
     let start = Position.of_lexing_position l.Location.loc_start in
     let end_ = Position.of_lexing_position l.Location.loc_end in
     match Position.compare start end_ with
-    | -1 | 0 -> { start = start; end_ = end_ }
-    | _ -> { start = end_; end_ = start }
+    | -1 | 0 -> { fname; start = start; end_ = end_ }
+    | _ -> { fname; start = end_; end_ = start }
 
   let compare l1 l2 = 
-    if Position.compare l1.start l2.start = 0 
-       && Position.compare l2.end_ l1.end_ = 0 then `Same
-    else if Position.compare l1.start l2.start <= 0 
-         && Position.compare l2.end_ l1.end_ <= 0 then `Includes
-    else if Position.compare l2.start l1.start <= 0 
-         && Position.compare l1.end_ l2.end_ <= 0 then `Included
-    else if Position.compare l1.end_ l2.start <= 0 then `Left
-    else if Position.compare l2.end_ l1.start <= 0 then `Right
-    else `Overwrap
-
-(*
-  let position_prev pos = { pos with pos_cnum = pos.pos_cnum - 1 }
-  let position_next pos = { pos with pos_cnum = pos.pos_cnum + 1 }
-*)
+    let same_files l1 l2 = 
+      match l1.fname, l2.fname with
+      | Some (_, Some di1), Some (_, Some di2) -> di1 = di2
+      | Some (f1, _), Some (f2, _) -> f1 = f2 (* weak guess *)
+      | None, None -> true (* ouch *)
+      | _ -> false
+    in
+    if not (same_files l1 l2) then
+      match compare l1.fname l2.fname with 
+      | 1 -> `Left
+      | -1 -> `Right
+      | _ -> assert false
+    else
+      if Position.compare l1.start l2.start = 0 
+         && Position.compare l2.end_ l1.end_ = 0 then `Same
+      else if Position.compare l1.start l2.start <= 0 
+              && Position.compare l2.end_ l1.end_ <= 0 then `Includes
+      else if Position.compare l2.start l1.start <= 0 
+              && Position.compare l1.end_ l2.end_ <= 0 then `Included
+      else if Position.compare l1.end_ l2.start <= 0 then `Left
+      else if Position.compare l2.end_ l1.start <= 0 then `Right
+      else `Overwrap
 
   let split l1 ~by:l2 =
     if compare l1 l2 = `Overwrap then
 
   open Position
 
-  let point_by_byte pos =
-    { start = { line_column = None;
+  let point_by_byte fn pos =
+    let fname = fname fn in
+    { fname;
+      start = { line_column = None;
  		bytes = Some pos };
       end_ = { line_column = None;
                bytes = Some (pos + 1)} }
 
-  let point pos = { start = pos; end_ = Position.next pos }
+  let point fn pos = 
+    let fname = fname fn in
+    { fname; start = pos; end_ = Position.next pos }
+
+  let change_positions t p1 p2 = { t with start = p1; end_ = p2 }
 
   let length_in_bytes t =
     let bytes = function
   let is_complete t = 
     Position.is_complete t.start && Position.is_complete t.end_
 
+  (* CR jfuruse: fname is overwritten. Strange. *)      
   let complete mlpath t =
-    { start = Position.complete mlpath t.start;
+    let fname = fname mlpath in
+    { fname;
+      start = Position.complete mlpath t.start;
       end_ = Position.complete mlpath t.end_ }
 
   let substring mlpath t =
 
 (* Spot info for each compilation unit *)
 module Unit = struct
+
+  module F = File
+
   type t = {
     modname        : string;
     builddir       : string; 
     tree           : Tree.t lazy_t
   }
 
-  (* same as File.dump, ignoring new additions in Unit *)
+  (* same as F.dump, ignoring new additions in Unit *)
   let dump file =
     eprintf "@[<v2>{ module= %S;@ path= %S;@ builddir= %S;@ loadpath= [ @[%a@] ];@ argv= [| @[%a@] |];@ ... }@]@."
       file.modname
       (Format.list ";@ " (fun ppf s -> fprintf ppf "%S" s)) (Array.to_list file.args)
 
   let to_file { modname; builddir; loadpath; args; path; top ; loc_annots } = 
-    { File.modname;
+    { F.modname;
       builddir;
       loadpath;
       args;
       loc_annots;
     }
 
-  let of_file ({ File.loc_annots; } as f) = 
+  let of_file ({ F.loc_annots; } as f) = 
     let rannots = lazy (Hashtbl.fold (fun loc annots st -> 
-      { Regioned.region = Region.of_parsing loc;  value = annots } :: st) 
+      { Regioned.region = Region.of_parsing f.F.builddir loc;  value = annots } :: st) 
                           loc_annots [])
     in
     let id_def_regions = lazy (
         List.iter (function
           | Annot.Str sitem ->
               Option.iter (Abstraction.ident_of_structure_item sitem) ~f:(fun (_kind, id) ->
-                Hashtbl.add tbl id (Region.of_parsing loc))
+                Hashtbl.add tbl id (Region.of_parsing f.F.builddir loc))
           | _ -> ()) annots) loc_annots;
       tbl)
     in
     let tree = lazy begin
       Hashtbl.fold (fun loc annots st ->
-        Tree.add st { Regioned.region = Region.of_parsing loc; value = annots })
+        Tree.add st { Regioned.region = Region.of_parsing f.F.builddir loc; value = annots })
         loc_annots Tree.empty 
     end in
     (* CR jfuruse: it is almost the same as id_def_regions_list *)
         | Annot.Str sitem -> Some sitem
         | _ -> None) annots @ st) loc_annots [])
     in
-    { modname    = f.File.modname;
-      builddir   = f.File.builddir;
-      loadpath   = f.File.loadpath;
-      args       = f.File.args;
-      path       = f.File.path;
-      top        = f.File.top;
-      loc_annots = f.File.loc_annots;
+    { modname    = f.F.modname;
+      builddir   = f.F.builddir;
+      loadpath   = f.F.loadpath;
+      args       = f.F.args;
+      path       = f.F.path;
+      top        = f.F.top;
+      loc_annots = f.F.loc_annots;
       
       flat; id_def_regions; rannots; tree; 
     }
 
 module Region : sig
 
-  type t = { start : Position.t; end_ : Position.t; }
+  type t = private { fname : (string * (int * int) option) option; 
+                     (* filename and device/inode. None = "_none_" *)
+                     start : Position.t; 
+                     end_ : Position.t; }
   
   val compare : t -> t -> [> `Included | `Includes | `Left | `Overwrap | `Right | `Same ]
 
   val to_string : t -> string
-  val of_parsing : Location.t -> t
+  val to_string_no_path : t -> string
+  val of_parsing : string -> Location.t -> t
   val split : t -> by:t -> (t * t) option
-  val point_by_byte : int -> t  
+  val point_by_byte : string -> int -> t  
     (** works only if bytes are available *)
-  val point : Position.t -> t
+  val point : string -> Position.t -> t
+  val change_positions : t -> Position.t -> Position.t -> t
   val length_in_bytes : t -> int
   val is_complete : t -> bool
   val complete : string -> t -> t
           (Kind.from_string (String.sub s (at2+1) (at-at2-1)),
            let s = String.sub s (at+1) (String.length s - at - 1) in 
            try Path.parse s with
-           | _ -> failwith ("illegal path in <file>:<kind>:<path> : " ^ s))
+           | _ -> failwithf "illegal path in <file>:<kind>:<path> : %s" s)
       with
       | Invalid_argument _ | Not_found -> 
           String.sub s 0 at,
                      (String.sub s (at+1) (String.length s - at - 1)))
     with
     | Failure s -> failwith s
-    | Position.Parse_failure s -> failwith ("illegal <file>:<pos> : " ^ s)
-    | Not_found -> failwith ("strange search : " ^ s)
+    | Position.Parse_failure s -> failwithf "illegal <file>:<pos> : %s" s
+    | Not_found -> failwithf "strange search : %s" s
 
   let to_string = function
     | Pos pos -> ":" ^ Position.to_string pos
   open Value
   module Format = OCaml.Format
 
-  let str_of_global_ident = ref (fun ~load_paths:_ _ -> assert false : load_paths: string list -> Ident.t -> string * Value.structure)
+  let str_of_global_ident = ref (fun ~cwd:_ ~load_paths:_ _ -> assert false : cwd: string -> load_paths: string list -> Ident.t -> string * Value.structure)
   let packed = ref (fun _ _ -> assert false : Env.t -> string -> Value.t)
 
   let rec find_path env (kind, p) : Value.z = 
         | None -> 
             if Ident.global id then
               lazy begin try
-                let path, str = !str_of_global_ident ~load_paths:env.load_paths id in
+                let path, str = !str_of_global_ident ~cwd:env.cwd ~load_paths:env.load_paths id in
                 let str = Structure ( { PIdent.path = path; ident = None }, 
                                       str,
                                       None (* CR jfuruse: todo (read .mli *))
 module Eval : sig
   (** These function ref will be initialized from ocamlspot.ml *)
   val str_of_global_ident :
-    (load_paths:string list -> Ident.t -> string * Value.structure) ref
+    (cwd:string -> load_paths:string list -> Ident.t -> string * Value.structure) ref
   val packed : (Env.t -> string -> Value.t) ref
     
   val find_path : Env.t -> Kind.t * Path.t -> Value.z
 module Load : sig
   exception Old_cmt of string (* cmt *) * string (* source *)
   val load : load_paths:string list -> string -> Unit.t
-  val load_module : ?spit:bool -> load_paths:string list -> string -> Unit.t
+  val load_module : ?spit:bool -> cwd:string -> load_paths:string list -> string -> Unit.t
 end = struct
 
   let check_time_stamp ~cmt source =
+    (* CR jfuruse: aaa.mll creates cmt with aaa.ml as source, but
+       aaa.ml often does not exist.
+    *)
     let stat_cmt = Unix.stat cmt in
     try
       let stat_source = Unix.stat source in
     match load_cmt_file path with
     | Some cmt -> 
         Spot.Unit.of_file (Spot.File.of_cmt path cmt)
-    | None -> failwith (sprintf "load_directly failed: %s" path)
+    | None -> failwithf "load_directly failed: %s" path
 
   exception Old_cmt of string (* cmt *) * string (* source *)
 
             file
           with
           | Not_found ->
-              failwith (Printf.sprintf "failed to find cmt file %s" path)
+              failwithf "failed to find cmt file %s" path
 
   let find_in_path load_paths body ext =
     let body_ext = body ^ ext in
         if Sys.file_exists cmtpath then begin
           Debug.format "Found an alternative %s: %s@." ext cmtpath;
             cmtpath 
-          end else failwith (Printf.sprintf "cmt file not found: %s, neither in %s" body_ext cmtpath)
+          end else failwithf "cmt file not found: %s, neither in %s" body_ext cmtpath
         end else raise Not_found
       with
       | (Failure _ as e) -> raise e
-      | _ -> failwith (Printf.sprintf "cmt file not found: %s" body_ext)
+      | _ -> failwithf "cmt file not found: %s" body_ext
     
 
   let load ~load_paths cmtname : Unit.t =
     let path = find_in_path load_paths body ext in
     load_directly_with_cache path
 
+  (* ocamlbuild tweak *)
+  (* for  /.../a/b/c/x.ml
+     if   /.../a/_build exists
+     then look for
+          /.../a/_build/b/c/x.cm*
+  *)
+  (* seek ocamlbuild _build destination directory *)      
+  let ocamlbuild_path_tweak cmtname =
+    if Filename.is_relative cmtname then None
+    else
+      let basename = Filename.basename cmtname in
+      let dirname = Filename.dirname cmtname in
+      let rec loop postfix dir = 
+        let dir_build = dir ^/ "_build" in
+        if Unix.is_dir dir_build then dir_build ^/ postfix
+        else 
+          if dir = "/" then raise Exit
+          else loop (Filename.basename dir ^/ postfix) (Filename.dirname dir)
+      in
+      try 
+        let cmtname = loop "" dirname ^/ basename in
+        Debug.format "Trying ocamlbuild destination %s@." cmtname;
+        Some cmtname
+      with Exit -> None
+
+  (* .ocamlspot file tweak *)        
+  let dot_ocamlspot_tweak cmtname = 
+    if Filename.is_relative cmtname then None
+    else
+      Option.bind (Dotfile.find_and_load (Filename.dirname cmtname)) 
+        (fun (found_dir, dotfile) ->
+          Option.map dotfile.Dotfile.build_dir ~f:(fun build_dir ->
+            let length_found_dir = String.length found_dir in
+            let found_dir' = 
+              String.sub cmtname 0 length_found_dir
+            in
+            let rel_cmtname =
+              String.sub cmtname 
+                (length_found_dir + 1)
+                (String.length cmtname - length_found_dir - 1)
+            in
+            assert (found_dir = found_dir');
+            let dir = 
+              if Filename.is_relative build_dir then found_dir ^/ build_dir
+              else build_dir
+            in
+            let cmtname = dir ^/ rel_cmtname in
+            Debug.format "Trying .ocamlspot destination %s@." cmtname;
+            cmtname
+          ))
+
   let load ~load_paths cmtname : Unit.t =
-    let alternate_cmtname = 
-      if Filename.is_relative cmtname then None
-      else
-        Option.bind (Dotfile.find_and_load (Filename.dirname cmtname)) 
-          (fun (found_dir, dotfile) ->
-            Option.map dotfile.Dotfile.build_dir ~f:(fun build_dir ->
-              let length_found_dir = String.length found_dir in
-              let found_dir' = 
-                String.sub cmtname 0 length_found_dir
-              in
-              let rel_cmtname =
-                String.sub cmtname 
-                  (length_found_dir + 1)
-                  (String.length cmtname - length_found_dir - 1)
-              in
-              assert (found_dir = found_dir');
-              let dir = 
-                if Filename.is_relative build_dir then found_dir ^/ build_dir
-                else build_dir
-              in
-              dir ^/ rel_cmtname))
-    in
     try load ~load_paths cmtname with
     | e -> 
-        match alternate_cmtname with
-        | Some cmtname -> load ~load_paths cmtname
-        | None -> raise e
+        let load_alternative f =
+          match f cmtname with
+          | None -> None
+          | Some cmtname ->
+              try Some (load ~load_paths cmtname) with _ -> None
+        in
+        match load_alternative dot_ocamlspot_tweak with
+        | Some v -> v
+        | None -> 
+            match load_alternative ocamlbuild_path_tweak with
+            | Some v -> v
+            | None -> raise e
+
+  let with_cwd cwd f = 
+    let d = Sys.getcwd () in
+    protect ~f:(fun () -> Sys.chdir cwd; f ()) () 
+      ~finally: (fun _ -> Sys.chdir d)
 
   (* CR jfuruse: searching algorithm must be reconsidered *)        
-  let load_module ?(spit=false) ~load_paths name =
+  let load_module ?(spit=false) ~cwd ~load_paths name =
     let cmtname = name ^ if spit then ".cmti" else ".cmt" in
     try
-      load ~load_paths cmtname
+      with_cwd cwd (fun () -> load ~load_paths cmtname)
     with
     | Failure s ->
         let spitname = name ^ if spit then ".cmt" else ".cmti" in
   in
   eval_and_find path
 
-let str_of_global_ident ~load_paths id =
+let str_of_global_ident ~cwd ~load_paths id =
   assert (Ident.global id);
-  let file = Load.load_module ~spit:Spotconfig.print_interface ~load_paths (Ident0.name id) in
+  let file = Load.load_module ~spit:Spotconfig.print_interface ~cwd ~load_paths (Ident0.name id) in
   file.Unit.path,
   Eval.structure (empty_env file) file.Unit.top
 
 
 exception Old_cmt of string * string
 val load : load_paths:string list -> string -> Unit.t
-val load_module : ?spit:bool -> load_paths:string list -> string -> Unit.t (* CR jfuruse: spit *)
+val load_module : ?spit:bool -> cwd:string -> load_paths:string list -> string -> Unit.t (* CR jfuruse: spit *)
 
 val empty_env   : Unit.t -> Env.t
 val invalid_env : Unit.t -> Env.t
 type result = File_itself | Found_at of Region.t | Predefined
 
 val find_path_in_flat : Unit.t -> Kind.t * Path.t -> PIdent.t * result
-val str_of_global_ident : load_paths:string list -> Ident.t -> string * Value.structure
+val str_of_global_ident : cwd:string -> load_paths:string list -> Ident.t -> string * Value.structure
 val eval_packed : Env.t -> string -> Value.t
 
 depend: beforedepend
 	$(OCAMLDEP) $(INCLUDES) -I dir1 -I dir2 *.mli *.ml */*.mli */*.ml > .depend
 
-Makefile.targets: *.ml *.mli */*.ml
+Makefile.targets: *.ml *.mll *.mli */*.ml
 	echo TARGETS= \\ > $@
-	ls *.ml *.mli | sed -e 's/mli$$/cmi/' -e 's/ml$$/cmo/' -e 's/$$/ \\/'	 >> $@
+	ls *.ml *.mli *.mll | sed -e 's/mli$$/cmi/' -e 's/ml$$/cmo/' -e 's/mll$$/cmo/' -e 's/$$/ \\/'	 >> $@
 
 .PHONY: clean install installopt beforedepend depend
 

tests/Makefile.targets

 interface.cmo \
 intermodule.cmo \
 let_open.cmo \
+lex.cmo \
 localvar.cmo \
 module.cmo \
 module_alias.cmo \

tests/auto-test.pl

 	print STDERR "$command\n";
 	open(IN, "$command |");
 
-	$all_tests++;
-
 	while(<IN>){
             my $result;
             if( /^Spot: <(.*):all>/ ){ # whole file
+		$all_tests++;
                 $tested = 1;
                 $message = "$message$&\n";
                 $result = check_file_head($1);
             }
 	    if( /^Spot: <(.*):l[0-9]+c[0-9]+b([0-9]+):l[0-9]+c[0-9]+b([0-9]+)>$/ ){
+		$all_tests++;
 		$tested = 1;
 		$message = "$message$&\n";
 		$result = check_result($1, $2, $3);
+{
+open Lexing
+
+exception Error of int * int * string
+
+let error lexbuf s =
+  raise (Error (lexeme_start lexbuf, lexeme_end lexbuf, s))
+}
+
+rule exp st = parse
+  | "}" { st }
+  | "\\}" { exp (st ^ "}") lexbuf }
+  | "\\" { exp (st ^ "\\") lexbuf }
+  | ([^ '\\' '}']+ as s) { exp (st ^ s) lexbuf }
+  | _ as c { 
+      error lexbuf (Printf.sprintf "illegal char in ${exp}: %C" c) }
+  | eof { 
+      error lexbuf "unterminated ${exp}"
+    }
+
+{
+
+(* CR jfuruse: the test script only provides byte position, 
+   which does not work well for .mll *)
+let from_string s = exp (* ? exp *) "" (Lexing.from_string s)
+
+}

tests/random_performance.pl

+#!/usr/bin/perl
+
+open(IN, "ls ../*.ml ../*.mli |");
+while(<IN>){
+    chop;
+    my $cmt = $_;
+    $cmt =~ s/\.ml/.cmt/;
+    if( -f $cmt ){
+	@cands = ($_, @cands);
+    }
+}
+
+sub rand_cand {
+    return $cands[int(rand($#cands+1))];
+}
+
+sub rand_pos {
+    my $cand = $_[0];
+    my @st = stat($cand);
+    return int(rand($st[7]));
+}
+
+for ($i = 0; $i< 100; $i++){
+    my $cand = rand_cand();
+    my $pos = rand_pos($cand);
+
+    $log = `../ocamlspot.opt $cand:b$pos 2>&1`;
+    if( $log =~ /^Error: nothing at .*\nBYE!/ ){
+	next;
+    }
+    print "------\n$cand:b$pos\n";
+    print $log;
+}
+

tests/sample.prof

+Flat profile:
+
+Each sample counts as 0.01 seconds.
+  %   cumulative   self              self     total           
+ time   seconds   seconds    calls  ms/call  ms/call  name    
+ 12.07      0.07     0.07  8740985     0.00     0.00  compare_val
+ 12.07      0.14     0.07      235     0.30     0.30  intern_rec
+ 10.34      0.20     0.06 40243429     0.00     0.00  camlSpot__compare_2800
+  8.62      0.25     0.05  8564500     0.00     0.00  caml_equal
+  6.90      0.29     0.04 17123735     0.00     0.00  caml_apply2
+  6.90      0.33     0.04  8531832     0.00     0.00  camlSpot__compare_2882
+  6.90      0.37     0.04  8507125     0.00     0.00  camlTreeset__compare_1135
+  5.17      0.40     0.03  4785091     0.00     0.00  camlSet__create_1045
+  3.45      0.42     0.02 40259323     0.00     0.00  caml_int_compare
+  3.45      0.44     0.02  8531832     0.00     0.00  camlSpot__same_files_2885
+  3.45      0.46     0.02  1221724     0.00     0.00  camlSet__filter_1261
+  3.45      0.48     0.02  1197017     0.00     0.00  camlSet__split_1134
+  3.45      0.50     0.02                             caml_c_call
+  1.72      0.51     0.01  8531824     0.00     0.00  camlSpot__compare_2945
+  1.72      0.52     0.01  1843959     0.00     0.00  caml_modify
+  1.72      0.53     0.01  1442382     0.00     0.00  camlSet__bal_1053
+  1.72      0.54     0.01   641102     0.00     0.00  caml_oldify_one
+  1.72      0.55     0.01   543818     0.00     0.00  compact_allocate
+  1.72      0.56     0.01   500877     0.00     0.00  caml_alloc_shr
+  1.72      0.57     0.01    35640     0.00     0.01  camlXset__find_1176
+  1.72      0.58     0.01        1    10.00    20.00  do_compaction
+  0.00      0.58     0.00  8792669     0.00     0.00  caml_debugger_cleanup_fork
+  0.00      0.58     0.00  5890754     0.00     0.00  camlSet__join_1094
+  0.00      0.58     0.00  1232657     0.00     0.00  camlXset__middle_1146
+  0.00      0.58     0.00  1221724     0.00     0.00  camlXset__fun_1252
+  0.00      0.58     0.00  1192356     0.00     0.00  camlSet__singleton_1080
+  0.00      0.58     0.00  1086780     0.00     0.00  camlSet__add_min_element_1082
+  0.00      0.58     0.00   910481     0.00     0.00  caml_fl_merge_block
+  0.00      0.58     0.00   687076     0.00     0.00  invert_pointer_at
+  0.00      0.58     0.00   500889     0.00     0.00  caml_fl_allocate
+  0.00      0.58     0.00   500877     0.00     0.00  allocate_block
+  0.00      0.58     0.00   350183     0.00     0.00  caml_string_length
+  0.00      0.58     0.00   316923     0.00     0.00  caml_hash_mix_intnat
+  0.00      0.58     0.00   176399     0.00     0.00  caml_compare
+  0.00      0.58     0.00   175174     0.00     0.00  caml_hash_mix_uint32
+  0.00      0.58     0.00   105576     0.00     0.00  camlSet__add_max_element_1088
+  0.00      0.58     0.00   103092     0.00     0.00  caml_tuplify2
+  0.00      0.58     0.00    98665     0.00     0.00  caml_hash_mix_string
+  0.00      0.58     0.00    84607     0.00     0.00  caml_darken
+  0.00      0.58     0.00    84588     0.00     0.00  caml_string_compare
+  0.00      0.58     0.00    67633     0.00     0.00  camlList__map_1040
+  0.00      0.58     0.00    53404     0.00     0.00  caml_hash
+  0.00      0.58     0.00    48712     0.00     0.00  camlHashtbl__key_index_1066
+  0.00      0.58     0.00    46091     0.00     0.00  camlList__iter_1061
+  0.00      0.58     0.00    36378     0.00     0.00  caml_string_equal
+  0.00      0.58     0.00    30729     0.00     0.00  camlSet__add_1073
+  0.00      0.58     0.00    29559     0.00     0.00  caml_apply3
+  0.00      0.58     0.00    28702     0.00     0.00  caml_string_notequal
+  0.00      0.58     0.00    27411     0.00     0.00  caml_blit_string
+  0.00      0.58     0.00    24699     0.00     0.00  camlSet__merge_1124
+  0.00      0.58     0.00    24699     0.00     0.00  camlSet__remove_1154
+  0.00      0.58     0.00    24292     0.00     0.00  camlHashtbl__find_1088
+  0.00      0.58     0.00    23523     0.00     0.00  caml_curry2_1
+  0.00      0.58     0.00    23520     0.00     0.00  caml_curry2
+  0.00      0.58     0.00    18951     0.00     0.00  camlList__fold_left_1073
+  0.00      0.58     0.00    18718     0.00     0.00  caml_alloc_string
+  0.00      0.58     0.00    18662     0.00     0.00  caml_create_string
+  0.00      0.58     0.00    15900     0.00     0.00  camlHashtbl__replace_1107
+  0.00      0.58     0.00    15900     0.00     0.00  camlHashtbl__replace_bucket_1111
+  0.00      0.58     0.00    15894     0.00     0.00  camlSpot__check_location_2304
+  0.00      0.58     0.00    15894     0.00     0.00  camlSpot__really_record_2310
+  0.00      0.58     0.00    15894     0.00     0.00  camlSpot__record_2306
+  0.00      0.58     0.00    13568     0.00     0.00  caml_initialize
+  0.00      0.58     0.00    13563     0.00     0.00  camlPervasives__$5e_1102
+  0.00      0.58     0.00    12894     0.00     0.00  camlTtfold__fun_2683
+  0.00      0.58     0.00    12615     0.00     0.00  camlFilename__is_relative_1039
+  0.00      0.58     0.00    12596     0.00     0.00  camlSpot__of_lexing_position_2798
+  0.00      0.58     0.00    12521     0.00     0.00  caml_send2
+  0.00      0.58     0.00    12077     0.00     0.00  caml_alloc_small
+  0.00      0.58     0.00    11696     0.00     0.00  caml_obj_dup
+  0.00      0.58     0.00     9388     0.00     0.00  camlSpot__fun_5192
+  0.00      0.58     0.00     9180     0.00     0.00  camlUtils__fun_2009
+  0.00      0.58     0.00     9171     0.00     0.00  camlSpot__fun_5644
+  0.00      0.58     0.00     8192     0.00     0.05  camlHashtbl__do_bucket_1137
+  0.00      0.58     0.00     6939     0.00     0.00  camlList__rev_append_1029
+  0.00      0.58     0.00     6926     0.00     0.00  caml_tuplify3
+  0.00      0.58     0.00     6841     0.00     0.00  camlPervasives__$40_1133
+  0.00      0.58     0.00     6813     0.00     0.00  camlFilename__is_dir_sep_1036
+  0.00      0.58     0.00     6797     0.00     0.00  camlFilename__concat_1119
+  0.00      0.58     0.00     6312     0.00     0.00  camlUtils__$5e$2f_1114
+  0.00      0.58     0.00     6302     0.00     0.00  camlSpot__fname_2864
+  0.00      0.58     0.00     6298     0.00     0.00  camlSpot__of_parsing_2874
+  0.00      0.58     0.00     6082     0.00     0.00  camlSpot__fun_5014
+  0.00      0.58     0.00     6082     0.00     0.00  camlSpot__fun_5020
+  0.00      0.58     0.00     6082     0.00     0.00  camlTtfold__fun_2726
+  0.00      0.58     0.00     6082     0.00     0.00  camlTtfold__fun_2748
+  0.00      0.58     0.00     6014     0.00     0.00  camlUtils__filter_map_1056
+  0.00      0.58     0.00     6006     0.00     0.00  camlSpot__add_3164
+  0.00      0.58     0.00     6006     0.00     0.00  camlSpot__fun_5632
+  0.00      0.58     0.00     6006     0.00     0.00  camlSpot__fun_5642
+  0.00      0.58     0.00     6006     0.00     0.07  camlTreeset__add_node_1317
+  0.00      0.58     0.00     4706     0.00     0.00  camlHashtbl__hash_1294
+  0.00      0.58     0.00     4706     0.00     0.00  camlHashtbl__key_index_1212
+  0.00      0.58     0.00     4636     0.00     0.00  caml_ml_input
+  0.00      0.58     0.00     4554     0.00     0.00  camlPervasives__input_line_1222
+  0.00      0.58     0.00     4554     0.00     0.00  camlPervasives__scan_1230
+  0.00      0.58     0.00     4554     0.00     0.00  caml_input_scan_line
+  0.00      0.58     0.00     4554     0.00     0.00  caml_ml_input_char
+  0.00      0.58     0.00     4554     0.00     0.00  caml_ml_input_scan_line
+  0.00      0.58     0.00     4551     0.00     0.00  caml_ml_pos_in
+  0.00      0.58     0.00     4551     0.00     0.00  caml_pos_in
+  0.00      0.58     0.00     4469     0.00     0.00  caml_urge_major_slice
+  0.00      0.58     0.00     4235     0.00     0.00  camlHashtbl__hash_1010
+  0.00      0.58     0.00     4178     0.00     0.00  camlSpot__record_use_2446
+  0.00      0.58     0.00     4114     0.00     0.00  caml_send0
+  0.00      0.58     0.00     3907     0.00     0.00  caml_send1
+  0.00      0.58     0.00     3552     0.00     0.00  camlHashtbl__insert_bucket_1060
+  0.00      0.58     0.00     3405     0.00     0.00  camlSet__min_elt_1106
+  0.00      0.58     0.00     3405     0.00     0.00  camlSet__remove_min_elt_1118
+  0.00      0.58     0.00     3084     0.00     0.00  caml_gc_message
+  0.00      0.58     0.00     3053     0.00     0.00  caml_page_table_modify
+  0.00      0.58     0.00     2979     0.00     0.00  camlSpot__equal_1869
+  0.00      0.58     0.00     2898     0.00     0.00  camlSpot__kident_of_sigitem_2038
+  0.00      0.58     0.00     2674     0.00     0.00  camlSpot__fun_5002
+  0.00      0.58     0.00     2674     0.00     0.00  camlSpot__fun_5005
+  0.00      0.58     0.00     2674     0.00     0.00  camlTtfold__fun_2685
+  0.00      0.58     0.00     2674     0.00     0.00  camlTtfold__fun_2695
+  0.00      0.58     0.00     2659     0.00     0.00  invert_root
+  0.00      0.58     0.00     2377     0.00     0.00  camlTtfold__fun_2681
+  0.00      0.58     0.00     2375     0.00     0.00  camlSpot__fun_5615
+  0.00      0.58     0.00     2374     0.00     0.00  camlHashtbl__add_1069
+  0.00      0.58     0.00     2220     0.00     0.00  camlSpot__record_def_2445
+  0.00      0.58     0.00     1977     0.00     0.00  camlTtfold__fun_2787
+  0.00      0.58     0.00     1976     0.00     0.00  camlTtfold__fun_2789
+  0.00      0.58     0.00     1918     0.00     0.00  camlList__fold_right_1079
+  0.00      0.58     0.00     1912     0.00     0.00  camlHashtbl__replace_1253
+  0.00      0.58     0.00     1912     0.00     0.00  camlHashtbl__replace_bucket_1257
+  0.00      0.58     0.00     1824     0.00     0.00  camlCamlinternalOO__compare_1104
+  0.00      0.58     0.00     1823     0.00     0.00  camlHashtbl__find_1234
+  0.00      0.58     0.00     1647     0.00     0.00  camlSpot__equalize_2129
+  0.00      0.58     0.00     1599     0.00     0.00  camlCamlinternalOO__compare_1108
+  0.00      0.58     0.00     1581     0.00     0.00  camlSpot__fun_5601
+  0.00      0.58     0.00     1495     0.00     0.00  camlList__length_aux_1008
+  0.00      0.58     0.00     1495     0.00     0.00  camlMap__bal_1055
+  0.00      0.58     0.00     1449     0.00     0.00  camlSpot__fun_4633
+  0.00      0.58     0.00     1410     0.00     0.00  caml_channel_binary_mode
+  0.00      0.58     0.00     1175     0.00     0.00  caml_getword
+  0.00      0.58     0.00     1115     0.00     0.00  camlHashtbl__find_rec_1083
+  0.00      0.58     0.00     1111     0.00     0.00  camlSpoteval__fun_2908
+  0.00      0.58     0.00     1071     0.00     0.00  caml_process_pending_signals
+  0.00      0.58     0.00     1059     0.00     0.00  caml_obj_tag
+  0.00      0.58     0.00     1042     0.00     0.00  camlLazy__from_val_1016
+  0.00      0.58     0.00     1024     0.00     0.00  camlHashtbl__do_bucket_1127
+  0.00      0.58     0.00      965     0.00     0.00  camlSpot__fun_4720
+  0.00      0.58     0.00      780     0.00     0.00  camlTtfold__fun_2714
+  0.00      0.58     0.00      733     0.00     0.00  camlSpot__fun_5141
+  0.00      0.58     0.00      733     0.00     0.00  camlTtfold__fun_2989
+  0.00      0.58     0.00      733     0.00     0.00  camlTtfold__fun_2992
+  0.00      0.58     0.00      690     0.00     0.00  camlBuffer__add_char_1046
+  0.00      0.58     0.00      666     0.00     0.00  caml_iterate_global_roots
+  0.00      0.58     0.00      666     0.00     0.00  caml_stat_alloc
+  0.00      0.58     0.00      636     0.00     0.03  caml_empty_minor_heap
+  0.00      0.58     0.00      636     0.00     0.00  caml_final_empty_young
+  0.00      0.58     0.00      636     0.00     0.00  clear_table
+  0.00      0.58     0.00      632     0.00     0.00  camlTtfold__fun_2785
+  0.00      0.58     0.00      561     0.00     0.00  caml_stat_free
+  0.00      0.58     0.00      548     0.00     0.00  camlSpot__structure_item_2101
+  0.00      0.58     0.00      548     0.00     0.00  camlSpot__structure_item_desc_2102
+  0.00      0.58     0.00      507     0.00     0.00  camlList__map2_1085
+  0.00      0.58     0.00      484     0.00     0.00  camlSpot__fun_5077
+  0.00      0.58     0.00      457     0.00     0.00  camlSpot__hash_1750
+  0.00      0.58     0.00      452     0.00     0.00  camlFormat__peek_queue_1093
+  0.00      0.58     0.00      423     0.00     0.00  camlTtfold__fun_2935
+  0.00      0.58     0.00      413     0.00     0.00  caml_sys_file_exists
+  0.00      0.58     0.00      403     0.00     0.00  camlSpot__fun_4706
+  0.00      0.58     0.00      387     0.00     0.00  camlMap__find_1091
+  0.00      0.58     0.00      377     0.00     0.00  caml_enter_blocking_section
+  0.00      0.58     0.00      377     0.00     0.00  caml_enter_blocking_section_default
+  0.00      0.58     0.00      377     0.00     0.00  caml_leave_blocking_section
+  0.00      0.58     0.00      377     0.00     0.00  caml_leave_blocking_section_default
+  0.00      0.58     0.00      344     0.00     0.00  camlSpot__equal_1745
+  0.00      0.58     0.00      328     0.00     0.00  camlSpot__fun_5071
+  0.00      0.58     0.00      328     0.00     0.00  camlSpot__fun_5080
+  0.00      0.58     0.00      328     0.00     0.00  camlTtfold__fun_2901
+  0.00      0.58     0.00      328     0.00     0.00  camlTtfold__fun_2903
+  0.00      0.58     0.00      328     0.00     0.00  camlTtfold__fun_2906
+  0.00      0.58     0.00      324     0.00     0.00  camlMap__create_1045
+  0.00      0.58     0.00      318     0.00     0.00  caml_final_do_calls
+  0.00      0.58     0.00      318     0.00     0.00  caml_final_do_young_roots
+  0.00      0.58     0.00      318     0.00     0.06  caml_major_collection_slice
+  0.00      0.58     0.00      318     0.00     0.13  caml_minor_collection
+  0.00      0.58     0.00      318     0.00     0.00  caml_oldify_local_roots
+  0.00      0.58     0.00      318     0.00     0.05  caml_oldify_mopup
+  0.00      0.58     0.00      318     0.00     0.00  caml_scan_global_young_roots
+  0.00      0.58     0.00      317     0.00     0.13  caml_garbage_collection
+  0.00      0.58     0.00      313     0.00     0.00  camlTtfold__fun_2797
+  0.00      0.58     0.00      312     0.00     0.00  caml_tuplify4
+  0.00      0.58     0.00      302     0.00     0.00  caml_make_vect
+  0.00      0.58     0.00      294     0.00     0.00  camlMap__add_1082
+  0.00      0.58     0.00      292     0.00     0.00  camlSpot__fun_5622
+  0.00      0.58     0.00      292     0.00     0.00  camlSpot__ident_of_structure_item_1734
+  0.00      0.58     0.00      282     0.00     0.00  camlPrintf__index_of_int_1015
+  0.00      0.58     0.00      260     0.00     0.00  camlPrintf__add_conv_1162
+  0.00      0.58     0.00      260     0.00     0.00  camlPrintf__incr_ac_1158
+  0.00      0.58     0.00      260     0.00     0.00  camlPrintf__scan_conv_1121
+  0.00      0.58     0.00      260     0.00     0.00  camlPrintf__scan_flags_1120
+  0.00      0.58     0.00      260     0.00     0.00  caml_getblock
+  0.00      0.58     0.00      252     0.00     0.00  camlFormat__add_queue_1087
+  0.00      0.58     0.00      249     0.00     0.00  camlFormat__format_pp_token_1134
+  0.00      0.58     0.00      249     0.00     0.00  camlFormat__take_queue_1095
+  0.00      0.58     0.00      235     0.00     0.30  caml_input_val
+  0.00      0.58     0.00      235     0.00     0.30  caml_input_value
+  0.00      0.58     0.00      235     0.00     0.00  caml_really_getblock
+  0.00      0.58     0.00      235     0.00     0.00  intern_add_to_heap
+  0.00      0.58     0.00      235     0.00     0.00  intern_alloc
+  0.00      0.58     0.00      235     0.00     0.00  intern_free_stack
+  0.00      0.58     0.00      232     0.00     0.00  camlTtfold__fun_2923
+  0.00      0.58     0.00      228     0.00     0.00  camlTtfold__fun_2791
+  0.00      0.58     0.00      216     0.00     0.00  camlCamlinternalOO__get_method_label_1145
+  0.00      0.58     0.00      213     0.00     0.00  camlFormat__fun_2008
+  0.00      0.58     0.00      213     0.00     0.00  camlPervasives__output_1175
+  0.00      0.58     0.00      213     0.00     0.00  caml_ml_output
+  0.00      0.58     0.00      210     0.00     0.00  caml_putblock
+  0.00      0.58     0.00      203     0.00     0.00  camlFormat__advance_left_1179
+  0.00      0.58     0.00      203     0.00     0.00  camlFormat__advance_loop_1173
+  0.00      0.58     0.00      200     0.00     0.00  camlPrintf__get_arg_1255
+  0.00      0.58     0.00      193     0.00     0.00  camlFormat__enqueue_advance_1181
+  0.00      0.58     0.00      193     0.00     0.00  camlFormat__enqueue_string_as_1188
+  0.00      0.58     0.00      193     0.00     0.00  camlFormat__pp_output_string_1106
+  0.00      0.58     0.00      193     0.00     0.00  camlHashtbl__clear_1042
+  0.00      0.58     0.00      192     0.00     0.00  camlTtfold__fun_2712
+  0.00      0.58     0.00      177     0.00     0.00  camlTtfold__fun_2783
+  0.00      0.58     0.00      176     0.00     0.00  caml_apply4
+  0.00      0.58     0.00      174     0.00     0.00  mark_slice
+  0.00      0.58     0.00      170     0.00     0.00  camlList__flatten_1036
+  0.00      0.58     0.00      169     0.00     0.00  camlSpot__module_expr_2098
+  0.00      0.58     0.00      157     0.00     0.00  camlFormat__pp_print_as_char_1519
+  0.00      0.58     0.00      157     0.00     0.00  camlFormat__pp_print_char_1276
+  0.00      0.58     0.00      153     0.00     0.00  camlFormat__doprn_1525
+  0.00      0.58     0.00      152     0.00     0.00  camlPrintf__got_spec_1264
+  0.00      0.58     0.00      152     0.00     0.00  camlPrintf__scan_conv_1260
+  0.00      0.58     0.00      152     0.00     0.00  camlPrintf__scan_flags_1259
+  0.00      0.58     0.00      152     0.00     0.00  camlPrintf__scan_format_1245
+  0.00      0.58     0.00      152     0.00     0.00  camlPrintf__scan_positional_1258
+  0.00      0.58     0.00      152     0.00     0.00  camlPrintf__scan_positional_spec_1220
+  0.00      0.58     0.00      152     0.00     0.00  camlSpot__signature_item_2106
+  0.00      0.58     0.00      146     0.00     0.00  sweep_slice
+  0.00      0.58     0.00      145     0.00     0.00  camlHashtbl__find_rec_1229
+  0.00      0.58     0.00      144     0.00     0.00  camlSpot__module_expr_desc_2099
+  0.00      0.58     0.00      138     0.00     0.00  camlPrintf__ac_of_format_1155
+  0.00      0.58     0.00      138     0.00     0.00  camlPrintf__iter_on_format_args_1115
+  0.00      0.58     0.00      138     0.00     0.00  camlPrintf__kapr_1179
+  0.00      0.58     0.00      138     0.00     0.00  camlPrintf__scan_fmt_1122
+  0.00      0.58     0.00      126     0.00     0.00  camlString__sub_1024
+  0.00      0.58     0.00      125     0.00     0.00  caml_tuplify5
+  0.00      0.58     0.00      120     0.00     0.00  camlCamlinternalOO__resize_1130
+  0.00      0.58     0.00      119     0.00     0.00  camlTtfold__fun_3015
+  0.00      0.58     0.00      118     0.00     0.00  camlCamlinternalOO__fun_1573
+  0.00      0.58     0.00      118     0.00     0.00  camlCamlinternalOO__method_impl_1454
+  0.00      0.58     0.00      118     0.00     0.00  camlCamlinternalOO__next_1458
+  0.00      0.58     0.00      118     0.00     0.00  camlCamlinternalOO__put_1135
+  0.00      0.58     0.00      118     0.00     0.00  camlCamlinternalOO__set_method_1152
+  0.00      0.58     0.00      110     0.00     0.00  caml_do_read
+  0.00      0.58     0.00      108     0.00     0.00  camlSpot__record_record_2350
+  0.00      0.58     0.00      105     0.00     0.00  camlSpot__fun_5029
+  0.00      0.58     0.00      105     0.00     0.00  camlTtfold__fun_2801
+  0.00      0.58     0.00      103     0.00     0.00  caml_check_urgent_gc
+  0.00      0.58     0.00      101     0.00     0.00  caml_page_table_add
+  0.00      0.58     0.00      100     0.00     0.00  camlTtfold__fun_2795
+  0.00      0.58     0.00       98     0.00     0.00  camlCamlinternalOO__fun_1624
+  0.00      0.58     0.00       98     0.00     0.00  camlCamlinternalOO__public_method_label_1039
+  0.00      0.58     0.00       97     0.00     0.00  camlPrintf__doprn_1330
+  0.00      0.58     0.00       90     0.00     0.00  caml_adjust_gc_speed
+  0.00      0.58     0.00       90     0.00     0.00  caml_alloc_channel
+  0.00      0.58     0.00       90     0.00     0.00  caml_alloc_custom
+  0.00      0.58     0.00       89     0.00     0.00  camlSpot__fun_5110
+  0.00      0.58     0.00       89     0.00     0.00  camlSpot__fun_5123
+  0.00      0.58     0.00       89     0.00     0.00  camlTtfold__fun_2959
+  0.00      0.58     0.00       89     0.00     0.00  camlTtfold__fun_2961
+  0.00      0.58     0.00       89     0.00     0.00  camlTtfold__fun_2964
+  0.00      0.58     0.00       88     0.00     0.00  caml_open_descriptor_in
+  0.00      0.58     0.00       87     0.00     0.00  caml_register_frametable
+  0.00      0.58     0.00       87     0.00     0.00  cons
+  0.00      0.58     0.00       86     0.00     0.00  camlCmt__extract_sig_1760
+  0.00      0.58     0.00       86     0.00     0.00  camlList__fold_left2_1114
+  0.00      0.58     0.00       86     0.00     0.00  caml_ml_open_descriptor_in
+  0.00      0.58     0.00       85     0.00     0.00  camlPervasives__open_in_gen_1195
+  0.00      0.58     0.00       85     0.00     0.00  camlSpot__fun_5011
+  0.00      0.58     0.00       85     0.00     0.00  camlTtfold__fun_2720
+  0.00      0.58     0.00       85     0.00     0.00  caml_convert_flag_list
+  0.00      0.58     0.00       85     0.00     0.00  caml_sys_open
+  0.00      0.58     0.00       84     0.00     0.00  caml_ml_close_channel
+  0.00      0.58     0.00       83     0.00     0.00  camlTtfold__fun_2937
+  0.00      0.58     0.00       83     0.00     0.00  caml_finalize_channel
+  0.00      0.58     0.00       83     0.00     0.00  unlink_channel
+  0.00      0.58     0.00       82     0.00     0.00  camlPervasives__really_input_1216
+  0.00      0.58     0.00       82     0.00     0.00  camlPervasives__unsafe_really_input_1210
+  0.00      0.58     0.00       82     0.00     0.00  camlSpot__type_declaration_2108
+  0.00      0.58     0.00       80     0.00     0.00  camlString__apply1_1088
+  0.00      0.58     0.00       80     0.00     0.00  camlString__copy_1020
+  0.00      0.58     0.00       80     0.00     0.00  camlTtfold__fun_3051
+  0.00      0.58     0.00       79     0.00     0.00  camlChar__lowercase_1021
+  0.00      0.58     0.00       79     0.00     0.00  camlString__blit_1034
+  0.00      0.58     0.00       76     0.00     0.00  camlSpot__fun_4752
+  0.00      0.58     0.00       76     0.00     0.00  camlSpot__structure_2100
+  0.00      0.58     0.00       74     0.00     0.00  camlSpot__fun_4750
+  0.00      0.58     0.00       72     0.00     0.00  camlSpot__fun_5065
+  0.00      0.58     0.00       72     0.00     0.00  camlSpot__fun_5068
+  0.00      0.58     0.00       72     0.00     0.00  camlTtfold__fun_2887
+  0.00      0.58     0.00       72     0.00     0.00  camlTtfold__fun_2893
+  0.00      0.58     0.00       72     0.00     0.00  camlTtfold__fun_2942
+  0.00      0.58     0.00       70     0.00     0.00  camlBuffer__create_1013
+  0.00      0.58     0.00       68     0.00     0.00  camlBuffer__add_string_1056
+  0.00      0.58     0.00       68     0.00     0.00  camlPrintf__cont_s_1331
+  0.00      0.58     0.00       67     0.00     0.00  camlTtfold__fun_2807
+  0.00      0.58     0.00       59     0.00     0.00  camlFormat__fun_3044
+  0.00      0.58     0.00       59     0.00     0.00  camlFormat__fun_3049
+  0.00      0.58     0.00       59     0.00     0.00  camlFormat__fun_3056
+  0.00      0.58     0.00       59     0.00     0.00  camlFormat__ifprintf_1665
+  0.00      0.58     0.00       59     0.00     0.00  camlFormat__ikfprintf_1660
+  0.00      0.58     0.00       59     0.00     0.00  camlHashtbl__create_1035
+  0.00      0.58     0.00       59     0.00     0.00  camlHashtbl__power_2_above_1032
+  0.00      0.58     0.00       59     0.00     0.00  camlUtils__format_1067
+  0.00      0.58     0.00       58     0.00     0.00  camlSpot__fun_4708
+  0.00      0.58     0.00       58     0.00     0.00  caml_notequal
+  0.00      0.58     0.00       54     0.00     0.00  caml_curry3
+  0.00      0.58     0.00       52     0.00     0.00  camlList__memq_1160
+  0.00      0.58     0.00       52     0.00     0.00  caml_copy_string
+  0.00      0.58     0.00       52     0.00     0.00  caml_curry3_1
+  0.00      0.58     0.00       52     0.00     0.00  caml_curry3_2
+  0.00      0.58     0.00       51     0.00     0.00  camlFormat__fun_3040
+  0.00      0.58     0.00       51     0.00     0.00  camlFormat__fun_3053
+  0.00      0.58     0.00       51     0.00     0.00  camlFormat__kpr_1514
+  0.00      0.58     0.00       51     0.00     0.00  camlList__assoc_1164
+  0.00      0.58     0.00       51     0.00     0.00  camlPrintf__fun_1561
+  0.00      0.58     0.00       50     0.00     0.00  camlFormat__fprintf_1663
+  0.00      0.58     0.00       50     0.00     0.00  camlFormat__kfprintf_1657
+  0.00      0.58     0.00       50     0.00     0.00  camlFormat__kprintf_1510
+  0.00      0.58     0.00       50     0.00     0.00  camlFormat__mkprintf_1507
+  0.00      0.58     0.00       49     0.00     0.00  camlCamlinternalOO__fun_1587
+  0.00      0.58     0.00       49     0.00     0.00  camlCamlinternalOO__fun_1593
+  0.00      0.58     0.00       49     0.00     0.00  camlCamlinternalOO__fun_1635
+  0.00      0.58     0.00       49     0.00     0.00  camlCamlinternalOO__get_method_1156
+  0.00      0.58     0.00       49     0.00     0.00  camlSpot__fun_5061
+  0.00      0.58     0.00       49     0.00     0.00  camlSpot__fun_5147
+  0.00      0.58     0.00       49     0.00     0.00  camlSpot__fun_5159
+  0.00      0.58     0.00       49     0.00     0.00  camlTtfold__fun_2857
+  0.00      0.58     0.00       49     0.00     0.00  camlTtfold__fun_2885
+  0.00      0.58     0.00       49     0.00     0.00  camlTtfold__fun_2931
+  0.00      0.58     0.00       49     0.00     0.00  camlTtfold__fun_3058
+  0.00      0.58     0.00       49     0.00     0.00  camlTtfold__fun_3081
+  0.00      0.58     0.00       49     0.00     0.00  camlTtfold__fun_3094
+  0.00      0.58     0.00       47     0.00     0.00  camlSpoteval__fun_2976
+  0.00      0.58     0.00       46     0.00     0.00  camlFormat__set_size_1201
+  0.00      0.58     0.00       40     0.00     0.00  camlTtfold__fun_2896
+  0.00      0.58     0.00       40     0.00     0.00  camlTtfold__fun_3092
+  0.00      0.58     0.00       39     0.00     0.00  camlPrintf__extract_format_1063
+  0.00      0.58     0.00       39     0.00     0.00  camlPrintf__extract_format_int_1081
+  0.00      0.58     0.00       39     0.00     0.00  camlPrintf__fill_format_1074
+  0.00      0.58     0.00       39     0.00     0.00  camlPrintf__skip_positional_spec_1068
+  0.00      0.58     0.00       39     0.00     0.00  camlSpot__fun_5156
+  0.00      0.58     0.00       39     0.00     0.00  camlSpoteval__add_predefined_1788
+  0.00      0.58     0.00       39     0.00     0.00  camlTtfold__fun_3090
+  0.00      0.58     0.00       39     0.00     0.00  caml_format_int
+  0.00      0.58     0.00       39     0.00     0.00  parse_format
+  0.00      0.58     0.00       38     0.00     0.00  camlFormat__scan_push_1210
+  0.00      0.58     0.00       37     0.00     0.00  camlCmt__env_from_summary_1764
+  0.00      0.58     0.00       37     0.00     0.00  camlCmt__recover_env_1557
+  0.00      0.58     0.00       37     0.00     0.00  camlSpot__aliases_of_include$27_2067
+  0.00      0.58     0.00       37     0.00     0.00  camlSpot__aliases_of_include_2093
+  0.00      0.58     0.00       36     0.00     0.00  camlFormat__cont_s_1526
+  0.00      0.58     0.00       36     0.00     0.00  camlFormat__pp_print_as_string_1520
+  0.00      0.58     0.00       36     0.00     0.00  camlFormat__pp_print_string_1264
+  0.00      0.58     0.00       36     0.00     0.00  caml_copy_double
+  0.00      0.58     0.00       35     0.00     0.00  camlString__index_rec_1096
+  0.00      0.58     0.00       34     0.00     0.00  camlArg__loop_1148
+  0.00      0.58     0.00       34     0.00     0.00  camlArg__second_word_1145
+  0.00      0.58     0.00       34     0.00     0.00  camlTtfold__fun_2793
+  0.00      0.58     0.00       32     0.00     0.00  camlSpot__fun_5092
+  0.00      0.58     0.00       32     0.00     0.00  camlTtfold__fun_2925
+  0.00      0.58     0.00       30     0.00     0.00  camlPrintf__fun_1552
+  0.00      0.58     0.00       29     0.00     0.00  camlPrintf__fun_1722
+  0.00      0.58     0.00       29     0.00     0.00  camlPrintf__fun_1785
+  0.00      0.58     0.00       29     0.00     0.00  camlPrintf__fun_1795
+  0.00      0.58     0.00       29     0.00     0.00  camlPrintf__fun_1799
+  0.00      0.58     0.00       29     0.00     0.00  camlPrintf__get_buff_1371
+  0.00      0.58     0.00       29     0.00     0.00  camlPrintf__get_cont_1377
+  0.00      0.58     0.00       29     0.00     0.00  camlPrintf__ksprintf_1380
+  0.00      0.58     0.00       29     0.00     0.00  camlPrintf__mkprintf_1315
+  0.00      0.58     0.00       29     0.00     0.00  camlPrintf__pr_1324
+  0.00      0.58     0.00       29     0.00     0.00  camlPrintf__sprintf_1382
+  0.00      0.58     0.00       29     0.00     0.00  camlSpoteval__fun_2997
+  0.00      0.58     0.00       28     0.00     0.00  camlFormat__pp_open_box_gen_1214
+  0.00      0.58     0.00       25     0.00     0.00  camlPrintf__fun_1555
+  0.00      0.58     0.00       25     0.00     0.00  camlPrintf__fun_1558
+  0.00      0.58     0.00       24     0.00     0.00  camlSet__mem_1148
+  0.00      0.58     0.00       24     0.00     0.00  camlSpot__fun_4729
+  0.00      0.58     0.00       24     0.00     0.00  camlSpot__fun_5017
+  0.00      0.58     0.00       24     0.00     0.00  camlTtfold__fun_2731
+  0.00      0.58     0.00       24     0.00     0.00  camlTtfold__fun_2733
+  0.00      0.58     0.00       22     0.00     0.00  camlTtfold__fun_2815
+  0.00      0.58     0.00       21     0.00     0.00  camlSpot__fun_5044
+  0.00      0.58     0.00       21     0.00     0.00  camlSpot__fun_5101
+  0.00      0.58     0.00       21     0.00     0.00  camlTtfold__fun_2864
+  0.00      0.58     0.00       21     0.00     0.00  camlTtfold__fun_2866
+  0.00      0.58     0.00       21     0.00     0.00  camlTtfold__fun_2872
+  0.00      0.58     0.00       21     0.00     0.00  camlTtfold__fun_2944
+  0.00      0.58     0.00       21     0.00     0.00  camlTtfold__fun_2947
+  0.00      0.58     0.00       20     0.00     0.00  camlTtfold__fun_2809
+  0.00      0.58     0.00       20     0.00     0.00  camlTtfold__fun_2869
+  0.00      0.58     0.00       19     0.00     0.00  camlTtfold__fun_3077
+  0.00      0.58     0.00       18     0.00     0.00  camlFormat__do_pp_open_box_1536
+  0.00      0.58     0.00       18     0.00     0.00  camlFormat__pp_close_box_1221
+  0.00      0.58     0.00       18     0.00     0.00  camlPervasives__max_1018
+  0.00      0.58     0.00       18     0.00     0.00  camlString__make_1016
+  0.00      0.58     0.00       18     0.00     0.00  camlTtfold__fun_3071
+  0.00      0.58     0.00       18     0.00     0.00  camlTtfold__fun_3073
+  0.00      0.58     0.00       18     0.00     0.00  camlTtfold__fun_3079
+  0.00      0.58     0.00       18     0.00     0.00  caml_fill_string
+  0.00      0.58     0.00       18     0.00     0.00  caml_greaterequal
+  0.00      0.58     0.00       17     0.00     0.00  camlArg__add_padding_1155
+  0.00      0.58     0.00       17     0.00     0.00  camlArg__fun_1277
+  0.00      0.58     0.00       17     0.00     0.00  camlArg__max_arg_len_1150
+  0.00      0.58     0.00       16     0.00     0.00  camlSpot__module_type_2103
+  0.00      0.58     0.00       16     0.00     0.00  camlSpot__module_type_desc_2104
+  0.00      0.58     0.00       16     0.00     0.00  camlSpot__signature_2105
+  0.00      0.58     0.00       16     0.00     0.00  camlTtfold__fun_3013
+  0.00      0.58     0.00       15     0.00     0.00  camlSpoteval__fun_2497
+  0.00      0.58     0.00       15     0.00     0.00  camlUtils__$21$21_1080
+  0.00      0.58     0.00       14     0.00     0.00  camlList__mem_assq_1179
+  0.00      0.58     0.00       14     0.00     0.00  caml_aligned_malloc
+  0.00      0.58     0.00       14     0.00     0.00  caml_obj_set_tag
+  0.00      0.58     0.00       14     0.00     0.00  clip_heap_chunk_size
+  0.00      0.58     0.00       13     0.00     0.00  camlCamlinternalLazy__force_lazy_block_1010
+  0.00      0.58     0.00       13     0.00     0.00  camlName__create_1009
+  0.00      0.58     0.00       13     0.00     0.00  camlSpot__fun_5132
+  0.00      0.58     0.00       13     0.00     0.00  camlTtfold__fun_2975
+  0.00      0.58     0.00       13     0.00     0.00  caml_alloc_for_heap
+  0.00      0.58     0.00       13     0.00     0.00  caml_round_heap_chunk_size
+  0.00      0.58     0.00       12     0.00     0.00  camlFormat__fun_1993
+  0.00      0.58     0.00       12     0.00     0.00  camlSpoteval__fun_2500
+  0.00      0.58     0.00       12     0.00     0.00  camlSpoteval__fun_2503
+  0.00      0.58     0.00       12     0.00     0.00  caml_add_to_heap
+  0.00      0.58     0.00       12     0.00     0.00  caml_fl_add_blocks
+  0.00      0.58     0.00       12     0.00     0.00  caml_flush
+  0.00      0.58     0.00       12     0.00     0.00  caml_flush_partial
+  0.00      0.58     0.00       12     0.00     0.00  caml_ml_flush
+  0.00      0.58     0.00       11     0.00     0.00  camlBuffer__resize_1040
+  0.00      0.58     0.00       11     0.00     0.00  camlList__iter2_1106
+  0.00      0.58     0.00       11     0.00     0.00  camlTtfold__fun_3023
+  0.00      0.58     0.00       11     0.00     0.00  camlTtfold__fun_3044
+  0.00      0.58     0.00       11     0.00     0.00  caml_apply5
+  0.00      0.58     0.00       11     0.00     0.00  caml_fl_init_merge
+  0.00      0.58     0.00       10     0.00     0.00  camlFormat__display_blanks_1374
+  0.00      0.58     0.00       10     0.00     0.00  camlFormat__fun_2000
+  0.00      0.58     0.00       10     0.00     0.00  camlFormat__fun_2011
+  0.00      0.58     0.00       10     0.00     0.00  camlFormat__pp_clear_queue_1103
+  0.00      0.58     0.00       10     0.00     0.00  camlFormat__pp_flush_queue_1253
+  0.00      0.58     0.00       10     0.00     0.00  camlFormat__pp_print_break_1302
+  0.00      0.58     0.00       10     0.00     0.00  camlFormat__pp_rinit_1251
+  0.00      0.58     0.00       10     0.00     0.00  camlPervasives__min_1015
+  0.00      0.58     0.00       10     0.00     0.00  camlSpot__fun_5442
+  0.00      0.58     0.00       10     0.00     0.00  caml_curry4
+  0.00      0.58     0.00       10     0.00     0.00  caml_curry4_1
+  0.00      0.58     0.00       10     0.00     0.00  caml_curry4_2
+  0.00      0.58     0.00       10     0.00     0.00  caml_curry4_3
+  0.00      0.58     0.00       10     0.00     0.00  caml_do_local_roots
+  0.00      0.58     0.00       10     0.00     0.00  caml_do_roots
+  0.00      0.58     0.00       10     0.00     0.00  caml_final_do_strong_roots
+  0.00      0.58     0.00       10     0.00     0.00  caml_lessequal
+  0.00      0.58     0.00       10     0.00     0.00  caml_scan_global_roots
+  0.00      0.58     0.00        9     0.00     0.00  camlFormat__pp_print_newline_1294
+  0.00      0.58     0.00        9     0.00     0.00  camlOcamlspot__fun_2237
+  0.00      0.58     0.00        9     0.00     0.00  camlSpot__to_string_2810
+  0.00      0.58     0.00        9     0.00     0.00  camlTtfold__fun_2954
+  0.00      0.58     0.00        9     0.00     0.00  caml_darken_all_roots
+  0.00      0.58     0.00        9     0.00     0.00  caml_final_update
+  0.00      0.58     0.00        9     0.00     0.00  caml_make_free_blocks
+  0.00      0.58     0.00        9     0.00     0.00  do_write
+  0.00      0.58     0.00        9     0.00     0.00  start_cycle
+  0.00      0.58     0.00        8     0.00     0.00  camlArray__map_1054
+  0.00      0.58     0.00        8     0.00     0.00  camlCamlinternalOO__create_object_opt_1263
+  0.00      0.58     0.00        8     0.00     0.00  camlOcamlspot__fun_2222
+  0.00      0.58     0.00        8     0.00     0.00  camlOcamlspot__fun_2227
+  0.00      0.58     0.00        8     0.00     0.00  camlOcamlspot__fun_2235
+  0.00      0.58     0.00        8     0.00     0.00  camlTtfold__fun_3056
+  0.00      0.58     0.00        8     0.00     2.50  caml_compact_heap_maybe
+  0.00      0.58     0.00        8     0.00     0.00  caml_raise
+  0.00      0.58     0.00        8     0.00     0.00  caml_raise_constant
+  0.00      0.58     0.00        8     0.00     0.00  caml_raise_not_found
+  0.00      0.58     0.00        8     0.00     0.00  caml_sys_getenv
+  0.00      0.58     0.00        7     0.00     0.00  camlFormat__printf_1667
+  0.00      0.58     0.00        7     0.00     0.00  camlHashtbl__add_1215
+  0.00      0.58     0.00        7     0.00     0.00  camlPrintf__fun_1564
+  0.00      0.58     0.00        7     0.00     0.00  camlSpot__complete_2841
+  0.00      0.58     0.00        7     0.00     0.00  camlTtfold__fun_2679
+  0.00      0.58     0.00        7     0.00     0.00  camlTtfold__fun_2718
+  0.00      0.58     0.00        7     0.00     0.00  camlTtfold__fun_2803
+  0.00      0.58     0.00        7     0.00     0.00  caml_sys_getcwd
+  0.00      0.58     0.00        6     0.00     0.00  camlFilename__chop_extension_1127
+  0.00      0.58     0.00        6     0.00     0.00  camlFilename__search_dot_1129
+  0.00      0.58     0.00        6     0.00     0.01  camlHashtbl__resize_1053
+  0.00      0.58     0.00        6     0.00     0.00  camlMap__map_1150
+  0.00      0.58     0.00        6     0.00     0.00  camlSpot__fun_5035
+  0.00      0.58     0.00        6     0.00     0.00  camlTtfold__fun_2817
+  0.00      0.58     0.00        6     0.00     0.00  camlTtfold__fun_2820
+  0.00      0.58     0.00        6     0.00     0.00  camlTypeFix__default_1837
+  0.00      0.58     0.00        6     0.00     0.00  camlUtils__protect_1269
+  0.00      0.58     0.00        6     0.00     0.00  camlUtils__split_extension_1111
+  0.00      0.58     0.00        6     0.00     0.00  caml_alloc
+  0.00      0.58     0.00        6     0.00     0.00  caml_apply6
+  0.00      0.58     0.00        6     0.00     0.00  caml_curry5
+  0.00      0.58     0.00        6     0.00     0.00  caml_curry5_1
+  0.00      0.58     0.00        6     0.00     0.00  caml_curry5_2
+  0.00      0.58     0.00        6     0.00     0.00  caml_curry5_3
+  0.00      0.58     0.00        6     0.00     0.00  caml_curry5_4
+  0.00      0.58     0.00        6     0.00     0.00  caml_int64_float_of_bits
+  0.00      0.58     0.00        5     0.00     0.00  camlHashtbl__MakeSeeded_1290
+  0.00      0.58     0.00        5     0.00     0.00  camlHashtbl__Make_1331
+  0.00      0.58     0.00        5     0.00     0.00  camlMap__Make_1341
+  0.00      0.58     0.00        5     0.00     0.00  camlMap__fun_1952
+  0.00      0.58     0.00        5     0.00     0.00  camlSpoteval__fun_2892
+  0.00      0.58     0.00        5     0.00     0.00  camlSpoteval__name_filter_2235
+  0.00      0.58     0.00        5     0.00     0.00  camlTtfold__fun_2890
+  0.00      0.58     0.00        5     0.00     0.00  camlTypeFix__f_1833
+  0.00      0.58     0.00        5     0.00     0.00  camlTypeFix__path_1544
+  0.00      0.58     0.00        5     0.00     0.00  caml_curry3_1_app
+  0.00      0.58     0.00        5     0.00     0.00  caml_obj_block
+  0.00      0.58     0.00        4     0.00     0.00  camlCamlinternalOO__new_slot_1196
+  0.00      0.58     0.00        4     0.00     0.00  camlCamlinternalOO__new_variable_1199
+  0.00      0.58     0.00        4     0.00     0.00  camlCamlinternalOO__run_initializers_opt_1275
+  0.00      0.58     0.00        4     0.00     0.00  camlCamlinternalOO__set_id_1009
+  0.00      0.58     0.00        4     0.00     0.00  camlCmt__fun_1809
+  0.00      0.58     0.00        4     0.00     0.00  camlCmt__source_path_1542
+  0.00      0.58     0.00        4     0.00     0.00  camlFilename__is_implicit_1041
+  0.00      0.58     0.00        4     0.00     0.00  camlFormat__cont_a_1527
+  0.00      0.58     0.00        4     0.00     0.00  camlFormat__get_1585
+  0.00      0.58     0.00        4     0.00     0.00  camlFormat__get_box_kind_1533
+  0.00      0.58     0.00        4     0.00     0.00  camlFormat__get_int_1531
+  0.00      0.58     0.00        4     0.00     0.00  camlFormat__got_size_1645
+  0.00      0.58     0.00        4     0.00     0.00  camlFormat__skip_gt_1532
+  0.00      0.58     0.00        4     0.00     0.00  camlSet__Make_1291
+  0.00      0.58     0.00        4     0.00     0.00  camlSet__fun_1855
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__abstraction_3269
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__abstraction_3285
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__fun_5041
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__fun_5107
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__fun_5138
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__fun_5168
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__fun_5212
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__fun_5445
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__of_cmt_3290
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__of_file_3325
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__protect$27_2211
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__record_structure_2760
+  0.00      0.58     0.00        4     0.00     0.00  camlSpot__top_structure_2206
+  0.00      0.58     0.00        4     0.00     0.00  camlSpoteval__find_path_2199
+  0.00      0.58     0.00        4     0.00     0.00  camlSpoteval__structure_2202
+  0.00      0.58     0.00        4     0.00     0.00  camlSpoteval__with_check_1768
+  0.00      0.58     0.00        4     0.00     0.00  camlSpotfile__check_time_stamp_1659
+  0.00      0.58     0.00        4     0.00     0.00  camlSpotfile__find_in_path_1795
+  0.00      0.58     0.00        4     0.00     0.00  camlSpotfile__find_in_path_1800
+  0.00      0.58     0.00        4     0.00     0.00  camlSpotfile__fun_1953
+  0.00      0.58     0.00        4     0.00     0.00  camlSpotfile__load_1811
+  0.00      0.58     0.00        4     0.00     0.00  camlSpotfile__load_1836
+  0.00      0.58     0.00        4     0.00     0.00  camlSpotfile__load_directly_1673
+  0.00      0.58     0.00        4     0.00     0.00  camlString__rindex_rec_1109
+  0.00      0.58     0.00        4     0.00     0.00  camlTtfold__fun_2690
+  0.00      0.58     0.00        4     0.00     0.00  camlTtfold__fun_2692
+  0.00      0.58     0.00        4     0.00     0.00  camlTtfold__fun_2716
+  0.00      0.58     0.00        4     0.00     0.00  camlTtfold__fun_2799
+  0.00      0.58     0.00        4     0.00     0.00  camlTtfold__fun_2952
+  0.00      0.58     0.00        4     0.00     0.00  camlTtfold__fun_2986
+  0.00      0.58     0.00        4     0.00     0.00  camlTtfold__fun_3192
+  0.00      0.58     0.00        4     0.00     0.00  camlUtils__fun_2066
+  0.00      0.58     0.00        4     0.00     0.00  camlUtils__map_1253
+  0.00      0.58     0.00        4     0.00     0.00  camlUtils__with_ref_1284
+  0.00      0.58     0.00        4     0.00     0.00  caml_sys_chdir
+  0.00      0.58     0.00        4     0.00     0.00  parse_digit
+  0.00      0.58     0.00        3     0.00     0.00  camlCamlinternalOO__get_method_labels_1149
+  0.00      0.58     0.00        3     0.00     0.00  camlCamlinternalOO__set_methods_1516
+  0.00      0.58     0.00        3     0.00     0.00  camlCamlinternalOO__to_list_1159
+  0.00      0.58     0.00        3     0.00     0.00  camlFormat__break_new_line_1114
+  0.00      0.58     0.00        3     0.00     0.00  camlFormat__make_formatter_1394
+  0.00      0.58     0.00        3     0.00     0.00  camlFormat__pp_make_formatter_1386
+  0.00      0.58     0.00        3     0.00     0.00  camlSpot__complete_2913
+  0.00      0.58     0.00        3     0.00     0.00  camlSpot__iter_2848
+  0.00      0.58     0.00        3     0.00     0.00  camlSpot__to_string_2869
+  0.00      0.58     0.00        3     0.00     0.00  camlTtfold__fun_2849
+  0.00      0.58     0.00        3     0.00     0.00  camlTtfold__fun_2851
+  0.00      0.58     0.00        3     0.00     0.00  camlTtfold__fun_3096
+  0.00      0.58     0.00        3     0.00     0.00  camlTtfold__fun_3101
+  0.00      0.58     0.00        3     0.00     0.00  camlXpath__name_1040
+  0.00      0.58     0.00        3     0.00     0.00  caml_array_length
+  0.00      0.58     0.00        3     0.00     0.00  caml_insert_global_root
+  0.00      0.58     0.00        3     0.00     0.00  caml_register_custom_operations
+  0.00      0.58     0.00        3     0.00     0.00  caml_register_global_root
+  0.00      0.58     0.00        3     0.00     0.00  caml_register_named_value
+  0.00      0.58     0.00        3     0.00     0.00  hash_value_name
+  0.00      0.58     0.00        2     0.00     0.00  camlArg__assoc3_1053
+  0.00      0.58     0.00        2     0.00     0.00  camlArray__blit_1044
+  0.00      0.58     0.00        2     0.00     0.01  camlArray__iteri_1060
+  0.00      0.58     0.00        2     0.00     0.00  camlCamlinternalMod__init_mod_1013
+  0.00      0.58     0.00        2     0.00     0.01  camlCamlinternalOO__create_table_1224
+  0.00      0.58     0.00        2     0.00     0.00  camlCamlinternalOO__fit_size_1123
+  0.00      0.58     0.00        2     0.00     0.00  camlCamlinternalOO__init_class_1231
+  0.00      0.58     0.00        2     0.00     0.01  camlCamlinternalOO__make_class_1243
+  0.00      0.58     0.00        2     0.00     0.00  camlCamlinternalOO__new_table_1125
+  0.00      0.58     0.00        2     0.00     0.00  camlCamlinternalOO__to_array_1203
+  0.00      0.58     0.00        2     0.00     0.00  camlCmt__of_path_1545
+  0.00      0.58     0.00        2     0.00     0.00  camlFormat__format_int_of_string_1488
+  0.00      0.58     0.00        2     0.00     0.00  camlFormat__formatter_of_out_channel_1398
+  0.00      0.58     0.00        2     0.00     0.00  camlHashtbl__fold_1133
+  0.00      0.58     0.00        2     0.00     0.00  camlList__find_1196
+  0.00      0.58     0.00        2     0.00     0.00  camlOcamlspot__fun_2231
+  0.00      0.58     0.00        2     0.00     0.00  camlOcamlspot__fun_2280
+  0.00      0.58     0.00        2     0.00     0.00  camlSpot__format_2769
+  0.00      0.58     0.00        2     0.00     0.00  camlSpot__fun_4716
+  0.00      0.58     0.00        2     0.00     0.00  camlSpot__get_number_2823
+  0.00      0.58     0.00        2     0.00     0.00  camlSpoteval__find_1773
+  0.00      0.58     0.00        2     0.00     0.00  camlSpoteval__find_ident_2200
+  0.00      0.58     0.00        2     0.00     0.00  camlSpoteval__fun_2484
+  0.00      0.58     0.00        2     0.00     0.00  camlSpoteval__fun_2492
+  0.00      0.58     0.00        2     0.00     0.00  camlSpoteval__fun_2819
+  0.00      0.58     0.00        2     0.00     0.00  camlSpoteval__fun_2879
+  0.00      0.58     0.00        2     0.00     0.00  camlSpoteval__fun_2885
+  0.00      0.58     0.00        2     0.00     0.00  camlSpoteval__module_expr_2201
+  0.00      0.58     0.00        2     0.00     0.00  camlSpoteval__overrides_1780
+  0.00      0.58     0.00        2     0.00     0.00  camlSpoteval__overrides_2052
+  0.00      0.58     0.00        2     0.00     0.00  camlSpotfile__empty_env_1867
+  0.00      0.58     0.00        2     0.00     0.00  camlSpotfile__fun_1993
+  0.00      0.58     0.00        2     0.00     0.00  camlSpotfile__fun_1996
+  0.00      0.58     0.00        2     0.00     0.00  camlSpotfile__fun_2004
+  0.00      0.58     0.00        2     0.00     0.00  camlSpotfile__load_module_1849
+  0.00      0.58     0.00        2     0.00     0.00  camlSpotfile__str_of_global_ident_1896
+  0.00      0.58     0.00        2     0.00     0.00  camlSpotfile__with_cwd_1845
+  0.00      0.58     0.00        2     0.00     0.00  camlTtfold__fold_init_2157
+  0.00      0.58     0.00        2     0.00     0.00  camlTtfold__fun_2742
+  0.00      0.58     0.00        2     0.00     0.00  camlTtfold__fun_3049
+  0.00      0.58     0.00        2     0.00     0.00  camlUtils__dev_inode_1506
+  0.00      0.58     0.00        2     0.00     0.00  camlUtils__find_map_opt_1051
+  0.00      0.58     0.00        2     0.00     0.00  camlXprinttyp__fun_1054
+  0.00      0.58     0.00        2     0.00     0.00  camlXprinttyp__make_type_1008
+  0.00      0.58     0.00        2     0.00     0.00  camlXprinttyp__type_scheme_1022
+  0.00      0.58     0.00        2     0.00     0.00  caml_array_blit
+  0.00      0.58     0.00        2     0.00     0.00  caml_free_for_heap
+  0.00      0.58     0.00        2     0.00     0.00  caml_int_of_string
+  0.00      0.58     0.00        2     0.00     0.00  caml_ml_open_descriptor_out
+  0.00      0.58     0.00        2     0.00     0.00  caml_open_descriptor_out
+  0.00      0.58     0.00        2     0.00     0.00  caml_page_table_remove
+  0.00      0.58     0.00        2     0.00     0.00  caml_shrink_heap
+  0.00      0.58     0.00        2     0.00     0.00  init_compact_allocate
+  0.00      0.58     0.00        2     0.00     0.00  norm_heapincr
+  0.00      0.58     0.00        2     0.00     0.00  parse_intnat
+  0.00      0.58     0.00        2     0.00     0.00  parse_sign_and_base
+  0.00      0.58     0.00        2     0.00     0.00  reset_table
+  0.00      0.58     0.00        1     0.00     0.00  camlArg__add_help_1077
+  0.00      0.58     0.00        1     0.00     0.00  camlArg__align_1171
+  0.00      0.58     0.00        1     0.00     0.00  camlArg__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlArg__parse_1139
+  0.00      0.58     0.00        1     0.00     0.00  camlArg__parse_argv_1093
+  0.00      0.58     0.00        1     0.00     0.00  camlArray__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlArray__to_list_1070
+  0.00      0.58     0.00        1     0.00     0.00  camlArray__tolist_1072
+  0.00      0.58     0.00        1     0.00     0.00  camlBuffer__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlCallback__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlCallback__register_exception_1012
+  0.00      0.58     0.00        1     0.00     0.00  camlCamlinternalLazy__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlCamlinternalMod__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlCamlinternalMod__fun_1059
+  0.00      0.58     0.00        1     0.00     0.00  camlCamlinternalMod__overwrite_1025
+  0.00      0.58     0.00        1     0.00     0.00  camlCamlinternalMod__update_mod_1029
+  0.00      0.58     0.00        1     0.00     0.00  camlCamlinternalOO__entry
+  0.00      0.58     0.00        1     0.00     0.01  camlCamlinternalOO__inherits_1233
+  0.00      0.58     0.00        1     0.00     0.01  camlCamlinternalOO__narrow_1161
+  0.00      0.58     0.00        1     0.00     0.00  camlCamlinternalOO__widen_1183
+  0.00      0.58     0.00        1     0.00     0.00  camlChar__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlChar__uppercase_1023
+  0.00      0.58     0.00        1     0.00     0.00  camlChecksum__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlCmt__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlCommand__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlDigest__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlDotfile__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlExt__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlExt__locident_1111
+  0.00      0.58     0.00        1     0.00     0.00  camlFilename__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlFormat__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlFormat__eprintf_1669
+  0.00      0.58     0.00        1     0.00     0.00  camlFormat__formatter_of_buffer_1400
+  0.00      0.58     0.00        1     0.00     0.00  camlFormat__fun_2146
+  0.00      0.58     0.00        1     0.00     0.00  camlFormat__pp_print_flush_1295
+  0.00      0.58     0.00        1     0.00     0.00  camlHashtbl__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlHashtbl__iter_1124
+  0.00      0.58     0.00        1     0.00     0.00  camlInt32__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlInt64__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlLazy__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlLexing__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlLexing__from_string_1070
+  0.00      0.58     0.00        1     0.00     0.00  camlList__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlLocident__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlMap__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlMap__fold_1170
+  0.00      0.58     0.00        1     0.00     0.00  camlMarshal__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlName__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlNativeint__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlObj__entry
+  0.00      0.58     0.00        1     0.00     0.14  camlOcamlspot__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlOcamlspot__find_module_path_1862
+  0.00      0.58     0.00        1     0.00     0.00  camlOcamlspot__find_str_value_1871
+  0.00      0.58     0.00        1     0.00     0.00  camlOcamlspot__find_type_1868
+  0.00      0.58     0.00        1     0.00     0.00  camlOcamlspot__load_1825
+  0.00      0.58     0.00        1     0.00     0.00  camlOcamlspot__main_1946
+  0.00      0.58     0.00        1     0.00     0.00  camlOcamlspot__print_query_result_1841
+  0.00      0.58     0.00        1     0.00     0.00  camlOcamlspot__print_sig_entry_1866
+  0.00      0.58     0.00        1     0.00     0.14  camlOcamlspot__query_1882
+  0.00      0.58     0.00        1     0.00     0.14  camlOcamlspot__query_1896
+  0.00      0.58     0.00        1     0.00     0.00  camlOcamlspot__query_by_kind_path_1837
+  0.00      0.58     0.00        1     0.00     0.14  camlOcamlspot__query_by_pos_1846
+  0.00      0.58     0.00        1     0.00     0.00  camlParsing__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlPathreparse__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlPathreparse__get_1739
+  0.00      0.58     0.00        1     0.00     0.00  camlPervasives__at_exit_1301
+  0.00      0.58     0.00        1     0.00     0.00  camlPervasives__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlPervasives__exit_1305
+  0.00      0.58     0.00        1     0.00     0.00  camlPervasives__flush_all_1166
+  0.00      0.58     0.00        1     0.00     0.00  camlPervasives__fun_1466
+  0.00      0.58     0.00        1     0.00     0.00  camlPervasives__iter_1167
+  0.00      0.58     0.00        1     0.00     0.00  camlPrintexc__conv_1041
+  0.00      0.58     0.00        1     0.00     0.00  camlPrintexc__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlPrintexc__to_string_1039
+  0.00      0.58     0.00        1     0.00     0.00  camlPrintf__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlRandom__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlSet__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlSort__entry
+  0.00      0.58     0.00        1     0.00     0.01  camlSpot__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__find_2604
+  0.00      0.58     0.00        1     0.00     0.01  camlSpot__fold_init_4157
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__fun_5165
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__fun_5254
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__fun_5259
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__fun_5573
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__fun_5626
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__fun_5635
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__get_tokens_2826
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__name_1680
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__next_2836
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__parse_2820
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__point_2899
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__string_of_at_2768
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__substring_2917
+  0.00      0.58     0.00        1     0.00     0.00  camlSpot__to_string_no_path_2872
+  0.00      0.58     0.00        1     0.00     0.01  camlSpotconfig__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlSpotconfig__fun_1828
+  0.00      0.58     0.00        1     0.00     0.00  camlSpotconfig__parse_1771
+  0.00      0.58     0.00        1     0.00     0.00  camlSpotconfig__to_string_1778
+  0.00      0.58     0.00        1     0.00     0.00  camlSpotconfig_intf__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlSpoteval__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlSpoteval__fun_2900
+  0.00      0.58     0.00        1     0.00     0.00  camlSpoteval__fun_2962
+  0.00      0.58     0.00        1     0.00     0.00  camlSpoteval__fun_2968
+  0.00      0.58     0.00        1     0.00     0.00  camlSpoteval__fun_2971
+  0.00      0.58     0.00        1     0.00     0.00  camlSpoteval__fun_2978
+  0.00      0.58     0.00        1     0.00     0.00  camlSpotfile__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlSpotfile__eval_and_find_1886
+  0.00      0.58     0.00        1     0.00     0.00  camlSpotfile__find_loc_1881
+  0.00      0.58     0.00        1     0.00     0.00  camlSpotfile__find_path_in_flat_1875
+  0.00      0.58     0.00        1     0.00     0.00  camlSpotfile__invalid_env_1869
+  0.00      0.58     0.00        1     0.00     0.00  camlString__concat_1048
+  0.00      0.58     0.00        1     0.00     0.00  camlString__contains_from_1120
+  0.00      0.58     0.00        1     0.00     0.00  camlString__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlString__rindex_from_1116
+  0.00      0.58     0.00        1     0.00     0.00  camlSys__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlTreeset__Make_1346
+  0.00      0.58     0.00        1     0.00     0.00  camlTreeset__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlTreeset__find_path_contains_1336
+  0.00      0.58     0.00        1     0.00     0.11  camlTreeset__find_path_contains_aux_1330
+  0.00      0.58     0.00        1     0.00     0.00  camlTreeset__fun_1476
+  0.00      0.58     0.00        1     0.00     0.01  camlTtfold__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlTtfold__fun_2843
+  0.00      0.58     0.00        1     0.00     0.00  camlTtfold__fun_2859
+  0.00      0.58     0.00        1     0.00     0.00  camlTtfold__fun_2881
+  0.00      0.58     0.00        1     0.00     0.00  camlTtfold__fun_2929
+  0.00      0.58     0.00        1     0.00     0.00  camlTtfold__fun_3150
+  0.00      0.58     0.00        1     0.00     0.00  camlTtfold__fun_3155
+  0.00      0.58     0.00        1     0.00     0.00  camlTtfold__fun_3171
+  0.00      0.58     0.00        1     0.00     0.00  camlTtfold__fun_3183
+  0.00      0.58     0.00        1     0.00     0.00  camlTypeFix__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlTypeexpand__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlUtils__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlWeak__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlXident__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlXlongident__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlXpath__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlXprinttyp__entry
+  0.00      0.58     0.00        1     0.00     0.00  camlXset__Make_1212
+  0.00      0.58     0.00        1     0.00     0.00  camlXset__entry
+  0.00      0.58     0.00        1     0.00     0.00  caml_alloc_array
+  0.00      0.58     0.00        1     0.00     0.00  caml_alloc_table
+  0.00      0.58     0.00        1     0.00     0.00  caml_array_concat
+  0.00      0.58     0.00        1     0.00     0.00  caml_array_gather
+  0.00      0.58     0.00        1     0.00    20.00  caml_compact_heap
+  0.00      0.58     0.00        1     0.00     0.00  caml_copy_string_array
+  0.00      0.58     0.00        1     0.00     0.00  caml_debugger_init
+  0.00      0.58     0.00        1     0.00     0.00  caml_executable_name
+  0.00      0.58     0.00        1     0.00     0.00  caml_ext_table_add
+  0.00      0.58     0.00        1     0.00     0.00  caml_ext_table_init
+  0.00      0.58     0.00        1     0.00     0.00  caml_final_do_weak_roots
+  0.00      0.58     0.00        1     0.00     0.00  caml_finish_major_cycle
+  0.00      0.58     0.00        1     0.00     0.00  caml_fl_reset
+  0.00      0.58     0.00        1     0.00     0.00  caml_init_custom_operations
+  0.00      0.58     0.00        1     0.00     0.00  caml_init_frame_descriptors
+  0.00      0.58     0.00        1     0.00     0.00  caml_init_gc
+  0.00      0.58     0.00        1     0.00     0.00  caml_init_ieee_floats
+  0.00      0.58     0.00        1     0.00     0.00  caml_init_major_heap
+  0.00      0.58     0.00        1     0.00     0.00  caml_init_signals
+  0.00      0.58     0.00        1     0.00     0.00  caml_main
+  0.00      0.58     0.00        1     0.00     0.00  caml_make_array
+  0.00      0.58     0.00        1     0.00     0.00  caml_ml_out_channels_list
+  0.00      0.58     0.00        1     0.00     0.00  caml_ml_seek_in
+  0.00      0.58     0.00        1     0.00     0.00  caml_obj_truncate
+  0.00      0.58     0.00        1     0.00     0.00  caml_page_table_initialize
+  0.00      0.58     0.00        1     0.00     0.18  caml_program
+  0.00      0.58     0.00        1     0.00     0.00  caml_realloc_ref_table
+  0.00      0.58     0.00        1     0.00     0.00  caml_seek_in
+  0.00      0.58     0.00        1     0.00     0.00  caml_set_minor_heap_size
+  0.00      0.58     0.00        1     0.00     0.00  caml_sys_exit
+  0.00      0.58     0.00        1     0.00     0.00  caml_sys_get_argv
+  0.00      0.58     0.00        1     0.00     0.00  caml_sys_get_config
+  0.00      0.58     0.00        1     0.00     0.00  caml_sys_init
+  0.00      0.58     0.00        1     0.00     0.00  caml_weak_create
+  0.00      0.58     0.00        1     0.00     0.00  norm_minsize
+  0.00      0.58     0.00        1     0.00     0.00  norm_pfree
+  0.00      0.58     0.00        1     0.00     0.00  norm_pmax
+  0.00      0.58     0.00        1     0.00     0.00  realloc_gray_vals
+
+ %         the percentage of the total running time of the
+time       program used by this function.
+
+cumulative a running sum of the number of seconds accounted
+ seconds   for by this function and those listed above it.
+
+ self      the number of seconds accounted for by this
+seconds    function alone.  This is the major sort for this
+           listing.
+
+calls      the number of times this function was invoked, if
+           this function is profiled, else blank.
+ 
+ self      the average number of milliseconds spent in this
+ms/call    function per call, if this function is profiled,
+	   else blank.
+
+ total     the average number of milliseconds spent in this
+ms/call    function and its descendents per call, if this 
+	   function is profiled, else blank.
+
+name       the name of the function.  This is the minor sort
+           for this listing. The index shows the location of
+	   the function in the gprof listing. If the index is
+	   in parenthesis it shows where it would appear in
+	   the gprof listing if it were to be printed.
+
+		     Call graph (explanation follows)
+
+
+granularity: each sample hit covers 4 byte(s) for 1.72% of 0.58 seconds
+
+index % time    self  children    called     name
+[1]     76.8    0.00    0.45  110947+78546   <cycle 3 as a whole> [1]
+                0.00    0.44    8192             camlHashtbl__do_bucket_1137 <cycle 3> [2]
+                0.00    0.00    6082             camlSpot__fun_5020 <cycle 3> [67]
+                0.00    0.00    6082             camlTtfold__fun_2748 <cycle 3> [77]
+                0.00    0.00   18951             camlList__fold_left_1073 <cycle 3> [80]
+                0.00    0.00    1977             camlTtfold__fun_2787 <cycle 3> [81]
+                0.00    0.00    2674             camlSpot__fun_5005 <cycle 3> [83]
+                0.00    0.00   67633+28670       camlList__map_1040 <cycle 3> [84]
+                0.00    0.00     632             camlTtfold__fun_2785 <cycle 3> [88]
+                0.00    0.00   46091+18          camlList__iter_1061 <cycle 3> [91]
+                0.00    0.00     232             camlTtfold__fun_2923 <cycle 3> [103]
+                0.00    0.00     228             camlTtfold__fun_2791 <cycle 3> [105]
+                0.00    0.00     548             camlSpot__structure_item_desc_2102 <cycle 3> [111]
+                0.00    0.00     733             camlTtfold__fun_2989 <cycle 3> [115]
+                0.00    0.00     177             camlTtfold__fun_2783 <cycle 3> [116]
+                0.00    0.00    2674             camlTtfold__fun_2695 <cycle 3> [118]
+                0.00    0.00    6082             camlTtfold__fun_2726 <cycle 3> [125]
+                0.00    0.00     328             camlSpot__fun_5071 <cycle 3> [133]
+                0.00    0.00    2674             camlTtfold__fun_2685 <cycle 3> [149]
+                0.00    0.00     169             camlSpot__module_expr_2098 <cycle 3> [150]
+                0.00    0.00       4+44          camlFormat__cont_a_1527 <cycle 3> [151]
+                0.00    0.00     105             camlTtfold__fun_2801 <cycle 3> [153]
+                0.00    0.00     328             camlSpot__fun_5080 <cycle 3> [154]
+                0.00    0.00      85             camlTtfold__fun_2720 <cycle 3> [156]
+                0.00    0.00      89             camlSpot__fun_5123 <cycle 3> [167]
+                0.00    0.00      34             camlTtfold__fun_2793 <cycle 3> [168]
+                0.00    0.00    1024             camlHashtbl__do_bucket_1127 <cycle 3> [170]
+                0.00    0.00     328             camlTtfold__fun_2906 <cycle 3> [175]
+                0.00    0.00      72             camlTtfold__fun_2887 <cycle 3> [190]
+                0.00    0.00       4             camlSpot__abstraction_3269 <cycle 3> [191]
+                0.00    0.00      37             camlSpot__aliases_of_include$27_2067 <cycle 3> [200]
+                0.00    0.00      72             camlTtfold__fun_2893 <cycle 3> [203]
+                0.00    0.00      20             camlTtfold__fun_2869 <cycle 3> [206]
+                0.00    0.00     328             camlTtfold__fun_2903 <cycle 3> [210]
+                0.00    0.00     733             camlTtfold__fun_2992 <cycle 3> [231]
+                0.00    0.00       2             camlSpoteval__fun_2879 <cycle 3> [233]
+                0.00    0.00       1             camlSpoteval__fun_2978 <cycle 3> [234]
+                0.00    0.00      21             camlSpot__fun_5101 <cycle 3> [235]
+                0.00    0.00       3             camlTtfold__fun_2849 <cycle 3> [239]
+                0.00    0.00       2             camlSpot__format_2769 <cycle 3> [240]
+                0.00    0.00       4             camlSpot__fun_5212 <cycle 3> [248]
+                0.00    0.00       2             camlSpoteval__fun_2819 <cycle 3> [251]
+                0.00    0.00       1             camlTtfold__fun_2929 <cycle 3> [255]
+                0.00    0.00      89             camlTtfold__fun_2961 <cycle 3> [256]
+                0.00    0.00      80             camlTtfold__fun_3051 <cycle 3> [259]
+                0.00    0.00       4             camlSpotfile__fun_1953 <cycle 3> [261]
+                0.00    0.00      89             camlTtfold__fun_2964 <cycle 3> [262]
+                0.00    0.00       4             camlSpotfile__load_1836 <cycle 3> [264]
+                0.00    0.00       3             camlTtfold__fun_2851 <cycle 3> [265]
+                0.00    0.00      13+1           camlCamlinternalLazy__force_lazy_block_1010 <cycle 3> [266]
+                0.00    0.00      24             camlTtfold__fun_2731 <cycle 3> [279]
+                0.00    0.00       4             camlSpotfile__load_directly_1673 <cycle 3> [290]
+                0.00    0.00       2             camlSpoteval__fun_2885 <cycle 3> [297]
+                0.00    0.00       6             camlTtfold__fun_2820 <cycle 3> [302]
+                0.00    0.00       1             camlTtfold__fun_2859 <cycle 3> [312]
+                0.00    0.00       1             camlTtfold__fun_2843 <cycle 3> [314]
+                0.00    0.00      21             camlTtfold__fun_2872 <cycle 3> [315]
+                0.00    0.00       6             camlSpot__fun_5035 <cycle 3> [318]
+                0.00    0.00      21             camlTtfold__fun_2866 <cycle 3> [319]
+                0.00    0.00      21             camlTtfold__fun_2944 <cycle 3> [320]
+                0.00    0.00       1             camlSpotfile__find_loc_1881 <cycle 3> [322]
+                0.00    0.00      49             camlTtfold__fun_3058 <cycle 3> [324]
+                0.00    0.00       1             camlSpotfile__eval_and_find_1886 <cycle 3> [332]
+                0.00    0.00       4             camlSpot__of_cmt_3290 <cycle 3> [335]
+                0.00    0.00      21             camlTtfold__fun_2947 <cycle 3> [336]
+                0.00    0.00       6             camlUtils__protect_1269 <cycle 3> [342]
+                0.00    0.00       6             camlTtfold__fun_2817 <cycle 3> [361]
+                0.00    0.00       5             camlTtfold__fun_2890 <cycle 3> [363]
+                0.00    0.00       1             camlSpot__fun_5573 <cycle 3> [366]
+                0.00    0.00       4             camlTtfold__fun_2692 <cycle 3> [374]
+                0.00    0.00       4             camlTtfold__fun_2986 <cycle 3> [375]
+                0.00    0.00       1             camlSpotfile__find_path_in_flat_1875 <cycle 3> [383]
+                0.00    0.00      24             camlTtfold__fun_2733 <cycle 3> [384]
+                0.00    0.00       1             camlTtfold__fun_3171 <cycle 3> [386]
+                0.00    0.00    6014             camlUtils__filter_map_1056 <cycle 3> [426]
+                0.00    0.00    6006             camlSpot__fun_5642 <cycle 3> [428]
+                0.00    0.00     548             camlSpot__structure_item_2101 <cycle 3> [469]
+                0.00    0.00     152             camlSpot__signature_item_2106 <cycle 3> [517]
+                0.00    0.00     144             camlSpot__module_expr_desc_2099 <cycle 3> [519]
+                0.00    0.00      83             camlTtfold__fun_2937 <cycle 3> [550]
+                0.00    0.00      76             camlSpot__structure_2100 <cycle 3> [561]
+                0.00    0.00      72             camlTtfold__fun_2942 <cycle 3> [563]
+                0.00    0.00      58             camlSpot__fun_4708 <cycle 3> [573]
+                0.00    0.00      49             camlTtfold__fun_3094 <cycle 3> [595]
+                0.00    0.00      49             camlSpot__fun_5147 <cycle 3> [589]
+                0.00    0.00      49             camlTtfold__fun_3081 <cycle 3> [594]
+                0.00    0.00      40             camlTtfold__fun_2896 <cycle 3> [597]
+                0.00    0.00      39             camlTtfold__fun_3090 <cycle 3> [604]
+                0.00    0.00      32             camlTtfold__fun_2925 <cycle 3> [614]
+                0.00    0.00      21             camlSpot__fun_5044 <cycle 3> [628]
+                0.00    0.00      16             camlSpot__signature_2105 <cycle 3> [642]
+                0.00    0.00      13             camlTtfold__fun_2975 <cycle 3> [652]
+                0.00    0.00      11             camlTtfold__fun_3044 <cycle 3> [664]
+                0.00    0.00       9             camlTtfold__fun_2954 <cycle 3> [680]
+                0.00    0.00       4             camlTtfold__fun_2690 <cycle 3> [732]
+                0.00    0.00       4             camlTtfold__fun_2952 <cycle 3> [735]
+                0.00    0.00       4             camlSpot__abstraction_3285 <cycle 3> [720]
+                0.00    0.00       4             camlSpot__fun_5445 <cycle 3> [724]
+                0.00    0.00       4             camlSpot__protect$27_2211 <cycle 3> [726]
+                0.00    0.00       3             camlTtfold__fun_3096 <cycle 3> [742]
+                0.00    0.00       2             camlOcamlspot__fun_2280 <cycle 3> [756]
+                0.00    0.00       2             camlHashtbl__fold_1133 <cycle 3> [755]
+                0.00    0.00       2             camlSpotfile__str_of_global_ident_1896 <cycle 3> [770]
+                0.00    0.00       2             camlSpotfile__load_module_1849 <cycle 3> [769]
+                0.00    0.00       1             camlOcamlspot__query_by_kind_path_1837 <cycle 3> [829]
+                0.00    0.00       1             camlTtfold__fun_3183 <cycle 3> [863]
+                0.00    0.00       1             camlSpoteval__fun_2962 <cycle 3> [851]
+                0.00    0.00       1             camlSpoteval__fun_2900 <cycle 3> [850]
+                0.00    0.00       1             camlSpoteval__fun_2971 <cycle 3> [852]
+                0.00    0.00       1             camlHashtbl__iter_1124 <cycle 3> [811]
+-----------------------------------------------
+                                8192             camlHashtbl__fold_1133 <cycle 3> [755]
+[2]     76.6    0.00    0.44    8192         camlHashtbl__do_bucket_1137 <cycle 3> [2]
+                0.00    0.44    6006/6006        camlTreeset__add_node_1317 [3]
+                0.00    0.00    6006/30729       camlSet__add_1073 [44]
+                0.00    0.00    6006/6006        camlSpot__fun_5632 [87]
+                0.00    0.00    6005/1442382     camlSet__bal_1053 [37]
+                0.00    0.00       3/4785091     camlSet__create_1045 [23]
+                0.00    0.00   12012/29432       caml_apply3 <cycle 1> [405]
+                0.00    0.00    6006/6841        camlPervasives__$40_1133 [423]
+                0.00    0.00    6006/6006        camlSpot__add_3164 [427]
+                                6006             camlSpot__fun_5642 <cycle 3> [428]
+-----------------------------------------------
+                               24699             camlTreeset__add_node_1317 [3]
+                0.00    0.44    6006/6006        camlHashtbl__do_bucket_1137 <cycle 3> [2]
+[3]     76.5    0.00    0.44    6006+24699   camlTreeset__add_node_1317 [3]
+                0.01    0.42   35631/35640       camlXset__find_1176 [4]
+                0.00    0.00   24699/24699       camlSet__remove_1154 [45]
+                0.00    0.00   24699/30729       camlSet__add_1073 [44]
+                0.00    0.00   24699/8531832     camlSpot__compare_2882 [7]
+                0.00    0.00   43326/1442382     camlSet__bal_1053 [37]
+                0.00    0.00   24699/17121917     caml_apply2 <cycle 2> [19]
+                0.00    0.00   24699/8531824     camlSpot__compare_2945 [38]
+                0.00    0.00     812/4785091     camlSet__create_1045 [23]
+                0.00    0.00    3812/24699       camlSet__merge_1124 [106]
+                               24699             camlTreeset__add_node_1317 [3]
+-----------------------------------------------
+                0.00    0.00       9/35640       camlTreeset__find_path_contains_aux_1330 [82]
+                0.01    0.42   35631/35640       camlTreeset__add_node_1317 [3]
+[4]     74.9    0.01    0.42   35640         camlXset__find_1176 [4]
+                0.02    0.33 1197017/1197017     camlSet__split_1134 [5]
+                0.01    0.04 1221724/8507125     camlTreeset__compare_1135 [6]
+                0.00    0.03 1232657/1232657     camlXset__middle_1146 [25]
+                0.00    0.00 1221724/17121917     caml_apply2 <cycle 2> [19]
+-----------------------------------------------
+                             5890754             camlSet__split_1134 [5]
+                0.02    0.33 1197017/1197017     camlXset__find_1176 [4]
+[5]     60.0    0.02    0.33 1197017+5890754 camlSet__split_1134 [5]
+                0.03    0.24 7087771/8507125     camlTreeset__compare_1135 [6]
+                0.03    0.00 4499344/4785091     camlSet__create_1045 [23]
+                0.02    0.00 7087771/17121917     caml_apply2 <cycle 2> [19]
+                0.01    0.00  956527/1442382     camlSet__bal_1053 [37]
+                0.00    0.00 1086780/1086780     camlSet__add_min_element_1082 [48]
+                0.00    0.00 5890754/5890754     camlSet__join_1094 [50]
+                0.00    0.00  464798/1192356     camlSet__singleton_1080 [389]
<