]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tools/libclang/CXComment.h
Vendor import of clang trunk r351319 (just before the release_80 branch
[FreeBSD/FreeBSD.git] / tools / libclang / CXComment.h
1 //===- CXComment.h - Routines for manipulating CXComments -----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines routines for manipulating CXComments.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_CLANG_TOOLS_LIBCLANG_CXCOMMENT_H
15 #define LLVM_CLANG_TOOLS_LIBCLANG_CXCOMMENT_H
16
17 #include "CXTranslationUnit.h"
18 #include "clang-c/Documentation.h"
19 #include "clang-c/Index.h"
20 #include "clang/AST/ASTContext.h"
21 #include "clang/AST/Comment.h"
22 #include "clang/Frontend/ASTUnit.h"
23
24 namespace clang {
25 namespace comments {
26   class CommandTraits;
27 }
28
29 namespace cxcomment {
30
31 static inline CXComment createCXComment(const comments::Comment *C,
32                                         CXTranslationUnit TU) {
33   CXComment Result;
34   Result.ASTNode = C;
35   Result.TranslationUnit = TU;
36   return Result;
37 }
38
39 static inline const comments::Comment *getASTNode(CXComment CXC) {
40   return static_cast<const comments::Comment *>(CXC.ASTNode);
41 }
42
43 template<typename T>
44 static inline const T *getASTNodeAs(CXComment CXC) {
45   const comments::Comment *C = getASTNode(CXC);
46   if (!C)
47     return nullptr;
48
49   return dyn_cast<T>(C);
50 }
51
52 static inline ASTContext &getASTContext(CXComment CXC) {
53   return cxtu::getASTUnit(CXC.TranslationUnit)->getASTContext();
54 }
55
56 static inline comments::CommandTraits &getCommandTraits(CXComment CXC) {
57   return getASTContext(CXC).getCommentCommandTraits();
58 }
59
60 } // end namespace cxcomment
61 } // end namespace clang
62
63 #endif
64