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