summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ocaml_backend.ml10
-rw-r--r--src/sail.ml12
2 files changed, 14 insertions, 8 deletions
diff --git a/src/ocaml_backend.ml b/src/ocaml_backend.ml
index 51c9638a..0da745ae 100644
--- a/src/ocaml_backend.ml
+++ b/src/ocaml_backend.ml
@@ -649,9 +649,9 @@ let val_spec_typs (Defs defs) =
!typs
let orig_types_for_ocaml_generator (Defs defs) =
- Some (Util.map_filter (function
+ Util.map_filter (function
| DEF_type td -> Some td
- | _ -> None) defs)
+ | _ -> None) defs
let ocaml_pp_generators ctx defs orig_types required =
let add_def typemap td =
@@ -852,7 +852,7 @@ required
separate hardline (List.map make_rand_gen (IdSet.elements required)) ^^
rand_record_pp
-let ocaml_defs (Defs defs) generator_types =
+let ocaml_defs (Defs defs) generator_info =
let ctx = { register_inits = get_initialize_registers defs;
externs = get_externs (Defs defs);
val_specs = val_spec_typs (Defs defs)
@@ -866,9 +866,9 @@ let ocaml_defs (Defs defs) generator_types =
else empty
in
let gen_pp =
- match generator_types with
+ match generator_info with
| None -> empty
- | Some types -> ocaml_pp_generators ctx defs types [mk_id "ast"]
+ | Some (types, req) -> ocaml_pp_generators ctx defs types (List.map mk_id req)
in
(string "open Sail_lib;;" ^^ hardline)
^^ (string "module Big_int = Nat_big_num" ^^ ocaml_def_end)
diff --git a/src/sail.ml b/src/sail.ml
index b535d1d3..9526d6fe 100644
--- a/src/sail.ml
+++ b/src/sail.ml
@@ -71,6 +71,7 @@ let opt_libs_lem = ref ([]:string list)
let opt_libs_coq = ref ([]:string list)
let opt_file_arguments = ref ([]:string list)
let opt_process_elf : string option ref = ref None
+let opt_ocaml_generators = ref ([]:string list)
let options = Arg.align ([
( "-o",
@@ -104,6 +105,9 @@ let options = Arg.align ([
( "-ocaml-coverage",
Arg.Set Ocaml_backend.opt_ocaml_coverage,
" Build ocaml with bisect_ppx coverage reporting (requires opam packages bisect_ppx-ocamlbuild and bisect_ppx).");
+ ( "-ocaml_generators",
+ Arg.String (fun s -> opt_ocaml_generators := s::!opt_ocaml_generators),
+ "<types> produce random generators for the given types");
( "-latex",
Arg.Set opt_print_latex,
" pretty print the input to latex");
@@ -299,8 +303,10 @@ let main() =
| None, _ -> ()
end;
- let orig_types_for_ocaml_generator =
- Ocaml_backend.orig_types_for_ocaml_generator ast
+ let ocaml_generator_info =
+ match !opt_ocaml_generators with
+ | [] -> None
+ | _ -> Some (Ocaml_backend.orig_types_for_ocaml_generator ast, !opt_ocaml_generators)
in
(*let _ = Printf.eprintf "Type checked, next to pretty print" in*)
@@ -321,7 +327,7 @@ let main() =
then
let ast_ocaml = rewrite_ast_ocaml ast in
let out = match !opt_file_out with None -> "out" | Some s -> s in
- Ocaml_backend.ocaml_compile out ast_ocaml orig_types_for_ocaml_generator
+ Ocaml_backend.ocaml_compile out ast_ocaml ocaml_generator_info
else ());
(if !(opt_print_c)
then