diff options
| author | herbelin | 2001-09-18 15:33:07 +0000 |
|---|---|---|
| committer | herbelin | 2001-09-18 15:33:07 +0000 |
| commit | 40c8ce221cd5590b1347a26495784b2d0cbdfdf9 (patch) | |
| tree | 5fcec0ad6f6729c4ce4b45836ecac73512cfaef5 /toplevel | |
| parent | f52d3795c6c2690e75a0bc52c3022db9dd328037 (diff) | |
Ajout d'une option et d'une fonction compile pour fabriquer les .vo
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@1984 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'toplevel')
| -rw-r--r-- | toplevel/coqtop.ml | 19 | ||||
| -rw-r--r-- | toplevel/usage.ml | 2 | ||||
| -rw-r--r-- | toplevel/vernac.ml | 17 | ||||
| -rw-r--r-- | toplevel/vernac.mli | 5 |
4 files changed, 41 insertions, 2 deletions
diff --git a/toplevel/coqtop.ml b/toplevel/coqtop.ml index 2c57b885e2..0b7d699d0d 100644 --- a/toplevel/coqtop.ml +++ b/toplevel/coqtop.ml @@ -72,6 +72,14 @@ let require () = Library.require_module None qid (Some s) false) (List.rev !require_list) +let compile_list = ref ([] : (bool * string) list) +let add_compile verbose s = + set_batch_mode (); + Options.make_silent true; + compile_list := (verbose,s) :: !compile_list +let compile_files () = + List.iter (fun (v,f) -> Vernac.compile v f) (List.rev !compile_list) + (* Re-exec Coq in bytecode or native code if necessary. [s] is either ["byte"] or ["opt"]. Notice that this is possible since the nature of the toplevel has already been set in [Mltop] by the main file created @@ -146,6 +154,12 @@ let parse_args () = | "-require" :: f :: rem -> add_require f; parse rem | "-require" :: [] -> usage () + | "-compile" :: f :: rem -> add_compile false f; parse rem + | "-compile" :: [] -> usage () + + | "-compile-verbose" :: f :: rem -> add_compile true f; parse rem + | "-compile-verbose" :: [] -> usage () + | "-unsafe" :: f :: rem -> add_unsafe f; parse rem | "-unsafe" :: [] -> usage () @@ -207,7 +221,8 @@ let start () = require (); load_rcfile(); load_vernacular (); - outputstate () + compile_files (); + outputstate (); with e -> flush_all(); if not !batch_mode then message "Error during initialization :"; @@ -215,7 +230,7 @@ let start () = exit 1 end; if !batch_mode then (flush_all(); Profile.print_profile ();exit 0); - if not (!batch_mode) then Lib.init_toplevel_root (); + Lib.init_toplevel_root (); Toplevel.loop(); (* Initialise and launch the Ocaml toplevel *) Coqinit.init_ocaml_path(); diff --git a/toplevel/usage.ml b/toplevel/usage.ml index f9d5decd9d..087db150d0 100644 --- a/toplevel/usage.ml +++ b/toplevel/usage.ml @@ -35,6 +35,8 @@ let print_usage_channel co command = -load-vernac-source f load Coq file f.v (Load f.) -load-vernac-object f load Coq object file f.vo -require f load Coq object file f.vo and import it (Require f.) + -compile f compile Coq file f.v (implies -batch) + -compile-verbose f verbosely compile Coq file f.v (implies -batch) -opt run the native-code version of Coq or Coq_SearchIsos -bindir dir specify an alternative directory for the binaries diff --git a/toplevel/vernac.ml b/toplevel/vernac.ml index 9c2c88eebc..b3bdeae82e 100644 --- a/toplevel/vernac.ml +++ b/toplevel/vernac.ml @@ -174,3 +174,20 @@ let load_vernac verb file = raw_load_vernac_file verb file with e -> raise_with_file file e + +(* Compile a vernac file (f is assumed without .v suffix) *) +let compile verbosely f = + try + let s = Filename.basename f in + let m = Names.id_of_string s in + let _,longf = find_file_in_path (Library.get_load_path ()) (f^".v") in + let ldir = (Library.find_logical_path (Filename.dirname longf)) @ [m] in + Lib.start_module ldir; + load_vernac verbosely longf; + let mid = Lib.end_module m in + assert (mid = ldir); + Library.save_module_to ldir (f^".vo") + with e -> + raise_with_file f e + + diff --git a/toplevel/vernac.mli b/toplevel/vernac.mli index 1266cd9dd9..da1aa182df 100644 --- a/toplevel/vernac.mli +++ b/toplevel/vernac.mli @@ -33,3 +33,8 @@ val raw_do_vernac : Pcoq.Gram.parsable -> unit and location *) val load_vernac : bool -> string -> unit + + +(* Compile a vernac file, verbosely or not (f is assumed without .v suffix) *) + +val compile : bool -> string -> unit |
