]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix cl-defun keyword arg parsing. Please bootstrap.
authorDaniel Colascione <dancol@dancol.org>
Sun, 23 Mar 2014 05:50:24 +0000 (22:50 -0700)
committerDaniel Colascione <dancol@dancol.org>
Sun, 23 Mar 2014 05:50:24 +0000 (22:50 -0700)
lisp/ChangeLog
lisp/emacs-lisp/cl-macs.el
test/ChangeLog
test/automated/cl-lib.el

index 3e49f70f0b29edb85ecdf86905e66bc079a88c0f..78229507684c447e49bba9e7a2a492d19b4feaae 100644 (file)
@@ -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-22  Glenn Morris  <rgm@gnu.org>
 
        * dired.el (dired-read-regexp): Make obsolete.
index b1861cf7dfabed9c3b1da3d383b9bfbd3d0aa98b..ae939c9c0e9a6b4ce9640b6edb33ddfd721092ce 100644 (file)
@@ -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--")))
index c87022cd9485e49f3489aa7da9a29df05091844d..183fb409f1fcb93d3492a730ca68a3d3a5790aab 100644 (file)
@@ -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-07  Michael Albinus  <michael.albinus@gmx.de>
 
        * automated/tramp-tests.el (tramp-copy-size-limit): Declare.
index 8b6ed6d6634a2782d131a3bb133b02d60ee3c90f..f7f4314e1cb9ee2491f84db9c99faf86b89f8e3e 100644 (file)
   (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