refactoring [every].
This commit is contained in:
parent
c2d172af48
commit
67a541339f
|
@ -1,25 +1,9 @@
|
||||||
open Heptagon
|
open Heptagon
|
||||||
open Hept_mapfold
|
|
||||||
open Types
|
|
||||||
|
|
||||||
|
|
||||||
(* Transform [f (...) every e]
|
(* Transform [f (...) every e]
|
||||||
into [f (...) every r] and add an equation [r=e] *)
|
into [f (...) every r] and add an equation [r=e] *)
|
||||||
|
|
||||||
let mk_bool_var n = mk_exp (Evar n) (Tid Initial.pbool)
|
|
||||||
let mk_bool_param n = mk_var_dec n (Tid Initial.pbool)
|
|
||||||
|
|
||||||
let fresh = Idents.gen_fresh "reset" (fun () -> "r")
|
|
||||||
(* add an equation *)
|
|
||||||
let equation v acc_eq_list e =
|
|
||||||
let n = fresh() in
|
|
||||||
n,
|
|
||||||
(mk_bool_param n) :: v,
|
|
||||||
(mk_equation (Eeq(Evarpat n, e))) ::acc_eq_list
|
|
||||||
|
|
||||||
|
|
||||||
let statefull eq_list = List.exists (fun eq -> eq.eq_statefull) eq_list
|
|
||||||
|
|
||||||
let is_var = function
|
let is_var = function
|
||||||
| { e_desc = Evar _ } -> true
|
| { e_desc = Evar _ } -> true
|
||||||
| _ -> false
|
| _ -> false
|
||||||
|
@ -32,19 +16,15 @@ let edesc funs (v,acc_eq_list) ed =
|
||||||
let ed, (v, acc_eq_list) = Hept_mapfold.edesc funs (v,acc_eq_list) ed in
|
let ed, (v, acc_eq_list) = Hept_mapfold.edesc funs (v,acc_eq_list) ed in
|
||||||
match ed with
|
match ed with
|
||||||
| Eapp (op, e_list, Some re) when not (is_var re) ->
|
| Eapp (op, e_list, Some re) when not (is_var re) ->
|
||||||
let n, v, acc_eq_list = equation v acc_eq_list re in
|
let re, vre, eqre = Reset.equation_from_exp re in
|
||||||
let re = { re with e_desc = Evar n } in
|
Eapp(op, e_list, Some re), (vre::v, eqre::acc_eq_list)
|
||||||
Eapp(op, e_list, Some re), (v, acc_eq_list)
|
|
||||||
|
|
||||||
| Eiterator(it, op, n, e_list, Some re) when not (is_var re) ->
|
| Eiterator(it, op, n, e_list, Some re) when not (is_var re) ->
|
||||||
let x, v, acc_eq_list = equation v acc_eq_list re in
|
let re, vre, eqre = Reset.equation_from_exp re in
|
||||||
let re = { re with e_desc = Evar x } in
|
Eiterator(it, op, n, e_list, Some re), (vre::v, eqre::acc_eq_list)
|
||||||
Eiterator(it, op, n, e_list, Some re), (v, acc_eq_list)
|
|
||||||
|
|
||||||
| _ -> ed, (v, acc_eq_list)
|
| _ -> ed, (v, acc_eq_list)
|
||||||
|
|
||||||
let program p =
|
let program p =
|
||||||
let funs = { Hept_mapfold.defaults
|
let funs = { Hept_mapfold.defaults
|
||||||
with edesc = edesc; block = block } in
|
with Hept_mapfold.edesc = edesc; Hept_mapfold.block = block } in
|
||||||
let p, _ = program_it funs ([],[]) p in
|
let p, _ = Hept_mapfold.program_it funs ([],[]) p in
|
||||||
p
|
p
|
||||||
|
|
Loading…
Reference in a new issue