[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/dash 9065e1b 344/426: [-let] Final cdr shift optimizati
From: |
Phillip Lord |
Subject: |
[elpa] externals/dash 9065e1b 344/426: [-let] Final cdr shift optimization |
Date: |
Tue, 04 Aug 2015 19:38:45 +0000 |
branch: externals/dash
commit 9065e1bdaa990b38ab22cb32b9b8132e58c71612
Author: Matus Goljer <address@hidden>
Commit: Matus Goljer <address@hidden>
[-let] Final cdr shift optimization
---
dash.el | 16 ++++++++++++----
dev/examples.el | 8 +++++++-
2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/dash.el b/dash.el
index 7e7db7e..a66d3cb 100644
--- a/dash.el
+++ b/dash.el
@@ -1198,11 +1198,19 @@ SOURCE is a proper or improper list."
;; because each bind-body has a side-effect of chopping the head
;; of the list, we must create a binding even for _ places
((symbolp (car match-form))
- (cons (list (car match-form) `(prog1 (car ,s) (!cdr ,s)))
- (dash--match-cons-1 (cdr match-form) s)))
+ (cond
+ ((cdr match-form)
+ (cons (list (car match-form) `(prog1 (car ,s) (!cdr ,s)))
+ (dash--match-cons-1 (cdr match-form) s)))
+ (t
+ (list (list (car match-form) `(car ,s))))))
(t
- (-concat (dash--match (car match-form) `(prog1 (car ,s) (!cdr ,s)))
- (dash--match-cons-1 (cdr match-form) s)))))
+ (cond
+ ((cdr match-form)
+ (-concat (dash--match (car match-form) `(prog1 (car ,s) (!cdr ,s)))
+ (dash--match-cons-1 (cdr match-form) s)))
+ (t
+ (dash--match (car match-form) `(car ,s)))))))
((eq match-form nil)
nil)
(t
diff --git a/dev/examples.el b/dev/examples.el
index aa171f4..ae4c643 100644
--- a/dev/examples.el
+++ b/dev/examples.el
@@ -740,7 +740,13 @@ new list."
(list a b c d)
(error "previous call should fail.")))
(error t)) => t
- (-let [(a . (b . c)) (cons 1 (cons 2 3))] (list a b c)) => '(1 2 3))
+ (-let [(a . (b . c)) (cons 1 (cons 2 3))] (list a b c)) => '(1 2 3)
+ ;; final cdr optimization
+ (-let [(((a))) (list (list (list 1 2) 3) 4)] a) => 1
+ (-let [(((a b) c) d) (list (list (list 1 2) 3) 4)] (list a b c d)) => '(1
2 3 4)
+ (-let [(((a b) . c) . d) (list (list (list 1 2) 3) 4)] (list a b c d)) =>
'(1 2 (3) (4))
+ (-let [(((a b) c)) (list (list (list 1 2) 3) 4)] (list a b c)) => '(1 2 3)
+ (-let [(((a b) . c)) (list (list (list 1 2) 3) 4)] (list a b c)) => '(1 2
(3)))
(defexamples -let*
(-let* (((a . b) (cons 1 2))
- [elpa] externals/dash b1e585d 337/426: Update copyright notice, (continued)
- [elpa] externals/dash b1e585d 337/426: Update copyright notice, Phillip Lord, 2015/08/04
- [elpa] externals/dash 3adad97 334/426: Add -non-nil, Phillip Lord, 2015/08/04
- [elpa] externals/dash 166bccd 333/426: Add -tree-map-nodes, Phillip Lord, 2015/08/04
- [elpa] externals/dash 05fa92f 342/426: [-let] Transpose nreverse/flatten, Phillip Lord, 2015/08/04
- [elpa] externals/dash f0831d3 339/426: Add -lambda, Phillip Lord, 2015/08/04
- [elpa] externals/dash 9ebcce6 325/426: Add some niceties to font-locking of examples, Phillip Lord, 2015/08/04
- [elpa] externals/dash 6fc652d 331/426: Merge pull request #95 from Wilfred/shallow-copy-function, Phillip Lord, 2015/08/04
- [elpa] externals/dash 5637bd6 322/426: Add alias from -find to -first, Phillip Lord, 2015/08/04
- [elpa] externals/dash a4be872 338/426: Add `-let` and `-let*`, Phillip Lord, 2015/08/04
- [elpa] externals/dash 947ffda 341/426: Add support for &rest match for non-list sequences (like . for improper lists), Phillip Lord, 2015/08/04
- [elpa] externals/dash 9065e1b 344/426: [-let] Final cdr shift optimization,
Phillip Lord <=
- [elpa] externals/dash d37947a 332/426: Add -tree-seq, Phillip Lord, 2015/08/04
- [elpa] externals/dash 51a0c9f 350/426: [-let] Fix expansion of _ symbols in vector matcher, Phillip Lord, 2015/08/04
- [elpa] externals/dash 8f9fc41 340/426: Add support for multiple input arguments to -lambda, Phillip Lord, 2015/08/04
- [elpa] externals/dash 7f2b3c7 343/426: [-lambda] test all match-forms before converting to regular lambda, Phillip Lord, 2015/08/04
- [elpa] externals/dash 6f81492 346/426: [-lambda] Better error-handling, Phillip Lord, 2015/08/04
- [elpa] externals/dash 6f0bb7d 348/426: [-let] Fix dynamic scoping issue, Phillip Lord, 2015/08/04
- [elpa] externals/dash f939201 347/426: [-let] Optimize shifting/binding of unused _ places, Phillip Lord, 2015/08/04
- [elpa] externals/dash c1d555b 355/426: [-let] Optimize single-binding of vectors and kv, Phillip Lord, 2015/08/04
- [elpa] externals/dash edb1e31 356/426: [-let] Add more tests, Phillip Lord, 2015/08/04
- [elpa] externals/dash 9ec1a02 354/426: [-let] Abstract the _ test into a function, Phillip Lord, 2015/08/04