Hi David, Sorry for the long delay. I think this is not a bug. The reason is that you defined !width as an #:accessor. That means that each concrete class which has a `width' slot will have its own accessor method installed on it. You overrode the method for <a> instances but not for any other concrete class; e.g. <b> will have its own method.
If you want to run methods in the setter, you need to not define !width as an accessor and instead rely on your define-method to create !width as a normal generic. I.e. remove #:accessor !width from (define-class a). Andy On Wed 04 Feb 2015 16:43, David Pirotte <da...@altosw.be> writes: > Hello, > > GNU Guile 2.0.11.114-649ec > goops - setter inheritance bug > severity - serious > > setters are beeing redefined, not inhereted: this is a serious bug. > > Cheers, > David > > > (define-module (a) > #:use-module (oop goops) > #:export (<a> > !width)) > > > (define-class <a> () > (width #:accessor !width #:init-keyword #:width #:init-value 0)) > > (define-method ((setter !width) (self <a>) width) > ;; here comes complex code, computing earth orbit, captain's age... > (pk "this is <a> !width setter method, hello!") > (slot-set! self 'width width)) > > (define-module (b) > #:use-module (oop goops) > #:use-module (a) > #:export (<b>) > > #:re-export (!width)) > > > (define-class <b> (<a>)) > > GNU Guile 2.0.11.114-649ec > Copyright (C) 1995-2014 Free Software Foundation, Inc. > > Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'. > This program is free software, and you are welcome to redistribute it > under certain conditions; type `,show c' for details. > > Enter `,help' for help. > scheme@(guile-user)> > scheme@(guile-user)> ,use (oop goops) > scheme@(guile-user)> ,use (b) > ;;; note: source file ./b.scm > ;;; newer than compiled > /home/david/.cache/guile/ccache/2.0-LE-8-2.0/usr/alto/projects/guile-tests/goops/setter-inheritance-bug/b.scm.go > ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0 > ;;; or pass the --no-auto-compile argument to disable. > ;;; compiling ./b.scm > ;;; note: source file ./a.scm > ;;; newer than compiled > /home/david/.cache/guile/ccache/2.0-LE-8-2.0/usr/alto/projects/guile-tests/goops/setter-inheritance-bug/a.scm.go > ;;; compiling ./a.scm > ;;; compiled > /home/david/.cache/guile/ccache/2.0-LE-8-2.0/usr/alto/projects/guile-tests/goops/setter-inheritance-bug/a.scm.go > ;;; compiled > /home/david/.cache/guile/ccache/2.0-LE-8-2.0/usr/alto/projects/guile-tests/goops/setter-inheritance-bug/b.scm.go > scheme@(guile-user)> (set! (!width (make <b>)) 20) > $2 = 20 > scheme@(guile-user)> >