Guest User

Untitled

a guest
Jun 18th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.65 KB | None | 0 0
  1. (defmacro dynamic-labels
  2. ((&rest definitions) &body body)
  3. (let ((olds (mapcar #'(lambda (x)
  4. (declare (ignore x))
  5. (gensym))
  6. definitions)))
  7. `(let ,(mapcar
  8. #'(lambda (sym def)
  9. `(,sym ,(and (fboundp (car def)) (symbol-function (car def)))))
  10. olds
  11. definitions)
  12. ,@(mapcar
  13. #'(lambda (def)
  14. `(,(if (generic-function-p (car def))
  15. `cl:defmethod
  16. `cl:defun)
  17. ,@def))
  18. definitions)
  19. (unwind-protect
  20. (progn
  21. ,@body)
  22. ,@(mapcar
  23. #'(lambda (old def)
  24. `(if ,old
  25. (setf (symbol-function ',(car def))
  26. ,old)
  27. (fmakunbound ',(car def))))
  28. olds
  29. definitions)))))
Add Comment
Please, Sign In to add comment