(***********************************************************************) (* *) (* Objective Caml *) (* *) (* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 1996 Institut National de Recherche en Informatique et *) (* en Automatique. All rights reserved. This file is distributed *) (* under the terms of the Q Public License version 1.0. *) (* *) (***********************************************************************) (* $Id: opttopmain.ml 8477 2007-11-06 15:16:56Z frisch $ *) open Clflags let usage = "Usage: ocamlnat [script-file]\noptions are:" let preload_objects = ref [] let prepare ppf = Opttoploop.set_paths (); try let res = List.for_all (Opttopdirs.load_file ppf) (List.rev !preload_objects) in !Opttoploop.toplevel_startup_hook (); res with x -> try Opterrors.report_error ppf x; false with x -> Format.fprintf ppf "Uncaught exception: %s\n" (Printexc.to_string x); false let file_argument name = let ppf = Format.err_formatter in if Filename.check_suffix name ".cmxs" || Filename.check_suffix name ".cmx" || Filename.check_suffix name ".cmxa" then preload_objects := name :: !preload_objects else begin let newargs = Array.sub Sys.argv !Arg.current (Array.length Sys.argv - !Arg.current) in if prepare ppf && Opttoploop.run_script ppf name newargs then exit 0 else exit 2 end let print_version () = Printf.printf "The Objective Caml toplevel, version %s\n" Sys.ocaml_version; exit 0; ;; let main () = Arg.parse (Arch.command_line_options @ [ "-compact", Arg.Clear optimize_for_speed, " Optimize code size rather than speed"; "-inline", Arg.Int(fun n -> inline_threshold := n * 8), " Set aggressiveness of inlining to "; "-I", Arg.String(fun dir -> let dir = Misc.expand_directory Config.standard_library dir in include_dirs := dir :: !include_dirs), " Add to the list of include directories"; "-init", Arg.String (fun s -> init_file := Some s), " Load instead of default init file"; "-labels", Arg.Clear classic, " Labels commute (default)"; "-noassert", Arg.Set noassert, " Do not compile assertion checks"; "-nolabels", Arg.Set classic, " Ignore labels and do not commute"; "-noprompt", Arg.Set noprompt, " Suppress all prompts"; "-nostdlib", Arg.Set no_std_include, " do not add default directory to the list of include directories"; "-principal", Arg.Set principal, " Check principality of type inference"; "-rectypes", Arg.Set recursive_types, " Allow arbitrary recursive types"; "-S", Arg.Set keep_asm_file, " Keep intermediate assembly file"; "-unsafe", Arg.Set fast, " No bound checking on array and string access"; "-version", Arg.Unit print_version, " Print version and exit"; "-w", Arg.String (Warnings.parse_options false), " Enable or disable warnings according to :\n\ \032 A/a enable/disable all warnings\n\ \032 C/c enable/disable suspicious comment\n\ \032 D/d enable/disable deprecated features\n\ \032 E/e enable/disable fragile match\n\ \032 F/f enable/disable partially applied function\n\ \032 L/l enable/disable labels omitted in application\n\ \032 M/m enable/disable overriden method\n\ \032 P/p enable/disable partial match\n\ \032 S/s enable/disable non-unit statement\n\ \032 U/u enable/disable unused match case\n\ \032 V/v enable/disable hidden instance variable\n\ \032 Y/y enable/disable suspicious unused variables\n\ \032 Z/z enable/disable all other unused variables\n\ \032 X/x enable/disable all other warnings\n\ \032 default setting is \"Aelz\""; "-warn-error" , Arg.String (Warnings.parse_options true), " Treat the warnings of as errors, if they are enabled.\n\ \032 (see option -w for the list of flags)\n\ \032 default setting is a (all warnings are non-fatal)"; "-dparsetree", Arg.Set dump_parsetree, " (undocumented)"; "-drawlambda", Arg.Set dump_rawlambda, " (undocumented)"; "-dlambda", Arg.Set dump_lambda, " (undocumented)"; "-dcmm", Arg.Set dump_cmm, " (undocumented)"; "-dsel", Arg.Set dump_selection, " (undocumented)"; "-dcombine", Arg.Set dump_combine, " (undocumented)"; "-dlive", Arg.Unit(fun () -> dump_live := true; Printmach.print_live := true), " (undocumented)"; "-dspill", Arg.Set dump_spill, " (undocumented)"; "-dsplit", Arg.Set dump_split, " (undocumented)"; "-dinterf", Arg.Set dump_interf, " (undocumented)"; "-dprefer", Arg.Set dump_prefer, " (undocumented)"; "-dalloc", Arg.Set dump_regalloc, " (undocumented)"; "-dreload", Arg.Set dump_reload, " (undocumented)"; "-dscheduling", Arg.Set dump_scheduling, " (undocumented)"; "-dlinear", Arg.Set dump_linear, " (undocumented)"; "-dstartup", Arg.Set keep_startup_file, " (undocumented)"; ]) file_argument usage; if not (prepare Format.err_formatter) then exit 2; Opttoploop.loop Format.std_formatter