Thread: [pygccxml-development] Weird problem apparently caused by decl.readme()
Brought to you by:
mbaas,
roman_yakovenko
From: Benoit L. <ben...@mo...> - 2010-05-12 17:09:01
|
Hello, I just found a very odd problem when using py++. I don't have time right now to generate files that exhibit the error, but still thought I would report it. Maybe it sounds familiar to someone. C++ input: - Class A with some virtual functions - Class B inherits from A (and doesn't override the virtual functions) Steps: - The binding code first includes all declarations from A and B (class, functions, variables, etc.). While doing this, it also calls readme() on each declaration. - Later, it calls exclude() on the set of virtual functions, for both classes. Result: In the file generated by py++ for class B, the virtual functions are present. Expected result: The virtual functions have been specifically excluded and should not be present. Cause: When removing the call to readme(), the virtual functions are correctly excluded in the generated files. I verified that it's indeed caused by the call to readme() and not by the fact that some of the code parses the result of the call. Benoit Leveau |
From: Roman Y. <rom...@gm...> - 2010-05-12 18:15:15
|
On Wed, May 12, 2010 at 8:08 PM, Benoit Leveau <ben...@mo...> wrote: > Hello, Good evening > I just found a very odd problem when using py++. > I don't have time right now to generate files that exhibit the error, > but still thought I would report it. > Maybe it sounds familiar to someone. > > C++ input: > - Class A with some virtual functions > - Class B inherits from A (and doesn't override the virtual functions) > > Steps: > - The binding code first includes all declarations from A and B (class, > functions, variables, etc.). > While doing this, it also calls readme() on each declaration. > - Later, it calls exclude() on the set of virtual functions, for both > classes. > > Result: > In the file generated by py++ for class B, the virtual functions are > present. > > Expected result: > The virtual functions have been specifically excluded and should not be > present. > > Cause: > When removing the call to readme(), the virtual functions are correctly > excluded in the generated files. > I verified that it's indeed caused by the call to readme() and not by > the fact that some of the code parses the result of the call. Interesting. I will take a look, may be I will see something. Thanks for reporting. -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Benoit L. <ben...@mo...> - 2010-05-14 12:41:14
Attachments:
pypp_bug_readme.zip
|
Roman Yakovenko wrote: > On Wed, May 12, 2010 at 8:08 PM, Benoit Leveau > <ben...@mo...> wrote: >> Hello, > > Good evening > >> I just found a very odd problem when using py++. >> I don't have time right now to generate files that exhibit the error, >> but still thought I would report it. >> Maybe it sounds familiar to someone. >> >> C++ input: >> - Class A with some virtual functions >> - Class B inherits from A (and doesn't override the virtual functions) >> >> Steps: >> - The binding code first includes all declarations from A and B (class, >> functions, variables, etc.). >> While doing this, it also calls readme() on each declaration. >> - Later, it calls exclude() on the set of virtual functions, for both >> classes. >> >> Result: >> In the file generated by py++ for class B, the virtual functions are >> present. >> >> Expected result: >> The virtual functions have been specifically excluded and should not be >> present. >> >> Cause: >> When removing the call to readme(), the virtual functions are correctly >> excluded in the generated files. >> I verified that it's indeed caused by the call to readme() and not by >> the fact that some of the code parses the result of the call. > > Interesting. I will take a look, may be I will see something. > > Thanks for reporting. > > Hello, I managed to get a minimal script reproducing the problem. I have a python script calling the py++ binding, and two header files (Base.h and Derived.h). The Base class expose a virtual function called 'dummyFunction'. The python script exclude this function from all classes. Depending on the command line parameter, the script calls or not calls readme() on the classes declarations. You need to set the GCCXML_PATH environment variable for the script to run, or you can edit the python script. To reproduce the bug, cd to the extracted folder, then type: > python py_bug_reproduce.py 0 look in the generated/Derived.pypp.cpp file there is nothing exposed in the class THEN instead: > python py_bug_reproduce.py 1 look again in the generated/Derived.pypp.cpp file, the dummyFunction is exposed in this case It seems that it doesn't happen if both classes are in the same header file. I tested it with pyplusplus revision 1835 (https://pygccxml.svn.sourceforge.net/svnroot/pygccxml/pyplusplus_dev) and pygccxml revision 1835 (https://pygccxml.svn.sourceforge.net/svnroot/pygccxml/pygccxml_dev). Thanks, Benoit |
From: Roman Y. <rom...@gm...> - 2010-05-16 11:47:26
|
On Fri, May 14, 2010 at 3:25 PM, Benoit Leveau <ben...@mo...> wrote: > Hello, > > I managed to get a minimal script reproducing the problem. > I have a python script calling the py++ binding, and two header files > (Base.h and Derived.h). The Base class expose a virtual function called > 'dummyFunction'. The python script exclude this function from all classes. > Depending on the command line parameter, the script calls or not calls > readme() on the classes declarations. > > You need to set the GCCXML_PATH environment variable for the script to run, > or you can edit the python script. > > To reproduce the bug, cd to the extracted folder, then type: > >> python py_bug_reproduce.py 0 > look in the generated/Derived.pypp.cpp file > there is nothing exposed in the class > > THEN instead: > >> python py_bug_reproduce.py 1 > look again in the generated/Derived.pypp.cpp file, > the dummyFunction is exposed in this case > > It seems that it doesn't happen if both classes are in the same header file. Thank you very much. I was able to reproduce the problem, I am going to deeg :-) -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |