Mercurial > emacs
comparison lisp/emacs-lisp/cl-macs.el @ 38259:f4336b326ad3
(cl-do-arglist): Revert change of
2000-10-15.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Mon, 02 Jul 2001 15:18:25 +0000 |
parents | ee8a94d08c3d |
children | 9c9bba5b5bad |
comparison
equal
deleted
inserted
replaced
38258:b96d086e358d | 38259:f4336b326ad3 |
---|---|
255 (list '+ num (list 'length restarg))))) | 255 (list '+ num (list 'length restarg))))) |
256 bind-forms))) | 256 bind-forms))) |
257 (while (and (eq (car args) '&key) (cl-pop args)) | 257 (while (and (eq (car args) '&key) (cl-pop args)) |
258 (while (and args (not (memq (car args) lambda-list-keywords))) | 258 (while (and args (not (memq (car args) lambda-list-keywords))) |
259 (let ((arg (cl-pop args))) | 259 (let ((arg (cl-pop args))) |
260 (if (not (consp arg)) | 260 (or (consp arg) (setq arg (list arg))) |
261 ;; Simple key arg, we can use plist-get. | |
262 (let ((karg (intern (format ":%s" arg)))) | |
263 (cl-do-arglist arg `(plist-get ,restarg ,karg)) | |
264 (cl-push karg keys)) | |
265 (let* ((karg (if (consp (car arg)) (caar arg) | 261 (let* ((karg (if (consp (car arg)) (caar arg) |
266 (intern (format ":%s" (car arg))))) | 262 (intern (format ":%s" (car arg))))) |
267 (varg (if (consp (car arg)) (cadar arg) (car arg))) | 263 (varg (if (consp (car arg)) (cadar arg) (car arg))) |
268 (def (if (cdr arg) (cadr arg) | 264 (def (if (cdr arg) (cadr arg) |
269 (or (car bind-defs) (cadr (assq varg bind-defs))))) | 265 (or (car bind-defs) (cadr (assq varg bind-defs))))) |
270 (look (list 'plist-member restarg (list 'quote karg)))) | 266 (look (list 'memq (list 'quote karg) restarg))) |
271 (and def bind-enquote (setq def (list 'quote def))) | 267 (and def bind-enquote (setq def (list 'quote def))) |
272 (if (cddr arg) | 268 (if (cddr arg) |
273 (let* ((temp (or (nth 2 arg) (gensym))) | 269 (let* ((temp (or (nth 2 arg) (gensym))) |
274 (val (list 'car (list 'cdr temp)))) | 270 (val (list 'car (list 'cdr temp)))) |
275 (cl-do-arglist temp look) | 271 (cl-do-arglist temp look) |
287 (if (eq (cl-const-expr-p def) t) | 283 (if (eq (cl-const-expr-p def) t) |
288 (list | 284 (list |
289 'quote | 285 'quote |
290 (list nil (cl-const-expr-val def))) | 286 (list nil (cl-const-expr-val def))) |
291 (list 'list nil def)))))))) | 287 (list 'list nil def)))))))) |
292 (cl-push karg keys)))))) | 288 (cl-push karg keys))))) |
293 (setq keys (nreverse keys)) | 289 (setq keys (nreverse keys)) |
294 (or (and (eq (car args) '&allow-other-keys) (cl-pop args)) | 290 (or (and (eq (car args) '&allow-other-keys) (cl-pop args)) |
295 (null keys) (= safety 0) | 291 (null keys) (= safety 0) |
296 (let* ((var (gensym "--keys--")) | 292 (let* ((var (gensym "--keys--")) |
297 (allow '(:allow-other-keys)) | 293 (allow '(:allow-other-keys)) |
300 (list | 296 (list |
301 'cond | 297 'cond |
302 (list (list 'memq (list 'car var) | 298 (list (list 'memq (list 'car var) |
303 (list 'quote (append keys allow))) | 299 (list 'quote (append keys allow))) |
304 (list 'setq var (list 'cdr (list 'cdr var)))) | 300 (list 'setq var (list 'cdr (list 'cdr var)))) |
305 (list (list 'plist-get restarg (car allow)) | 301 (list (list 'car |
302 (list 'cdr | |
303 (list 'memq (cons 'quote allow) | |
304 restarg))) | |
306 (list 'setq var nil)) | 305 (list 'setq var nil)) |
307 (list t | 306 (list t |
308 (list | 307 (list |
309 'error | 308 'error |
310 (format "Keyword argument %%s not one of %s" | 309 (format "Keyword argument %%s not one of %s" |