blob: 37c3ce984181283ceaa18b44d47c7ce508c43cd5 [file] [log] [blame]
//===- 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;
}