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