summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana N. Xu <na.xu@inria.fr>2010-12-07 20:10:55 +0000
committerDana N. Xu <na.xu@inria.fr>2010-12-07 20:10:55 +0000
commit6bbbf63246117fb87c617989873faf036e55e289 (patch)
tree3ba7e617ffb85a5f02fdff25eab04b6a09d821fa
parentbe2b0939f82264348115af3dac555b1897ee6a73 (diff)
downloadocaml-6bbbf63246117fb87c617989873faf036e55e289.tar.gz
fixed map_expression
git-svn-id: http://caml.inria.fr/svn/ocaml/branches/contracts@10889 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--bytecomp/translcore.ml5
-rw-r--r--typing/typedtree.ml8
-rw-r--r--typing/types.ml6
3 files changed, 12 insertions, 7 deletions
diff --git a/bytecomp/translcore.ml b/bytecomp/translcore.ml
index 986a33d866..94f1f7ff82 100644
--- a/bytecomp/translcore.ml
+++ b/bytecomp/translcore.ml
@@ -964,8 +964,9 @@ and subst_contract v e cntr =
(* deep_transl_contract takes e and expands all ei |><| ci in e *)
and deep_transl_contract expr =
- Typedtree.map_expression (fun ei -> match ei.exp_desc with
- | Texp_contract (c, e, r1, r2) -> transl_contract c e r1 r2
+ Typedtree.map_expression (fun ei -> match ei.exp_desc with
+ | Texp_contract (c, e, r1, r2) ->
+ transl_contract c e r1 r2
| _ -> ei) expr
diff --git a/typing/typedtree.ml b/typing/typedtree.ml
index 5ac1cee2a3..3f265bb00f 100644
--- a/typing/typedtree.ml
+++ b/typing/typedtree.ml
@@ -288,7 +288,7 @@ and map_expression f (expr:expression) =
| Texp_let (rec_flag, pat_expr_list, expr1) ->
Texp_let (rec_flag,
List.map (fun (p, e) -> (p, map_expression f e)) pat_expr_list,
- map_expression f expr1)
+ map_expression f expr1)
| Texp_function (pat_expr_list, partial) ->
Texp_function (List.map (fun (p, e) -> (p, map_expression f e))
pat_expr_list, partial)
@@ -346,10 +346,12 @@ and map_expression f (expr:expression) =
| Texp_lazy (expr1) -> Texp_lazy (map_expression f expr1)
(* | Texp_object (class_str, class_sig, string_list) ->
Texp_object (class_str, class_sig, string_list) *)
- | others -> (f expr).exp_desc
+ | Texp_contract (c, e, r1, r2) ->
+ Texp_contract (c, map_expression f e, r1, r2)
+ | others -> others
in
let result_exp_desc = map_expression_aux f expr in
- { expr with exp_desc = result_exp_desc }
+ f {expr with exp_desc = result_exp_desc }
(* We want to convert expression to Types.expression *)
diff --git a/typing/types.ml b/typing/types.ml
index d60a8ae13c..98c225d726 100644
--- a/typing/types.ml
+++ b/typing/types.ml
@@ -657,8 +657,10 @@ and map_expression f (expr:expression) =
| Texp_lazy (expr1) -> Texp_lazy (map_expression f expr1)
(* | Texp_object (class_str, class_sig, string_list) ->
Texp_object (class_str, class_sig, string_list) *)
- | others -> (f expr).exp_desc
+ | Texp_contract (c, e, r1, r2) ->
+ Texp_contract (c, map_expression f e, r1, r2)
+ | others -> others
in
let result_exp_desc = map_expression_aux f expr in
- { expr with exp_desc = result_exp_desc }
+ f { expr with exp_desc = result_exp_desc }