Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/lib/AsmParser/LLLexer.h
Line
Count
Source (jump to first uncovered line)
1
//===- LLLexer.h - Lexer for LLVM 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 represents the Lexer for .ll files.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_LIB_ASMPARSER_LLLEXER_H
14
#define LLVM_LIB_ASMPARSER_LLLEXER_H
15
16
#include "LLToken.h"
17
#include "llvm/ADT/APFloat.h"
18
#include "llvm/ADT/APSInt.h"
19
#include "llvm/Support/SourceMgr.h"
20
#include <string>
21
22
namespace llvm {
23
  class MemoryBuffer;
24
  class Type;
25
  class SMDiagnostic;
26
  class LLVMContext;
27
28
  class LLLexer {
29
    const char *CurPtr;
30
    StringRef CurBuf;
31
    SMDiagnostic &ErrorInfo;
32
    SourceMgr &SM;
33
    LLVMContext &Context;
34
35
    // Information about the current token.
36
    const char *TokStart;
37
    lltok::Kind CurKind;
38
    std::string StrVal;
39
    unsigned UIntVal;
40
    Type *TyVal;
41
    APFloat APFloatVal;
42
    APSInt  APSIntVal;
43
44
    // When false (default), an identifier ending in ':' is a label token.
45
    // When true, the ':' is treated as a separate token.
46
    bool IgnoreColonInIdentifiers;
47
48
  public:
49
    explicit LLLexer(StringRef StartBuf, SourceMgr &SM, SMDiagnostic &,
50
                     LLVMContext &C);
51
52
33.1M
    lltok::Kind Lex() {
53
33.1M
      return CurKind = LexToken();
54
33.1M
    }
55
56
    typedef SMLoc LocTy;
57
26.2M
    LocTy getLoc() const { return SMLoc::getFromPointer(TokStart); }
58
66.7M
    lltok::Kind getKind() const { return CurKind; }
59
5.66M
    const std::string &getStrVal() const { return StrVal; }
60
5.77M
    Type *getTyVal() const { return TyVal; }
61
2.44M
    unsigned getUIntVal() const { return UIntVal; }
62
8.07M
    const APSInt &getAPSIntVal() const { return APSIntVal; }
63
67.1k
    const APFloat &getAPFloatVal() const { return APFloatVal; }
64
65
308
    void setIgnoreColonInIdentifiers(bool val) {
66
308
      IgnoreColonInIdentifiers = val;
67
308
    }
68
69
    bool Error(LocTy ErrorLoc, const Twine &Msg) const;
70
5
    bool Error(const Twine &Msg) const { return Error(getLoc(), Msg); }
71
72
    void Warning(LocTy WarningLoc, const Twine &Msg) const;
73
0
    void Warning(const Twine &Msg) const { return Warning(getLoc(), Msg); }
74
75
  private:
76
    lltok::Kind LexToken();
77
78
    int getNextChar();
79
    void SkipLineComment();
80
    lltok::Kind ReadString(lltok::Kind kind);
81
    bool ReadVarName();
82
83
    lltok::Kind LexIdentifier();
84
    lltok::Kind LexDigitOrNegative();
85
    lltok::Kind LexPositive();
86
    lltok::Kind LexAt();
87
    lltok::Kind LexDollar();
88
    lltok::Kind LexExclaim();
89
    lltok::Kind LexPercent();
90
    lltok::Kind LexUIntID(lltok::Kind Token);
91
    lltok::Kind LexVar(lltok::Kind Var, lltok::Kind VarID);
92
    lltok::Kind LexQuote();
93
    lltok::Kind Lex0x();
94
    lltok::Kind LexHash();
95
    lltok::Kind LexCaret();
96
97
    uint64_t atoull(const char *Buffer, const char *End);
98
    uint64_t HexIntToVal(const char *Buffer, const char *End);
99
    void HexToIntPair(const char *Buffer, const char *End, uint64_t Pair[2]);
100
    void FP80HexToIntPair(const char *Buffer, const char *End, uint64_t Pair[2]);
101
  };
102
} // end namespace llvm
103
104
#endif