1f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===- ScriptFile.cpp -----------------------------------------------------===// 2f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 3f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// The MCLinker Project 4f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 5f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// This file is distributed under the University of Illinois Open Source 6f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// License. See LICENSE.TXT for details. 7f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 8f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/ScriptFile.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/ADT/HashEntry.h" 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/ADT/HashTable.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/ADT/StringHash.h" 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/AssertCmd.h" 1537b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/EntryCmd.h" 1637b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/GroupCmd.h" 1737b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/InputCmd.h" 1837b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/Operand.h" 1937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/OutputArchCmd.h" 2037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/OutputCmd.h" 2137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/OutputFormatCmd.h" 2237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/RpnExpr.h" 2337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/ScriptCommand.h" 2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/SearchDirCmd.h" 2537b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/SectionsCmd.h" 2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/StringList.h" 2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/StrToken.h" 2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/Input.h" 2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/InputBuilder.h" 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/MemoryArea.h" 3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/InputTree.h" 3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines 33f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <llvm/Support/Casting.h> 34f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <llvm/Support/ManagedStatic.h> 3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines 36f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <cassert> 37f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 3837b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 39f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 4037b74a387bb3993387029859c2d9d051c41c724eStephen Hinestypedef HashEntry<std::string, void*, hash::StringCompare<std::string> > 4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines ParserStrEntry; 42f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinestypedef HashTable<ParserStrEntry, 43f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines hash::StringHash<hash::DJB>, 44f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines EntryFactory<ParserStrEntry> > ParserStrPool; 45f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesstatic llvm::ManagedStatic<ParserStrPool> g_ParserStrPool; 46f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 47f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===// 48f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// ScriptFile 49f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===// 50f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen HinesScriptFile::ScriptFile(Kind pKind, Input& pInput, InputBuilder& pBuilder) 5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines : m_Kind(pKind), 5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_Input(pInput), 5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_Name(pInput.path().native()), 5437b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pInputTree(NULL), 5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_Builder(pBuilder), 5637b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_bHasSectionsCmd(false), 5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_bInSectionsCmd(false), 5837b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_bInOutputSectDesc(false), 5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pRpnExpr(NULL), 6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pStringList(NULL), 6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_bAsNeeded(false) { 62f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines // FIXME: move creation of input tree out of ScriptFile. 63f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_pInputTree = new InputTree(); 64f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 65f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 6637b74a387bb3993387029859c2d9d051c41c724eStephen HinesScriptFile::~ScriptFile() { 67f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines for (iterator it = begin(), ie = end(); it != ie; ++it) { 68f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines if (*it != NULL) 69f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines delete *it; 70f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines } 7137b74a387bb3993387029859c2d9d051c41c724eStephen Hines if (m_pInputTree != NULL) 72f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines delete m_pInputTree; 73f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 74f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 7537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::dump() const { 76f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines for (const_iterator it = begin(), ie = end(); it != ie; ++it) 77f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines (*it)->dump(); 78f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 79f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 8037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::activate(Module& pModule) { 81f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines for (const_iterator it = begin(), ie = end(); it != ie; ++it) 82f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines (*it)->activate(pModule); 83f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 84f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 8537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::addEntryPoint(const std::string& pSymbol) { 86f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines EntryCmd* entry = new EntryCmd(pSymbol); 87f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 88f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines if (m_bInSectionsCmd) { 89f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines assert(!m_CommandQueue.empty()); 90f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines SectionsCmd* sections = llvm::cast<SectionsCmd>(back()); 91f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines sections->push_back(entry); 92f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines } else { 93f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_CommandQueue.push_back(entry); 94f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines } 95f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 96f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 9737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::addOutputFormatCmd(const std::string& pName) { 98f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_CommandQueue.push_back(new OutputFormatCmd(pName)); 99f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 100f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 101f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesvoid ScriptFile::addOutputFormatCmd(const std::string& pDefault, 102f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines const std::string& pBig, 10337b74a387bb3993387029859c2d9d051c41c724eStephen Hines const std::string& pLittle) { 104f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_CommandQueue.push_back(new OutputFormatCmd(pDefault, pBig, pLittle)); 105f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 106f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 10737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::addInputCmd(StringList& pStringList, 10837b74a387bb3993387029859c2d9d051c41c724eStephen Hines ObjectReader& pObjectReader, 10937b74a387bb3993387029859c2d9d051c41c724eStephen Hines ArchiveReader& pArchiveReader, 11037b74a387bb3993387029859c2d9d051c41c724eStephen Hines DynObjReader& pDynObjReader, 11137b74a387bb3993387029859c2d9d051c41c724eStephen Hines const LinkerConfig& pConfig) { 11237b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_CommandQueue.push_back(new InputCmd(pStringList, 11337b74a387bb3993387029859c2d9d051c41c724eStephen Hines *m_pInputTree, 11437b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_Builder, 11537b74a387bb3993387029859c2d9d051c41c724eStephen Hines pObjectReader, 11637b74a387bb3993387029859c2d9d051c41c724eStephen Hines pArchiveReader, 11737b74a387bb3993387029859c2d9d051c41c724eStephen Hines pDynObjReader, 11837b74a387bb3993387029859c2d9d051c41c724eStephen Hines pConfig)); 11937b74a387bb3993387029859c2d9d051c41c724eStephen Hines} 12037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 121f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesvoid ScriptFile::addGroupCmd(StringList& pStringList, 122f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines GroupReader& pGroupReader, 12337b74a387bb3993387029859c2d9d051c41c724eStephen Hines const LinkerConfig& pConfig) { 12437b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_CommandQueue.push_back(new GroupCmd( 12537b74a387bb3993387029859c2d9d051c41c724eStephen Hines pStringList, *m_pInputTree, m_Builder, pGroupReader, pConfig)); 126f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 127f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 12837b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::addOutputCmd(const std::string& pFileName) { 129f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_CommandQueue.push_back(new OutputCmd(pFileName)); 130f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 131f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 13237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::addSearchDirCmd(const std::string& pPath) { 133f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_CommandQueue.push_back(new SearchDirCmd(pPath)); 134f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 135f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 13637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::addOutputArchCmd(const std::string& pArch) { 137f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_CommandQueue.push_back(new OutputArchCmd(pArch)); 138f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 139f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 14037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::addAssertCmd(RpnExpr& pRpnExpr, const std::string& pMessage) { 141f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_CommandQueue.push_back(new AssertCmd(pRpnExpr, pMessage)); 142f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 143f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 144f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesvoid ScriptFile::addAssignment(const std::string& pSymbolName, 145f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines RpnExpr& pRpnExpr, 14637b74a387bb3993387029859c2d9d051c41c724eStephen Hines Assignment::Type pType) { 147f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines if (m_bInSectionsCmd) { 148f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines assert(!m_CommandQueue.empty()); 149f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines SectionsCmd* sections = llvm::cast<SectionsCmd>(back()); 150f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines if (m_bInOutputSectDesc) { 151f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines assert(!sections->empty()); 152f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines OutputSectDesc* output_desc = 15337b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::cast<OutputSectDesc>(sections->back()); 154f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines output_desc->push_back(new Assignment(Assignment::INPUT_SECTION, 155f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines pType, 156f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines *(SymOperand::create(pSymbolName)), 157f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines pRpnExpr)); 158f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines } else { 159f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines sections->push_back(new Assignment(Assignment::OUTPUT_SECTION, 160f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines pType, 161f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines *(SymOperand::create(pSymbolName)), 162f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines pRpnExpr)); 163f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines } 164f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines } else { 165f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_CommandQueue.push_back(new Assignment(Assignment::OUTSIDE_SECTIONS, 166f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines pType, 167f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines *(SymOperand::create(pSymbolName)), 168f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines pRpnExpr)); 169f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines } 170f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 171f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 17237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesbool ScriptFile::hasSectionsCmd() const { 173f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return m_bHasSectionsCmd; 174f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 175f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 17637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::enterSectionsCmd() { 177f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_bHasSectionsCmd = true; 178f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_bInSectionsCmd = true; 179f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_CommandQueue.push_back(new SectionsCmd()); 180f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 181f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 18237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::leaveSectionsCmd() { 183f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_bInSectionsCmd = false; 184f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 185f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 186f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesvoid ScriptFile::enterOutputSectDesc(const std::string& pName, 18737b74a387bb3993387029859c2d9d051c41c724eStephen Hines const OutputSectDesc::Prolog& pProlog) { 188f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines assert(!m_CommandQueue.empty()); 189f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines assert(m_bInSectionsCmd); 190f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines SectionsCmd* sections = llvm::cast<SectionsCmd>(back()); 191f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines sections->push_back(new OutputSectDesc(pName, pProlog)); 192f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 193f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_bInOutputSectDesc = true; 194f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 195f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 19637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::leaveOutputSectDesc(const OutputSectDesc::Epilog& pEpilog) { 197f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines assert(!m_CommandQueue.empty()); 198f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines assert(m_bInSectionsCmd); 199f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines SectionsCmd* sections = llvm::cast<SectionsCmd>(back()); 200f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 201f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines assert(!sections->empty() && m_bInOutputSectDesc); 202f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines OutputSectDesc* output_desc = llvm::cast<OutputSectDesc>(sections->back()); 203f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines output_desc->setEpilog(pEpilog); 204f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 205f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_bInOutputSectDesc = false; 206f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 207f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 208f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesvoid ScriptFile::addInputSectDesc(InputSectDesc::KeepPolicy pPolicy, 20937b74a387bb3993387029859c2d9d051c41c724eStephen Hines const InputSectDesc::Spec& pSpec) { 210f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines assert(!m_CommandQueue.empty()); 211f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines assert(m_bInSectionsCmd); 212f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines SectionsCmd* sections = llvm::cast<SectionsCmd>(back()); 213f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 214f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines assert(!sections->empty() && m_bInOutputSectDesc); 215f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines OutputSectDesc* output_sect = llvm::cast<OutputSectDesc>(sections->back()); 216f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 217f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines output_sect->push_back(new InputSectDesc(pPolicy, pSpec, *output_sect)); 218f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 219f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 22037b74a387bb3993387029859c2d9d051c41c724eStephen HinesRpnExpr* ScriptFile::createRpnExpr() { 221f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_pRpnExpr = RpnExpr::create(); 222f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return m_pRpnExpr; 223f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 224f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 22537b74a387bb3993387029859c2d9d051c41c724eStephen HinesStringList* ScriptFile::createStringList() { 226f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_pStringList = StringList::create(); 227f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return m_pStringList; 228f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 229f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 23037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::setAsNeeded(bool pEnable) { 231f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_bAsNeeded = pEnable; 232f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 233f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 234f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesconst std::string& ScriptFile::createParserStr(const char* pText, 23537b74a387bb3993387029859c2d9d051c41c724eStephen Hines size_t pLength) { 236f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines bool exist = false; 237f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines ParserStrEntry* entry = 23837b74a387bb3993387029859c2d9d051c41c724eStephen Hines g_ParserStrPool->insert(std::string(pText, pLength), exist); 239f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return entry->key(); 240f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 241f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 24237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ScriptFile::clearParserStrPool() { 243f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines g_ParserStrPool->clear(); 244f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 245f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 24637b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 247