Changes in src/SynTree/TupleExpr.cc [65660bd:d3b7937]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/TupleExpr.cc
r65660bd rd3b7937 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"21 18 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 } 19 TupleExpr::TupleExpr( Expression *_aname ) : Expression( _aname ) { 28 20 } 29 21 … … 37 29 38 30 void TupleExpr::print( std::ostream &os, int indent ) const { 39 os << "Tuple:" << std::endl;31 os << std::string( indent, ' ' ) << "Tuple:" << std::endl; 40 32 printAll( exprs, os, indent+2 ); 41 33 Expression::print( os, indent ); 42 34 } 43 35 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() ); 36 SolvedTupleExpr::SolvedTupleExpr( std::list<Expression *> &_exprs, Expression *_aname ) : Expression( _aname ) { 37 std::copy(_exprs.begin(), _exprs.end(), back_inserter(exprs)); 49 38 } 50 39 51 TupleIndexExpr::TupleIndexExpr( const TupleIndexExpr &other ) : Expression( other ), tuple( other.tuple->clone() ), index( other.index ) { 40 SolvedTupleExpr::SolvedTupleExpr( const SolvedTupleExpr &other ) : Expression( other ) { 41 cloneAll( other.exprs, exprs ); 52 42 } 53 43 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; 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 ); 63 47 Expression::print( os, indent ); 64 48 } 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 tempDecls96 }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 112 49 113 50 // Local Variables: //
Note:
See TracChangeset
for help on using the changeset viewer.