xref: /openbsd-src/gnu/llvm/lld/ELF/ScriptLexer.h (revision dfe94b169149f14cc1aee2cf6dad58a8d9a1860c)
1ece8a530Spatrick //===- ScriptLexer.h --------------------------------------------*- C++ -*-===//
2ece8a530Spatrick //
3ece8a530Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4ece8a530Spatrick // See https://llvm.org/LICENSE.txt for license information.
5ece8a530Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ece8a530Spatrick //
7ece8a530Spatrick //===----------------------------------------------------------------------===//
8ece8a530Spatrick 
9ece8a530Spatrick #ifndef LLD_ELF_SCRIPT_LEXER_H
10ece8a530Spatrick #define LLD_ELF_SCRIPT_LEXER_H
11ece8a530Spatrick 
12ece8a530Spatrick #include "lld/Common/LLVM.h"
13ece8a530Spatrick #include "llvm/ADT/StringRef.h"
14*dfe94b16Srobert #include "llvm/Support/MemoryBufferRef.h"
15ece8a530Spatrick #include <vector>
16ece8a530Spatrick 
17*dfe94b16Srobert namespace lld::elf {
18ece8a530Spatrick 
19ece8a530Spatrick class ScriptLexer {
20ece8a530Spatrick public:
21ece8a530Spatrick   explicit ScriptLexer(MemoryBufferRef mb);
22ece8a530Spatrick 
23ece8a530Spatrick   void setError(const Twine &msg);
24ece8a530Spatrick   void tokenize(MemoryBufferRef mb);
251cf9926bSpatrick   StringRef skipSpace(StringRef s);
26ece8a530Spatrick   bool atEOF();
27ece8a530Spatrick   StringRef next();
28ece8a530Spatrick   StringRef peek();
29ece8a530Spatrick   StringRef peek2();
30ece8a530Spatrick   void skip();
31ece8a530Spatrick   bool consume(StringRef tok);
32ece8a530Spatrick   void expect(StringRef expect);
33ece8a530Spatrick   bool consumeLabel(StringRef tok);
34ece8a530Spatrick   std::string getCurrentLocation();
35ece8a530Spatrick 
36ece8a530Spatrick   std::vector<MemoryBufferRef> mbs;
37ece8a530Spatrick   std::vector<StringRef> tokens;
38ece8a530Spatrick   bool inExpr = false;
39ece8a530Spatrick   size_t pos = 0;
40ece8a530Spatrick 
411cf9926bSpatrick   size_t lastLineNumber = 0;
421cf9926bSpatrick   size_t lastLineNumberOffset = 0;
431cf9926bSpatrick 
44bb684c34Spatrick protected:
45bb684c34Spatrick   MemoryBufferRef getCurrentMB();
46bb684c34Spatrick 
47ece8a530Spatrick private:
48ece8a530Spatrick   void maybeSplitExpr();
49ece8a530Spatrick   StringRef getLine();
50ece8a530Spatrick   size_t getLineNumber();
51ece8a530Spatrick   size_t getColumnNumber();
52ece8a530Spatrick };
53ece8a530Spatrick 
54*dfe94b16Srobert } // namespace lld::elf
55ece8a530Spatrick 
56ece8a530Spatrick #endif
57