Python clang.cindex.CursorKind.STRUCT_DECL Examples

The following are 5 code examples of clang.cindex.CursorKind.STRUCT_DECL(). You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may also want to check out all available functions/classes of the module clang.cindex.CursorKind , or try the search function .
Example #1
Source File: libclang_parser.py    From AutoWIG with Apache License 2.0 6 votes vote down vote up
def read_qualified_type(asg, qtype):
    specifiers = ''
    while True:
        if qtype.is_const_qualified() and not specifiers.startswith(' const'):
            specifiers = ' const' + specifiers
        if qtype.is_volatile_qualified() and not specifiers.startswith(' volatile'):
            specifiers = ' volatile' + specifiers
        if qtype.kind is TypeKind.POINTER:
            specifiers = ' *' + specifiers
            qtype = qtype.get_pointee()
        elif qtype.kind is TypeKind.LVALUEREFERENCE:
            specifiers = ' &' + specifiers
            qtype = qtype.get_pointee()
        elif qtype.kind is TypeKind.RVALUEREFERENCE:
            specifiers = ' &&' + specifiers
            qtype = qtype.get_pointee()
        elif qtype.kind in [TypeKind.RECORD, TypeKind.TYPEDEF, TypeKind.ENUM, TypeKind.UNEXPOSED]:
            cursor = qtype.get_declaration()
            if cursor.kind is CursorKind.TYPEDEF_DECL:
                qtype = cursor.underlying_typedef_type
            else:
                spelling = '::' + cursor.type.spelling
                if cursor.kind is CursorKind.ENUM_DECL:
                    spelling = 'enum ' + spelling
                elif cursor.kind is CursorKind.STRUCT_DECL:
                    spelling = 'struct ' + spelling
                elif cursor.kind is CursorKind.UNION_DECL:
                    spelling = 'union ' + spelling
                elif cursor.kind is CursorKind.CLASS_DECL:
                    spelling = 'class ' + spelling
                try:
                    if spelling == '::':
                        raise Exception
                    return asg[spelling]._node, specifiers
                except:
                    warnings.warn('record not found')
        else:
            target = read_builtin_type(asg, qtype)
            return target, specifiers 
Example #2
Source File: libclang_parser.py    From AutoWIG with Apache License 2.0 5 votes vote down vote up
def read_cursor(asg, cursor, scope):
    if cursor.kind is CursorKind.UNEXPOSED_DECL:
        if cursor.spelling == '':
            children = []
            for child in cursor.get_children():
                children.extend(read_cursor(asg, child, scope))
            return children
        else:
            warnings.warn('Named unexposed cursor not read')
            return []
    elif cursor.kind is CursorKind.TYPEDEF_DECL:
        return read_typedef(asg, cursor, scope)
    elif cursor.kind in [CursorKind.VAR_DECL, CursorKind.PARM_DECL]:
        return read_variable(asg, cursor, scope)
    elif cursor.kind in [CursorKind.FUNCTION_DECL, CursorKind.CXX_METHOD,
            CursorKind.DESTRUCTOR, CursorKind.CONSTRUCTOR]:
        return read_function(asg, cursor, scope)
    elif cursor.kind is CursorKind.FIELD_DECL:
        return read_field(asg, cursor, scope)
    elif cursor.kind in [CursorKind.ENUM_DECL, CursorKind.STRUCT_DECL,
            CursorKind.UNION_DECL, CursorKind.CLASS_DECL]:
        return read_tag(asg, cursor, scope)
    elif cursor.kind is CursorKind.NAMESPACE:
        return read_namespace(asg, cursor, scope)
    elif cursor.kind in [CursorKind.NAMESPACE_ALIAS, CursorKind.FUNCTION_TEMPLATE,
            CursorKind.USING_DECLARATION, CursorKind.USING_DIRECTIVE,
            CursorKind.UNEXPOSED_ATTR, CursorKind.CLASS_TEMPLATE,
            CursorKind.CLASS_TEMPLATE_PARTIAL_SPECIALIZATION,
            CursorKind.CXX_ACCESS_SPEC_DECL, CursorKind.CONVERSION_FUNCTION]:
        return []
    else:
        warnings.warn('Undefined behaviour for \'' + str(cursor.kind) + '\' cursor')
        return [] 
Example #3
Source File: clang_exporter.py    From pigaios with GNU General Public License v3.0 5 votes vote down vote up
def element2kind(self, element):
    if element.kind == CursorKind.STRUCT_DECL:
      return "struct"
    elif element.kind == CursorKind.ENUM_DECL:
      return "enum"
    elif element.kind == CursorKind.UNION_DECL:
      return "union"
    elif element.kind == CursorKind.TYPEDEF_DECL:
      return "typedef"
    elif element.kind == CursorKind.ENUM_CONSTANT_DECL:
      return ""
    else:
      return "" # Unknown thing 
Example #4
Source File: parser.py    From pyopenvr with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
def parse_namespace(self, cursor):
        assert str(cursor.spelling) == 'vr'
        for child in cursor.get_children():
            if child.kind == CursorKind.VAR_DECL:
                self.parse_var_decl(child)
            elif child.kind == CursorKind.TYPEDEF_DECL:
                self.parse_typedef(child)
            elif child.kind == CursorKind.STRUCT_DECL:
                self.items.append(self.parse_struct(child))
            elif child.kind == CursorKind.UNION_DECL:
                union = self.parse_struct(child)
                union.base = 'Union'
                self.items.append(union)
            elif child.kind == CursorKind.ENUM_DECL:
                self.parse_enum(child)
            elif child.kind == CursorKind.FUNCTION_DECL:
                self.parse_function(child)
            elif child.kind == CursorKind.UNEXPOSED_DECL:
                self.parse_unexposed_decl(child)
            elif child.kind == CursorKind.CLASS_DECL:
                if child.spelling.startswith('IVR'):
                    self.items.append(self.parse_ivrclass(child))
                elif child.spelling.startswith('COpenVRContext'):
                    self.items.append(self.parse_copenvrcontext(child))
                else:
                    print(f'*** WARNING *** skipping class {child.spelling}(...)')
            elif child.kind == CursorKind.CXX_METHOD:
                cn = child.semantic_parent.spelling
                mn = child.spelling
                if cn == 'COpenVRContext' and mn == 'Clear':
                    pass  # OK - we manually wrap this one
                else:
                    print(f'*** WARNING *** skipping class method implementation {child.spelling}(...)')
            else:
                self.report_unparsed(child) 
Example #5
Source File: parser.py    From pyopenvr with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
def parse_translation_unit(self, cursor):
        tu_file_name = str(cursor.spelling)
        for child in cursor.get_children():
            # Skip external declarations
            child_file_name = str(child.location.file)
            if not child_file_name == tu_file_name:
                continue
            if child.kind == CursorKind.STRUCT_DECL:
                # Parse forward declarations
                self.parse_struct_decl(child)
            elif child.kind == CursorKind.NAMESPACE:
                self.parse_namespace(child)
            else:
                self.report_unparsed(child)