1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-15 18:20:42 +02:00

method is a defmacro.

* oop/goops.scm (method): Make into a defmacro.
This commit is contained in:
Andy Wingo 2008-10-23 15:00:19 +02:00
parent 56f952c682
commit 02e720ff76

View file

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