Opened 11 years ago
Closed 11 years ago
#1040 closed defect (fixed)
coops: Hygiene issue with ensure-generic-procedure
Reported by: | Moritz Heidkamp | Owned by: | felix winkelmann |
---|---|---|---|
Priority: | minor | Milestone: | someday |
Component: | extensions | Version: | 4.8.x |
Keywords: | coops | Cc: | |
Estimated difficulty: |
Description
This program:
(use extras coops) (define-class <foo> ()) (define-class <bar> (<foo>)) (define-method (foo (x <foo>)) `(<foo> ,x)) (define-syntax define-foo (syntax-rules () ((_ class) (define-method (foo (x class)) `(class ,x))))) (define-foo <bar>) (pp (foo (make <foo>))) (pp (foo (make <bar>)))
results in this output:
Note: implicitly defining generic-procedure: foo Note: implicitly defining generic-procedure: foo170 Error: (foo) no method defined for given argument classes: (#<coops standard-class `<foo>'>) Call history: <eval> (list198 (quote197 x171)) <eval> (funcallable-generic-procedure200 (slot-value201 %gp195 (quote197 generic-procedure202)) %gp195) <eval> (slot-value201 %gp195 (quote197 generic-procedure202)) <eval> (create-generic-procedure207 (quote208 (setter191 foo170)) (list209 (quote208 x171))) <eval> (list209 (quote208 x171)) <eval> (funcallable-generic-procedure211 (slot-value212 %gp206 (quote208 generic-procedure213)) %gp206) <eval> (slot-value212 %gp206 (quote208 generic-procedure213)) <eval> ((slot-value180 foo170 (quote181 add-new-primary-method182)) (list183 <bar>) (call-next-method-lambd...... <eval> (slot-value180 foo170 (quote181 add-new-primary-method182)) <eval> (list183 <bar>) <syntax> (pp (foo (make <foo>))) <syntax> (foo (make <foo>)) <syntax> (make <foo>) <eval> (pp (foo (make <foo>))) <eval> (foo (make <foo>)) <eval> (make <foo>) <--
Note how the second implicit generic procedure definition mentions a renamed identifier. Indeed, using an equivalent but direct method definition like this instead:
(define-method (foo (x <bar>)) `(<bar> ,x))
works fine. The attached patch fixes this but I'm not sure if it's the correct way to do it.
Attachments (1)
Change History (2)
Changed 11 years ago by
Attachment: | ensure-generic-procedure-fix.diff added |
---|
comment:1 Changed 11 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
Note: See
TracTickets for help on using
tickets.
Thanks - I have added the change to coops 1.93.