[cfe-users] libclang python bindings, and functionproto.argument_types() vs functionproto.get_declaration().get_arguments()
Axel Hecht
axel at mozilla.com
Fri Jul 12 12:59:04 PDT 2013
Hi,
I'm trying to parse existing C headers with the python bindings for
libclang.
I'm failing to get the argument type of a anonymous function.
My mock header looks like this:
typedef struct {
int somefield;
} struct_to_receive;
typedef struct {
int (*getter)(const struct_to_receive **rv);
} factory_t;
The python code I use to inspect his is
from clang.cindex import Index, CursorKind, TypeKind
index = Index.create()
tu = index.parse(None, ['structs_parsing.h'])
typedef = list(tu.cursor.get_children())[-1]
print typedef.kind, typedef.spelling # typedef_decl, factory_t
structdecl = list(typedef.get_children())[0]
print structdecl.type.kind # Record
fielddecl = list(structdecl.get_children())[0]
print fielddecl.kind # field_decl
print fielddecl.type.kind # pointer to the abstract function
# fielddecl has one child
print list(c.kind for c in fielddecl.get_children()) # parm_decl ?
unexposed = fielddecl.type.get_pointee()
print unexposed.kind
print unexposed.get_canonical().kind # function_proto
functionproto = unexposed.get_canonical()
print list(functionproto.argument_types())
print list(functionproto.get_declaration().get_arguments())
In other parts of the code, I use get_arguments() to get to
arg.spelling(), but in this case the code above prints:
[<clang.cindex.Type object at 0x109ae07a0>]
[]
I.e., I have argument_types(), but not .get_declaration().get_arguments()
Am I doing something wrong or am I trying to do the wrong thing, or is
this a bug?
Axel
More information about the cfe-users
mailing list