| //===- 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/MCLDInput.h> |
| #include <mcld/MC/InputBuilder.h> |
| #include <mcld/MC/ContextFactory.h> |
| #include <mcld/Support/MemoryAreaFactory.h> |
| |
| using 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::OpenMode pMode, |
| FileHandle::Permission 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); |
| } |
| |