package ocaml-base-compiler
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=b53ed3d487b83fd49bc181bded066ae8e6fb592cf40514261d27d36050d5db85
md5=723b6bfe8cf5abcbccc6911143f71055
doc/ocamlcommon/Misc/index.html
Module Misc
Miscellaneous useful types and functions
Warning: this module is unstable and part of compiler-libs.
val fatal_errorf : ('a, Format.formatter, unit, 'b) format4 -> 'atry_finally work ~always ~exceptionally is designed to run code in work that may fail with an exception, and has two kind of cleanup routines: always, that must be run after any execution of the function (typically, freeing system resources), and exceptionally, that should be run only if work or always failed with an exception (typically, undoing user-visible state changes that would only make sense if the function completes correctly). For example:
let objfile = outputprefix ^ ".cmo" in
let oc = open_out_bin objfile in
Misc.try_finally
(fun () ->
bytecode
++ Timings.(accumulate_time (Generate sourcefile))
(Emitcode.to_file oc modulename objfile);
Warnings.check_fatal ())
~always:(fun () -> close_out oc)
~exceptionally:(fun _exn -> remove_file objfile);If exceptionally fail with an exception, it is propagated as usual.
If always or exceptionally use exceptions internally for control-flow but do not raise, then try_finally is careful to preserve any exception backtrace coming from work or always for easier debugging.
val protect_refs : ref_and_value list -> (unit -> 'a) -> 'aprotect_refs l f temporarily sets r to v for each R (r, v) in l while executing f. The previous contents of the references is restored even if f raises an exception.
module Stdlib : sig ... endval create_hashtable : int -> ('a * 'b) list -> ('a, 'b) Hashtbl.tval copy_file : in_channel -> out_channel -> unitval copy_file_chunk : in_channel -> out_channel -> int -> unitval string_of_file : in_channel -> stringval output_to_file_via_temporary :
?mode:open_flag list ->
string ->
(string -> out_channel -> 'a) ->
'amodule Int_literal_converter : sig ... endval get_ref : 'a list ref -> 'a listval set_or_ignore : ('a -> 'b option) -> 'b option ref -> 'a -> unitmodule LongString : sig ... endedit_distance a b cutoff computes the edit distance between strings a and b. To help efficiency, it uses a cutoff: if the distance d is smaller than cutoff, it returns Some d, else None.
The distance algorithm currently used is Damerau-Levenshtein: it computes the number of insertion, deletion, substitution of letters, or swapping of adjacent letters to go from one word to the other. The particular algorithm may change in the future.
spellcheck env name takes a list of names env that exist in the current environment and an erroneous name, and returns a list of suggestions taken from env, that are close enough to name that it may be a typo for one of them.
val did_you_mean : Format.formatter -> (unit -> string list) -> unitdid_you_mean ppf get_choices hints that the user may have meant one of the option returned by calling get_choices. It does nothing if the returned list is empty.
The unit -> ... thunking is meant to delay any potentially-slow computation (typically computing edit-distance with many things from the current environment) to when the hint message is to be printed. You should print an understandable error message before calling did_you_mean, so that users get a clear notification of the failure even if producing the hint is slow.
String.cut_at s c returns a pair containing the sub-string before the first occurrence of c in s, and the sub-string after the first occurrence of c in s. let (before, after) = String.cut_at s c in before ^ String.make 1 c ^ after is the identity if s contains c.
Raise Not_found if the character does not appear in the string
module Color : sig ... endmodule Error_style : sig ... endnormalise_eol s returns a fresh copy of s with any '\r' characters removed. Intended for pre-processing text which will subsequently be printed on a channel which performs EOL transformations (i.e. Windows)
delete_eol_spaces s returns a fresh copy of s with any end of line spaces removed. Intended to normalize the output of the toplevel for tests.
val pp_two_columns :
?sep:string ->
?max_lines:int ->
Format.formatter ->
(string * string) list ->
unitpp_two_columns ?sep ?max_lines ppf l prints the lines in l as two columns separated by sep ("|" by default). max_lines can be used to indicate a maximum number of lines to print -- an ellipsis gets inserted at the middle if the input has too many lines.
Example:
pp_two_columns ~max_lines:3 Format.std_formatter [ "abc", "hello"; "def", "zzz"; "a" , "bllbl"; "bb" , "dddddd"; ]
prints
abc | hello ... bb | dddddd
Hook machinery
Hooks machinery: add_hook name f will register a function that will be called on the argument of a later call to apply_hooks. Hooks are applied in the lexicographical order of their names.
An exception raised by a hook will be wrapped into a HookExnWrapper constructor by the hook machinery.
A hook can use raise_unwrapped_hook_exn to raise an exception that will not be wrapped into a HookExnWrapper.
module type HookSig = sig ... endval get_build_path_prefix_map : unit -> Build_path_prefix_map.map optionReturns the map encoded in the BUILD_PATH_PREFIX_MAP environment variable.
Returns the list of --debug-prefix-map flags to be passed to the assembler, built from the BUILD_PATH_PREFIX_MAP environment variable.
val print_if :
Format.formatter ->
bool ref ->
(Format.formatter -> 'a -> unit) ->
'a ->
'aprint_if ppf flag fmt x prints x with fmt on ppf if b is true.