;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 2 of the License, or
;;; (at your option) any later version.
-;;;
+;;;
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
-;;;
+;;;
;;; You should have received a copy of the GNU General Public License
;;; along with this program; if not, write to the Free Software Foundation,
;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
;;; Packages.
(defpackage #:mdw.mop
- (:use #:common-lisp #:mdw.base #+(or cmu clisp) #:mop #+ecl #:clos)
+ (:use #:common-lisp #:mdw.base
+ #+(or cmu clisp) #:mop
+ #+sbcl #:sb-mop
+ #+ecl #:clos)
(:export #:copy-instance #:copy-instance-using-class
#:with-slot-variables
#:compatible-class
(listify slots)
(mapcar #'slot-definition-name
(class-slots class))))))
- (multiple-value-bind
- (docs decls body)
- (parse-body body :allow-docstring-p nil)
- (declare (ignore docs))
+ (with-parsed-body (body decls) body
(with-gensyms (instvar)
`(let ((,instvar ,instance))
,@(and class `((declare (type ,(class-name class) ,instvar))))
(Yes, I know that using functions would be nicer, but the MOP makes
that surprisingly difficult.)"))
+(defgeneric slot-definition-filter (slot)
+ (:method ((slot slot-definition)) nil))
+
(defclass filtered-direct-slot-definition
(standard-direct-slot-definition)
((filter :initarg :filter :reader slot-definition-filter)))
-(defgeneric slot-definition-filter (slot)
- (:method ((slot slot-definition)) nil))
-
(defclass filtered-effective-slot-definition
(standard-effective-slot-definition)
((filter :initarg :filter :accessor slot-definition-filter)))