Changes in src/SynTree/Initializer.h [e4d829b:d7dc824]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/Initializer.h
re4d829b rd7dc824 25 25 #include "Visitor.h" 26 26 27 // Designation: list of designator (NameExpr, VariableExpr, and ConstantExpr) expressions that specify an object being initialized. 28 class Designation : public BaseSyntaxNode { 29 public: 30 Designation( const std::list< Expression * > & designators ); 31 Designation( const Designation & other ); 32 virtual ~Designation(); 33 34 std::list< Expression * > & get_designators() { return designators; } 35 36 virtual Designation * clone() const { return new Designation( *this ); }; 37 virtual void accept( Visitor &v ) { v.visit( this ); } 38 virtual Designation * acceptMutator( Mutator &m ) { return m.mutate( this ); } 39 virtual void print( std::ostream &os, int indent = 0 ) const; 40 private: 41 std::list< Expression * > designators; 42 }; 43 44 const std::list<Designation *> noDesignators; 27 const std::list<Expression*> noDesignators; 45 28 46 29 // Initializer: base class for object initializers (provide default values) 47 30 class Initializer : public BaseSyntaxNode { 48 31 public: 32 // Initializer( std::string _name = std::string(""), int _pos = 0 ); 49 33 Initializer( bool maybeConstructed ); 50 34 Initializer( const Initializer & other ); 51 35 virtual ~Initializer(); 36 37 static std::string designator_name( Expression *designator ); 38 39 // void set_name( std::string newValue ) { name = newValue; } 40 // std::string get_name() const { return name; } 41 42 // void set_pos( int newValue ) { pos = newValue; } 43 // int get_pos() const { return pos; } 44 virtual void set_designators( std::list<Expression *> & ) { assert(false); } 45 virtual std::list<Expression *> &get_designators() { 46 assert(false); 47 std::list<Expression *> *ret = 0; return *ret; // never reached 48 } 52 49 53 50 bool get_maybeConstructed() { return maybeConstructed; } … … 56 53 virtual void accept( Visitor &v ) = 0; 57 54 virtual Initializer *acceptMutator( Mutator &m ) = 0; 58 virtual void print( std::ostream &os, int indent = 0 ) const= 0;55 virtual void print( std::ostream &os, int indent = 0 ) = 0; 59 56 private: 57 // std::string name; 58 // int pos; 60 59 bool maybeConstructed; 61 60 }; … … 64 63 class SingleInit : public Initializer { 65 64 public: 66 SingleInit( Expression *value, bool maybeConstructed = false );65 SingleInit( Expression *value, const std::list< Expression *> &designators = std::list< Expression * >(), bool maybeConstructed = false ); 67 66 SingleInit( const SingleInit &other ); 68 67 virtual ~SingleInit(); … … 71 70 void set_value( Expression *newValue ) { value = newValue; } 72 71 72 std::list<Expression *> &get_designators() { return designators; } 73 void set_designators( std::list<Expression *> &newValue ) { designators = newValue; } 74 73 75 virtual SingleInit *clone() const { return new SingleInit( *this); } 74 76 virtual void accept( Visitor &v ) { v.visit( this ); } 75 77 virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); } 76 virtual void print( std::ostream &os, int indent = 0 ) const;78 virtual void print( std::ostream &os, int indent = 0 ); 77 79 private: 78 80 //Constant *value; 79 81 Expression *value; // has to be a compile-time constant 82 std::list< Expression * > designators; 80 83 }; 81 84 … … 85 88 public: 86 89 ListInit( const std::list<Initializer*> &initializers, 87 const std::list< Designation *> &designators = {}, bool maybeConstructed = false );90 const std::list<Expression *> &designators = std::list< Expression * >(), bool maybeConstructed = false ); 88 91 ListInit( const ListInit & other ); 89 92 virtual ~ListInit(); 90 93 91 std::list<Designation *> & get_designations() { return designations; } 92 std::list<Initializer *> & get_initializers() { return initializers; } 94 void set_designators( std::list<Expression *> &newValue ) { designators = newValue; } 95 std::list<Expression *> &get_designators() { return designators; } 96 void set_initializers( std::list<Initializer*> &newValue ) { initializers = newValue; } 97 std::list<Initializer*> &get_initializers() { return initializers; } 93 98 94 99 typedef std::list<Initializer*>::iterator iterator; 95 typedef std::list<Initializer*>::const_iterator const_iterator;96 100 iterator begin() { return initializers.begin(); } 97 101 iterator end() { return initializers.end(); } 98 const_iterator begin() const { return initializers.begin(); }99 const_iterator end() const { return initializers.end(); }100 102 101 103 virtual ListInit *clone() const { return new ListInit( *this ); } 102 104 virtual void accept( Visitor &v ) { v.visit( this ); } 103 105 virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); } 104 virtual void print( std::ostream &os, int indent = 0 ) const;106 virtual void print( std::ostream &os, int indent = 0 ); 105 107 private: 106 std::list<Initializer 107 std::list< Designation *> designations; // order/length is consistent with initializers108 std::list<Initializer*> initializers; // order *is* important 109 std::list<Expression *> designators; 108 110 }; 109 111 … … 128 130 virtual void accept( Visitor &v ) { v.visit( this ); } 129 131 virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); } 130 virtual void print( std::ostream &os, int indent = 0 ) const;132 virtual void print( std::ostream &os, int indent = 0 ); 131 133 132 134 private: … … 138 140 }; 139 141 140 std::ostream & operator<<( std::ostream & out, const Initializer * init ); 141 std::ostream & operator<<( std::ostream & out, const Designation * des ); 142 std::ostream & operator<<( std::ostream & out, Initializer * init ); 142 143 143 144 #endif // INITIALIZER_H
Note:
See TracChangeset
for help on using the changeset viewer.