//===- ScriptReader.cpp ---------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "mcld/Script/ScriptReader.h" #include "mcld/MC/Input.h" #include "mcld/Script/ScriptFile.h" #include "mcld/Script/ScriptScanner.h" #include "mcld/Support/MemoryArea.h" #include <llvm/ADT/StringRef.h> #include <istream> #include <sstream> namespace mcld { ScriptReader::ScriptReader(ObjectReader& pObjectReader, ArchiveReader& pArchiveReader, DynObjReader& pDynObjReader, GroupReader& pGroupReader) : m_ObjectReader(pObjectReader), m_ArchiveReader(pArchiveReader), m_DynObjReader(pDynObjReader), m_GroupReader(pGroupReader) { } ScriptReader::~ScriptReader() { } /// isMyFormat bool ScriptReader::isMyFormat(Input& input, bool& doContinue) const { doContinue = true; // always return true now return true; } bool ScriptReader::readScript(const LinkerConfig& pConfig, ScriptFile& pScriptFile) { Input& input = pScriptFile.input(); size_t size = input.memArea()->size(); llvm::StringRef region = input.memArea()->request(input.fileOffset(), size); std::stringbuf buf(region.data()); std::istream in(&buf); ScriptScanner scanner(&in); ScriptParser parser(pConfig, pScriptFile, scanner, m_ObjectReader, m_ArchiveReader, m_DynObjReader, m_GroupReader); return parser.parse() == 0; } } // namespace mcld