aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Marie Pédrot2020-12-24 20:06:33 +0100
committerPierre-Marie Pédrot2021-04-20 10:54:34 +0200
commit4bdd1242d22e0870f2f0c97a83ece7e7eeeea7a1 (patch)
tree182fedb5ea8178fef249aac26d87b1e4d65cafb1
parent7ffd746e9156de69affaa3f284fce631ae0d6ef8 (diff)
Do not construct intermediate lists in Logic.move.
-rw-r--r--proofs/logic.ml14
1 files changed, 7 insertions, 7 deletions
diff --git a/proofs/logic.ml b/proofs/logic.ml
index 2e8f8295fb..c57a9344ff 100644
--- a/proofs/logic.ml
+++ b/proofs/logic.ml
@@ -184,11 +184,12 @@ let split_sign env sigma hfrom l =
let move_hyp env sigma toleft (left,declfrom,right) hto =
let open EConstr in
+ let push prefix sign = List.fold_right push_named_context_val prefix sign in
let push_rev prefix sign = List.fold_left (fun accu d -> push_named_context_val d accu) sign prefix in
- let rec moverec_toleft first middle = function
- | [] -> List.rev first @ List.rev middle
+ let rec moverec_toleft ans first middle = function
+ | [] -> push middle @@ push first ans
| d :: _ as right when move_location_eq hto (MoveBefore (NamedDecl.get_id d)) ->
- List.rev first @ List.rev middle @ right
+ push_rev right @@ push middle @@ push first ans
| d :: right ->
let hyp = NamedDecl.get_id d in
let (first',middle') =
@@ -204,9 +205,9 @@ let move_hyp env sigma toleft (left,declfrom,right) hto =
(d::first, middle)
in
if move_location_eq hto (MoveAfter hyp) then
- List.rev first' @ List.rev middle' @ right
+ push_rev right @@ push middle' @@ push first' ans
else
- moverec_toleft first' middle' right
+ moverec_toleft ans first' middle' right
in
let rec moverec_toright first middle right = match EConstr.match_named_context_val right with
| None -> push_rev first @@ push_rev middle right
@@ -232,8 +233,7 @@ let move_hyp env sigma toleft (left,declfrom,right) hto =
moverec_toright first' middle' right
in
if toleft then
- List.fold_left (fun sign d -> push_named_context_val d sign)
- right (moverec_toleft [] [declfrom] left)
+ moverec_toleft right [] [declfrom] left
else
let right = moverec_toright [] [declfrom] right in
push_rev left @@ right