summaryrefslogtreecommitdiffstats
path: root/debugger/source.ml
diff options
context:
space:
mode:
Diffstat (limited to 'debugger/source.ml')
-rw-r--r--debugger/source.ml24
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