//===- 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
