method is a defmacro.
authorAndy Wingo <wingo@pobox.com>
Thu, 23 Oct 2008 13:00:19 +0000 (15:00 +0200)
committerAndy Wingo <wingo@pobox.com>
Thu, 23 Oct 2008 13:00:19 +0000 (15:00 +0200)
* oop/goops.scm (method): Make into a defmacro.

oop/goops.scm

index bb85f11..2a250c7 100644 (file)
        #:specializers specializers
        #:procedure procedure))
 
-(define method
+(define-macro (method args . body)
   (letrec ((specializers
            (lambda (ls)
              (cond ((null? ls) (list (list 'quote '())))
                  (cons (if (pair? (car ls)) (caar ls) (car ls))
                        (formals (cdr ls)))
                  ls))))
-    (procedure->memoizing-macro
-      (lambda (exp env)
-       (let ((args (cadr exp))
-             (body (cddr exp)))
-         `(make <method>
-                #:specializers (cons* ,@(specializers args))
-                #:procedure (lambda ,(formals args)
-                              ,@(if (null? body)
-                                    (list *unspecified*)
-                                    body))))))))
+    `(make <method>
+       #:specializers (cons* ,@(specializers args))
+       #:procedure (lambda ,(formals args)
+                     ,@(if (null? body)
+                           (list *unspecified*)
+                           body)))))
 
 ;;;
 ;;; {add-method!}