forked from OSchip/llvm-project
Add libclang functions to determine the const/volatile/restrict
qualifiers on a CXType. Patch from Stefan Seefeld, test by me. llvm-svn: 124377
This commit is contained in:
parent
add754a02e
commit
56a6380cb7
|
@ -1781,6 +1781,24 @@ CINDEX_LINKAGE unsigned clang_equalTypes(CXType A, CXType B);
|
|||
*/
|
||||
CINDEX_LINKAGE CXType clang_getCanonicalType(CXType T);
|
||||
|
||||
/**
|
||||
* \determine Determine whether a CXType has the "const" qualifier set,
|
||||
* without looking through typedefs that may have added "const" at a different level.
|
||||
*/
|
||||
CINDEX_LINKAGE unsigned clang_isConstQualifiedType(CXType T);
|
||||
|
||||
/**
|
||||
* \determine Determine whether a CXType has the "volatile" qualifier set,
|
||||
* without looking through typedefs that may have added "volatile" at a different level.
|
||||
*/
|
||||
CINDEX_LINKAGE unsigned clang_isVolatileQualifiedType(CXType T);
|
||||
|
||||
/**
|
||||
* \determine Determine whether a CXType has the "restrict" qualifier set,
|
||||
* without looking through typedefs that may have added "restrict" at a different level.
|
||||
*/
|
||||
CINDEX_LINKAGE unsigned clang_isRestrictQualifiedType(CXType T);
|
||||
|
||||
/**
|
||||
* \brief For pointer types, returns the type of the pointee.
|
||||
*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
typedef int FooType;
|
||||
int *p;
|
||||
int *f(int *p, char *x, FooType z) {
|
||||
FooType w = z;
|
||||
const FooType w = z;
|
||||
return p + z;
|
||||
}
|
||||
typedef double OtherType;
|
||||
|
@ -16,7 +16,7 @@ typedef double OtherType;
|
|||
// CHECK: TypeRef=FooType:1:13 typekind=Typedef [canonical=Int] [isPOD=1]
|
||||
// CHECK: UnexposedStmt= typekind=Invalid [isPOD=0]
|
||||
// CHECK: UnexposedStmt= typekind=Invalid [isPOD=0]
|
||||
// CHECK: VarDecl=w:4:11 (Definition) typekind=Typedef [canonical=Int] [isPOD=1]
|
||||
// CHECK: VarDecl=w:4:17 (Definition) typekind=Typedef const [canonical=Int] [isPOD=1]
|
||||
// CHECK: TypeRef=FooType:1:13 typekind=Typedef [canonical=Int] [isPOD=1]
|
||||
// CHECK: DeclRefExpr=z:3:33 typekind=Typedef [canonical=Int] [isPOD=1]
|
||||
// CHECK: UnexposedStmt= typekind=Invalid [isPOD=0]
|
||||
|
|
|
@ -568,6 +568,12 @@ static enum CXChildVisitResult PrintTypeKind(CXCursor cursor, CXCursor p,
|
|||
CXString S = clang_getTypeKindSpelling(T.kind);
|
||||
PrintCursor(cursor);
|
||||
printf(" typekind=%s", clang_getCString(S));
|
||||
if (clang_isConstQualifiedType(T))
|
||||
printf(" const");
|
||||
if (clang_isVolatileQualifiedType(T))
|
||||
printf(" volatile");
|
||||
if (clang_isRestrictQualifiedType(T))
|
||||
printf(" restrict");
|
||||
clang_disposeString(S);
|
||||
/* Print the canonical type if it is different. */
|
||||
{
|
||||
|
|
|
@ -186,6 +186,21 @@ CXType clang_getCanonicalType(CXType CT) {
|
|||
return MakeCXType(AU->getASTContext().getCanonicalType(T), TU);
|
||||
}
|
||||
|
||||
unsigned clang_isConstQualifiedType(CXType CT) {
|
||||
QualType T = GetQualType(CT);
|
||||
return T.isLocalConstQualified();
|
||||
}
|
||||
|
||||
unsigned clang_isVolatileQualifiedType(CXType CT) {
|
||||
QualType T = GetQualType(CT);
|
||||
return T.isLocalVolatileQualified();
|
||||
}
|
||||
|
||||
unsigned clang_isRestrictQualifiedType(CXType CT) {
|
||||
QualType T = GetQualType(CT);
|
||||
return T.isLocalRestrictQualified();
|
||||
}
|
||||
|
||||
CXType clang_getPointeeType(CXType CT) {
|
||||
QualType T = GetQualType(CT);
|
||||
const Type *TP = T.getTypePtrOrNull();
|
||||
|
|
|
@ -109,16 +109,19 @@ _clang_getTypeDeclaration
|
|||
_clang_getTypeKindSpelling
|
||||
_clang_hashCursor
|
||||
_clang_isCursorDefinition
|
||||
_clang_isConstQualifiedType
|
||||
_clang_isDeclaration
|
||||
_clang_isExpression
|
||||
_clang_isInvalid
|
||||
_clang_isPODType
|
||||
_clang_isPreprocessing
|
||||
_clang_isReference
|
||||
_clang_isRestrictQualifiedType
|
||||
_clang_isStatement
|
||||
_clang_isTranslationUnit
|
||||
_clang_isUnexposed
|
||||
_clang_isVirtualBase
|
||||
_clang_isVolatileQualifiedType
|
||||
_clang_parseTranslationUnit
|
||||
_clang_reparseTranslationUnit
|
||||
_clang_saveTranslationUnit
|
||||
|
|
|
@ -108,6 +108,7 @@ clang_getTranslationUnitSpelling
|
|||
clang_getTypeDeclaration
|
||||
clang_getTypeKindSpelling
|
||||
clang_hashCursor
|
||||
clang_isConstQualifiedType
|
||||
clang_isCursorDefinition
|
||||
clang_isDeclaration
|
||||
clang_isExpression
|
||||
|
@ -115,10 +116,12 @@ clang_isInvalid
|
|||
clang_isPODType
|
||||
clang_isPreprocessing
|
||||
clang_isReference
|
||||
clang_isRestrictQualifiedType
|
||||
clang_isStatement
|
||||
clang_isTranslationUnit
|
||||
clang_isUnexposed
|
||||
clang_isVirtualBase
|
||||
clang_isVolatileQualifiedType
|
||||
clang_parseTranslationUnit
|
||||
clang_reparseTranslationUnit
|
||||
clang_saveTranslationUnit
|
||||
|
|
Loading…
Reference in New Issue