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 14 namespace mcld { 15 16 class Module; 17 class RpnEvaluator; 18 class RpnExpr; 19 class SymOperand; 20 21 /** \class Assignment 22 * \brief This class defines the interfaces to assignment command. 23 */ 24 25 class 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 level()42 Level level() const { return m_Level; } 43 type()44 Type type() const { return m_Type; } 45 symbol()46 const SymOperand& symbol() const { return m_Symbol; } symbol()47 SymOperand& symbol() { return m_Symbol; } 48 getRpnExpr()49 const RpnExpr& getRpnExpr() const { return m_RpnExpr; } getRpnExpr()50 RpnExpr& getRpnExpr() { return m_RpnExpr; } 51 52 void dump() const; 53 classof(const ScriptCommand * pCmd)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