summaryrefslogtreecommitdiff
path: root/tools/libclang/CXCursor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/libclang/CXCursor.cpp')
-rw-r--r--tools/libclang/CXCursor.cpp63
1 files changed, 47 insertions, 16 deletions
diff --git a/tools/libclang/CXCursor.cpp b/tools/libclang/CXCursor.cpp
index b4ad0595cc53d..99e4319fc1fa8 100644
--- a/tools/libclang/CXCursor.cpp
+++ b/tools/libclang/CXCursor.cpp
@@ -61,6 +61,24 @@ static CXCursorKind GetCursorKind(const Attr *A) {
case attr::Visibility: return CXCursor_VisibilityAttr;
case attr::DLLExport: return CXCursor_DLLExport;
case attr::DLLImport: return CXCursor_DLLImport;
+ case attr::NSReturnsRetained: return CXCursor_NSReturnsRetained;
+ case attr::NSReturnsNotRetained: return CXCursor_NSReturnsNotRetained;
+ case attr::NSReturnsAutoreleased: return CXCursor_NSReturnsAutoreleased;
+ case attr::NSConsumesSelf: return CXCursor_NSConsumesSelf;
+ case attr::NSConsumed: return CXCursor_NSConsumed;
+ case attr::ObjCException: return CXCursor_ObjCException;
+ case attr::ObjCNSObject: return CXCursor_ObjCNSObject;
+ case attr::ObjCIndependentClass: return CXCursor_ObjCIndependentClass;
+ case attr::ObjCPreciseLifetime: return CXCursor_ObjCPreciseLifetime;
+ case attr::ObjCReturnsInnerPointer: return CXCursor_ObjCReturnsInnerPointer;
+ case attr::ObjCRequiresSuper: return CXCursor_ObjCRequiresSuper;
+ case attr::ObjCRootClass: return CXCursor_ObjCRootClass;
+ case attr::ObjCSubclassingRestricted: return CXCursor_ObjCSubclassingRestricted;
+ case attr::ObjCExplicitProtocolImpl: return CXCursor_ObjCExplicitProtocolImpl;
+ case attr::ObjCDesignatedInitializer: return CXCursor_ObjCDesignatedInitializer;
+ case attr::ObjCRuntimeVisible: return CXCursor_ObjCRuntimeVisible;
+ case attr::ObjCBoxable: return CXCursor_ObjCBoxable;
+ case attr::FlagEnum: return CXCursor_FlagEnum;
}
return CXCursor_UnexposedAttr;
@@ -223,16 +241,19 @@ CXCursor cxcursor::MakeCXCursor(const Stmt *S, const Decl *Parent,
case Stmt::SEHLeaveStmtClass:
K = CXCursor_SEHLeaveStmt;
break;
-
+
+ case Stmt::CoroutineBodyStmtClass:
+ case Stmt::CoreturnStmtClass:
+ K = CXCursor_UnexposedStmt;
+ break;
+
case Stmt::ArrayTypeTraitExprClass:
case Stmt::AsTypeExprClass:
case Stmt::AtomicExprClass:
case Stmt::BinaryConditionalOperatorClass:
case Stmt::TypeTraitExprClass:
- case Stmt::CoroutineBodyStmtClass:
case Stmt::CoawaitExprClass:
case Stmt::DependentCoawaitExprClass:
- case Stmt::CoreturnStmtClass:
case Stmt::CoyieldExprClass:
case Stmt::CXXBindTemporaryExprClass:
case Stmt::CXXDefaultArgExprClass:
@@ -325,6 +346,10 @@ CXCursor cxcursor::MakeCXCursor(const Stmt *S, const Decl *Parent,
K = CXCursor_CharacterLiteral;
break;
+ case Stmt::ConstantExprClass:
+ return MakeCXCursor(cast<ConstantExpr>(S)->getSubExpr(),
+ Parent, TU, RegionOfInterest);
+
case Stmt::ParenExprClass:
K = CXCursor_ParenExpr;
break;
@@ -990,10 +1015,6 @@ const Attr *cxcursor::getCursorAttr(CXCursor Cursor) {
return static_cast<const Attr *>(Cursor.data[1]);
}
-const Decl *cxcursor::getCursorParentDecl(CXCursor Cursor) {
- return static_cast<const Decl *>(Cursor.data[0]);
-}
-
ASTContext &cxcursor::getCursorContext(CXCursor Cursor) {
return getCursorASTUnit(Cursor)->getASTContext();
}
@@ -1146,6 +1167,9 @@ int clang_Cursor_getNumArguments(CXCursor C) {
if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {
return CE->getNumArgs();
}
+ if (const CXXConstructExpr *CE = dyn_cast<CXXConstructExpr>(E)) {
+ return CE->getNumArgs();
+ }
}
return -1;
@@ -1174,6 +1198,13 @@ CXCursor clang_Cursor_getArgument(CXCursor C, unsigned i) {
cxcursor::getCursorTU(C));
}
}
+ if (const CXXConstructExpr *CE = dyn_cast<CXXConstructExpr>(E)) {
+ if (i < CE->getNumArgs()) {
+ return cxcursor::MakeCXCursor(CE->getArg(i),
+ getCursorDecl(C),
+ cxcursor::getCursorTU(C));
+ }
+ }
}
return clang_getNullCursor();
@@ -1394,16 +1425,16 @@ CXCompletionString clang_getCursorCompletionString(CXCursor cursor) {
}
} else if (kind == CXCursor_MacroDefinition) {
const MacroDefinitionRecord *definition = getCursorMacroDefinition(cursor);
- const IdentifierInfo *MacroInfo = definition->getName();
+ const IdentifierInfo *Macro = definition->getName();
ASTUnit *unit = getCursorASTUnit(cursor);
- CodeCompletionResult Result(MacroInfo);
- CodeCompletionString *String
- = Result.CreateCodeCompletionString(unit->getASTContext(),
- unit->getPreprocessor(),
- CodeCompletionContext::CCC_Other,
- unit->getCodeCompletionTUInfo().getAllocator(),
- unit->getCodeCompletionTUInfo(),
- false);
+ CodeCompletionResult Result(
+ Macro,
+ unit->getPreprocessor().getMacroDefinition(Macro).getMacroInfo());
+ CodeCompletionString *String = Result.CreateCodeCompletionString(
+ unit->getASTContext(), unit->getPreprocessor(),
+ CodeCompletionContext::CCC_Other,
+ unit->getCodeCompletionTUInfo().getAllocator(),
+ unit->getCodeCompletionTUInfo(), false);
return String;
}
return nullptr;