summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Colascione <dancol@dancol.org>2014-03-22 23:00:18 -0700
committerDaniel Colascione <dancol@dancol.org>2014-03-22 23:00:18 -0700
commit7eab98da1b67fb50195cfd0bfa20ddca75e67465 (patch)
tree339022ac422974e8851dc5255b1d78988380d87d
parent0ceba22e53c3ce48448f37311b8ec2294ef8238c (diff)
downloademacs-7eab98da1b67fb50195cfd0bfa20ddca75e67465.tar.gz
Fix keyword argument parsing. Please bootstrap.
-rw-r--r--lisp/ChangeLog7
-rw-r--r--lisp/emacs-lisp/cl-macs.el3
-rw-r--r--test/ChangeLog5
-rw-r--r--test/automated/cl-lib.el6
4 files changed, 20 insertions, 1 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 24248ded265..2a0840031b2 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,10 @@
+2014-03-23 Daniel Colascione <dancol@dancol.org>
+
+ * emacs-lisp/cl-macs.el (cl--do-arglist): Use a little `cl-loop'
+ list to look for keyword arguments instead of `memq', fixing
+ (Bug#3647) --- unfortunately, only for freshly-compiled code.
+ Please make bootstrap.
+
2014-03-23 Richard Stallman <rms@gnu.org>
* battery.el (battery-linux-sysfs): Search for each field
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index b1861cf7dfa..ae939c9c0e9 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -503,7 +503,8 @@ its argument list allows full Common Lisp conventions."
(varg (if (consp (car arg)) (cl-cadar arg) (car arg)))
(def (if (cdr arg) (cadr arg)
(or (car cl--bind-defs) (cadr (assq varg cl--bind-defs)))))
- (look `(memq ',karg ,restarg)))
+ (look `(cl-loop for cl--arg on ,restarg by #'cddr
+ when (eq (car cl--arg) ',karg) return cl--arg)))
(and def cl--bind-enquote (setq def `',def))
(if (cddr arg)
(let* ((temp (or (nth 2 arg) (make-symbol "--cl-var--")))
diff --git a/test/ChangeLog b/test/ChangeLog
index 9560397fa3f..15677e76468 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2014-03-23 Daniel Colascione <dancol@dancol.org>
+
+ * automated/cl-lib.el (cl-lib-keyword-names-versus-values): New
+ test: correct parsing of keyword arguments.
+
2014-03-23 Dmitry Gutov <dgutov@yandex.ru>
* automated/package-test.el (package-test-describe-package):
diff --git a/test/automated/cl-lib.el b/test/automated/cl-lib.el
index 8b6ed6d6634..f7f4314e1cb 100644
--- a/test/automated/cl-lib.el
+++ b/test/automated/cl-lib.el
@@ -195,4 +195,10 @@
(should (eql (cl-mismatch "Aa" "aA") 0))
(should (eql (cl-mismatch '(a b c) '(a b d)) 2)))
+(ert-deftest cl-lib-keyword-names-versus-values ()
+ (should (equal
+ (funcall (cl-function (lambda (&key a b) (list a b)))
+ :b :a :a 42)
+ '(42 :a))))
+
;;; cl-lib.el ends here