Function check_file now takes optional path (current directory) as an argument.
authorberghofe
Mon, 23 Aug 2004 18:32:49 +0200
changeset 15157 faeb23489b73
parent 15156 daa9f645a26e
child 15158 2281784015a5
Function check_file now takes optional path (current directory) as an argument.
src/Pure/Thy/thy_load.ML
--- a/src/Pure/Thy/thy_load.ML	Mon Aug 23 18:31:18 2004 +0200
+++ b/src/Pure/Thy/thy_load.ML	Mon Aug 23 18:32:49 2004 +0200
@@ -22,8 +22,8 @@
   val cond_add_path: Path.T -> ('a -> 'b) -> 'a -> 'b
   val ml_path: string -> Path.T
   val thy_path: string -> Path.T
-  val check_file: Path.T -> (Path.T * File.info) option
-  val load_file: Path.T -> (Path.T * File.info)
+  val check_file: Path.T option -> Path.T -> (Path.T * File.info) option
+  val load_file: Path.T option -> Path.T -> (Path.T * File.info)
   eqtype master
   val get_thy: master -> Path.T * File.info
   val check_thy: Path.T -> string -> bool -> master
@@ -69,7 +69,7 @@
 
 (* check_file *)
 
-fun check_file src_path =
+fun check_file current src_path =
   let
     val path = Path.expand src_path;
 
@@ -80,17 +80,20 @@
     fun find_dir dir =
       get_first (find_ext (Path.append dir path)) ml_exts;
 
+    fun add_current ps = (case current of None => ps
+          | (Some p) => if Path.is_current p then ps else p :: ps);
+
     val paths =
       if Path.is_current path then error "Bad file specification"
-      else if Path.is_basic path then ! load_path
-      else [Path.current];
+      else if Path.is_basic path then add_current (! load_path)
+      else add_current [Path.current];
   in get_first find_dir paths end;
 
 
 (* load_file *)
 
-fun load_file raw_path =
-  (case check_file raw_path of
+fun load_file current raw_path =
+  (case check_file current raw_path of
     None => error ("Could not find ML file " ^ quote (Path.pack raw_path))
   | Some (path, info) => (File.use path; (path, info)));
 
@@ -107,10 +110,10 @@
 local
 
 fun check_thy_aux (name, ml) =
-  (case check_file (thy_path name) of
+  (case check_file None (thy_path name) of
     None => error ("Could not find theory file for " ^ quote name ^ " in dir(s) " ^
       commas_quote (show_path ()))
-  | Some thy_info => (thy_info, if ml then check_file (ml_path name) else None));
+  | Some thy_info => (thy_info, if ml then check_file None (ml_path name) else None));
 
 in