summaryrefslogtreecommitdiff
path: root/src/ocaml_backend.ml
diff options
context:
space:
mode:
authorAlasdair Armstrong2019-02-19 17:02:19 +0000
committerAlasdair Armstrong2019-02-19 17:02:19 +0000
commitfc7d360e9442ab2e945e0d2da97faaf0eefec66f (patch)
treea823d0c949dde68bdf117c836c3c2e28f9cf9088 /src/ocaml_backend.ml
parent3c967f9075d890b8ba0e3fa1fb990a41a36ddd80 (diff)
Refactor specialization
specialize functions now take a 'specialization' parameter that specifies how they will specialize the AST. typ_ord_specialization gives the previous behaviour, whereas int_specialization allows specializing on Int-kinded arguments. Note that this can loop forever unless the appropriate case splits are inserted beforehand, presumably by monomorphisation. rename is_nat_kopt -> is_int_kopt for consistency
Diffstat (limited to 'src/ocaml_backend.ml')
-rw-r--r--src/ocaml_backend.ml4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/ocaml_backend.ml b/src/ocaml_backend.ml
index 05406413..894d028f 100644
--- a/src/ocaml_backend.ml
+++ b/src/ocaml_backend.ml
@@ -744,13 +744,13 @@ let ocaml_pp_generators ctx defs orig_types required =
let gen_tyvars = List.map (fun k -> kopt_kid k |> zencode_kid)
(List.filter is_typ_kopt tquants) in
let print_quant kindedid =
- if is_nat_kopt kindedid then string "int" else
+ if is_int_kopt kindedid then string "int" else
if is_order_kopt kindedid then string "bool" else
parens (separate space [string "generators"; string "->"; zencode_kid (kopt_kid kindedid)])
in
let name = "gen_" ^ type_name id in
let make_tyarg kindedid =
- if is_nat_kopt kindedid
+ if is_int_kopt kindedid
then mk_typ_arg (A_nexp (nvar (kopt_kid kindedid)))
else if is_order_kopt kindedid
then mk_typ_arg (A_order (mk_ord (Ord_var (kopt_kid kindedid))))