- Timestamp:
- Jun 7, 2019, 4:15:03 PM (6 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 2d11663, 46438e4
- Parents:
- 60aaa51d (diff), be8518f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- src
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/AssertAcyclic.cpp
r60aaa51d r05d55ff 10 10 // Created On : Thu Jun 06 15:00:00 2019 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thu Jun 06 15:00:00 201913 // Update Count : 012 // Last Modified On : Fri Jun 07 14:32:00 2019 13 // Update Count : 1 14 14 // 15 15 … … 20 20 namespace { 21 21 22 class NoStrongCyclesCore : public ast::WithGuards{22 class NoStrongCyclesCore { 23 23 std::vector<const ast::Node *> parents; 24 24 public: 25 void previsit 26 for (auto & p : parents) {27 assert(p != node);25 void previsit( const ast::Node * node ) { 26 for (auto & parent : parents) { 27 assert(parent != node); 28 28 } 29 29 parents.push_back(node); 30 GuardAction( [this]() { parents.pop_back(); } ); 30 } 31 void postvisit( const ast::Node * ) { 32 parents.pop_back(); 31 33 } 32 34 }; … … 36 38 namespace ast { 37 39 38 void assertAcyclic( const std::list< ast::ptr< ast::Decl > > translationUnit ) {40 void assertAcyclic( const std::list< ast::ptr< ast::Decl > > & translationUnit ) { 39 41 Pass<NoStrongCyclesCore> visitor; 40 42 for ( auto & decl : translationUnit ) { -
src/AST/AssertAcyclic.hpp
r60aaa51d r05d55ff 8 8 // 9 9 // Author : Andrew Beach 10 // Created On : Thr May6 15:00:00 201910 // Created On : Thr Jun 6 15:00:00 2019 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr May 6 15:00:00 201913 // Update Count : 012 // Last Modified On : Fri Jun 7 14:32:00 2019 13 // Update Count : 1 14 14 // 15 15 … … 25 25 namespace ast { 26 26 27 void assertAcyclic( const std::list< ast::ptr< ast::Decl > > translationUnit );27 void assertAcyclic( const std::list< ast::ptr< ast::Decl > > & translationUnit ); 28 28 29 29 } -
src/AST/Convert.cpp
r60aaa51d r05d55ff 736 736 expr->var = get<DeclarationWithType>().accept1(node->var); 737 737 Type * type = expr->var->get_type()->clone(); 738 if(FunctionType * ft = dynamic_cast<FunctionType*>(type)) { 739 if(node->result.as<ast::PointerType>()) { 740 type = new PointerType({}, ft); 741 } 742 } 743 738 744 type->set_lvalue( true ); 739 expr-> set_result( type );745 expr->result = type ; 740 746 this->node = expr; 741 747 return nullptr; … … 783 789 assert (!rslt->isType); 784 790 } 785 if (node->type) { 791 else { 792 assert(node->type); 786 793 rslt = new SizeofExpr( 787 794 get<Type>().accept1(node->type) … … 804 811 assert (!rslt->isType); 805 812 } 806 if (node->type) { 813 else { 814 assert(node->type); 807 815 rslt = new AlignofExpr( 808 816 get<Type>().accept1(node->type) … … 2164 2172 ); 2165 2173 2166 visitBaseExpr ( old,2174 visitBaseExpr_SkipResultType( old, 2167 2175 expr 2168 2176 ); … … 2170 2178 expr->var = GET_ACCEPT_1(var, DeclWithType); 2171 2179 expr->result = expr->var->get_type(); 2180 if(const ast::FunctionType * ft = expr->result.as<ast::FunctionType>()) { 2181 if(dynamic_cast<PointerType *>(old->result)) { 2182 expr->result = new ast::PointerType(ft); 2183 } 2184 } 2172 2185 add_qualifiers( expr->result, ast::CV::Lvalue ); 2173 2186 this->node = expr; -
src/AST/Pass.hpp
r60aaa51d r05d55ff 287 287 at_cleanup( [func](void *) { func(); }, nullptr ); 288 288 } 289 290 /// When this node is finished being visited, call a member of an object. 291 template<typename T> 292 void GuardMethod( T * obj, void (T::*method)() ) { 293 at_cleanup( [ method ]( void * object ) { 294 static_cast< T * >( object )->method(); 295 }, static_cast< void * >( obj ) ); 296 } 289 297 }; 290 298 -
src/CodeGen/CodeGenerator.cc
r60aaa51d r05d55ff 116 116 } 117 117 118 CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC, bool lineMarks, bool printExprTypes ) : indent( CodeGenerator::tabsize ), output( os ), printLabels( *this ), options( pretty, genC, lineMarks, printExprTypes ), endl( *this ) {}119 CodeGenerator::CodeGenerator( std::ostream & os, const Options &options ) : indent( CodeGenerator::tabsize ), output( os ), printLabels( *this ), options(options), endl( *this ) {}118 CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC, bool lineMarks, bool printExprTypes ) : indent( 0, CodeGenerator::tabsize ), output( os ), printLabels( *this ), options( pretty, genC, lineMarks, printExprTypes ), endl( *this ) {} 119 CodeGenerator::CodeGenerator( std::ostream & os, const Options &options ) : indent( 0, CodeGenerator::tabsize ), output( os ), printLabels( *this ), options(options), endl( *this ) {} 120 120 121 121 string CodeGenerator::mangleName( DeclarationWithType * decl ) { -
src/Common/Indenter.h
r60aaa51d r05d55ff 23 23 unsigned int amt; ///< spaces in one level of indentation 24 24 25 Indenter( unsigned int indent = 0, unsigned int amt = tabsize ) 26 : indent( indent *amt), amt( amt ) {}27 28 Indenter & operator+=(int nlevels) { indent += amt*nlevels; return *this; }29 Indenter & operator-=(int nlevels) { indent -= amt*nlevels; return *this; }25 Indenter( unsigned int indent = 0, unsigned int amt = tabsize ) 26 : indent( indent ), amt( amt ) {} 27 28 Indenter & operator+=(int nlevels) { indent += nlevels; return *this; } 29 Indenter & operator-=(int nlevels) { indent -= nlevels; return *this; } 30 30 Indenter operator+(int nlevels) { Indenter indenter = *this; return indenter += nlevels; } 31 31 Indenter operator-(int nlevels) { Indenter indenter = *this; return indenter -= nlevels; } … … 35 35 36 36 inline std::ostream & operator<<( std::ostream & out, const Indenter & indent ) { 37 return out << std::string(indent.indent , ' ');37 return out << std::string(indent.indent * indent.amt, ' '); 38 38 } 39 39 -
src/GenPoly/Lvalue.cc
r60aaa51d r05d55ff 196 196 unsigned int i = 0; 197 197 const unsigned int end = ftype->parameters.size(); 198 199 /// The for loop may eagerly dereference the iterators and fail on empty lists 200 if(i == end) { return appExpr; } 198 201 for ( auto p : unsafe_group_iterate( appExpr->args, ftype->parameters ) ) { 199 202 if (i == end) break; -
src/InitTweak/FixInit.cc
r60aaa51d r05d55ff 301 301 replacement = new CastExpr( replacement, base->clone() ); 302 302 } 303 size_t replaced = DeclReplacer::replace( dtor, { std::make_pair( objDecl, replacement ) } ); 304 if(replaced == 0) { 305 objDecl->print(std::cerr); 306 std::cerr << "-----" << std::endl; 307 dtor->print(std::cerr); 308 std::cerr << "Failed to replace " << objDecl << std::endl; 309 abort(); 310 } 303 DeclReplacer::replace( dtor, { std::make_pair( objDecl, replacement ) } ); 311 304 dtorFunc->statements->push_back( strict_dynamic_cast<Statement *>( dtor ) ); 312 305
Note: See TracChangeset
for help on using the changeset viewer.