[CastXML] Parsing class with nested struct definition.
Michka Popoff
michkapopoff at gmail.com
Sat Mar 26 06:59:19 EDT 2016
Just a small comment on my code, the "if isinstance(var, declarations.variable_t)” checks
are not needed. I was on an experimental branch, were some stuff was broken.
The variables() method only returns variables; this check is superfluous.
Michka
> On 26 Mar 2016, at 11:27, Michka Popoff <michkapopoff at gmail.com> wrote:
>
> Hi
>
> as you discovered, the variables() method will return all the variables found
> under a specific node in the declarations tree.
>
> I wrote a small example showing how to access the parent declaration of a variable.
> The loops at the end show how you could filter out the variables from the different
> classes/structs. The last one shows how to use the recursive=False option to get
> variables from the first level only.
>
> I hope this helps.
>
> Michka
>
>
>
>
> from pygccxml import utils
> from pygccxml import parser
> from pygccxml import declarations
>
> generator_path, generator_name = utils.find_xml_generator()
> xml_generator_config = parser.xml_generator_configuration_t(
> xml_generator_path=generator_path,
> xml_generator=generator_name)
>
> code = """class MyClass {
> struct SomeStruct {
> int structmem;
> };
>
> SomeStruct classmem;
> };
> """
>
> decls = parser.parse_string(code, xml_generator_config)
> ns = declarations.get_global_namespace(decls)
> myclass = ns.classes()[0]
> somestruct = ns.classes()[0].classes()[0]
>
> # MyClass [class]
> print(myclass)
>
> # MyClass::SomeStruct [struct]
> print(somestruct)
>
> # MyClass::SomeStruct::structmem [variable]
> print(myclass.classes()[0].variables()[0])
>
> # MyClass::SomeStruct::structmem [variable]
> # MyClass::classmem [variable]
> for var in myclass.variables():
> if isinstance(var, declarations.variable_t):
> print(var)
>
> # MyClass::SomeStruct [struct]
> print(myclass.classes()[0].variables()[0].parent)
>
> # Found: MyClass::SomeStruct::structmem [variable]
> for var in myclass.variables():
> if isinstance(var, declarations.variable_t):
> if var.parent == somestruct:
> print("Found: " + str(var))
>
> # Found: MyClass::classmem [variable]
> for var in myclass.variables():
> if isinstance(var, declarations.variable_t):
> if var.parent == myclass:
> print("Found: " + str(var))
>
> # Found: MyClass::classmem [variable]
> for var in myclass.variables(recursive=False):
> if isinstance(var, declarations.variable_t):
> print("Found: " + str(var))
>
>> On 26 Mar 2016, at 09:13, seshu yamajala <syamajala at gmail.com> wrote:
>>
>> I'm trying to use pygccxml to auto-generate some C++. The problem I'm having is if I have a class like:
>>
>> class MyClass {
>> struct SomeStruct {
>> int structmem;
>> };
>>
>> SomeStruct classmem;
>> };
>>
>> When I look at the variables of the MyClass declaration, its listing both structmem and classmem as members. Is there a way to tell that structmem is a member of SomeStruct and that SomeStruct was defined inside of MyClass?
>>
>> _______________________________________________
>> CastXML mailing list
>> CastXML at public.kitware.com
>> http://public.kitware.com/mailman/listinfo/castxml
>
More information about the CastXML
mailing list