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:
parent
56f952c682
commit
02e720ff76
1 changed files with 7 additions and 11 deletions
|
@ -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
|
`(make <method>
|
||||||
(lambda (exp env)
|
#:specializers (cons* ,@(specializers args))
|
||||||
(let ((args (cadr exp))
|
#:procedure (lambda ,(formals args)
|
||||||
(body (cddr exp)))
|
,@(if (null? body)
|
||||||
`(make <method>
|
(list *unspecified*)
|
||||||
#:specializers (cons* ,@(specializers args))
|
body)))))
|
||||||
#:procedure (lambda ,(formals args)
|
|
||||||
,@(if (null? body)
|
|
||||||
(list *unspecified*)
|
|
||||||
body))))))))
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
;;; {add-method!}
|
;;; {add-method!}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue