Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (eval-when (:compile-toplevel :load-toplevel :execute)
- (defmacro abbr (short long &optional lambda-list)
- "Abbreviate LONG macro or function name as SHORT. If LAMBDA-LIST is present,
- also copy appropriate SETF-expander."
- `(eval-always
- (cond
- ((macro-function ',long)
- (setf (macro-function ',short) (macro-function ',long)))
- ((special-operator-p ',long)
- (error "Can't abbreviate a special-operator ~a" ',long))
- ((fboundp ',long)
- (setf (fdefinition ',short) (fdefinition ',long))
- ,(when lambda-list
- `(define-setf-expander ,short ,(append lambda-list)
- (values ,@(multiple-value-bind
- (dummies vals store store-form access-form)
- (get-setf-expansion (cons long lambda-list))
- (let ((expansion-vals (mapcar (lambda (x) `(quote ,x))
- (list dummies
- vals
- store
- store-form
- access-form))))
- (setf (second expansion-vals)
- (cons 'list vals))
- expansion-vals))))))
- (t
- (error "Can't abbreviate ~a" ',long)))
- (setf (documentation ',short 'function) (documentation ',long 'function))
- ',short)))
Add Comment
Please, Sign In to add comment