comparison lisp/cl-macs.el @ 452:3d3049ae1304 r21-2-41

Import from CVS: tag r21-2-41
author cvs
date Mon, 13 Aug 2007 11:40:21 +0200
parents 1ccc32a20af4
children 023b83f4e54b
comparison
equal deleted inserted replaced
451:8ad70c5cd5d7 452:3d3049ae1304
148 148
149 (defvar cl-macro-environment nil) 149 (defvar cl-macro-environment nil)
150 (defvar bind-block) (defvar bind-defs) (defvar bind-enquote) 150 (defvar bind-block) (defvar bind-defs) (defvar bind-enquote)
151 (defvar bind-inits) (defvar bind-lets) (defvar bind-forms) 151 (defvar bind-inits) (defvar bind-lets) (defvar bind-forms)
152 152
153 ;; npak@ispras.ru
154 (defun cl-upcase-arg (arg)
155 ;; Changes all non-keyword sysmbols in `arg' to symbols
156 ;; with name in upper case.
157 ;; arg is either symbol or list of symbols or lists
158 (cond ((symbolp arg)
159 (if (memq arg lambda-list-keywords)
160 ;; Do not upcase &optional, &key etc.
161 arg
162 (intern (upcase (symbol-name arg)))))
163 ((listp arg)
164 (mapcar 'cl-upcase-arg arg))))
165
166 ;; npak@ispras.ru
167 (defun cl-function-arglist (function agrlist)
168 "Returns string with printed representation of arguments list.
169 Supports Common Lisp lambda lists."
170 (prin1-to-string
171 (cons function (cl-upcase-arg agrlist))))
172
153 (defun cl-transform-lambda (form bind-block) 173 (defun cl-transform-lambda (form bind-block)
154 (let* ((args (car form)) (body (cdr form)) 174 (let* ((args (car form)) (body (cdr form))
155 (bind-defs nil) (bind-enquote nil) 175 (bind-defs nil) (bind-enquote nil)
156 (bind-inits nil) (bind-lets nil) (bind-forms nil) 176 (bind-inits nil) (bind-lets nil) (bind-forms nil)
157 (header nil) (simple-args nil)) 177 (header nil) (simple-args nil)
178 (doc ""))
179 ;; Add CL lambda list to documentation. npak@ispras.ru
180 (if (stringp (car body))
181 (setq doc (cl-pop body)))
182 (cl-push (concat "\nCommon Lisp lambda list:\n"
183 " " (cl-function-arglist bind-block args)
184 "\n\n"
185 doc)
186 header)
187
158 (while (or (stringp (car body)) (eq (car-safe (car body)) 'interactive)) 188 (while (or (stringp (car body)) (eq (car-safe (car body)) 'interactive))
159 (cl-push (cl-pop body) header)) 189 (cl-push (cl-pop body) header))
160 (setq args (if (listp args) (copy-list args) (list '&rest args))) 190 (setq args (if (listp args) (copy-list args) (list '&rest args)))
161 (let ((p (last args))) (if (cdr p) (setcdr p (list '&rest (cdr p))))) 191 (let ((p (last args))) (if (cdr p) (setcdr p (list '&rest (cdr p)))))
162 (if (setq bind-defs (cadr (memq '&cl-defs args))) 192 (if (setq bind-defs (cadr (memq '&cl-defs args)))