00001 #ifndef SEQUENTIAL_FIELD_DECLARATION_H 00002 #define SEQUENTIAL_FIELD_DECLARATION_H 00003 00004 #include "fielddeclaration.h" 00005 #include "simplefielddeclaration.h" 00006 00007 class SequentialFieldDeclaration : public FieldDeclaration { 00008 private: 00009 FieldDeclaration *fieldDeclaration; 00010 SimpleFieldDeclaration *simpleFieldDeclaration; 00011 00012 00013 public: 00014 SequentialFieldDeclaration(SrcPosition *position, FieldDeclaration *fieldDeclaration, SimpleFieldDeclaration *simpleFieldDeclaration) 00015 : FieldDeclaration(position), fieldDeclaration(fieldDeclaration), simpleFieldDeclaration(simpleFieldDeclaration) {} 00016 00017 SequentialFieldDeclaration(const SequentialFieldDeclaration& sequentialFieldDeclaration) : FieldDeclaration(sequentialFieldDeclaration.position) { 00018 *(this) = sequentialFieldDeclaration; 00019 } 00020 00021 virtual ~SequentialFieldDeclaration() { 00022 delete this->fieldDeclaration; 00023 delete this->simpleFieldDeclaration; 00024 } 00025 00026 FieldDeclaration *getFieldDeclaration() { 00027 return this->fieldDeclaration; 00028 } 00029 00030 SimpleFieldDeclaration *getSimpleFieldDeclaration() { 00031 return this->simpleFieldDeclaration; 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.visitSequentialFieldDeclaration(this); 00039 } 00040 00041 virtual Ast& clone() const { 00042 return *(new SequentialFieldDeclaration(new SrcPosition(*(this->position)), 00043 this->fieldDeclaration ? dynamic_cast<FieldDeclaration*>(&(this->fieldDeclaration->clone())) : 0, 00044 this->simpleFieldDeclaration ? dynamic_cast<SimpleFieldDeclaration*>(&(this->simpleFieldDeclaration->clone())) : 0)); 00045 } 00046 }; 00047 00048 #endif