00001 #ifndef ASSIGN_STATEMENT_H 00002 #define ASSIGN_STATEMENT_H 00003 00004 #include "simplestatement.h" 00005 #include "leftsidelist.h" 00006 #include "expressionlist.h" 00007 00008 class AssignStatement : public SimpleStatement { 00009 private: 00010 LeftSideList *leftSideList; 00011 ExpressionList *expressionList; 00012 00013 public: 00014 AssignStatement(SrcPosition *position, LeftSideList *leftSideList, ExpressionList *expressionList) 00015 : SimpleStatement(position), leftSideList(leftSideList), expressionList(expressionList) {} 00016 00017 AssignStatement(const AssignStatement& assignStatement) : SimpleStatement(assignStatement.position) { 00018 *(this) = assignStatement; 00019 } 00020 00021 virtual ~AssignStatement() { 00022 delete this->leftSideList; 00023 delete this->expressionList; 00024 } 00025 00026 LeftSideList *getLeftSideList() { 00027 return this->leftSideList; 00028 } 00029 00030 ExpressionList *getExpressionList() { 00031 return this->expressionList; 00032 } 00033 00034 virtual Ast& operator = (const Ast& ast); 00035 virtual bool operator == (const Ast& ast) const; 00036 00037 virtual VisitorReturn *visit(Visitor& visitor) { 00038 return visitor.visitAssignStatement(this); 00039 } 00040 00041 virtual Ast& clone() const { 00042 return *(new AssignStatement(new SrcPosition(*(this->position)), 00043 this->leftSideList ? dynamic_cast<LeftSideList*>(&(this->leftSideList->clone())) : 0, 00044 this->expressionList ? dynamic_cast<ExpressionList*>(&(this->expressionList->clone())) : 0)); 00045 } 00046 }; 00047 00048 #endif