1 //===- ScriptLexer.h --------------------------------------------*- 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 #ifndef LLD_ELF_SCRIPT_LEXER_H 10 #define LLD_ELF_SCRIPT_LEXER_H 11 12 #include "lld/Common/LLVM.h" 13 #include "llvm/ADT/StringRef.h" 14 #include "llvm/Support/MemoryBufferRef.h" 15 #include <vector> 16 17 namespace lld::elf { 18 19 class ScriptLexer { 20 public: 21 explicit ScriptLexer(MemoryBufferRef mb); 22 23 void setError(const Twine &msg); 24 void tokenize(MemoryBufferRef mb); 25 StringRef skipSpace(StringRef s); 26 bool atEOF(); 27 StringRef next(); 28 StringRef peek(); 29 StringRef peek2(); 30 void skip(); 31 bool consume(StringRef tok); 32 void expect(StringRef expect); 33 bool consumeLabel(StringRef tok); 34 std::string getCurrentLocation(); 35 MemoryBufferRef getCurrentMB(); 36 37 std::vector<MemoryBufferRef> mbs; 38 std::vector<StringRef> tokens; 39 bool inExpr = false; 40 size_t pos = 0; 41 42 size_t lastLineNumber = 0; 43 size_t lastLineNumberOffset = 0; 44 45 private: 46 void maybeSplitExpr(); 47 StringRef getLine(); 48 size_t getLineNumber(); 49 size_t getColumnNumber(); 50 }; 51 52 } // namespace lld::elf 53 54 #endif 55