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