summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKathy Gray2014-04-25 08:53:45 +0100
committerKathy Gray2014-04-25 08:53:58 +0100
commit11a52d9ec6f4c2eae49bb07d08603df5f86c1162 (patch)
treefc974df1fd1335933bdac0bfa1b97cf5874b80e0 /src
parentef014438c63984992429c325966f9007c8b85b29 (diff)
more support for path-aware (ish) constraint checking
Diffstat (limited to 'src')
-rw-r--r--src/type_internal.ml13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/type_internal.ml b/src/type_internal.ml
index 85537b83..d305335d 100644
--- a/src/type_internal.ml
+++ b/src/type_internal.ml
@@ -1047,6 +1047,19 @@ let rec subst_nuvars nu nc n =
| Nneg n -> {nexp= Nneg (subst_nuvars nu nc n)}
| N2n n -> {nexp = N2n (subst_nuvars nu nc n)}
+let rec get_nuvars n =
+ match n.nexp with
+ | Nconst _ | Nvar _ -> []
+ | Nuvar _ -> [n]
+ | Nmult(n1,n2) | Nadd(n1,n2) -> (get_nuvars n1)@(get_nuvars n2)
+ | Nneg n | N2n n -> get_nuvars n
+
+let freshen n =
+ let nuvars = get_nuvars n in
+ let env_map = List.map (fun nu -> (nu,new_n ())) nuvars in
+ let n = List.fold_right (fun (nu_orig,nu_fresh) n' -> subst_nuvars nu_orig nu_fresh n') env_map n in
+ (n,env_map)
+
let rec simple_constraint_check in_env cs =
let check = simple_constraint_check in_env in