Coverage Report

Created: 2018-09-19 20:53

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/clang/include/clang/AST/CommentParser.h
Line
Count
Source (jump to first uncovered line)
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
0
  DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) {
49
0
    return Diags.Report(Loc, DiagID);
50
0
  }
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
0
  void consumeToken() {
62
0
    if (MoreLATokens.empty())
63
0
      L.lex(Tok);
64
0
    else
65
0
      Tok = MoreLATokens.pop_back_val();
66
0
  }
67
68
0
  void putBack(const Token &OldTok) {
69
0
    MoreLATokens.push_back(Tok);
70
0
    Tok = OldTok;
71
0
  }
72
73
0
  void putBack(ArrayRef<Token> Toks) {
74
0
    if (Toks.empty())
75
0
      return;
76
0
77
0
    MoreLATokens.push_back(Tok);
78
0
    MoreLATokens.append(Toks.rbegin(), std::prev(Toks.rend()));
79
0
80
0
    Tok = Toks[0];
81
0
  }
82
83
0
  bool isTokBlockCommand() {
84
0
    return (Tok.is(tok::backslash_command) || Tok.is(tok::at_command)) &&
85
0
           Traits.getCommandInfo(Tok.getCommandID())->IsBlockCommand;
86
0
  }
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