(while (and (eq (car args) '&key) (cl-pop args))
(while (and args (not (memq (car args) lambda-list-keywords)))
(let ((arg (cl-pop args)))
- (or (consp arg) (setq arg (list arg)))
+ (if (not (consp arg))
+ ;; Simple key arg, we can use plist-get.
+ (let ((karg (intern (format ":%s" arg))))
+ (cl-do-arglist arg `(plist-get ,restarg ,karg))
+ (cl-push karg keys))
(let* ((karg (if (consp (car arg)) (caar arg)
(intern (format ":%s" (car arg)))))
(varg (if (consp (car arg)) (cadar arg) (car arg)))
(def (if (cdr arg) (cadr arg)
(or (car bind-defs) (cadr (assq varg bind-defs)))))
- (look (list 'memq (list 'quote karg) restarg)))
+ (look (list 'plist-member restarg (list 'quote karg))))
(and def bind-enquote (setq def (list 'quote def)))
(if (cddr arg)
(let* ((temp (or (nth 2 arg) (gensym)))
'quote
(list nil (cl-const-expr-val def)))
(list 'list nil def))))))))
- (cl-push karg keys)))))
+ (cl-push karg keys))))))
(setq keys (nreverse keys))
(or (and (eq (car args) '&allow-other-keys) (cl-pop args))
(null keys) (= safety 0)
(list (list 'memq (list 'car var)
(list 'quote (append keys allow)))
(list 'setq var (list 'cdr (list 'cdr var))))
- (list (list 'car
- (list 'cdr
- (list 'memq (cons 'quote allow)
- restarg)))
+ (list (list 'plist-get restarg (car allow))
(list 'setq var nil))
(list t
(list