Source code for glud.predicates

import clang.cindex
from clang.cindex import AccessSpecifier, TypeKind


__primitive_types = set([
    TypeKind.VOID,
    TypeKind.BOOL,
    TypeKind.CHAR_U,
    TypeKind.UCHAR,
    TypeKind.CHAR16,
    TypeKind.CHAR32,
    TypeKind.USHORT,
    TypeKind.UINT,
    TypeKind.ULONG,
    TypeKind.ULONGLONG,
    TypeKind.UINT128,
    TypeKind.CHAR_S,
    TypeKind.SCHAR,
    TypeKind.WCHAR,
    TypeKind.SHORT,
    TypeKind.INT,
    TypeKind.LONG,
    TypeKind.LONGLONG,
    TypeKind.INT128,
    TypeKind.FLOAT,
    TypeKind.DOUBLE,
    TypeKind.LONGDOUBLE,
    TypeKind.NULLPTR,
])


[docs]def is_builtin(n): """ Test if a type is a simple types (integer, boolean, char, float) """ return n.kind in __primitive_types
[docs]def is_definition(cursor): """Test if a cursor refers to a definition This occurs when the cursor has a definition, and shares the location of that definiton """ defn = cursor.get_definition() return (defn is not None) and (cursor.location == defn.location)
[docs]def has_access(access): """ Test if a cursor has a access specifier """ def _has_access(cursor): return cursor.access_specifier == access return _has_access
[docs]def is_kind(kind): """ Test if a cursor or type is of a particular kind """ def _is_kind(cursor): return kind == cursor.kind return _is_kind
[docs]def has_storage_class(kind): """Check if the cursor has a particular (eg/ static) storage class """ def _has_storage_class(cursor): return cursor.storage_class == kind return _has_storage_class
[docs]def is_decl(c): """Check if a cursor is a declaration """ return c.kind.is_declaration()
[docs]def is_stmt(c): """Check if a cursor is a statement """ return c.kind.is_declaration()