summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKathy Gray2014-07-08 13:31:38 +0100
committerKathy Gray2014-07-08 13:31:47 +0100
commit54bfa59acb4244e29bc9064f09fc800e252fea39 (patch)
treef82c4f3b6ad025bda2ab2e6ceeeaddcb3ce7516d
parentaa9440f5132008926624f2f00d5c4044734d80ac (diff)
add additional cases for nexp normalisation
-rw-r--r--src/type_internal.ml16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/type_internal.ml b/src/type_internal.ml
index 2279418f..08eddc3f 100644
--- a/src/type_internal.ml
+++ b/src/type_internal.ml
@@ -391,6 +391,22 @@ let rec normalize_nexp n =
| -1,-1 | 0,-1 -> {nexp = Nadd (n2',n1')}
| 0,0 -> {nexp = Nmult ({nexp = Nconst two},n1')}
| _ -> {nexp = Nadd (n1',n2')})
+ | N2n(n11,_),Nadd(n21,n22) ->
+ (match n21.nexp with
+ | N2n(n211,_) ->
+ (match compare_nexps n11 n211 with
+ | -1 -> {nexp = Nadd(n1',n2')}
+ | 0 -> {nexp = Nadd( {nexp = N2n (normalize_nexp {nexp = Nadd(n11, {nexp = Nconst one})},None)}, n22)}
+ | _ -> {nexp = Nadd(n21, (normalize_nexp {nexp = Nadd(n11,n22)}))})
+ | _ -> {nexp = Nadd(n1',n2')})
+ | Nadd(n11,n12),N2n(n21,_) ->
+ (match n11.nexp with
+ | N2n(n111,_) ->
+ (match compare_nexps n111 n21 with
+ | -1 -> {nexp = Nadd(n11,(normalize_nexp {nexp = Nadd(n2',n12)}))}
+ | 0 -> {nexp = Nadd( {nexp = N2n (normalize_nexp {nexp = Nadd(n111, {nexp = Nconst one})},None)}, n12)}
+ | _ -> {nexp = Nadd(n2', n1')})
+ | _ -> {nexp = Nadd(n2',n1')})
| _ ->
match get_var n1', get_var n2' with
| Some(nv1),Some(nv2) ->