summaryrefslogtreecommitdiff
path: root/oop/goops.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2008-10-23 15:00:19 +0200
committerAndy Wingo <wingo@pobox.com>2008-10-23 15:00:19 +0200
commit02e720ff76049e21c1206576442683818323d574 (patch)
tree0621430cd2c9865de306d8e2ce078319013a7588 /oop/goops.scm
parent56f952c682273594288dccc828afdc8ddc4ecf38 (diff)
downloadguile-02e720ff76049e21c1206576442683818323d574.tar.gz
method is a defmacro.
* oop/goops.scm (method): Make into a defmacro.
Diffstat (limited to 'oop/goops.scm')
-rw-r--r--oop/goops.scm18
1 files changed, 7 insertions, 11 deletions
diff --git a/oop/goops.scm b/oop/goops.scm
index bb85f1119..2a250c7fa 100644
--- a/oop/goops.scm
+++ b/oop/goops.scm
@@ -467,7 +467,7 @@
#:specializers specializers
#:procedure procedure))
-(define method
+(define-macro (method args . body)
(letrec ((specializers
(lambda (ls)
(cond ((null? ls) (list (list 'quote '())))
@@ -482,16 +482,12 @@
(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!}