Home | History | Annotate | Download | only in Script
      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 
     11 #include "mcld/MC/Input.h"
     12 #include "mcld/Script/ScriptFile.h"
     13 #include "mcld/Script/ScriptScanner.h"
     14 #include "mcld/Support/MemoryArea.h"
     15 
     16 #include <llvm/ADT/StringRef.h>
     17 
     18 #include <istream>
     19 #include <sstream>
     20 
     21 namespace mcld {
     22 
     23 ScriptReader::ScriptReader(ObjectReader& pObjectReader,
     24                            ArchiveReader& pArchiveReader,
     25                            DynObjReader& pDynObjReader,
     26                            GroupReader& pGroupReader)
     27     : m_ObjectReader(pObjectReader),
     28       m_ArchiveReader(pArchiveReader),
     29       m_DynObjReader(pDynObjReader),
     30       m_GroupReader(pGroupReader) {
     31 }
     32 
     33 ScriptReader::~ScriptReader() {
     34 }
     35 
     36 /// isMyFormat
     37 bool ScriptReader::isMyFormat(Input& input, bool& doContinue) const {
     38   doContinue = true;
     39   // always return true now
     40   return true;
     41 }
     42 
     43 bool ScriptReader::readScript(const LinkerConfig& pConfig,
     44                               ScriptFile& pScriptFile) {
     45   Input& input = pScriptFile.input();
     46   size_t size = input.memArea()->size();
     47   llvm::StringRef region = input.memArea()->request(input.fileOffset(), size);
     48   std::stringbuf buf(region.data());
     49 
     50   std::istream in(&buf);
     51   ScriptScanner scanner(&in);
     52   ScriptParser parser(pConfig,
     53                       pScriptFile,
     54                       scanner,
     55                       m_ObjectReader,
     56                       m_ArchiveReader,
     57                       m_DynObjReader,
     58                       m_GroupReader);
     59   return parser.parse() == 0;
     60 }
     61 
     62 }  // namespace mcld
     63