diff --git a/oop/ChangeLog b/oop/ChangeLog index d9a74f87a..b289ae3e0 100644 --- a/oop/ChangeLog +++ b/oop/ChangeLog @@ -1,3 +1,8 @@ +2003-03-12 Mikael Djurfeldt + + * goops.scm (merge-generics): Make sure not to merge a gf with + itself. That would be the cause of a real binding collision. + 2003-03-11 Mikael Djurfeldt * goops/util.scm (filter): Removed. (Now supplied by core.) diff --git a/oop/goops.scm b/oop/goops.scm index f33c5a0a8..ff6453404 100644 --- a/oop/goops.scm +++ b/oop/goops.scm @@ -857,7 +857,8 @@ (val2 ) (var ) (val )) - (make-variable (make-extended-generic (list val2 val1) name))) + (and (not (eq? val1 val2)) + (make-variable (make-extended-generic (list val2 val1) name)))) (define-method (merge-generics (module ) (name ) @@ -867,13 +868,15 @@ (val2 ) (var ) (gf )) - (slot-set! gf - 'extends - (cons val2 (delq! val2 (slot-ref gf 'extends)))) - (slot-set! val2 - 'extended-by - (cons gf (delq! gf (slot-ref val2 'extended-by)))) - var) + (and (not (memq val2 (slot-ref gf 'extends))) + (begin + (slot-set! gf + 'extends + (cons val2 (delq! val2 (slot-ref gf 'extends)))) + (slot-set! val2 + 'extended-by + (cons gf (delq! gf (slot-ref val2 'extended-by)))) + var))) (module-define! duplicate-handlers 'merge-generics merge-generics)