Changeset b067d9b for src/Common/PassVisitor.h
- Timestamp:
- Oct 29, 2019, 4:01:24 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:
- 773db65, 9421f3d8
- Parents:
- 7951100 (diff), 8364209 (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Common/PassVisitor.h
r7951100 rb067d9b 4 4 5 5 #include <stack> 6 6 #include <type_traits> 7 8 #include "Common/Stats.h" 7 9 #include "Common/utility.h" 8 10 … … 58 60 59 61 virtual void visit( ObjectDecl * objectDecl ) override final; 62 virtual void visit( const ObjectDecl * objectDecl ) override final; 60 63 virtual void visit( FunctionDecl * functionDecl ) override final; 64 virtual void visit( const FunctionDecl * functionDecl ) override final; 61 65 virtual void visit( StructDecl * aggregateDecl ) override final; 66 virtual void visit( const StructDecl * aggregateDecl ) override final; 62 67 virtual void visit( UnionDecl * aggregateDecl ) override final; 68 virtual void visit( const UnionDecl * aggregateDecl ) override final; 63 69 virtual void visit( EnumDecl * aggregateDecl ) override final; 70 virtual void visit( const EnumDecl * aggregateDecl ) override final; 64 71 virtual void visit( TraitDecl * aggregateDecl ) override final; 72 virtual void visit( const TraitDecl * aggregateDecl ) override final; 65 73 virtual void visit( TypeDecl * typeDecl ) override final; 74 virtual void visit( const TypeDecl * typeDecl ) override final; 66 75 virtual void visit( TypedefDecl * typeDecl ) override final; 76 virtual void visit( const TypedefDecl * typeDecl ) override final; 67 77 virtual void visit( AsmDecl * asmDecl ) override final; 78 virtual void visit( const AsmDecl * asmDecl ) override final; 68 79 virtual void visit( StaticAssertDecl * assertDecl ) override final; 80 virtual void visit( const StaticAssertDecl * assertDecl ) override final; 69 81 70 82 virtual void visit( CompoundStmt * compoundStmt ) override final; 83 virtual void visit( const CompoundStmt * compoundStmt ) override final; 71 84 virtual void visit( ExprStmt * exprStmt ) override final; 85 virtual void visit( const ExprStmt * exprStmt ) override final; 72 86 virtual void visit( AsmStmt * asmStmt ) override final; 87 virtual void visit( const AsmStmt * asmStmt ) override final; 73 88 virtual void visit( DirectiveStmt * dirStmt ) override final; 89 virtual void visit( const DirectiveStmt * dirStmt ) override final; 74 90 virtual void visit( IfStmt * ifStmt ) override final; 91 virtual void visit( const IfStmt * ifStmt ) override final; 75 92 virtual void visit( WhileStmt * whileStmt ) override final; 93 virtual void visit( const WhileStmt * whileStmt ) override final; 76 94 virtual void visit( ForStmt * forStmt ) override final; 95 virtual void visit( const ForStmt * forStmt ) override final; 77 96 virtual void visit( SwitchStmt * switchStmt ) override final; 97 virtual void visit( const SwitchStmt * switchStmt ) override final; 78 98 virtual void visit( CaseStmt * caseStmt ) override final; 99 virtual void visit( const CaseStmt * caseStmt ) override final; 79 100 virtual void visit( BranchStmt * branchStmt ) override final; 101 virtual void visit( const BranchStmt * branchStmt ) override final; 80 102 virtual void visit( ReturnStmt * returnStmt ) override final; 103 virtual void visit( const ReturnStmt * returnStmt ) override final; 81 104 virtual void visit( ThrowStmt * throwStmt ) override final; 105 virtual void visit( const ThrowStmt * throwStmt ) override final; 82 106 virtual void visit( TryStmt * tryStmt ) override final; 107 virtual void visit( const TryStmt * tryStmt ) override final; 83 108 virtual void visit( CatchStmt * catchStmt ) override final; 109 virtual void visit( const CatchStmt * catchStmt ) override final; 84 110 virtual void visit( FinallyStmt * finallyStmt ) override final; 111 virtual void visit( const FinallyStmt * finallyStmt ) override final; 85 112 virtual void visit( WaitForStmt * waitforStmt ) override final; 113 virtual void visit( const WaitForStmt * waitforStmt ) override final; 86 114 virtual void visit( WithStmt * withStmt ) override final; 115 virtual void visit( const WithStmt * withStmt ) override final; 87 116 virtual void visit( NullStmt * nullStmt ) override final; 117 virtual void visit( const NullStmt * nullStmt ) override final; 88 118 virtual void visit( DeclStmt * declStmt ) override final; 119 virtual void visit( const DeclStmt * declStmt ) override final; 89 120 virtual void visit( ImplicitCtorDtorStmt * impCtorDtorStmt ) override final; 121 virtual void visit( const ImplicitCtorDtorStmt * impCtorDtorStmt ) override final; 90 122 91 123 virtual void visit( ApplicationExpr * applicationExpr ) override final; 124 virtual void visit( const ApplicationExpr * applicationExpr ) override final; 92 125 virtual void visit( UntypedExpr * untypedExpr ) override final; 126 virtual void visit( const UntypedExpr * untypedExpr ) override final; 93 127 virtual void visit( NameExpr * nameExpr ) override final; 128 virtual void visit( const NameExpr * nameExpr ) override final; 94 129 virtual void visit( CastExpr * castExpr ) override final; 130 virtual void visit( const CastExpr * castExpr ) override final; 95 131 virtual void visit( KeywordCastExpr * castExpr ) override final; 132 virtual void visit( const KeywordCastExpr * castExpr ) override final; 96 133 virtual void visit( VirtualCastExpr * castExpr ) override final; 134 virtual void visit( const VirtualCastExpr * castExpr ) override final; 97 135 virtual void visit( AddressExpr * addressExpr ) override final; 136 virtual void visit( const AddressExpr * addressExpr ) override final; 98 137 virtual void visit( LabelAddressExpr * labAddressExpr ) override final; 138 virtual void visit( const LabelAddressExpr * labAddressExpr ) override final; 99 139 virtual void visit( UntypedMemberExpr * memberExpr ) override final; 140 virtual void visit( const UntypedMemberExpr * memberExpr ) override final; 100 141 virtual void visit( MemberExpr * memberExpr ) override final; 142 virtual void visit( const MemberExpr * memberExpr ) override final; 101 143 virtual void visit( VariableExpr * variableExpr ) override final; 144 virtual void visit( const VariableExpr * variableExpr ) override final; 102 145 virtual void visit( ConstantExpr * constantExpr ) override final; 146 virtual void visit( const ConstantExpr * constantExpr ) override final; 103 147 virtual void visit( SizeofExpr * sizeofExpr ) override final; 148 virtual void visit( const SizeofExpr * sizeofExpr ) override final; 104 149 virtual void visit( AlignofExpr * alignofExpr ) override final; 150 virtual void visit( const AlignofExpr * alignofExpr ) override final; 105 151 virtual void visit( UntypedOffsetofExpr * offsetofExpr ) override final; 152 virtual void visit( const UntypedOffsetofExpr * offsetofExpr ) override final; 106 153 virtual void visit( OffsetofExpr * offsetofExpr ) override final; 154 virtual void visit( const OffsetofExpr * offsetofExpr ) override final; 107 155 virtual void visit( OffsetPackExpr * offsetPackExpr ) override final; 108 virtual void visit( AttrExpr * attrExpr ) override final;156 virtual void visit( const OffsetPackExpr * offsetPackExpr ) override final; 109 157 virtual void visit( LogicalExpr * logicalExpr ) override final; 158 virtual void visit( const LogicalExpr * logicalExpr ) override final; 110 159 virtual void visit( ConditionalExpr * conditionalExpr ) override final; 160 virtual void visit( const ConditionalExpr * conditionalExpr ) override final; 111 161 virtual void visit( CommaExpr * commaExpr ) override final; 162 virtual void visit( const CommaExpr * commaExpr ) override final; 112 163 virtual void visit( TypeExpr * typeExpr ) override final; 164 virtual void visit( const TypeExpr * typeExpr ) override final; 113 165 virtual void visit( AsmExpr * asmExpr ) override final; 166 virtual void visit( const AsmExpr * asmExpr ) override final; 114 167 virtual void visit( ImplicitCopyCtorExpr * impCpCtorExpr ) override final; 168 virtual void visit( const ImplicitCopyCtorExpr * impCpCtorExpr ) override final; 115 169 virtual void visit( ConstructorExpr * ctorExpr ) override final; 170 virtual void visit( const ConstructorExpr * ctorExpr ) override final; 116 171 virtual void visit( CompoundLiteralExpr * compLitExpr ) override final; 172 virtual void visit( const CompoundLiteralExpr * compLitExpr ) override final; 117 173 virtual void visit( RangeExpr * rangeExpr ) override final; 174 virtual void visit( const RangeExpr * rangeExpr ) override final; 118 175 virtual void visit( UntypedTupleExpr * tupleExpr ) override final; 176 virtual void visit( const UntypedTupleExpr * tupleExpr ) override final; 119 177 virtual void visit( TupleExpr * tupleExpr ) override final; 178 virtual void visit( const TupleExpr * tupleExpr ) override final; 120 179 virtual void visit( TupleIndexExpr * tupleExpr ) override final; 180 virtual void visit( const TupleIndexExpr * tupleExpr ) override final; 121 181 virtual void visit( TupleAssignExpr * assignExpr ) override final; 182 virtual void visit( const TupleAssignExpr * assignExpr ) override final; 122 183 virtual void visit( StmtExpr * stmtExpr ) override final; 184 virtual void visit( const StmtExpr * stmtExpr ) override final; 123 185 virtual void visit( UniqueExpr * uniqueExpr ) override final; 186 virtual void visit( const UniqueExpr * uniqueExpr ) override final; 124 187 virtual void visit( UntypedInitExpr * initExpr ) override final; 188 virtual void visit( const UntypedInitExpr * initExpr ) override final; 125 189 virtual void visit( InitExpr * initExpr ) override final; 190 virtual void visit( const InitExpr * initExpr ) override final; 126 191 virtual void visit( DeletedExpr * delExpr ) override final; 192 virtual void visit( const DeletedExpr * delExpr ) override final; 193 virtual void visit( DefaultArgExpr * argExpr ) override final; 194 virtual void visit( const DefaultArgExpr * argExpr ) override final; 127 195 virtual void visit( GenericExpr * genExpr ) override final; 196 virtual void visit( const GenericExpr * genExpr ) override final; 128 197 129 198 virtual void visit( VoidType * basicType ) override final; 199 virtual void visit( const VoidType * basicType ) override final; 130 200 virtual void visit( BasicType * basicType ) override final; 201 virtual void visit( const BasicType * basicType ) override final; 131 202 virtual void visit( PointerType * pointerType ) override final; 203 virtual void visit( const PointerType * pointerType ) override final; 132 204 virtual void visit( ArrayType * arrayType ) override final; 205 virtual void visit( const ArrayType * arrayType ) override final; 133 206 virtual void visit( ReferenceType * referenceType ) override final; 207 virtual void visit( const ReferenceType * referenceType ) override final; 208 virtual void visit( QualifiedType * qualType ) override final; 209 virtual void visit( const QualifiedType * qualType ) override final; 134 210 virtual void visit( FunctionType * functionType ) override final; 211 virtual void visit( const FunctionType * functionType ) override final; 135 212 virtual void visit( StructInstType * aggregateUseType ) override final; 213 virtual void visit( const StructInstType * aggregateUseType ) override final; 136 214 virtual void visit( UnionInstType * aggregateUseType ) override final; 215 virtual void visit( const UnionInstType * aggregateUseType ) override final; 137 216 virtual void visit( EnumInstType * aggregateUseType ) override final; 217 virtual void visit( const EnumInstType * aggregateUseType ) override final; 138 218 virtual void visit( TraitInstType * aggregateUseType ) override final; 219 virtual void visit( const TraitInstType * aggregateUseType ) override final; 139 220 virtual void visit( TypeInstType * aggregateUseType ) override final; 221 virtual void visit( const TypeInstType * aggregateUseType ) override final; 140 222 virtual void visit( TupleType * tupleType ) override final; 223 virtual void visit( const TupleType * tupleType ) override final; 141 224 virtual void visit( TypeofType * typeofType ) override final; 225 virtual void visit( const TypeofType * typeofType ) override final; 142 226 virtual void visit( AttrType * attrType ) override final; 227 virtual void visit( const AttrType * attrType ) override final; 143 228 virtual void visit( VarArgsType * varArgsType ) override final; 229 virtual void visit( const VarArgsType * varArgsType ) override final; 144 230 virtual void visit( ZeroType * zeroType ) override final; 231 virtual void visit( const ZeroType * zeroType ) override final; 145 232 virtual void visit( OneType * oneType ) override final; 233 virtual void visit( const OneType * oneType ) override final; 234 virtual void visit( GlobalScopeType * globalType ) override final; 235 virtual void visit( const GlobalScopeType * globalType ) override final; 146 236 147 237 virtual void visit( Designation * designation ) override final; 238 virtual void visit( const Designation * designation ) override final; 148 239 virtual void visit( SingleInit * singleInit ) override final; 240 virtual void visit( const SingleInit * singleInit ) override final; 149 241 virtual void visit( ListInit * listInit ) override final; 242 virtual void visit( const ListInit * listInit ) override final; 150 243 virtual void visit( ConstructorInit * ctorInit ) override final; 151 152 virtual void visit( Subrange * subrange ) override final; 244 virtual void visit( const ConstructorInit * ctorInit ) override final; 153 245 154 246 virtual void visit( Constant * constant ) override final; 247 virtual void visit( const Constant * constant ) override final; 155 248 156 249 virtual void visit( Attribute * attribute ) override final; 250 virtual void visit( const Attribute * attribute ) override final; 157 251 158 252 virtual DeclarationWithType * mutate( ObjectDecl * objectDecl ) override final; … … 183 277 virtual Statement * mutate( FinallyStmt * finallyStmt ) override final; 184 278 virtual Statement * mutate( WaitForStmt * waitforStmt ) override final; 185 virtual Statement* mutate( WithStmt * withStmt ) override final;279 virtual Declaration * mutate( WithStmt * withStmt ) override final; 186 280 virtual NullStmt * mutate( NullStmt * nullStmt ) override final; 187 281 virtual Statement * mutate( DeclStmt * declStmt ) override final; … … 205 299 virtual Expression * mutate( OffsetofExpr * offsetofExpr ) override final; 206 300 virtual Expression * mutate( OffsetPackExpr * offsetPackExpr ) override final; 207 virtual Expression * mutate( AttrExpr * attrExpr ) override final;208 301 virtual Expression * mutate( LogicalExpr * logicalExpr ) override final; 209 302 virtual Expression * mutate( ConditionalExpr * conditionalExpr ) override final; … … 224 317 virtual Expression * mutate( InitExpr * initExpr ) override final; 225 318 virtual Expression * mutate( DeletedExpr * delExpr ) override final; 319 virtual Expression * mutate( DefaultArgExpr * argExpr ) override final; 226 320 virtual Expression * mutate( GenericExpr * genExpr ) override final; 227 321 … … 231 325 virtual Type * mutate( ArrayType * arrayType ) override final; 232 326 virtual Type * mutate( ReferenceType * referenceType ) override final; 327 virtual Type * mutate( QualifiedType * qualType ) override final; 233 328 virtual Type * mutate( FunctionType * functionType ) override final; 234 329 virtual Type * mutate( StructInstType * aggregateUseType ) override final; … … 243 338 virtual Type * mutate( ZeroType * zeroType ) override final; 244 339 virtual Type * mutate( OneType * oneType ) override final; 340 virtual Type * mutate( GlobalScopeType * globalType ) override final; 245 341 246 342 virtual Designation * mutate( Designation * designation ) override final; … … 249 345 virtual Initializer * mutate( ConstructorInit * ctorInit ) override final; 250 346 251 virtual Subrange * mutate( Subrange * subrange ) override final;252 253 347 virtual Constant * mutate( Constant * constant ) override final; 254 348 … … 258 352 259 353 private: 354 bool inFunction = false; 355 260 356 template<typename pass_t> friend void acceptAll( std::list< Declaration* > &decls, PassVisitor< pass_t >& visitor ); 357 template<typename pass_t> friend void acceptAll( const std::list< const Declaration * > &decls, PassVisitor< pass_t >& visitor ); 261 358 template<typename pass_t> friend void mutateAll( std::list< Declaration* > &decls, PassVisitor< pass_t >& visitor ); 262 359 template< typename TreeType, typename pass_t > friend void maybeAccept_impl( TreeType * tree, PassVisitor< pass_t > & visitor ); 360 template< typename TreeType, typename pass_t > friend void maybeAccept_impl( const TreeType * tree, PassVisitor< pass_t > & visitor ); 263 361 template< typename TreeType, typename pass_t > friend void maybeMutate_impl( TreeType *& tree, PassVisitor< pass_t > & mutator ); 264 362 template< typename Container, typename pass_t > friend void maybeAccept_impl( Container & container, PassVisitor< pass_t > & visitor ); 363 template< typename Container, typename pass_t > friend void maybeAccept_impl( const Container & container, PassVisitor< pass_t > & visitor ); 265 364 template< typename Container, typename pass_t > friend void maybeMutate_impl( Container & container, PassVisitor< pass_t > & mutator ); 266 365 267 366 template<typename node_type> void call_previsit ( node_type * node ) { previsit_impl ( pass, node, 0 ); } 367 template<typename node_type> void call_previsit ( const node_type * node ) { previsit_impl ( pass, node, 0 ); } 268 368 template<typename node_type> void call_postvisit( node_type * node ) { postvisit_impl( pass, node, 0 ); } 369 template<typename node_type> void call_postvisit( const node_type * node ) { postvisit_impl( pass, node, 0 ); } 269 370 270 371 template<typename node_type> void call_premutate ( node_type * node ) { premutate_impl( pass, node, 0 ); } … … 280 381 void visitStatementList ( std::list< Statement* > &statements ); 281 382 void mutateStatementList( std::list< Statement* > &statements ); 383 void visitStatementList ( const std::list< Statement * > & statements ); 282 384 283 385 template< typename func_t > … … 285 387 Statement * visitStatement ( Statement * stmt ); 286 388 Statement * mutateStatement( Statement * stmt ); 389 void visitStatement ( const Statement * stmt ); 287 390 288 391 template< typename func_t > … … 290 393 Expression * visitExpression ( Expression * expr ); 291 394 Expression * mutateExpression( Expression * expr ); 292 293 294 TypeSubstitution ** get_env_ptr () { return env_impl ( pass, 0); } 395 void visitExpression ( const Expression * expr ); 396 397 398 auto get_env_ptr () -> decltype(env_impl( pass, 0)) { return env_impl( pass, 0); } 295 399 std::list< Statement* > * get_beforeStmts() { return stmtsToAddBefore_impl( pass, 0); } 296 400 std::list< Statement* > * get_afterStmts () { return stmtsToAddAfter_impl ( pass, 0); } … … 303 407 void indexerScopeEnter () { indexer_impl_enterScope ( pass, 0 ); } 304 408 void indexerScopeLeave () { indexer_impl_leaveScope ( pass, 0 ); } 305 void indexerAddId ( DeclarationWithType* node ) { indexer_impl_addId ( pass, 0, node ); }306 void indexerAddType ( NamedTypeDecl* node ) { indexer_impl_addType ( pass, 0, node ); }409 void indexerAddId ( const DeclarationWithType * node ) { indexer_impl_addId ( pass, 0, node ); } 410 void indexerAddType ( const NamedTypeDecl * node ) { indexer_impl_addType ( pass, 0, node ); } 307 411 void indexerAddStruct ( const std::string & id ) { indexer_impl_addStruct ( pass, 0, id ); } 308 void indexerAddStruct ( StructDecl* node ) { indexer_impl_addStruct ( pass, 0, node ); }309 void indexerAddStructFwd( StructDecl* node ) { indexer_impl_addStructFwd( pass, 0, node ); }310 void indexerAddEnum ( EnumDecl* node ) { indexer_impl_addEnum ( pass, 0, node ); }412 void indexerAddStruct ( const StructDecl * node ) { indexer_impl_addStruct ( pass, 0, node ); } 413 void indexerAddStructFwd( const StructDecl * node ) { indexer_impl_addStructFwd( pass, 0, node ); } 414 void indexerAddEnum ( const EnumDecl * node ) { indexer_impl_addEnum ( pass, 0, node ); } 311 415 void indexerAddUnion ( const std::string & id ) { indexer_impl_addUnion ( pass, 0, id ); } 312 void indexerAddUnion ( UnionDecl* node ) { indexer_impl_addUnion ( pass, 0, node ); }313 void indexerAddUnionFwd ( UnionDecl* node ) { indexer_impl_addUnionFwd ( pass, 0, node ); }314 void indexerAddTrait ( TraitDecl* node ) { indexer_impl_addTrait ( pass, 0, node ); }315 void indexerAddWith ( std::list< Expression * > & exprs, BaseSyntaxNode* withStmt ) { indexer_impl_addWith( pass, 0, exprs, withStmt ); }416 void indexerAddUnion ( const UnionDecl * node ) { indexer_impl_addUnion ( pass, 0, node ); } 417 void indexerAddUnionFwd ( const UnionDecl * node ) { indexer_impl_addUnionFwd ( pass, 0, node ); } 418 void indexerAddTrait ( const TraitDecl * node ) { indexer_impl_addTrait ( pass, 0, node ); } 419 void indexerAddWith ( const std::list< Expression * > & exprs, const Declaration * withStmt ) { indexer_impl_addWith( pass, 0, exprs, withStmt ); } 316 420 317 421 318 422 template< typename TreeType, typename VisitorType > 319 friend inline void indexerScopedAccept( TreeType * tree, VisitorType & visitor );423 friend inline void indexerScopedAccept( TreeType * tree, VisitorType & visitor ); 320 424 321 425 template< typename TreeType, typename VisitorType > 322 friend inline void indexerScopedMutate( TreeType *& tree, VisitorType &visitor ); 426 friend inline void indexerScopedAccept( const TreeType * tree, VisitorType & visitor ); 427 428 template< typename TreeType, typename VisitorType > 429 friend inline void indexerScopedMutate( TreeType *& tree, VisitorType & visitor ); 323 430 }; 324 431 … … 337 444 public: 338 445 TypeSubstitution * env = nullptr; 446 }; 447 448 class WithConstTypeSubstitution { 449 protected: 450 WithConstTypeSubstitution() = default; 451 ~WithConstTypeSubstitution() = default; 452 453 public: 454 const TypeSubstitution * env = nullptr; 339 455 }; 340 456 … … 418 534 }; 419 535 536 #include "Common/Stats.h" 537 538 extern struct PassVisitorStats { 539 size_t depth = 0; 540 Stats::Counters::MaxCounter<double> * max = nullptr; 541 Stats::Counters::AverageCounter<double> * avg = nullptr; 542 } pass_visitor_stats; 543 420 544 #include "SynTree/TypeSubstitution.h" 421 545 #include "PassVisitor.impl.h"
Note:
See TracChangeset
for help on using the changeset viewer.