digitalmars.D.bugs - interface of super class not implemented
- Ant (36/36) Sep 15 2004 I still have this problem from 2 months ago.
- J C Calvarese (7/57) Sep 15 2004 If you post a complete set of code that produces the error, I'll take a
- Ant (3/12) Sep 15 2004 replied by email.
- Derek Parnell (28/76) Sep 15 2004 I can get the same error if I have ...
- Ant (12/24) Sep 16 2004 but the definition is like:
- Ant (26/31) Sep 16 2004 ...
- Ant (116/116) Sep 17 2004 Here are 2 quick gdb sessions, one with the buggy code
I still have this problem from 2 months ago. I realize I have to reproduce this on a small example, but I can't do it (I'll keep trying). This might be an error on my code but I can't see that either. class GC (for graphic context) extends class ObjectG that implements interface OGTK. class ObjectG contains the methods gtk (public). GC and ObjectG are in different packages. workaround: past the missing method to all the offending classes (start with the higher level classes as subclasses will inherit the method - as they all should on the first place) this is a real but even if only a bad compiler message (I doubt that) it should be on your bug list as people will crash into it when more complex project are being created. Ant I have 1400 lines like: ddi/GC.d(61): class GC 1interface function OGTK.gtk is not implemented ddi/GC.d(61): class GC 1interface function OGTK.gtk is not implemented ddi/GC.d(61): class GC 1interface function OGTK.gtk is not implemented ddi/Screen.d(66): class Screen 1interface function OGTK.gtk is not implemented ddi/Screen.d(66): class Screen 1interface function OGTK.gtk is not implemented ddi/Screen.d(66): class Screen 1interface function OGTK.gtk is not implemented ddi/Visual.d(59): class Visual 1interface function OGTK.gtk is not implemented ddi/Visual.d(59): class Visual 1interface function OGTK.gtk is not implemented ddi/Visual.d(59): class Visual 1interface function OGTK.gtk is not implemented dui/AccelGroup.d(59): class AccelGroup 1interface function OGTK.gtk is not implemented none of those classes declares to implement the interface or is missing the method (as far as I can tell, you see 1400 lines...) just adding or removing "private import ddi.Pixbuf;" to class ddi.Value body makes the compiler produce or not those 1400 errors. (it's not a typo it one thousand and four hundred lines)
Sep 15 2004
Ant wrote:I still have this problem from 2 months ago. I realize I have to reproduce this on a small example, but I can't do it (I'll keep trying).If you post a complete set of code that produces the error, I'll take a stab at cutting it down this weekend. If it's big it might be best to either upload it to a website or e-mail it to me.This might be an error on my code but I can't see that either. class GC (for graphic context) extends class ObjectG that implements interface OGTK. class ObjectG contains the methods gtk (public). GC and ObjectG are in different packages. workaround: past the missing method to all the offending classes (start with the higher level classes as subclasses will inherit the method - as they all should on the first place) this is a real but even if only a bad compiler message (I doubt that) it should be on your bug list as people will crash into it when more complex project are being created. Ant I have 1400 lines like: ddi/GC.d(61): class GC 1interface function OGTK.gtk is not implemented ddi/GC.d(61): class GC 1interface function OGTK.gtk is not implemented ddi/GC.d(61): class GC 1interface function OGTK.gtk is not implemented ddi/Screen.d(66): class Screen 1interface function OGTK.gtk is not implemented ddi/Screen.d(66): class Screen 1interface function OGTK.gtk is not implemented ddi/Screen.d(66): class Screen 1interface function OGTK.gtk is not implemented ddi/Visual.d(59): class Visual 1interface function OGTK.gtk is not implemented ddi/Visual.d(59): class Visual 1interface function OGTK.gtk is not implemented ddi/Visual.d(59): class Visual 1interface function OGTK.gtk is not implemented dui/AccelGroup.d(59): class AccelGroup 1interface function OGTK.gtk is not implemented none of those classes declares to implement the interface or is missing the method (as far as I can tell, you see 1400 lines...) just adding or removing "private import ddi.Pixbuf;" to class ddi.Value body makes the compiler produce or not those 1400 errors. (it's not a typo it one thousand and four hundred lines)-- Justin (a/k/a jcc7) http://jcc_7.tripod.com/d/
Sep 15 2004
On Wed, 15 Sep 2004 23:41:30 -0500, J C Calvarese wrote:Ant wrote:replied by email. AntI still have this problem from 2 months ago. I realize I have to reproduce this on a small example, but I can't do it (I'll keep trying).If you post a complete set of code that produces the error, I'll take a stab at cutting it down this weekend. If it's big it might be best to either upload it to a website or e-mail it to me.
Sep 15 2004
On Thu, 16 Sep 2004 00:17:05 -0400, Ant wrote:I still have this problem from 2 months ago. I realize I have to reproduce this on a small example, but I can't do it (I'll keep trying). This might be an error on my code but I can't see that either. class GC (for graphic context) extends class ObjectG that implements interface OGTK. class ObjectG contains the methods gtk (public). GC and ObjectG are in different packages. workaround: past the missing method to all the offending classes (start with the higher level classes as subclasses will inherit the method - as they all should on the first place) this is a real but even if only a bad compiler message (I doubt that) it should be on your bug list as people will crash into it when more complex project are being created. Ant I have 1400 lines like: ddi/GC.d(61): class GC 1interface function OGTK.gtk is not implemented ddi/GC.d(61): class GC 1interface function OGTK.gtk is not implemented ddi/GC.d(61): class GC 1interface function OGTK.gtk is not implemented ddi/Screen.d(66): class Screen 1interface function OGTK.gtk is not implemented ddi/Screen.d(66): class Screen 1interface function OGTK.gtk is not implemented ddi/Screen.d(66): class Screen 1interface function OGTK.gtk is not implemented ddi/Visual.d(59): class Visual 1interface function OGTK.gtk is not implemented ddi/Visual.d(59): class Visual 1interface function OGTK.gtk is not implemented ddi/Visual.d(59): class Visual 1interface function OGTK.gtk is not implemented dui/AccelGroup.d(59): class AccelGroup 1interface function OGTK.gtk is not implemented none of those classes declares to implement the interface or is missing the method (as far as I can tell, you see 1400 lines...) just adding or removing "private import ddi.Pixbuf;" to class ddi.Value body makes the compiler produce or not those 1400 errors. (it's not a typo it one thousand and four hundred lines)I can get the same error if I have ... and do not define gtk() inside the definition of GC. Are you saying that in your definition of GC it does *not* mention OGTK? If I remove the reference to OGTK, or define gtk(), then the error message goes away. From the D docs ... " A reimplemented interface must implement all the interface functions, it does not inherit them from a super class: interface D { int foo(); } class A : D { int foo() { return 1; } } class B : A, D { }// error, no foo() for interface D " -- Derek Melbourne, Australia 16/Sep/04 3:39:51 PM
Sep 15 2004
In article <cib9c9$25kc$1 digitaldaemon.com>, Derek Parnell says...On Thu, 16 Sep 2004 00:17:05 -0400, Ant wrote:but the definition is like: (package dui) interface OGKT { void* gtk();} (package dui) class ObjectG : OGTK { void* gtk(){return gtkO;} } (package ddi) class GC : ObjetG { ... } and the errors show up if I do "import ddi.Pixbuf;" on class ddi.Value either at module or class level. this is DUI and basically ObjectG is the base class for every thing.I still have this problem from 2 months ago.I can get the same error if I have ...and do not define gtk() inside the definition of GC. Are you saying that in your definition of GC it does *not* mention OGTK?yep, no mention to OGTK except on ObjectG.If I remove the reference to OGTK, or define gtk(), then the error message goes away.I can't reproduce this in a small example either.From the D docs ... " A reimplemented interface must implement all the interface functions, it does not inherit them from a super class:we all know that, I mean, all but the compiler ;) Ant
Sep 16 2004
On Thu, 16 Sep 2004 00:17:05 -0400, Ant wrote:I still have this problem from 2 months ago....workaround: past the missing method to all the offending classes (start with the higher level classes as subclasses will inherit the method - as they all should on the first place)the workaround doesn't work: after that workaround all DUI applications will segfault. gdb will trace it to a method that is never called (on the source, obviously the executable calls it). Again, this might be some bug on my code that manifests it self on special circuntances - very, very special ... so, undo the work around and don't import Pixbuf on Value. things work again! (how can that be my code?) Lets summarize it: (this is DUI, linux, dmd 0.101) 1 - adding import ddi.Pixbuf to ddi.Value - fails to compile on other classes with interface not implmented, but interface is implmented on the parent class and not mentioned on the subclasses 2 - add the 'missing' methods to the classes - compiles but produces bogus code and segfaults 3 - remove import ddi.Pixbuf but leave the unnecessary methods that override the interface implementation on the super - compiles and runs 4 - back to the original code (no import and no override on interface implementations) - compiles and runs Ant
Sep 16 2004
Here are 2 quick gdb sessions, one with the buggy code the other with the same (source) code but correct executable. My idea was to eliminate the possibility of this being a but introduced by my code, not the compiler or linker. I think this proves it. the conclusion first: the (modified) source for the widget constructor: this(GtkObject* gtkObject) { super(gtkObject); this.gtkWidget = cast(GtkWidget*)gtkObject; show(); } on he good version call *0x164(%edx) calls show() _D3dui6Widget6Widget4showFZv as it should: on the bad version call *0xd0(%edx) calls addOnMotionNotify that is not in the widget constructor source code. This, seems to me, demonstrates that the problem was generated by the compiler or the linker, not the programer. and that eliminates the first doubt we could have about this bug. (we had this doubt because the bug wasn't yet reproduced on a small simple example) now to create a simple example that reproduces the problem. :( Ant $ gdb ./HelloWorld GNU gdb 6.0 Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu"... (gdb) run Starting program: /home/ruimt/devel/D/DUI/HelloWorld [New Thread 16384 (LWP 778)] Widget.this(GtkWidget) Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 16384 (LWP 778)] 0x000003e8 in ?? () (gdb) bt dget6WidgetiiPiPiZb () dget6WidgetiiPiPiZb () nt11EventMotionZbZv () nt11EventMotionZbZv () C3dui6Widget6Widget () C3dui6Widget6Widget () Container9Container () C3dui6Window6Window () C3dui6Window6Window () ---Type <return> to continue, or q <return> to quit--- nWindow10MainWindow () nWindow10MainWindow () loWorld10HelloWorld () (gdb) disas Dump of assembler code for function _D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3dui6Widget6Widget: 0x0806e6e0 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3d i6Widget6Widget+0>: push %ebp 0x0806e6e1 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3d i6Widget6Widget+1>: mov %esp,%ebp 0x0806e6e3 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3d i6Widget6Widget+3>: sub $0x4,%esp 0x0806e6e6 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3d i6Widget6Widget+6>: push %ebx 0x0806e6e7 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3d i6Widget6Widget+7>: mov %eax,0xfffffffc(%ebp) 0x0806e6ea <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+10>: pushl 0x8(%ebp) 0x0806e6ed <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+13>: call 0x806d288 <_D3dui9DUIObject9DUIObject5_ctorFPS3def5Types9GtkObjectZC3dui9DUIObject9DUIObject> 0x0806e6f2 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+18>: mov 0x8(%ebp),%eax 0x0806e6f5 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+21>: mov 0xfffffffc(%ebp),%ecx 0x0806e6f8 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+24>: mov %eax,0x78(%ecx) ---Type <return> to continue, or q <return> to quit--- 0x0806e6fb <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+27>: mov %ecx,%eax 0x0806e6fd <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+29>: mov (%eax),%edx 0x0806e6ff <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+31>: call *0xd0(%edx) 0x0806e705 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+37>: mov 0xfffffffc(%ebp),%ebx 0x0806e708 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+40>: mov 0xfffffffc(%ebp),%eax 0x0806e70b <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+43>: call 0x8079254 <_D9invariant12_d_invariantFC6ObjectZv> 0x0806e710 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+48>: mov %ebx,%eax 0x0806e712 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+50>: pop %ebx 0x0806e713 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+51>: leave 0x0806e714 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+52>: ret $0x4 0x0806e717 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+55>: nop End of assembler dump. (gdb) disas Dump of assembler code for function _D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3dui6Widget6Widget: 0x0806e6ec <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3d i6Widget6Widget+0>: push %ebp 0x0806e6ed <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3d i6Widget6Widget+1>: mov %esp,%ebp 0x0806e6ef <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3d i6Widget6Widget+3>: sub $0x4,%esp 0x0806e6f2 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3d i6Widget6Widget+6>: push %ebx 0x0806e6f3 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3d i6Widget6Widget+7>: mov %eax,0xfffffffc(%ebp) 0x0806e6f6 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+10>: pushl 0x8(%ebp) 0x0806e6f9 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+13>: call 0x806d290 <_D3dui9DUIObject9DUIObject5_ctorFPS3def5Types9GtkObjectZC3dui9DUIObject9DUIObject> 0x0806e6fe <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+18>: mov 0x8(%ebp),%eax 0x0806e701 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+21>: mov 0xfffffffc(%ebp),%ecx 0x0806e704 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+24>: mov %eax,0x84(%ecx) ---Type <return> to continue, or q <return> to quit--- 0x0806e70a <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+30>: mov %ecx,%eax 0x0806e70c <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+32>: mov (%eax),%edx 0x0806e70e <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+34>: call *0x164(%edx) 0x0806e714 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+40>: mov 0xfffffffc(%ebp),%ebx 0x0806e717 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+43>: mov 0xfffffffc(%ebp),%eax 0x0806e71a <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+46>: call 0x80792d8 <_D9invariant12_d_invariantFC6ObjectZv> 0x0806e71f <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+51>: mov %ebx,%eax 0x0806e721 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+53>: pop %ebx 0x0806e722 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+54>: leave 0x0806e723 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+55>: ret $0x4 0x0806e726 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+58>: nop 0x0806e727 <_D3dui6Widget6Widget5_ctorFPS3def5Types9GtkObjectZC3du 6Widget6Widget+59>: nop End of assembler dump.
Sep 17 2004