blob: 6c314a4d12e5a19885e96d0b09241d6e9ba22213 [file] [log] [blame]
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +00001//===- ScriptParser.h -------------------------------------------*- C++ -*-===//
2//
3// The LLVM Linker
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLD_ELF_SCRIPT_PARSER_H
11#define LLD_ELF_SCRIPT_PARSER_H
12
13#include "lld/Core/LLVM.h"
14#include "llvm/ADT/StringRef.h"
Eugene Leviant03ff0162016-11-21 15:49:56 +000015#include "llvm/Support/MemoryBuffer.h"
Benjamin Kramerbd521202016-06-03 16:57:13 +000016#include <utility>
Adhemerval Zanellab92a34e2016-04-06 21:33:18 +000017#include <vector>
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +000018
19namespace lld {
20namespace elf {
21
22class ScriptParserBase {
23public:
Eugene Leviant03ff0162016-11-21 15:49:56 +000024 explicit ScriptParserBase(MemoryBufferRef MB);
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +000025
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +000026 void setError(const Twine &Msg);
Eugene Leviant03ff0162016-11-21 15:49:56 +000027 void tokenize(MemoryBufferRef MB);
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +000028 static StringRef skipSpace(StringRef S);
29 bool atEOF();
30 StringRef next();
31 StringRef peek();
Justin Bogner5424e7c2016-10-17 06:21:13 +000032 void skip();
Rui Ueyama83043f22016-10-17 16:01:53 +000033 bool consume(StringRef Tok);
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +000034 void expect(StringRef Expect);
35
Eugene Leviant03ff0162016-11-21 15:49:56 +000036 std::vector<MemoryBufferRef> MBs;
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +000037 std::vector<StringRef> Tokens;
38 size_t Pos = 0;
39 bool Error = false;
Eugene Leviant03ff0162016-11-21 15:49:56 +000040
41private:
42 MemoryBufferRef currentBuffer();
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +000043};
44
45} // namespace elf
46} // namespace lld
47
48#endif