|
29 | 29 | let rec eval_guard (env: ED.t) (expr: expr) (branch: bool): ED.t =
|
30 | 30 | let expr_value = eval_expr env expr in
|
31 | 31 | let zero = ID.of_int 0 in
|
32 |
| - if branch && ID.leq expr_value zero || |
33 |
| - not branch && not (ID.leq zero expr_value) then |
| 32 | + if branch && ID.leq expr_value zero || |
| 33 | + not branch && not (ID.leq zero expr_value) then |
34 | 34 | ED.bot
|
35 | 35 | else
|
36 | 36 | match expr, branch with
|
@@ -66,48 +66,10 @@ struct
|
66 | 66 | let f_post_env = eval_stmt f_refined_env f in
|
67 | 67 | ED.join t_post_env f_post_env
|
68 | 68 | | While (c, b) ->
|
69 |
| - let b_refined_env = eval_guard env c true in |
70 |
| - let b_post_env = eval_stmt b_refined_env b in |
71 |
| - let while_result = ED.join env b_post_env in |
72 |
| - |
73 |
| - let b_refined_env = eval_guard while_result c true in |
74 |
| - let b_post_env = eval_stmt b_refined_env b in |
75 |
| - let while_result = ED.join while_result b_post_env in |
76 |
| - let b_refined_env = eval_guard while_result c true in |
77 |
| - let b_post_env = eval_stmt b_refined_env b in |
78 |
| - let while_result = ED.join while_result b_post_env in |
79 |
| - let b_refined_env = eval_guard while_result c true in |
80 |
| - let b_post_env = eval_stmt b_refined_env b in |
81 |
| - let while_result = ED.join while_result b_post_env in |
82 |
| - let b_refined_env = eval_guard while_result c true in |
83 |
| - let b_post_env = eval_stmt b_refined_env b in |
84 |
| - let while_result = ED.join while_result b_post_env in |
85 |
| - let b_refined_env = eval_guard while_result c true in |
86 |
| - let b_post_env = eval_stmt b_refined_env b in |
87 |
| - let while_result = ED.join while_result b_post_env in |
88 |
| - let b_refined_env = eval_guard while_result c true in |
89 |
| - let b_post_env = eval_stmt b_refined_env b in |
90 |
| - let while_result = ED.join while_result b_post_env in |
91 |
| - let b_refined_env = eval_guard while_result c true in |
92 |
| - let b_post_env = eval_stmt b_refined_env b in |
93 |
| - let while_result = ED.join while_result b_post_env in |
94 |
| - let b_refined_env = eval_guard while_result c true in |
95 |
| - let b_post_env = eval_stmt b_refined_env b in |
96 |
| - let while_result = ED.join while_result b_post_env in |
97 |
| - let b_refined_env = eval_guard while_result c true in |
98 |
| - let b_post_env = eval_stmt b_refined_env b in |
99 |
| - let while_result = ED.join while_result b_post_env in |
100 |
| - let b_refined_env = eval_guard while_result c true in |
101 |
| - let b_post_env = eval_stmt b_refined_env b in |
102 |
| - let while_result = ED.join while_result b_post_env in |
103 |
| - let b_refined_env = eval_guard while_result c true in |
104 |
| - let b_post_env = eval_stmt b_refined_env b in |
105 |
| - let while_result = ED.join while_result b_post_env in |
106 |
| - let b_refined_env = eval_guard while_result c true in |
107 |
| - let b_post_env = eval_stmt b_refined_env b in |
108 |
| - let while_result = ED.join while_result b_post_env in |
109 |
| - let b_refined_env = eval_guard while_result c true in |
110 |
| - let b_post_env = eval_stmt b_refined_env b in |
111 |
| - let while_result = ED.join while_result b_post_env in |
| 69 | + let f env' = |
| 70 | + let b_refined_env = eval_guard env' c true in |
| 71 | + eval_stmt b_refined_env b |
| 72 | + in |
| 73 | + let while_result = EDFP.closure f env in |
112 | 74 | eval_guard while_result c false
|
113 | 75 | end
|
0 commit comments