Coverage Report

Created: 2019-01-21 03:01

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/include/llvm/MC/MCParser/AsmLexer.h
Line
Count
Source
1
//===- AsmLexer.h - Lexer for Assembly Files --------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This class declares the lexer for assembly files.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_MC_MCPARSER_ASMLEXER_H
14
#define LLVM_MC_MCPARSER_ASMLEXER_H
15
16
#include "llvm/ADT/StringRef.h"
17
#include "llvm/MC/MCParser/MCAsmLexer.h"
18
#include <string>
19
20
namespace llvm {
21
22
class MCAsmInfo;
23
24
/// AsmLexer - Lexer class for assembly files.
25
class AsmLexer : public MCAsmLexer {
26
  const MCAsmInfo &MAI;
27
28
  const char *CurPtr = nullptr;
29
  StringRef CurBuf;
30
  bool IsAtStartOfLine = true;
31
  bool IsAtStartOfStatement = true;
32
  bool IsPeeking = false;
33
34
protected:
35
  /// LexToken - Read the next token and return its code.
36
  AsmToken LexToken() override;
37
38
public:
39
  AsmLexer(const MCAsmInfo &MAI);
40
  AsmLexer(const AsmLexer &) = delete;
41
  AsmLexer &operator=(const AsmLexer &) = delete;
42
  ~AsmLexer() override;
43
44
  void setBuffer(StringRef Buf, const char *ptr = nullptr);
45
46
  StringRef LexUntilEndOfStatement() override;
47
48
  size_t peekTokens(MutableArrayRef<AsmToken> Buf,
49
                    bool ShouldSkipSpace = true) override;
50
51
1.32k
  const MCAsmInfo &getMAI() const { return MAI; }
52
53
private:
54
  bool isAtStartOfComment(const char *Ptr);
55
  bool isAtStatementSeparator(const char *Ptr);
56
  int getNextChar();
57
  AsmToken ReturnError(const char *Loc, const std::string &Msg);
58
59
  AsmToken LexIdentifier();
60
  AsmToken LexSlash();
61
  AsmToken LexLineComment();
62
  AsmToken LexDigit();
63
  AsmToken LexSingleQuote();
64
  AsmToken LexQuote();
65
  AsmToken LexFloatLiteral();
66
  AsmToken LexHexFloatLiteral(bool NoIntDigits);
67
68
  StringRef LexUntilEndOfLine();
69
};
70
71
} // end namespace llvm
72
73
#endif // LLVM_MC_MCPARSER_ASMLEXER_H