Home | History | Annotate | Download | only in Script
      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 
     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