diff options
author | Damien Doligez <damien.doligez-inria.fr> | 2009-05-20 11:52:42 +0000 |
---|---|---|
committer | Damien Doligez <damien.doligez-inria.fr> | 2009-05-20 11:52:42 +0000 |
commit | ed32f569e3b636e0f12efdbbd5bba9e05cc434ac (patch) | |
tree | 20b551901a72edf7733a6fe5287deab21ed9b83b /debugger/source.ml | |
parent | 7795eafa896b0c5b3066d5efec7ec49d69d44e4d (diff) |
merge changes from ocaml3110 to ocaml3111rc0
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@9270 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'debugger/source.ml')
-rw-r--r-- | debugger/source.ml | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/debugger/source.ml b/debugger/source.ml index f1519b438..8975134ff 100644 --- a/debugger/source.ml +++ b/debugger/source.ml @@ -23,17 +23,37 @@ let source_extensions = [".ml"] (*** Conversion function. ***) let source_of_module pos mdle = + let is_submodule m m' = + let len' = String.length m' in + try + (String.sub m 0 len') = m' && (String.get m len') = '.' + with + Invalid_argument _ -> false in + let path = + Hashtbl.fold + (fun mdl dirs acc -> + if is_submodule mdle mdl then + dirs + else + acc) + Debugger_config.load_path_for + !Config.load_path in let fname = pos.Lexing.pos_fname in if fname = "" then + let innermost_module = + try + let dot_index = String.rindex mdle '.' in + String.sub mdle (succ dot_index) (pred ((String.length mdle) - dot_index)) + with Not_found -> mdle in let rec loop = function | [] -> raise Not_found | ext :: exts -> - try find_in_path_uncap !Config.load_path (mdle ^ ext) + try find_in_path_uncap path (innermost_module ^ ext) with Not_found -> loop exts in loop source_extensions else if Filename.is_implicit fname then - find_in_path !Config.load_path fname + find_in_path path fname else fname |