Changes in src/Tuples/Tuples.cc [bc92bee:b910d15]
- File:
-
- 1 edited
-
src/Tuples/Tuples.cc (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Tuples/Tuples.cc
rbc92bee rb910d15 10 10 // Created On : Mon Jun 17 14:41:00 2019 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Tue Jun 18 9:31:00 201913 // Update Count : 112 // Last Modified On : Wed Jun 12 15:43:00 2019 13 // Update Count : 0 14 14 // 15 15 … … 27 27 /// impure. 28 28 struct ImpurityDetector : public ast::WithShortCircuiting { 29 ImpurityDetector( bool ignoreUnique ) : ignoreUnique( ignoreUnique ) {} 29 30 bool maybeImpure = false; 31 bool ignoreUnique; 30 32 31 33 void previsit( ast::ApplicationExpr const * appExpr ) { 34 visit_children = false; 32 35 if ( ast::DeclWithType const * function = InitTweak::getFunction( appExpr ) ) { 33 36 if ( function->linkage == ast::Linkage::Intrinsic 34 37 && ( function->name == "*?" || function->name == "?[?]" ) ) { 38 visit_children = true; 35 39 return; 36 40 } 37 41 } 38 maybeImpure = true; visit_children = false;42 maybeImpure = true; 39 43 } 40 44 void previsit( ast::UntypedExpr const * ) { 41 45 maybeImpure = true; visit_children = false; 42 46 } 43 };44 struct ImpurityDetectorIgnoreUnique : public ImpurityDetector {45 47 void previsit( ast::UniqueExpr const * ) { 46 visit_children = false; 48 if ( ignoreUnique ) { 49 visit_children = false; 50 } 47 51 } 48 52 }; 49 53 50 template<typename Detector> 51 bool detectImpurity( const ast::Expr * expr ) { 52 ast::Pass<Detector> detector; 54 bool detectImpurity( const ast::Expr * expr, bool ignoreUnique ) { 55 ast::Pass<ImpurityDetector> detector( ignoreUnique ); 53 56 expr->accept( detector ); 54 57 return detector.pass.maybeImpure; … … 56 59 } // namespace 57 60 58 bool maybeImpure( const ast::Expr * expr ) {59 return detectImpurity<ImpurityDetector>( expr );60 }61 62 61 bool maybeImpureIgnoreUnique( const ast::Expr * expr ) { 63 return detectImpurity <ImpurityDetectorIgnoreUnique>( expr);62 return detectImpurity( expr, true ); 64 63 } 65 64
Note:
See TracChangeset
for help on using the changeset viewer.