Changeset 0f79853
- Timestamp:
- Jun 7, 2018, 9:55:28 AM (5 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, with_gc
- Children:
- 61d9b4b
- Parents:
- 2a6c115
- Location:
- src
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/CodeGenerator.cc
r2a6c115 r0f79853 836 836 assertf( ! genC, "Deleted expressions should not reach code generation." ); 837 837 expr->expr->accept( *visitor ); 838 } 839 840 void CodeGenerator::postvisit( DefaultArgExpr * arg ) { 841 assertf( ! genC, "Default argument expressions should not reach code generation." ); 842 arg->expr->accept( *visitor ); 838 843 } 839 844 -
src/CodeGen/CodeGenerator.h
r2a6c115 r0f79853 94 94 void postvisit( ConstructorExpr * ); 95 95 void postvisit( DeletedExpr * ); 96 void postvisit( DefaultArgExpr * ); 96 97 void postvisit( GenericExpr * ); 97 98 -
src/Common/PassVisitor.h
r2a6c115 r0f79853 125 125 virtual void visit( InitExpr * initExpr ) override final; 126 126 virtual void visit( DeletedExpr * delExpr ) override final; 127 virtual void visit( DefaultArgExpr * argExpr ) override final; 127 128 virtual void visit( GenericExpr * genExpr ) override final; 128 129 … … 224 225 virtual Expression * mutate( InitExpr * initExpr ) override final; 225 226 virtual Expression * mutate( DeletedExpr * delExpr ) override final; 227 virtual Expression * mutate( DefaultArgExpr * argExpr ) override final; 226 228 virtual Expression * mutate( GenericExpr * genExpr ) override final; 227 229 -
src/Common/PassVisitor.impl.h
r2a6c115 r0f79853 2084 2084 2085 2085 //-------------------------------------------------------------------------- 2086 // DefaultArgExpr 2087 template< typename pass_type > 2088 void PassVisitor< pass_type >::visit( DefaultArgExpr * node ) { 2089 VISIT_START( node ); 2090 2091 indexerScopedAccept( node->result, *this ); 2092 maybeAccept_impl( node->expr, *this ); 2093 2094 VISIT_END( node ); 2095 } 2096 2097 template< typename pass_type > 2098 Expression * PassVisitor< pass_type >::mutate( DefaultArgExpr * node ) { 2099 MUTATE_START( node ); 2100 2101 indexerScopedMutate( node->env, *this ); 2102 indexerScopedMutate( node->result, *this ); 2103 maybeMutate_impl( node->expr, *this ); 2104 2105 MUTATE_END( Expression, node ); 2106 } 2107 2108 //-------------------------------------------------------------------------- 2086 2109 // GenericExpr 2087 2110 template< typename pass_type > -
src/ResolvExpr/AlternativeFinder.cc
r2a6c115 r0f79853 437 437 } 438 438 } 439 if ( DefaultArgExpr * def = dynamic_cast< DefaultArgExpr * >( *actualExpr ) ) { 440 // default arguments should be free - don't include conversion cost. 441 // Unwrap them here because they are not relevant to the rest of the system. 442 *actualExpr = def->expr; 443 ++formal; 444 continue; 445 } 439 446 Type * formalType = (*formal)->get_type(); 440 447 convCost += computeExpressionConversionCost( *actualExpr, formalType, indexer, alt.env ); … … 872 879 indexer ) ) { 873 880 results.emplace_back( 874 i, cnstExpr, move(env), move(need), move(have),881 i, new DefaultArgExpr( cnstExpr ), move(env), move(need), move(have), 875 882 move(openVars), nextArg, nTuples ); 876 883 } -
src/SynTree/Expression.cc
r2a6c115 r0f79853 746 746 os << std::endl << indent+1 << "... deleted by: "; 747 747 deleteStmt->print( os, indent+1 ); 748 } 749 750 751 DefaultArgExpr::DefaultArgExpr( Expression * expr ) : expr( expr ) { 752 assert( expr->result ); 753 result = expr->result->clone(); 754 } 755 DefaultArgExpr::DefaultArgExpr( const DefaultArgExpr & other ) : Expression( other ), expr( maybeClone( other.expr ) ) {} 756 DefaultArgExpr::~DefaultArgExpr() { 757 delete expr; 758 } 759 760 void DefaultArgExpr::print( std::ostream & os, Indenter indent ) const { 761 os << "Default Argument Expression" << std::endl << indent+1; 762 expr->print( os, indent+1 ); 748 763 } 749 764 -
src/SynTree/Expression.h
r2a6c115 r0f79853 865 865 }; 866 866 867 /// expression wrapping the use of a default argument - should never make it past the resolver. 868 class DefaultArgExpr : public Expression { 869 public: 870 Expression * expr; 871 872 DefaultArgExpr( Expression * expr ); 873 DefaultArgExpr( const DefaultArgExpr & other ); 874 ~DefaultArgExpr(); 875 876 virtual DefaultArgExpr * clone() const { return new DefaultArgExpr( * this ); } 877 virtual void accept( Visitor & v ) { v.visit( this ); } 878 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 879 virtual void print( std::ostream & os, Indenter indent = {} ) const; 880 }; 881 867 882 /// C11 _Generic expression 868 883 class GenericExpr : public Expression { -
src/SynTree/Mutator.h
r2a6c115 r0f79853 93 93 virtual Expression * mutate( InitExpr * initExpr ) = 0; 94 94 virtual Expression * mutate( DeletedExpr * delExpr ) = 0; 95 virtual Expression * mutate( DefaultArgExpr * argExpr ) = 0; 95 96 virtual Expression * mutate( GenericExpr * genExpr ) = 0; 96 97 -
src/SynTree/SynTree.h
r2a6c115 r0f79853 101 101 class InitExpr; 102 102 class DeletedExpr; 103 class DefaultArgExpr; 103 104 class GenericExpr; 104 105 -
src/SynTree/Visitor.h
r2a6c115 r0f79853 95 95 virtual void visit( InitExpr * initExpr ) = 0; 96 96 virtual void visit( DeletedExpr * delExpr ) = 0; 97 virtual void visit( DefaultArgExpr * argExpr ) = 0; 97 98 virtual void visit( GenericExpr * genExpr ) = 0; 98 99
Note: See TracChangeset
for help on using the changeset viewer.