| //===- 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/Script/ScriptScanner.h> |
| #include <mcld/Script/ScriptFile.h> |
| #include <mcld/MC/Input.h> |
| #include <mcld/Support/MemoryArea.h> |
| |
| #include <llvm/ADT/StringRef.h> |
| |
| #include <istream> |
| #include <sstream> |
| |
| using namespace mcld; |
| |
| ScriptReader::ScriptReader(GroupReader& pGroupReader) |
| : 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) |
| { |
| bool result = false; |
| 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_GroupReader); |
| result = (0 == parser.parse());; |
| |
| return result; |
| } |
| |