aboutsummaryrefslogtreecommitdiff
path: root/kernel/safe_typing.ml
diff options
context:
space:
mode:
authorherbelin2000-09-10 07:19:28 +0000
committerherbelin2000-09-10 07:19:28 +0000
commit79dc33cbc403ebab0bd1fe815c13f740f0a1b850 (patch)
treee38e167003d7dd97d95a59ea7c026a1629b346f8 /kernel/safe_typing.ml
parentc0ff579606f2eba24bc834316d8bb7bcc076000d (diff)
Ajout d'un LetIn primitif.
Abstraction de constr via kind_of_constr dans une bonne partie du code. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@591 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'kernel/safe_typing.ml')
-rw-r--r--kernel/safe_typing.ml12
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/safe_typing.ml b/kernel/safe_typing.ml
index ca5d4a2ecc..6b97c63ac6 100644
--- a/kernel/safe_typing.ml
+++ b/kernel/safe_typing.ml
@@ -5,7 +5,7 @@ open Pp
open Util
open Names
open Univ
-open Generic
+(*i open Generic i*)
open Term
open Reduction
open Sign
@@ -122,6 +122,16 @@ let rec execute mf env cstr =
let (j,cst3) = gen_rel env1 Evd.empty name varj j' in
let cst = Constraint.union cst1 (Constraint.union cst2 cst3) in
(j, cst)
+
+ | IsLetIn (name,c1,c2,c3) ->
+ let (j1,cst1) = execute mf env c1 in
+ let (j2,cst2) = execute mf env c2 in
+ let { uj_val = b; uj_type = t } = cast_rel env Evd.empty j1 j2 in
+ let (j3,cst3) = execute mf (push_rel_def (name,b,t) env) c3 in
+ let cst = Constraint.union cst1 (Constraint.union cst2 cst3) in
+ ({ uj_val = mkLetIn (name, j1.uj_val, j2.uj_val, j3.uj_val) ;
+ uj_type = typed_app (subst1 j1.uj_val) j3.uj_type },
+ cst)
| IsCast (c,t) ->
let (cj,cst1) = execute mf env c in