Thread: [cedet-eieio] eieio.el: initialize-instance: strange behavior with simple class hierarchy
Brought to you by:
zappo
From: Jan M. <jan...@un...> - 2009-09-26 02:01:53
Attachments:
bla.el
|
Hi, I think I may have found a bug in EIEIO. If it is not a bug, it is at least surprising behavior. I discovered the problem when working with a class hierarchy that looks like this a +-d b +-c +-d a and b have initialize-instance :after methods, d has a primary initialize-instance method. When creating a d object, I expect the constructors to run as follows: 1. (initialize-instance d) 2. (initialize-instance b) 3. (initialize-instance a) or 1. (initialize-instance d) 2. (initialize-instance a) 3. (initialize-instance b) but what really happens is 1. (initialize-instance d) 2. (initialize-instance b) 3. (initialize-instance a) 4. (initialize-instance b) 5. (initialize-instance a) I think, this is wrong, but maybe I did not understand :after or call-next-method correctly. Redefining the involved classes and methods changes something and sometimes makes the duplicate runs go away. The attached code should produce the problem with CVS CEDET. Any help would be greatly appreciated. Kind regards, Jan |
From: Eric M. L. <er...@si...> - 2009-09-28 02:38:18
|
Hi, Thanks for the detailed bug report. Your multiple inheritance example stymied the very simple duplicate removal system that was already in there. I added your example to the test suite, and fixed the bug. It should be in CVS now. Thanks Eric On Sat, 2009-09-26 at 03:46 +0200, Jan Moringen wrote: > Hi, > > I think I may have found a bug in EIEIO. If it is not a bug, it is at > least surprising behavior. > > I discovered the problem when working with a class hierarchy that looks > like this > > a > +-d > > b > +-c > +-d > > a and b have initialize-instance :after methods, d has a primary > initialize-instance method. > > When creating a d object, I expect the constructors to run as follows: > > 1. (initialize-instance d) > 2. (initialize-instance b) > 3. (initialize-instance a) > > or > > 1. (initialize-instance d) > 2. (initialize-instance a) > 3. (initialize-instance b) > > but what really happens is > > 1. (initialize-instance d) > 2. (initialize-instance b) > 3. (initialize-instance a) > 4. (initialize-instance b) > 5. (initialize-instance a) > > I think, this is wrong, but maybe I did not understand :after or > call-next-method correctly. > > Redefining the involved classes and methods changes something and > sometimes makes the duplicate runs go away. > > The attached code should produce the problem with CVS CEDET. > > Any help would be greatly appreciated. > > Kind regards, > Jan > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9-12, 2009. Register now! > http://p.sf.net/sfu/devconf > _______________________________________________ cedet-eieio mailing list ced...@li... https://lists.sourceforge.net/lists/listinfo/cedet-eieio |