[pro] macros expanding to defclass + some mop code

Sam Steingold sds at gnu.org
Mon Dec 27 03:37:17 UTC 2010


Hi,
I want to write a macro which would expand to a defclass + some code
which uses the resulting class object using mop.
e.g. (untested),
(defmacro deffoo (class slots)
  `(progn
     (defclass ,class () ,slots)
     (defun foo (x)
       (list
         ,@(mapcar (lambda (ds)
                     `(,(car (slot-definition-readers ds)) x))
                   (class-direct-slots (find-class class)))))))

which should expand
(deffoo bar ((a :reader bar-a) (b :reader bar-b)))
to something like this:
(progn
  (defclass bar () ((a :reader bar-a) (b :reader bar-b)))
  (defun foo (x) (list (bar-a x) (bar-b x))))

Alas, CLASS is not defined at read time when
                (class-direct-slots (find-class class))
and
                (slot-definition-readers ds)
want to be evaluated.

So, how do I do this?

-- 
Sam Steingold (http://sds.podval.org/) on Ubuntu 10.04 (lucid)
http://www.memritv.org http://www.PetitionOnline.com/tap12009/
http://ffii.org http://pmw.org.il http://palestinefacts.org
Perl: all stupidities of UNIX in one.




More information about the pro mailing list