diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/llvm12/include/llvm/MC/MCParser/AsmLexer.h | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/llvm12/include/llvm/MC/MCParser/AsmLexer.h')
-rw-r--r-- | contrib/libs/llvm12/include/llvm/MC/MCParser/AsmLexer.h | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/contrib/libs/llvm12/include/llvm/MC/MCParser/AsmLexer.h b/contrib/libs/llvm12/include/llvm/MC/MCParser/AsmLexer.h new file mode 100644 index 0000000000..47d4149dd6 --- /dev/null +++ b/contrib/libs/llvm12/include/llvm/MC/MCParser/AsmLexer.h @@ -0,0 +1,87 @@ +#pragma once + +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +#endif + +//===- AsmLexer.h - Lexer for Assembly Files --------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This class declares the lexer for assembly files. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_MC_MCPARSER_ASMLEXER_H +#define LLVM_MC_MCPARSER_ASMLEXER_H + +#include "llvm/ADT/StringRef.h" +#include "llvm/MC/MCParser/MCAsmLexer.h" +#include <string> + +namespace llvm { + +class MCAsmInfo; + +/// AsmLexer - Lexer class for assembly files. +class AsmLexer : public MCAsmLexer { + const MCAsmInfo &MAI; + + const char *CurPtr = nullptr; + StringRef CurBuf; + bool IsAtStartOfLine = true; + bool IsAtStartOfStatement = true; + bool IsPeeking = false; + bool EndStatementAtEOF = true; + +protected: + /// LexToken - Read the next token and return its code. + AsmToken LexToken() override; + +public: + AsmLexer(const MCAsmInfo &MAI); + AsmLexer(const AsmLexer &) = delete; + AsmLexer &operator=(const AsmLexer &) = delete; + ~AsmLexer() override; + + void setBuffer(StringRef Buf, const char *ptr = nullptr, + bool EndStatementAtEOF = true); + + StringRef LexUntilEndOfStatement() override; + + size_t peekTokens(MutableArrayRef<AsmToken> Buf, + bool ShouldSkipSpace = true) override; + + const MCAsmInfo &getMAI() const { return MAI; } + +private: + bool isAtStartOfComment(const char *Ptr); + bool isAtStatementSeparator(const char *Ptr); + int getNextChar(); + int peekNextChar(); + AsmToken ReturnError(const char *Loc, const std::string &Msg); + + AsmToken LexIdentifier(); + AsmToken LexSlash(); + AsmToken LexLineComment(); + AsmToken LexDigit(); + AsmToken LexSingleQuote(); + AsmToken LexQuote(); + AsmToken LexFloatLiteral(); + AsmToken LexHexFloatLiteral(bool NoIntDigits); + + StringRef LexUntilEndOfLine(); +}; + +} // end namespace llvm + +#endif // LLVM_MC_MCPARSER_ASMLEXER_H + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif |