]> git.proxmox.com Git - rustc.git/blame - src/llvm/include/llvm/MC/MCParser/AsmLexer.h
Imported Upstream version 1.0.0+dfsg1
[rustc.git] / src / llvm / include / llvm / MC / MCParser / AsmLexer.h
CommitLineData
223e47cc
LB
1//===- AsmLexer.h - Lexer for Assembly Files --------------------*- 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 class declares the lexer for assembly files.
11//
12//===----------------------------------------------------------------------===//
13
970d7e83
LB
14#ifndef LLVM_MC_MCPARSER_ASMLEXER_H
15#define LLVM_MC_MCPARSER_ASMLEXER_H
223e47cc
LB
16
17#include "llvm/ADT/StringRef.h"
18#include "llvm/MC/MCParser/MCAsmLexer.h"
19#include "llvm/Support/DataTypes.h"
20#include <string>
21
22namespace llvm {
23class MemoryBuffer;
24class MCAsmInfo;
25
26/// AsmLexer - Lexer class for assembly files.
27class AsmLexer : public MCAsmLexer {
28 const MCAsmInfo &MAI;
29
30 const char *CurPtr;
1a4d82fc 31 StringRef CurBuf;
223e47cc
LB
32 bool isAtStartOfLine;
33
34 void operator=(const AsmLexer&) LLVM_DELETED_FUNCTION;
35 AsmLexer(const AsmLexer&) LLVM_DELETED_FUNCTION;
36
37protected:
38 /// LexToken - Read the next token and return its code.
1a4d82fc 39 AsmToken LexToken() override;
223e47cc
LB
40
41public:
42 AsmLexer(const MCAsmInfo &MAI);
43 ~AsmLexer();
44
1a4d82fc 45 void setBuffer(StringRef Buf, const char *ptr = nullptr);
223e47cc 46
1a4d82fc 47 StringRef LexUntilEndOfStatement() override;
223e47cc
LB
48 StringRef LexUntilEndOfLine();
49
1a4d82fc
JJ
50 const AsmToken peekTok(bool ShouldSkipSpace = true) override;
51
52 bool isAtStartOfComment(const char *Ptr);
223e47cc
LB
53 bool isAtStatementSeparator(const char *Ptr);
54
55 const MCAsmInfo &getMAI() const { return MAI; }
56
57private:
58 int getNextChar();
59 AsmToken ReturnError(const char *Loc, const std::string &Msg);
60
61 AsmToken LexIdentifier();
62 AsmToken LexSlash();
63 AsmToken LexLineComment();
64 AsmToken LexDigit();
65 AsmToken LexSingleQuote();
66 AsmToken LexQuote();
67 AsmToken LexFloatLiteral();
1a4d82fc 68 AsmToken LexHexFloatLiteral(bool NoIntDigits);
223e47cc
LB
69};
70
71} // end namespace llvm
72
73#endif