1//===- Assignment.h -------------------------------------------------------===// 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#ifndef MCLD_SCRIPT_ASSIGNMENT_H_ 10#define MCLD_SCRIPT_ASSIGNMENT_H_ 11 12#include "mcld/Script/ScriptCommand.h" 13 14namespace mcld { 15 16class Module; 17class RpnEvaluator; 18class RpnExpr; 19class SymOperand; 20 21/** \class Assignment 22 * \brief This class defines the interfaces to assignment command. 23 */ 24 25class Assignment : public ScriptCommand { 26 public: 27 enum Level { 28 OUTSIDE_SECTIONS, // outside SECTIONS command 29 OUTPUT_SECTION, // related to an output section 30 INPUT_SECTION // related to an input section 31 }; 32 33 enum Type { DEFAULT, HIDDEN, PROVIDE, PROVIDE_HIDDEN }; 34 35 public: 36 Assignment(Level pLevel, Type pType, SymOperand& pSymbol, RpnExpr& pRpnExpr); 37 38 ~Assignment(); 39 40 Assignment& operator=(const Assignment& pAssignment); 41 42 Level level() const { return m_Level; } 43 44 Type type() const { return m_Type; } 45 46 const SymOperand& symbol() const { return m_Symbol; } 47 SymOperand& symbol() { return m_Symbol; } 48 49 const RpnExpr& getRpnExpr() const { return m_RpnExpr; } 50 RpnExpr& getRpnExpr() { return m_RpnExpr; } 51 52 void dump() const; 53 54 static bool classof(const ScriptCommand* pCmd) { 55 return pCmd->getKind() == ScriptCommand::ASSIGNMENT; 56 } 57 58 void activate(Module& pModule); 59 60 /// assign - evaluate the rhs and assign the result to lhs. 61 bool assign(RpnEvaluator& pEvaluator); 62 63 private: 64 Level m_Level; 65 Type m_Type; 66 SymOperand& m_Symbol; 67 RpnExpr& m_RpnExpr; 68}; 69 70} // namespace mcld 71 72#endif // MCLD_SCRIPT_ASSIGNMENT_H_ 73