You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.7 KiB
73 lines
1.7 KiB
//===- Assignment.h -------------------------------------------------------===//
|
|
//
|
|
// The MCLinker Project
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef MCLD_SCRIPT_ASSIGNMENT_H_
|
|
#define MCLD_SCRIPT_ASSIGNMENT_H_
|
|
|
|
#include "mcld/Script/ScriptCommand.h"
|
|
|
|
namespace mcld {
|
|
|
|
class Module;
|
|
class RpnEvaluator;
|
|
class RpnExpr;
|
|
class SymOperand;
|
|
|
|
/** \class Assignment
|
|
* \brief This class defines the interfaces to assignment command.
|
|
*/
|
|
|
|
class Assignment : public ScriptCommand {
|
|
public:
|
|
enum Level {
|
|
OUTSIDE_SECTIONS, // outside SECTIONS command
|
|
OUTPUT_SECTION, // related to an output section
|
|
INPUT_SECTION // related to an input section
|
|
};
|
|
|
|
enum Type { DEFAULT, HIDDEN, PROVIDE, PROVIDE_HIDDEN };
|
|
|
|
public:
|
|
Assignment(Level pLevel, Type pType, SymOperand& pSymbol, RpnExpr& pRpnExpr);
|
|
|
|
~Assignment();
|
|
|
|
Assignment& operator=(const Assignment& pAssignment);
|
|
|
|
Level level() const { return m_Level; }
|
|
|
|
Type type() const { return m_Type; }
|
|
|
|
const SymOperand& symbol() const { return m_Symbol; }
|
|
SymOperand& symbol() { return m_Symbol; }
|
|
|
|
const RpnExpr& getRpnExpr() const { return m_RpnExpr; }
|
|
RpnExpr& getRpnExpr() { return m_RpnExpr; }
|
|
|
|
void dump() const;
|
|
|
|
static bool classof(const ScriptCommand* pCmd) {
|
|
return pCmd->getKind() == ScriptCommand::ASSIGNMENT;
|
|
}
|
|
|
|
void activate(Module& pModule);
|
|
|
|
/// assign - evaluate the rhs and assign the result to lhs.
|
|
bool assign(RpnEvaluator& pEvaluator);
|
|
|
|
private:
|
|
Level m_Level;
|
|
Type m_Type;
|
|
SymOperand& m_Symbol;
|
|
RpnExpr& m_RpnExpr;
|
|
};
|
|
|
|
} // namespace mcld
|
|
|
|
#endif // MCLD_SCRIPT_ASSIGNMENT_H_
|