1//===- ScriptReader.cpp ---------------------------------------------------===//
2//
3//                     The MCLinker Project
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9#include <mcld/Script/ScriptReader.h>
10#include <mcld/Script/ScriptScanner.h>
11#include <mcld/Script/ScriptFile.h>
12#include <mcld/MC/Input.h>
13#include <mcld/Support/MemoryArea.h>
14
15#include <llvm/ADT/StringRef.h>
16
17#include <istream>
18#include <sstream>
19
20using namespace mcld;
21
22ScriptReader::ScriptReader(GroupReader& pGroupReader)
23  : m_GroupReader(pGroupReader)
24{
25}
26
27ScriptReader::~ScriptReader()
28{
29}
30
31/// isMyFormat
32bool ScriptReader::isMyFormat(Input& input, bool &doContinue) const
33{
34  doContinue = true;
35  // always return true now
36  return true;
37}
38
39bool ScriptReader::readScript(const LinkerConfig& pConfig,
40                              ScriptFile& pScriptFile)
41{
42  bool result = false;
43  Input& input = pScriptFile.input();
44  size_t size = input.memArea()->size();
45  llvm::StringRef region = input.memArea()->request(input.fileOffset(), size);
46  std::stringbuf buf(region.data());
47
48  std::istream in(&buf);
49  ScriptScanner scanner(&in);
50  ScriptParser parser(pConfig,
51                      pScriptFile,
52                      scanner,
53                      m_GroupReader);
54  result = (0 == parser.parse());;
55
56  return result;
57}
58
59