//===- FileAction.cpp -----------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "mcld/MC/FileAction.h" #include "mcld/MC/Input.h" #include "mcld/MC/InputBuilder.h" namespace mcld { //===----------------------------------------------------------------------===// // ContextAction //===----------------------------------------------------------------------===// ContextAction::ContextAction(unsigned int pPosition) : InputAction(pPosition) { } bool ContextAction::activate(InputBuilder& pBuilder) const { Input* input = *pBuilder.getCurrentNode(); if (input->hasContext()) return false; // already got type - for example, bitcode if (input->type() == Input::Script || input->type() == Input::Object || input->type() == Input::DynObj || input->type() == Input::Archive) return false; return pBuilder.setContext(*input); } //===----------------------------------------------------------------------===// // MemoryAreaAction //===----------------------------------------------------------------------===// MemoryAreaAction::MemoryAreaAction(unsigned int pPosition, FileHandle::OpenModeEnum pMode, FileHandle::PermissionEnum pPerm) : InputAction(pPosition), m_Mode(pMode), m_Permission(pPerm) { } bool MemoryAreaAction::activate(InputBuilder& pBuilder) const { Input* input = *pBuilder.getCurrentNode(); if (input->hasMemArea()) return false; // already got type - for example, bitcode if (input->type() == Input::Script || input->type() == Input::Object || input->type() == Input::DynObj || input->type() == Input::Archive) return false; return pBuilder.setMemory(*input, m_Mode, m_Permission); } } // namespace mcld