[closer-devel] Contextl patch: make ensure-layered-method work with function objects as well as names.

Pascal Costanza pc at p-cos.net
Mon Sep 29 13:35:03 UTC 2008


Hi Drew,

Thanks a lot for this patch, this is indeed an improvement. I will  
include it in the repository ASAP.


Best,
Pascal

On 27 Sep 2008, at 23:05, Drew Crampsie wrote:

> Hello,
>
> In lol i use ensure-layered-method directly on generic functions. I've
> been using this modified version of ensure-layered-method  and thought
> i'd try and sneak it in :).
>
> (defun ensure-layered-method
>       (layered-function-designator
>        lambda-expression
>        &key
> 	(layered-function
> 	 (if (functionp layered-function-designator)
> 	     layered-function-designator
> 	     (fdefinition (lf-definer-name layered-function-designator))))
> 	        #-(or allegro clisp cmu ecl mcl openmcl)
>        (method-class
>         (generic-function-method-class
>          layered-function))
>        (in-layer 't)
>        (qualifiers ())
>        (lambda-list (cadr lambda-expression))
>        (specializers (required-args lambda-list (constantly (find- 
> class 't)))))
>  (let ((layer-arg (gensym "LAYER-ARG-")))
>    (destructuring-bind
>        (lambda (&rest args) &body body)
>        lambda-expression
>      (unless (eq lambda 'lambda)
>        (error "Incorrect lambda expression: ~S." lambda-expression))
>      (ensure-method layered-function
>                     `(lambda (,layer-arg , at args) , at body)
>                     #-(or allegro clisp cmu ecl mcl openmcl) :method- 
> class
>                     #-(or allegro clisp cmu ecl mcl openmcl) method- 
> class
>                     :qualifiers qualifiers
>                     :lambda-list `(,layer-arg , at lambda-list)
>                     :specializers (cons (find-layer-class in-layer)
> specializers)))))
>
> Cheers,
>
> drewc
> _______________________________________________
> closer-devel mailing list
> closer-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/closer-devel

-- 
Pascal Costanza, mailto:pc at p-cos.net, http://p-cos.net
Vrije Universiteit Brussel, Programming Technology Lab
Pleinlaan 2, B-1050 Brussel, Belgium









More information about the closer-devel mailing list