Changeset 907eccb for src/SynTree
- Timestamp:
- Dec 22, 2016, 3:23:49 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 4c8621ac
- Parents:
- 0c286cf
- Location:
- src/SynTree
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/SynTree/Expression.h ¶
r0c286cf r907eccb 634 634 }; 635 635 636 /// UntypedTupleExpr represents a tuple expression ( [a, b, c] ) before resolution 637 class UntypedTupleExpr : public Expression { 638 public: 639 UntypedTupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr ); 640 UntypedTupleExpr( const UntypedTupleExpr &other ); 641 virtual ~UntypedTupleExpr(); 642 643 std::list<Expression*>& get_exprs() { return exprs; } 644 645 virtual UntypedTupleExpr *clone() const { return new UntypedTupleExpr( *this ); } 646 virtual void accept( Visitor &v ) { v.visit( this ); } 647 virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); } 648 virtual void print( std::ostream &os, int indent = 0 ) const; 649 private: 650 std::list<Expression*> exprs; 651 }; 652 636 653 /// TupleExpr represents a tuple expression ( [a, b, c] ) 637 654 class TupleExpr : public Expression { 638 655 public: 639 TupleExpr( const std::list< Expression * > & exprs = std::list< Expression * >(), Expression *_aname = nullptr );656 TupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr ); 640 657 TupleExpr( const TupleExpr &other ); 641 658 virtual ~TupleExpr(); 642 659 643 void set_exprs( std::list<Expression*> newValue ) { exprs = newValue; }644 660 std::list<Expression*>& get_exprs() { return exprs; } 645 661 -
TabularUnified src/SynTree/Mutator.cc ¶
r0c286cf r907eccb 345 345 Expression* Mutator::mutate( ImplicitCopyCtorExpr *impCpCtorExpr ) { 346 346 impCpCtorExpr->set_env( maybeMutate( impCpCtorExpr->get_env(), *this ) ); 347 impCpCtorExpr->set_result( maybeMutate( impCpCtorExpr->get_result(), *this ) ); 347 348 impCpCtorExpr->set_callExpr( maybeMutate( impCpCtorExpr->get_callExpr(), *this ) ); 348 349 mutateAll( impCpCtorExpr->get_tempDecls(), *this ); … … 378 379 rangeExpr->set_high( maybeMutate( rangeExpr->get_high(), *this ) ); 379 380 return rangeExpr; 381 } 382 383 Expression *Mutator::mutate( UntypedTupleExpr *tupleExpr ) { 384 tupleExpr->set_env( maybeMutate( tupleExpr->get_env(), *this ) ); 385 tupleExpr->set_result( maybeMutate( tupleExpr->get_result(), *this ) ); 386 mutateAll( tupleExpr->get_exprs(), *this ); 387 return tupleExpr; 380 388 } 381 389 -
TabularUnified src/SynTree/Mutator.h ¶
r0c286cf r907eccb 78 78 virtual Expression* mutate( UntypedValofExpr *valofExpr ); 79 79 virtual Expression* mutate( RangeExpr *rangeExpr ); 80 virtual Expression* mutate( UntypedTupleExpr *tupleExpr ); 80 81 virtual Expression* mutate( TupleExpr *tupleExpr ); 81 82 virtual Expression* mutate( TupleIndexExpr *tupleExpr ); -
TabularUnified src/SynTree/SynTree.h ¶
r0c286cf r907eccb 83 83 class UntypedValofExpr; 84 84 class RangeExpr; 85 class UntypedTupleExpr; 85 86 class TupleExpr; 86 87 class TupleIndexExpr; -
TabularUnified src/SynTree/TupleExpr.cc ¶
r0c286cf r907eccb 21 21 #include "VarExprReplacer.h" 22 22 23 UntypedTupleExpr::UntypedTupleExpr( const std::list< Expression * > & exprs, Expression *_aname ) : Expression( _aname ), exprs( exprs ) { 24 } 25 26 UntypedTupleExpr::UntypedTupleExpr( const UntypedTupleExpr &other ) : Expression( other ) { 27 cloneAll( other.exprs, exprs ); 28 } 29 30 UntypedTupleExpr::~UntypedTupleExpr() { 31 deleteAll( exprs ); 32 } 33 34 void UntypedTupleExpr::print( std::ostream &os, int indent ) const { 35 os << "Untyped Tuple:" << std::endl; 36 printAll( exprs, os, indent+2 ); 37 Expression::print( os, indent ); 38 } 39 23 40 TupleExpr::TupleExpr( const std::list< Expression * > & exprs, Expression *_aname ) : Expression( _aname ), exprs( exprs ) { 24 if ( ! exprs.empty() ) { 25 if ( std::all_of( exprs.begin(), exprs.end(), [](Expression * expr) { return expr->get_result(); } ) ) { 26 set_result( Tuples::makeTupleType( exprs ) ); 27 } 28 } 41 set_result( Tuples::makeTupleType( exprs ) ); 29 42 } 30 43 … … 45 58 TupleIndexExpr::TupleIndexExpr( Expression * tuple, unsigned int index ) : tuple( tuple ), index( index ) { 46 59 TupleType * type = safe_dynamic_cast< TupleType * >( tuple->get_result() ); 47 assert ( type->size() >index );60 assertf( type->size() > index, "TupleIndexExpr index out of bounds: tuple size %d, requested index %d", type->size(), index ); 48 61 set_result( (*std::next( type->get_types().begin(), index ))->clone() ); 49 62 get_result()->set_isLvalue( type->get_isLvalue() ); -
TabularUnified src/SynTree/Visitor.cc ¶
r0c286cf r907eccb 273 273 274 274 void Visitor::visit( ImplicitCopyCtorExpr *impCpCtorExpr ) { 275 maybeAccept( impCpCtorExpr->get_result(), *this ); 275 276 maybeAccept( impCpCtorExpr->get_callExpr(), *this ); 276 277 acceptAll( impCpCtorExpr->get_tempDecls(), *this ); … … 298 299 maybeAccept( rangeExpr->get_low(), *this ); 299 300 maybeAccept( rangeExpr->get_high(), *this ); 301 } 302 303 void Visitor::visit( UntypedTupleExpr *tupleExpr ) { 304 maybeAccept( tupleExpr->get_result(), *this ); 305 acceptAll( tupleExpr->get_exprs(), *this ); 300 306 } 301 307 -
TabularUnified src/SynTree/Visitor.h ¶
r0c286cf r907eccb 78 78 virtual void visit( UntypedValofExpr *valofExpr ); 79 79 virtual void visit( RangeExpr *rangeExpr ); 80 virtual void visit( UntypedTupleExpr *tupleExpr ); 80 81 virtual void visit( TupleExpr *tupleExpr ); 81 82 virtual void visit( TupleIndexExpr *tupleExpr );
Note: See TracChangeset
for help on using the changeset viewer.