summaryrefslogtreecommitdiff
path: root/src/process_file.ml
diff options
context:
space:
mode:
authorAlasdair Armstrong2017-11-16 17:36:05 +0000
committerAlasdair Armstrong2017-11-16 17:36:05 +0000
commit9ec4474103d75c49c637862e9dfd1d43552f0666 (patch)
tree45547737ddaa80428475d928180cb4ed4f890ecd /src/process_file.ml
parentb3d7e7afc14553e8398958130fbcddf9e9a9a474 (diff)
Make the generation of the lem_ast numeric constants automatic for all numbers below 129
Diffstat (limited to 'src/process_file.ml')
-rw-r--r--src/process_file.ml36
1 files changed, 5 insertions, 31 deletions
diff --git a/src/process_file.ml b/src/process_file.ml
index ab18f3ad..4c70400c 100644
--- a/src/process_file.ml
+++ b/src/process_file.ml
@@ -175,6 +175,10 @@ let output_lem filename libs defs =
close_output_with_check ext_ot;
close_output_with_check ext_o
+let rec iterate (f : int -> unit) (n : int) : unit =
+ if n = 0 then ()
+ else (f n; iterate f (n - 1))
+
let output1 libpath out_arg filename defs =
let f' = Filename.basename (Filename.chop_extension filename) in
match out_arg with
@@ -185,37 +189,7 @@ let output1 libpath out_arg filename defs =
Format.fprintf o "open import Interp_ast@\n";
Format.fprintf o "open import Pervasives@\n";
Format.fprintf o "(*Supply common numeric constants at the right type to alleviate repeated calls to typeclass macro*)\n";
- Format.fprintf o "let zero : integer = integerFromNat 0\n";
- Format.fprintf o "let one : integer = integerFromNat 1\n";
- Format.fprintf o "let two : integer = integerFromNat 2\n";
- Format.fprintf o "let three : integer = integerFromNat 3\n";
- Format.fprintf o "let four : integer = integerFromNat 4\n";
- Format.fprintf o "let five : integer = integerFromNat 5\n";
- Format.fprintf o "let six : integer = integerFromNat 6\n";
- Format.fprintf o "let seven : integer = integerFromNat 7\n";
- Format.fprintf o "let eight : integer = integerFromNat 8\n";
- Format.fprintf o "let fifteen : integer = integerFromNat 15\n";
- Format.fprintf o "let sixteen : integer = integerFromNat 16\n";
- Format.fprintf o "let twenty : integer = integerFromNat 20\n";
- Format.fprintf o "let twentythree : integer = integerFromNat 23\n";
- Format.fprintf o "let twentyfour : integer = integerFromNat 24\n";
- Format.fprintf o "let thirty : integer = integerFromNat 30\n";
- Format.fprintf o "let thirtyone : integer = integerFromNat 31\n";
- Format.fprintf o "let thirtytwo : integer = integerFromNat 32\n";
- Format.fprintf o "let thirtyfive : integer = integerFromNat 35\n";
- Format.fprintf o "let thirtynine : integer = integerFromNat 39\n";
- Format.fprintf o "let forty : integer = integerFromNat 40\n";
- Format.fprintf o "let fortyseven : integer = integerFromNat 47\n";
- Format.fprintf o "let fortyeight : integer = integerFromNat 48\n";
- Format.fprintf o "let fiftyfive : integer = integerFromNat 55\n";
- Format.fprintf o "let fiftysix : integer = integerFromNat 56\n";
- Format.fprintf o "let fiftyseven : integer = integerFromNat 57\n";
- Format.fprintf o "let sixtyone : integer = integerFromNat 61\n";
- Format.fprintf o "let sixtythree : integer = integerFromNat 63\n";
- Format.fprintf o "let sixtyfour : integer = integerFromNat 64\n";
- Format.fprintf o "let onetwentyseven : integer = integerFromNat 127\n";
- Format.fprintf o "let onetwentyeight : integer = integerFromNat 128\n";
-
+ iterate (fun n -> Format.fprintf o "let int%i : integer = integerFromNat %i\n" (n - 1) (n - 1)) 129;
Format.fprintf o "let defs = ";
Pretty_print.pp_lem_defs o defs;
close_output_with_check ext_o