;;;; standard-hooks.lisp -- built-in hooks for standard def* macros (in-package :testiere) ;;; DEFSTRUCT ;; (defstruct moo ;; #+testiere ;; (:tests ...) ;; a b c) (register-hook 'cl:defstruct #'standard-extractor) ;;; DEFCLASS ;; (defclass fooar () ;; (slots...) ;; #+testiere ;; (:tests ...)) (defun defclass-restarts-expander (form) (let* ((name (second form)) (restart-name (intern (format nil "UNBIND-CLASS-~a" (symbol-name name))))) `((,restart-name () (setf (find-class ',name) nil))))) (register-hook 'cl:defclass #'standard-extractor #'defclass-restarts-expander) ;;; DEFMETHOD ;; (defmethod okwhat ((x moo) (y bar) z) ;; "Here's a method" ;; #+testiere ;; (:tests ...) ;; (flah (moo-blah x) (barbar y))) (register-hook 'cl:defmethod #'standard-extractor) ;;; DEFUN ;; (defun add3 (x y z) ;; "Adds three thigns" ;; #+testiere ;; (:tests ...) ;; (+ x y z)) (defun defun-restarts-expander (form) (let* ((name (second form)) (restart-name (intern (format nil "UNBIND-CLASS-~a" (symbol-name name))))) `((,restart-name () (fmakunbound ',name))))) (register-hook 'cl:defun #'standard-extractor #'defun-restarts-expander) ;;; DEFTYPE ;; (deftype optional-number () ;; "Its a number, or not" ;; #+testiere ;; (:tests ...) ;; `(or number null)) (register-hook 'cl:deftype #'standard-extractor)