Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Expression.cc

    rb6fe7e6 r6eb8948  
    311311}
    312312
    313 UntypedMemberExpr::UntypedMemberExpr( std::string _member, Expression *_aggregate, Expression *_aname ) :
     313UntypedMemberExpr::UntypedMemberExpr( Expression * _member, Expression *_aggregate, Expression *_aname ) :
    314314                Expression( _aname ), member(_member), aggregate(_aggregate) {}
    315315
    316316UntypedMemberExpr::UntypedMemberExpr( const UntypedMemberExpr &other ) :
    317                 Expression( other ), member( other.member ), aggregate( maybeClone( other.aggregate ) ) {
     317                Expression( other ), member( maybeClone( other.member ) ), aggregate( maybeClone( other.aggregate ) ) {
    318318}
    319319
    320320UntypedMemberExpr::~UntypedMemberExpr() {
    321321        delete aggregate;
     322        delete member;
    322323}
    323324
    324325void UntypedMemberExpr::print( std::ostream &os, int indent ) const {
    325         os << "Untyped Member Expression, with field: " << get_member();
     326        os << "Untyped Member Expression, with field: " << std::endl;
     327        get_member()->print(os, indent+4);
     328        os << std::string( indent+2, ' ' );
    326329
    327330        Expression *agg = get_aggregate();
    328         os << ", from aggregate: ";
     331        os << "from aggregate: " << std::endl;
    329332        if (agg != 0) {
    330                 os << std::string( indent + 2, ' ' );
    331                 agg->print(os, indent + 2);
     333                os << std::string( indent + 4, ' ' );
     334                agg->print(os, indent + 4);
    332335        }
    333336        os << std::string( indent+2, ' ' );
     
    372375}
    373376
    374 
    375 UntypedExpr::UntypedExpr( Expression *_function, Expression *_aname ) : Expression( _aname ), function( _function ) {}
     377UntypedExpr::UntypedExpr( Expression *_function, const std::list<Expression *> &_args, Expression *_aname ) :
     378                Expression( _aname ), function(_function), args(_args) {}
    376379
    377380UntypedExpr::UntypedExpr( const UntypedExpr &other ) :
     
    379382        cloneAll( other.args, args );
    380383}
    381 
    382 UntypedExpr::UntypedExpr( Expression *_function, std::list<Expression *> &_args, Expression *_aname ) :
    383                 Expression( _aname ), function(_function), args(_args) {}
    384384
    385385UntypedExpr::~UntypedExpr() {
     
    565565}
    566566
     567StmtExpr::StmtExpr( CompoundStmt *statements ) : statements( statements ) {
     568        assert( statements );
     569        std::list< Statement * > & body = statements->get_kids();
     570        if ( ! body.empty() ) {
     571                if ( ExprStmt * exprStmt = dynamic_cast< ExprStmt * >( body.back() ) ) {
     572                        cloneAll( exprStmt->get_expr()->get_results(), get_results() );
     573                }
     574        }
     575}
     576StmtExpr::StmtExpr( const StmtExpr &other ) : statements( other.statements->clone() ) {}
     577StmtExpr::~StmtExpr() {
     578        delete statements;
     579}
     580void StmtExpr::print( std::ostream &os, int indent ) const {
     581        os << std::string( indent, ' ' ) << "Statement Expression: " << std::endl;
     582        statements->print( os, indent+2 );
     583}
     584
    567585std::ostream & operator<<( std::ostream & out, const Expression * expr ) {
    568586        expr->print( out );
Note: See TracChangeset for help on using the changeset viewer.