diff options
| author | Kathy Gray | 2014-07-08 13:31:38 +0100 |
|---|---|---|
| committer | Kathy Gray | 2014-07-08 13:31:47 +0100 |
| commit | 54bfa59acb4244e29bc9064f09fc800e252fea39 (patch) | |
| tree | f82c4f3b6ad025bda2ab2e6ceeeaddcb3ce7516d | |
| parent | aa9440f5132008926624f2f00d5c4044734d80ac (diff) | |
add additional cases for nexp normalisation
| -rw-r--r-- | src/type_internal.ml | 16 |
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) -> |
