aboutsummaryrefslogtreecommitdiff
path: root/kernel/nativelambda.ml
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/nativelambda.ml')
-rw-r--r--kernel/nativelambda.ml14
1 files changed, 14 insertions, 0 deletions
diff --git a/kernel/nativelambda.ml b/kernel/nativelambda.ml
index 2ca2747994..f530f6e2ec 100644
--- a/kernel/nativelambda.ml
+++ b/kernel/nativelambda.ml
@@ -66,6 +66,20 @@ let decompose_Llam lam =
| Llam(ids,body) -> ids, body
| _ -> [||], lam
+let rec decompose_Llam_Llet lam =
+ match lam with
+ | Llam(ids,body) ->
+ let vars, body = decompose_Llam_Llet body in
+ Array.fold_right (fun x l -> (x, None) :: l) ids vars, body
+ | Llet(id,def,body) ->
+ let vars, body = decompose_Llam_Llet body in
+ (id,Some def) :: vars, body
+ | _ -> [], lam
+
+let decompose_Llam_Llet lam =
+ let vars, body = decompose_Llam_Llet lam in
+ Array.of_list vars, body
+
(*s Operators on substitution *)
let subst_id = subs_id 0
let lift = subs_lift