Coverage Report

Created: 2018-11-16 02:38

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/clang/include/clang/AST/CommentParser.h
Line
Count
Source
1
//===--- CommentParser.h - Doxygen comment parser ---------------*- C++ -*-===//
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 the Doxygen comment parser.
11
//
12
//===----------------------------------------------------------------------===//
13
14
#ifndef LLVM_CLANG_AST_COMMENTPARSER_H
15
#define LLVM_CLANG_AST_COMMENTPARSER_H
16
17
#include "clang/AST/Comment.h"
18
#include "clang/AST/CommentLexer.h"
19
#include "clang/AST/CommentSema.h"
20
#include "clang/Basic/Diagnostic.h"
21
#include "llvm/Support/Allocator.h"
22
23
namespace clang {
24
class SourceManager;
25
26
namespace comments {
27
class CommandTraits;
28
29
/// Doxygen comment parser.
30
class Parser {
31
  Parser(const Parser &) = delete;
32
  void operator=(const Parser &) = delete;
33
34
  friend class TextTokenRetokenizer;
35
36
  Lexer &L;
37
38
  Sema &S;
39
40
  /// Allocator for anything that goes into AST nodes.
41
  llvm::BumpPtrAllocator &Allocator;
42
43
  /// Source manager for the comment being parsed.
44
  const SourceManager &SourceMgr;
45
46
  DiagnosticsEngine &Diags;
47
48
36
  DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) {
49
36
    return Diags.Report(Loc, DiagID);
50
36
  }
51
52
  const CommandTraits &Traits;
53
54
  /// Current lookahead token.  We can safely assume that all tokens are from
55
  /// a single source file.
56
  Token Tok;
57
58
  /// A stack of additional lookahead tokens.
59
  SmallVector<Token, 8> MoreLATokens;
60
61
11.3k
  void consumeToken() {
62
11.3k
    if (MoreLATokens.empty())
63
10.3k
      L.lex(Tok);
64
931
    else
65
931
      Tok = MoreLATokens.pop_back_val();
66
11.3k
  }
67
68
902
  void putBack(const Token &OldTok) {
69
902
    MoreLATokens.push_back(Tok);
70
902
    Tok = OldTok;
71
902
  }
72
73
495
  void putBack(ArrayRef<Token> Toks) {
74
495
    if (Toks.empty())
75
466
      return;
76
29
77
29
    MoreLATokens.push_back(Tok);
78
29
    MoreLATokens.append(Toks.rbegin(), std::prev(Toks.rend()));
79
29
80
29
    Tok = Toks[0];
81
29
  }
82
83
2.38k
  bool isTokBlockCommand() {
84
2.38k
    return (Tok.is(tok::backslash_command) || 
Tok.is(tok::at_command)2.27k
) &&
85
2.38k
           
Traits.getCommandInfo(Tok.getCommandID())->IsBlockCommand119
;
86
2.38k
  }
87
88
public:
89
  Parser(Lexer &L, Sema &S, llvm::BumpPtrAllocator &Allocator,
90
         const SourceManager &SourceMgr, DiagnosticsEngine &Diags,
91
         const CommandTraits &Traits);
92
93
  /// Parse arguments for \\param command.
94
  void parseParamCommandArgs(ParamCommandComment *PC,
95
                             TextTokenRetokenizer &Retokenizer);
96
97
  /// Parse arguments for \\tparam command.
98
  void parseTParamCommandArgs(TParamCommandComment *TPC,
99
                              TextTokenRetokenizer &Retokenizer);
100
101
  void parseBlockCommandArgs(BlockCommandComment *BC,
102
                             TextTokenRetokenizer &Retokenizer,
103
                             unsigned NumArgs);
104
105
  BlockCommandComment *parseBlockCommand();
106
  InlineCommandComment *parseInlineCommand();
107
108
  HTMLStartTagComment *parseHTMLStartTag();
109
  HTMLEndTagComment *parseHTMLEndTag();
110
111
  BlockContentComment *parseParagraphOrBlockCommand();
112
113
  VerbatimBlockComment *parseVerbatimBlock();
114
  VerbatimLineComment *parseVerbatimLine();
115
  BlockContentComment *parseBlockContent();
116
  FullComment *parseFullComment();
117
};
118
119
} // end namespace comments
120
} // end namespace clang
121
122
#endif
123