On Mon, Nov 29, 2010 at 8:36 AM, Davidson, Josh <josh.david...@lmco.com>wrote:
> I'm wondering if this behavior is correct when using pygccxml. Consider > the following two sets of simple class definitions: > > -------------- SET 1 ---------------------- > class inner { > protected: > unsigned a; > unsigned b; > unsigned c; > }; > > class Cool { > public: > Cool(){} > > protected: > int x; > int y; > int z; > > inner i; > }; > > -------------- SET 2 ---------------------- > class Cool { > public: > Cool(); > > protected: > class inner { > protected: > unsigned a; > unsigned b; > unsigned c; > }; > > int x; > int y; > int z; > > inner i; > }; > > -------------- END ---------------------- > > So you'll notice that the only difference between 1 & 2 is that 2, defines > "inner" as an inner class. Now, if I parse a header file containing those > classes, obtain a reference to the pygccxml for class Cool and print it's > variables like so: > > for var in classType.variables(): > print "var", var.name, var.type > > This is what I get: > > SET 1 > var x int > var y int > var z int > var i inner > > SET 2 > var x int > var y int > var z int > var i Cool::inner > var a unsigned int > var b unsigned int > var c unsigned int > > > As you can see, when I is an inner class, the inner class's members show up > in the parent class in addition to the inner class itself. Is this behavior > correct? In SET 2, I would not expect to see a, b, and c show up as members > of class Cool. If this behavior is correct, is there a way to filter out > those members that belong to the inner class? > > This is the current package behavior. Another interesting use case, you can bring, is based classes. You will not see the variables from the base classes. Take a look on this document: http://pygccxml.svn.sourceforge.net/viewvc/pygccxml/pygccxml_dev/docs/query_interface.rest?revision=1727&view=markup and then on pygccxml/declarations/scopedef.py - variables method. In your case, it is very simple to get the desired variables: class_vars = classType.variables( lambda var: var.parent is classType ) HTH
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig