Changes in src/SynTree/TupleExpr.cc [d3b7937:65660bd]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/TupleExpr.cc
rd3b7937 r65660bd 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // TupleExpr.cc -- 7 // TupleExpr.cc -- 8 8 // 9 9 // Author : Richard C. Bilson … … 16 16 #include "Expression.h" 17 17 #include "Common/utility.h" 18 #include "Type.h" 19 #include "Declaration.h" 20 #include "Tuples/Tuples.h" 18 21 19 TupleExpr::TupleExpr( Expression *_aname ) : Expression( _aname ) { 22 TupleExpr::TupleExpr( const std::list< Expression * > & exprs, Expression *_aname ) : Expression( _aname ), exprs( exprs ) { 23 if ( ! exprs.empty() ) { 24 if ( std::all_of( exprs.begin(), exprs.end(), [](Expression * expr) { return expr->get_result(); } ) ) { 25 set_result( Tuples::makeTupleType( exprs ) ); 26 } 27 } 20 28 } 21 29 … … 29 37 30 38 void TupleExpr::print( std::ostream &os, int indent ) const { 31 os << std::string( indent, ' ' ) <<"Tuple:" << std::endl;39 os << "Tuple:" << std::endl; 32 40 printAll( exprs, os, indent+2 ); 33 41 Expression::print( os, indent ); 34 42 } 35 43 36 SolvedTupleExpr::SolvedTupleExpr( std::list<Expression *> &_exprs, Expression *_aname ) : Expression( _aname ) { 37 std::copy(_exprs.begin(), _exprs.end(), back_inserter(exprs)); 44 TupleIndexExpr::TupleIndexExpr( Expression * tuple, unsigned int index ) : tuple( tuple ), index( index ) { 45 TupleType * type = safe_dynamic_cast< TupleType * >( tuple->get_result() ); 46 assert( type->size() > index ); 47 set_result( (*std::next( type->get_types().begin(), index ))->clone() ); 48 get_result()->set_isLvalue( type->get_isLvalue() ); 38 49 } 39 50 40 SolvedTupleExpr::SolvedTupleExpr( const SolvedTupleExpr &other ) : Expression( other ) { 41 cloneAll( other.exprs, exprs ); 51 TupleIndexExpr::TupleIndexExpr( const TupleIndexExpr &other ) : Expression( other ), tuple( other.tuple->clone() ), index( other.index ) { 42 52 } 43 53 44 void SolvedTupleExpr::print( std::ostream &os, int indent ) const { 45 os << std::string( indent, ' ' ) << "Solved Tuple:" << std::endl; 46 printAll( exprs, os, indent+2 ); 54 TupleIndexExpr::~TupleIndexExpr() { 55 delete tuple; 56 } 57 58 void TupleIndexExpr::print( std::ostream &os, int indent ) const { 59 os << "Tuple Index Expression, with tuple:" << std::endl; 60 os << std::string( indent+2, ' ' ); 61 tuple->print( os, indent+2 ); 62 os << std::string( indent+2, ' ' ) << "with index: " << index << std::endl; 47 63 Expression::print( os, indent ); 48 64 } 65 66 MemberTupleExpr::MemberTupleExpr( Expression * member, Expression * aggregate, Expression * _aname ) : Expression( _aname ) { 67 set_result( maybeClone( member->get_result() ) ); // xxx - ??? 68 } 69 70 MemberTupleExpr::MemberTupleExpr( const MemberTupleExpr &other ) : Expression( other ), member( other.member->clone() ), aggregate( other.aggregate->clone() ) { 71 } 72 73 MemberTupleExpr::~MemberTupleExpr() { 74 delete member; 75 delete aggregate; 76 } 77 78 void MemberTupleExpr::print( std::ostream &os, int indent ) const { 79 os << "Member Tuple Expression, with aggregate:" << std::endl; 80 os << std::string( indent+2, ' ' ); 81 aggregate->print( os, indent+2 ); 82 os << std::string( indent+2, ' ' ) << "with member: " << std::endl; 83 os << std::string( indent+2, ' ' ); 84 member->print( os, indent+2 ); 85 Expression::print( os, indent ); 86 } 87 88 89 TupleAssignExpr::TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls, Expression * _aname ) : Expression( _aname ), assigns( assigns ), tempDecls( tempDecls ) { 90 set_result( Tuples::makeTupleType( assigns ) ); 91 } 92 93 TupleAssignExpr::TupleAssignExpr( const TupleAssignExpr &other ) : Expression( other ), tempDecls( other.tempDecls ) /* temporary */ { 94 cloneAll( other.assigns, assigns ); 95 // xxx - clone needs to go into assigns and replace tempDecls 96 } 97 98 TupleAssignExpr::~TupleAssignExpr() { 99 deleteAll( assigns ); 100 // deleteAll( tempDecls ); 101 } 102 103 void TupleAssignExpr::print( std::ostream &os, int indent ) const { 104 os << "Tuple Assignment Expression, with temporaries:" << std::endl; 105 printAll( tempDecls, os, indent+4 ); 106 os << std::string( indent+2, ' ' ) << "with assignments: " << std::endl; 107 printAll( assigns, os, indent+4 ); 108 Expression::print( os, indent ); 109 } 110 111 49 112 50 113 // Local Variables: //
Note:
See TracChangeset
for help on using the changeset viewer.