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