Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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_ASMPARSER_LLLEXER_H
14
#define LLVM_ASMPARSER_LLLEXER_H
15
 
16
#include "LLToken.h"
17
#include "llvm/ADT/APFloat.h"
18
#include "llvm/ADT/APSInt.h"
19
#include "llvm/Support/SMLoc.h"
20
#include <string>
21
 
22
namespace llvm {
23
  class Type;
24
  class SMDiagnostic;
25
  class SourceMgr;
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 = nullptr;
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
    lltok::Kind Lex() {
53
      return CurKind = LexToken();
54
    }
55
 
56
    typedef SMLoc LocTy;
57
    LocTy getLoc() const { return SMLoc::getFromPointer(TokStart); }
58
    lltok::Kind getKind() const { return CurKind; }
59
    const std::string &getStrVal() const { return StrVal; }
60
    Type *getTyVal() const { return TyVal; }
61
    unsigned getUIntVal() const { return UIntVal; }
62
    const APSInt &getAPSIntVal() const { return APSIntVal; }
63
    const APFloat &getAPFloatVal() const { return APFloatVal; }
64
 
65
    void setIgnoreColonInIdentifiers(bool val) {
66
      IgnoreColonInIdentifiers = val;
67
    }
68
 
69
    bool Error(LocTy ErrorLoc, const Twine &Msg) const;
70
    bool Error(const Twine &Msg) const { return Error(getLoc(), Msg); }
71
 
72
    void Warning(LocTy WarningLoc, const Twine &Msg) const;
73
    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