Changes in src/SynTree/Initializer.cc [f1b1e4c:d3b7937]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/Initializer.cc
rf1b1e4c rd3b7937 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Initializer.cc -- 7 // Initializer.cc -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Fri May 13 13:23:03 201613 // Update Count : 2812 // Last Modified On : Wed Aug 12 14:05:25 2015 13 // Update Count : 14 14 14 // 15 15 16 16 #include "Initializer.h" 17 17 #include "Expression.h" 18 #include "Statement.h"19 18 #include "Common/utility.h" 20 19 21 Initializer::Initializer( bool maybeConstructed ) : maybeConstructed( maybeConstructed ) {} 22 Initializer::Initializer( const Initializer & other ) : maybeConstructed( other.maybeConstructed ) { 23 } 24 20 Initializer::Initializer() {} 25 21 26 22 Initializer::~Initializer() {} … … 35 31 void Initializer::print( std::ostream &os, int indent ) {} 36 32 37 SingleInit::SingleInit( Expression *v, const std::list< Expression *> &_designators, bool maybeConstructed ) : Initializer( maybeConstructed ), value ( v ), designators( _designators ) {33 SingleInit::SingleInit( Expression *v, std::list< Expression *> &_designators ) : value ( v ), designators( _designators ) { 38 34 } 39 35 40 SingleInit::SingleInit( const SingleInit &other ) : Initializer(other), value ( maybeClone( other.value )) {36 SingleInit::SingleInit( const SingleInit &other ) : value ( other.value ) { 41 37 cloneAll(other.designators, designators ); 42 38 } 43 39 44 SingleInit::~SingleInit() { 45 deleteAll(designators); 46 }40 SingleInit::~SingleInit() {} 41 42 SingleInit *SingleInit::clone() const { return new SingleInit( *this); } 47 43 48 44 void SingleInit::print( std::ostream &os, int indent ) { 49 45 os << std::endl << std::string(indent, ' ' ) << "Simple Initializer: " << std::endl; 50 os << std::string(indent+4, ' ' );51 46 value->print( os, indent+4 ); 52 47 53 48 if ( ! designators.empty() ) { 54 os << std::endl << std::string(indent + 2, ' ' ) << "designated by: " << std::endl;49 os << std::endl << std::string(indent + 2, ' ' ) << "designated by: " << std::endl; 55 50 for ( std::list < Expression * >::iterator i = designators.begin(); i != designators.end(); i++ ) { 56 os << std::string(indent + 4, ' ' );57 51 ( *i )->print(os, indent + 4 ); 58 52 } … … 60 54 } 61 55 62 ListInit::ListInit( const std::list<Initializer*> &_initializers, const std::list<Expression *> &_designators, bool maybeConstructed)63 : Initializer( maybeConstructed ),initializers( _initializers ), designators( _designators ) {56 ListInit::ListInit( std::list<Initializer*> &_initializers, std::list<Expression *> &_designators ) 57 : initializers( _initializers ), designators( _designators ) { 64 58 } 65 59 66 ListInit::~ListInit() { 67 deleteAll( initializers ); 68 deleteAll( designators ); 60 ListInit::~ListInit() {} 61 62 ListInit *ListInit::clone() const { 63 return new ListInit( *this ); 69 64 } 70 65 71 66 void ListInit::print( std::ostream &os, int indent ) { 72 os << std::endl << std::string(indent, ' ') << "Compound initializer: "; 67 os << std::endl << std::string(indent, ' ') << "Compound initializer: "; 73 68 if ( ! designators.empty() ) { 74 69 os << std::string(indent + 2, ' ' ) << "designated by: ["; 75 70 for ( std::list < Expression * >::iterator i = designators.begin(); 76 71 i != designators.end(); i++ ) { 77 ( *i )->print(os, indent + 4 ); 72 ( *i )->print(os, indent + 4 ); 78 73 } // for 79 74 80 75 os << std::string(indent + 2, ' ' ) << "]"; 81 76 } // if 82 77 83 for ( std::list<Initializer *>::iterator i = initializers.begin(); i != initializers.end(); i++ ) 78 for ( std::list<Initializer *>::iterator i = initializers.begin(); i != initializers.end(); i++ ) 84 79 (*i)->print( os, indent + 2 ); 85 80 } 86 87 88 ConstructorInit::ConstructorInit( Statement * ctor, Statement * dtor, Initializer * init ) : Initializer( true ), ctor( ctor ), dtor( dtor ), init( init ) {}89 ConstructorInit::ConstructorInit( const ConstructorInit &other ) : Initializer( other ), ctor( maybeClone( other.ctor ) ), dtor( maybeClone( other.dtor ) ), init( maybeClone( other.init ) ) {90 }91 92 ConstructorInit::~ConstructorInit() {93 delete ctor;94 delete dtor;95 delete init;96 }97 98 void ConstructorInit::print( std::ostream &os, int indent ) {99 os << std::endl << std::string(indent, ' ') << "Constructor initializer: " << std::endl;100 if ( ctor ) {101 os << std::string(indent+2, ' ');102 os << "initially constructed with ";103 ctor->print( os, indent+4 );104 } // if105 106 if ( dtor ) {107 os << std::string(indent+2, ' ');108 os << "destructed with ";109 dtor->print( os, indent+4 );110 }111 112 if ( init ) {113 os << std::string(indent+2, ' ');114 os << "with fallback C-style initializer: ";115 init->print( os, indent+4 );116 }117 }118 119 std::ostream & operator<<( std::ostream & out, Initializer * init ) {120 init->print( out );121 return out;122 }123 124 81 // Local Variables: // 125 82 // tab-width: 4 //
Note:
See TracChangeset
for help on using the changeset viewer.