diff options
Diffstat (limited to 'ELF/ScriptLexer.h')
-rw-r--r-- | ELF/ScriptLexer.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/ELF/ScriptLexer.h b/ELF/ScriptLexer.h new file mode 100644 index 000000000000..64d6d9204864 --- /dev/null +++ b/ELF/ScriptLexer.h @@ -0,0 +1,56 @@ +//===- ScriptLexer.h --------------------------------------------*- C++ -*-===// +// +// The LLVM Linker +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLD_ELF_SCRIPT_LEXER_H +#define LLD_ELF_SCRIPT_LEXER_H + +#include "lld/Core/LLVM.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Support/MemoryBuffer.h" +#include <utility> +#include <vector> + +namespace lld { +namespace elf { + +class ScriptLexer { +public: + explicit ScriptLexer(MemoryBufferRef MB); + + void setError(const Twine &Msg); + void tokenize(MemoryBufferRef MB); + static StringRef skipSpace(StringRef S); + bool atEOF(); + StringRef next(); + StringRef peek(); + void skip(); + bool consume(StringRef Tok); + void expect(StringRef Expect); + bool consumeLabel(StringRef Tok); + std::string getCurrentLocation(); + + std::vector<MemoryBufferRef> MBs; + std::vector<StringRef> Tokens; + bool InExpr = false; + size_t Pos = 0; + bool Error = false; + +private: + void maybeSplitExpr(); + StringRef getLine(); + size_t getLineNumber(); + size_t getColumnNumber(); + + MemoryBufferRef getCurrentMB(); +}; + +} // namespace elf +} // namespace lld + +#endif |