diff options
author | Alain Frisch <alain@frisch.fr> | 2012-01-18 08:31:11 +0000 |
---|---|---|
committer | Alain Frisch <alain@frisch.fr> | 2012-01-18 08:31:11 +0000 |
commit | c45bcb892d78f3182acb2805aef7ec6e23cce42a (patch) | |
tree | b92b5d6becb9e67a198bc2e070d748eeef62bc3d /toplevel | |
parent | cdbb84ec682704379bac21a633cbd2b9e93b35a8 (diff) | |
parent | 869feeb00704e0640c45ffe6aee6cc13e4077f79 (diff) | |
download | ocaml-c45bcb892d78f3182acb2805aef7ec6e23cce42a.tar.gz |
Synchronize with trunk.unused_declarations
git-svn-id: http://caml.inria.fr/svn/ocaml/branches/unused_declarations@12034 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'toplevel')
-rw-r--r-- | toplevel/opttoploop.ml | 13 | ||||
-rw-r--r-- | toplevel/opttopmain.ml | 1 | ||||
-rw-r--r-- | toplevel/toploop.ml | 17 | ||||
-rw-r--r-- | toplevel/topmain.ml | 5 |
4 files changed, 27 insertions, 9 deletions
diff --git a/toplevel/opttoploop.ml b/toplevel/opttoploop.ml index a34e231aaf..1fa5a3fd08 100644 --- a/toplevel/opttoploop.ml +++ b/toplevel/opttoploop.ml @@ -300,8 +300,15 @@ let use_print_results = ref true let use_file ppf name = try - let filename = find_in_path !Config.load_path name in - let ic = open_in_bin filename in + let (filename, ic, must_close) = + if name = "" then + ("(stdin)", stdin, false) + else begin + let filename = find_in_path !Config.load_path name in + let ic = open_in_bin filename in + (filename, ic, true) + end + in let lb = Lexing.from_channel ic in Location.init lb filename; (* Skip initial #! line if any *) @@ -319,7 +326,7 @@ let use_file ppf name = | Exit -> false | Sys.Break -> fprintf ppf "Interrupted.@."; false | x -> Opterrors.report_error ppf x; false) in - close_in ic; + if must_close then close_in ic; success with Not_found -> fprintf ppf "Cannot find file %s.@." name; false diff --git a/toplevel/opttopmain.ml b/toplevel/opttopmain.ml index dd4a52b473..e13bfca4ed 100644 --- a/toplevel/opttopmain.ml +++ b/toplevel/opttopmain.ml @@ -79,6 +79,7 @@ module Options = Main_args.Make_opttop_options (struct let _rectypes = set recursive_types let _strict_sequence = set strict_sequence let _S = set keep_asm_file + let _stdin () = file_argument "" let _unsafe = set fast let _version () = print_version () let _vnum () = print_version_num () diff --git a/toplevel/toploop.ml b/toplevel/toploop.ml index 28894d2557..3d2f72f201 100644 --- a/toplevel/toploop.ml +++ b/toplevel/toploop.ml @@ -283,14 +283,21 @@ let protect r newval body = r := oldval; raise x -(* Read and execute commands from a file *) +(* Read and execute commands from a file, or from stdin if [name] is "". *) let use_print_results = ref true let use_file ppf name = try - let filename = find_in_path !Config.load_path name in - let ic = open_in_bin filename in + let (filename, ic, must_close) = + if name = "" then + ("(stdin)", stdin, false) + else begin + let filename = find_in_path !Config.load_path name in + let ic = open_in_bin filename in + (filename, ic, true) + end + in let lb = Lexing.from_channel ic in Location.init lb filename; (* Skip initial #! line if any *) @@ -308,7 +315,7 @@ let use_file ppf name = | Exit -> false | Sys.Break -> fprintf ppf "Interrupted.@."; false | x -> Errors.report_error ppf x; false) in - close_in ic; + if must_close then close_in ic; success with Not_found -> fprintf ppf "Cannot find file %s.@." name; false @@ -423,7 +430,7 @@ let loop ppf = | x -> Errors.report_error ppf x; Btype.backtrack snap done -(* Execute a script *) +(* Execute a script. If [name] is "", read the script from stdin. *) let run_script ppf name args = let len = Array.length args in diff --git a/toplevel/topmain.ml b/toplevel/topmain.ml index a3dc5a458a..d6053e381a 100644 --- a/toplevel/topmain.ml +++ b/toplevel/topmain.ml @@ -14,7 +14,8 @@ open Clflags -let usage = "Usage: ocaml <options> <object-files> [script-file]\noptions are:" +let usage = "Usage: ocaml <options> <object-files> [script-file [arguments]]\n\ + options are:" let preload_objects = ref [] @@ -31,6 +32,7 @@ let prepare ppf = Format.fprintf ppf "Uncaught exception: %s\n" (Printexc.to_string x); false +(* If [name] is "", then the "file" is stdin treated as a script file. *) let file_argument name = let ppf = Format.err_formatter in if Filename.check_suffix name ".cmo" || Filename.check_suffix name ".cma" @@ -72,6 +74,7 @@ module Options = Main_args.Make_bytetop_options (struct let _nostdlib = set no_std_include let _principal = set principal let _rectypes = set recursive_types + let _stdin () = file_argument "" let _strict_sequence = set strict_sequence let _unsafe = set fast let _version () = print_version () |