parent
dc5e081b93
commit
1c27b15291
|
@ -34,15 +34,15 @@ void test4() {
|
|||
}
|
||||
|
||||
class C {
|
||||
~C();
|
||||
};
|
||||
|
||||
auto test5(X) -> X;
|
||||
|
||||
// RUN: c-index-test -test-annotate-tokens=%s:1:1:41:1 %s -std=c++14 -fno-delayed-template-parsing | FileCheck %s
|
||||
// CHECK: Keyword: "struct" [1:1 - 1:7] StructDecl=bonk:1:8 (Definition)
|
||||
// CHECK: Identifier: "bonk" [1:8 - 1:12] StructDecl=bonk:1:8 (Definition)
|
||||
// CHECK: Punctuation: "{" [1:13 - 1:14] StructDecl=bonk:1:8 (Definition)
|
||||
~C();
|
||||
};
|
||||
|
||||
auto test5(X) -> X;
|
||||
|
||||
// RUN: c-index-test -test-annotate-tokens=%s:1:1:41:1 %s -std=c++14 -fno-delayed-template-parsing | FileCheck %s
|
||||
// CHECK: Keyword: "struct" [1:1 - 1:7] StructDecl=bonk:1:8 (Definition)
|
||||
// CHECK: Identifier: "bonk" [1:8 - 1:12] StructDecl=bonk:1:8 (Definition)
|
||||
// CHECK: Punctuation: "{" [1:13 - 1:14] StructDecl=bonk:1:8 (Definition)
|
||||
// CHECK: Punctuation: "}" [1:15 - 1:16] StructDecl=bonk:1:8 (Definition)
|
||||
// CHECK: Punctuation: ";" [1:16 - 1:17]
|
||||
// CHECK: Keyword: "void" [2:1 - 2:5] FunctionDecl=test:2:6 (Definition)
|
||||
|
@ -183,20 +183,20 @@ auto test5(X) -> X;
|
|||
// CHECK: Punctuation: "(" [29:18 - 29:19] CXXMethod=foo:29:15 (Definition)
|
||||
// CHECK: Punctuation: ")" [29:19 - 29:20] CXXMethod=foo:29:15 (Definition)
|
||||
// CHECK: Punctuation: "{" [29:21 - 29:22] CompoundStmt=
|
||||
// CHECK: Punctuation: "}" [29:22 - 29:23] CompoundStmt=
|
||||
// CHECK: Punctuation: "~" [37:3 - 37:4] CXXDestructor=~C:37:3
|
||||
// CHECK: Identifier: "C" [37:4 - 37:5] CXXDestructor=~C:37:3
|
||||
// CHECK: Keyword: "auto" [40:1 - 40:5] FunctionDecl=test5:40:6
|
||||
// CHECK: Identifier: "test5" [40:6 - 40:11] FunctionDecl=test5:40:6
|
||||
// CHECK: Punctuation: "(" [40:11 - 40:12] FunctionDecl=test5:40:6
|
||||
// CHECK: Identifier: "X" [40:12 - 40:13] TypeRef=struct X:7:8
|
||||
// CHECK: Punctuation: ")" [40:13 - 40:14] FunctionDecl=test5:40:6
|
||||
// CHECK: Punctuation: "->" [40:15 - 40:17] FunctionDecl=test5:40:6
|
||||
// CHECK: Identifier: "X" [40:18 - 40:19] TypeRef=struct X:7:8
|
||||
// CHECK: Punctuation: ";" [40:19 - 40:20]
|
||||
|
||||
// RUN: env LIBCLANG_DISABLE_CRASH_RECOVERY=1 c-index-test -test-annotate-tokens=%s:32:1:32:13 %s | FileCheck %s -check-prefix=CHECK2
|
||||
// CHECK2: Keyword: "if" [32:3 - 32:5] IfStmt=
|
||||
// CHECK: Punctuation: "}" [29:22 - 29:23] CompoundStmt=
|
||||
// CHECK: Punctuation: "~" [37:3 - 37:4] CXXDestructor=~C:37:3
|
||||
// CHECK: Identifier: "C" [37:4 - 37:5] CXXDestructor=~C:37:3
|
||||
// CHECK: Keyword: "auto" [40:1 - 40:5] FunctionDecl=test5:40:6
|
||||
// CHECK: Identifier: "test5" [40:6 - 40:11] FunctionDecl=test5:40:6
|
||||
// CHECK: Punctuation: "(" [40:11 - 40:12] FunctionDecl=test5:40:6
|
||||
// CHECK: Identifier: "X" [40:12 - 40:13] TypeRef=struct X:7:8
|
||||
// CHECK: Punctuation: ")" [40:13 - 40:14] FunctionDecl=test5:40:6
|
||||
// CHECK: Punctuation: "->" [40:15 - 40:17] FunctionDecl=test5:40:6
|
||||
// CHECK: Identifier: "X" [40:18 - 40:19] TypeRef=struct X:7:8
|
||||
// CHECK: Punctuation: ";" [40:19 - 40:20]
|
||||
|
||||
// RUN: env LIBCLANG_DISABLE_CRASH_RECOVERY=1 c-index-test -test-annotate-tokens=%s:32:1:32:13 %s | FileCheck %s -check-prefix=CHECK2
|
||||
// CHECK2: Keyword: "if" [32:3 - 32:5] IfStmt=
|
||||
// CHECK2: Punctuation: "(" [32:6 - 32:7] IfStmt=
|
||||
// CHECK2: Keyword: "int" [32:7 - 32:10] VarDecl=p:32:11 (Definition)
|
||||
// CHECK2: Identifier: "p" [32:11 - 32:12] VarDecl=p:32:11 (Definition)
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
// from SemaCXX/class-layout.cpp
|
||||
// RUN: c-index-test -test-print-type-size %s -target x86_64-pc-linux-gnu | FileCheck -check-prefix=CHECK64 %s
|
||||
// RUN: c-index-test -test-print-type-size %s -target i386-apple-darwin9 | FileCheck -check-prefix=CHECK32 %s
|
||||
|
||||
namespace basic {
|
||||
|
||||
// CHECK64: VarDecl=v:[[@LINE+2]]:6 (Definition) (invalid) [type=void] [typekind=Void]
|
||||
// CHECK32: VarDecl=v:[[@LINE+1]]:6 (Definition) (invalid) [type=void] [typekind=Void]
|
||||
void v;
|
||||
|
||||
// CHECK64: VarDecl=v1:[[@LINE+2]]:7 (Definition) [type=void *] [typekind=Pointer] [sizeof=8] [alignof=8]
|
||||
|
||||
namespace basic {
|
||||
|
||||
// CHECK64: VarDecl=v:[[@LINE+2]]:6 (Definition) (invalid) [type=void] [typekind=Void]
|
||||
// CHECK32: VarDecl=v:[[@LINE+1]]:6 (Definition) (invalid) [type=void] [typekind=Void]
|
||||
void v;
|
||||
|
||||
// CHECK64: VarDecl=v1:[[@LINE+2]]:7 (Definition) [type=void *] [typekind=Pointer] [sizeof=8] [alignof=8]
|
||||
// CHECK32: VarDecl=v1:[[@LINE+1]]:7 (Definition) [type=void *] [typekind=Pointer] [sizeof=4] [alignof=4]
|
||||
void *v1;
|
||||
|
||||
|
|
|
@ -809,14 +809,14 @@ static void PrintCursor(CXCursor Cursor, const char *CommentSchemaFile) {
|
|||
if (clang_EnumDecl_isScoped(Cursor))
|
||||
printf(" (scoped)");
|
||||
if (clang_Cursor_isVariadic(Cursor))
|
||||
printf(" (variadic)");
|
||||
if (clang_Cursor_isObjCOptional(Cursor))
|
||||
printf(" (@optional)");
|
||||
if (clang_isInvalidDeclaration(Cursor))
|
||||
printf(" (invalid)");
|
||||
|
||||
switch (clang_getCursorExceptionSpecificationType(Cursor))
|
||||
{
|
||||
printf(" (variadic)");
|
||||
if (clang_Cursor_isObjCOptional(Cursor))
|
||||
printf(" (@optional)");
|
||||
if (clang_isInvalidDeclaration(Cursor))
|
||||
printf(" (invalid)");
|
||||
|
||||
switch (clang_getCursorExceptionSpecificationType(Cursor))
|
||||
{
|
||||
case CXCursor_ExceptionSpecificationKind_None:
|
||||
break;
|
||||
|
||||
|
|
|
@ -782,22 +782,22 @@ bool CursorVisitor::VisitDeclaratorDecl(DeclaratorDecl *DD) {
|
|||
if (VisitNestedNameSpecifierLoc(QualifierLoc))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool HasTrailingReturnType(FunctionDecl *ND) {
|
||||
const QualType Ty = ND->getType();
|
||||
if (const FunctionType *AFT = Ty->getAs<FunctionType>()) {
|
||||
if (const FunctionProtoType *FT = dyn_cast<FunctionProtoType>(AFT))
|
||||
return FT->hasTrailingReturn();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// \brief Compare two base or member initializers based on their source order.
|
||||
static int CompareCXXCtorInitializers(CXXCtorInitializer *const *X,
|
||||
CXXCtorInitializer *const *Y) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool HasTrailingReturnType(FunctionDecl *ND) {
|
||||
const QualType Ty = ND->getType();
|
||||
if (const FunctionType *AFT = Ty->getAs<FunctionType>()) {
|
||||
if (const FunctionProtoType *FT = dyn_cast<FunctionProtoType>(AFT))
|
||||
return FT->hasTrailingReturn();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// \brief Compare two base or member initializers based on their source order.
|
||||
static int CompareCXXCtorInitializers(CXXCtorInitializer *const *X,
|
||||
CXXCtorInitializer *const *Y) {
|
||||
return (*X)->getSourceOrder() - (*Y)->getSourceOrder();
|
||||
}
|
||||
|
||||
|
@ -811,22 +811,22 @@ bool CursorVisitor::VisitFunctionDecl(FunctionDecl *ND) {
|
|||
|
||||
if (TypeSourceInfo *TSInfo = ND->getTypeSourceInfo()) {
|
||||
// Visit the function declaration's syntactic components in the order
|
||||
// written. This requires a bit of work.
|
||||
TypeLoc TL = TSInfo->getTypeLoc().IgnoreParens();
|
||||
FunctionTypeLoc FTL = TL.getAs<FunctionTypeLoc>();
|
||||
const bool HasTrailingRT = HasTrailingReturnType(ND);
|
||||
|
||||
// If we have a function declared directly (without the use of a typedef),
|
||||
// visit just the return type. Otherwise, just visit the function's type
|
||||
// now.
|
||||
if ((FTL && !isa<CXXConversionDecl>(ND) && !HasTrailingRT &&
|
||||
Visit(FTL.getReturnLoc())) ||
|
||||
(!FTL && Visit(TL)))
|
||||
return true;
|
||||
|
||||
// Visit the nested-name-specifier, if present.
|
||||
if (NestedNameSpecifierLoc QualifierLoc = ND->getQualifierLoc())
|
||||
if (VisitNestedNameSpecifierLoc(QualifierLoc))
|
||||
// written. This requires a bit of work.
|
||||
TypeLoc TL = TSInfo->getTypeLoc().IgnoreParens();
|
||||
FunctionTypeLoc FTL = TL.getAs<FunctionTypeLoc>();
|
||||
const bool HasTrailingRT = HasTrailingReturnType(ND);
|
||||
|
||||
// If we have a function declared directly (without the use of a typedef),
|
||||
// visit just the return type. Otherwise, just visit the function's type
|
||||
// now.
|
||||
if ((FTL && !isa<CXXConversionDecl>(ND) && !HasTrailingRT &&
|
||||
Visit(FTL.getReturnLoc())) ||
|
||||
(!FTL && Visit(TL)))
|
||||
return true;
|
||||
|
||||
// Visit the nested-name-specifier, if present.
|
||||
if (NestedNameSpecifierLoc QualifierLoc = ND->getQualifierLoc())
|
||||
if (VisitNestedNameSpecifierLoc(QualifierLoc))
|
||||
return true;
|
||||
|
||||
// Visit the declaration name.
|
||||
|
@ -836,17 +836,17 @@ bool CursorVisitor::VisitFunctionDecl(FunctionDecl *ND) {
|
|||
|
||||
// FIXME: Visit explicitly-specified template arguments!
|
||||
|
||||
// Visit the function parameters, if we have a function type.
|
||||
if (FTL && VisitFunctionTypeLoc(FTL, true))
|
||||
return true;
|
||||
|
||||
// Visit the function's trailing return type.
|
||||
if (FTL && HasTrailingRT && Visit(FTL.getReturnLoc()))
|
||||
return true;
|
||||
|
||||
// FIXME: Attributes?
|
||||
}
|
||||
|
||||
// Visit the function parameters, if we have a function type.
|
||||
if (FTL && VisitFunctionTypeLoc(FTL, true))
|
||||
return true;
|
||||
|
||||
// Visit the function's trailing return type.
|
||||
if (FTL && HasTrailingRT && Visit(FTL.getReturnLoc()))
|
||||
return true;
|
||||
|
||||
// FIXME: Attributes?
|
||||
}
|
||||
|
||||
if (ND->doesThisDeclarationHaveABody() && !ND->isLateTemplateParsed()) {
|
||||
if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(ND)) {
|
||||
// Find the initializers that were written in the source.
|
||||
|
@ -5434,21 +5434,21 @@ unsigned clang_isInvalid(enum CXCursorKind K) {
|
|||
|
||||
unsigned clang_isDeclaration(enum CXCursorKind K) {
|
||||
return (K >= CXCursor_FirstDecl && K <= CXCursor_LastDecl) ||
|
||||
(K >= CXCursor_FirstExtraDecl && K <= CXCursor_LastExtraDecl);
|
||||
}
|
||||
|
||||
unsigned clang_isInvalidDeclaration(CXCursor C) {
|
||||
if (clang_isDeclaration(C.kind)) {
|
||||
if (const Decl *D = getCursorDecl(C))
|
||||
return D->isInvalidDecl();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned clang_isReference(enum CXCursorKind K) {
|
||||
return K >= CXCursor_FirstRef && K <= CXCursor_LastRef;
|
||||
}
|
||||
(K >= CXCursor_FirstExtraDecl && K <= CXCursor_LastExtraDecl);
|
||||
}
|
||||
|
||||
unsigned clang_isInvalidDeclaration(CXCursor C) {
|
||||
if (clang_isDeclaration(C.kind)) {
|
||||
if (const Decl *D = getCursorDecl(C))
|
||||
return D->isInvalidDecl();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned clang_isReference(enum CXCursorKind K) {
|
||||
return K >= CXCursor_FirstRef && K <= CXCursor_LastRef;
|
||||
}
|
||||
|
||||
unsigned clang_isExpression(enum CXCursorKind K) {
|
||||
return K >= CXCursor_FirstExpr && K <= CXCursor_LastExpr;
|
||||
|
|
Loading…
Reference in New Issue