aboutsummaryrefslogtreecommitdiffhomepage
path: root/contrib
diff options
context:
space:
mode:
authorGravatar letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7>2001-10-31 16:52:06 +0000
committerGravatar letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7>2001-10-31 16:52:06 +0000
commitb87ff23b3e3207466e3de63fcafac6a44102bf72 (patch)
treebf6554dc76a9bd40a6cab310b53b73bc39ae1e78 /contrib
parent351cba811d1c70e17b9add4419c29f52b4564835 (diff)
correction du debut d'optimisation du Fix
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@2148 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'contrib')
-rw-r--r--contrib/extraction/mlutil.ml30
1 files changed, 16 insertions, 14 deletions
diff --git a/contrib/extraction/mlutil.ml b/contrib/extraction/mlutil.ml
index 187df32a4..e9dd12833 100644
--- a/contrib/extraction/mlutil.ml
+++ b/contrib/extraction/mlutil.ml
@@ -330,25 +330,27 @@ let collect_lambda =
in
collect []
-
-
-let test_eta l =
+let test_eta n l =
let rec test n = function
| [] -> true
- | a :: q -> a = (MLrel n) || (test (succ n) q)
- in test 1 l
+ | a :: q -> a = (MLrel n) && (test (succ n) q)
+ in (List.length l = n) && (test 1 l)
let optimize_fix a =
- if not (optim()) then a else
+ if not (optim()) then a
+ else
let lams,b = collect_lambda a in
- (match a with
- | MLfix(_,[|_|],[|c|]) -> a (* TODO *)
- | MLapp(b,ids) ->
- (match b with
- | MLfix(_,[|_|],[|_|]) when (test_eta ids)-> b
- | MLfix(_,[|_|],[|_|]) -> a (* TODO *)
- | _ -> a)
- | _ -> a)
+ let nlams = List.length lams in
+ if nlams = 0 then a
+ else
+ (match b with
+ | MLfix(_,[|_|],[|c|]) -> a (* TODO *)
+ | MLapp(b,ids) ->
+ (match b with
+ | MLfix(_,[|_|],[|_|]) when (test_eta nlams ids)-> b
+ | MLfix(_,[|_|],[|_|]) -> a (* TODO *)
+ | _ -> a)
+ | _ -> a)
let normalize_decl = function
| Dglob (id, a) -> Dglob (id, normalize a)