Changeset ab904dc for src/Common
- Timestamp:
- Jun 1, 2017, 11:00:46 AM (7 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, resolv-new, with_gc
- Children:
- 296b2be, 4a58895
- Parents:
- 7b15d7a
- Location:
- src/Common
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Common/PassVisitor.h
r7b15d7a rab904dc 1 1 #pragma once 2 2 3 #include "SynTree/Mutator.h" 3 4 #include "SynTree/Visitor.h" 4 5 5 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 6 //Deep magic (a.k.a template meta programming) to make the templated visitor work 7 //Basically the goal is to make 2 previsit_impl 6 #include "SynTree/Initializer.h" 7 #include "SynTree/Statement.h" 8 #include "SynTree/Type.h" 9 #include "SynTree/Declaration.h" 10 #include "SynTree/Expression.h" 11 #include "SynTree/Constant.h" 12 13 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 14 // Deep magic (a.k.a template meta programming) to make the templated visitor work 15 // Basically the goal is to make 2 previsit_impl 8 16 // 1 - Use when a pass implements a valid previsit. This uses overloading which means the any overload of 9 17 // 'pass.previsit( node )' that compiles will be used for that node for that type … … 16 24 // The second implementation takes a long while the first takes an int. Since the caller always passes an literal 0 17 25 // the first implementation takes priority in regards to overloading. 18 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 26 // Mutator functions work along the same principal 27 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 28 // Visit 19 29 template<typename pass_type, typename node_type> 20 30 static inline auto previsit_impl( pass_type& pass, node_type * node, __attribute__((unused)) int unused ) ->decltype( pass.previsit( node ), void() ) { … … 23 33 24 34 template<typename pass_type, typename node_type> 25 static inline void previsit_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) { 26 //Do nothing 27 } 35 static inline void previsit_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) {} 28 36 29 37 … … 34 42 35 43 template<typename pass_type, typename node_type> 36 static inline auto postvisit_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) { 37 //Do nothing 38 } 44 static inline void postvisit_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) {} 45 46 // Mutate 47 template<typename pass_type, typename node_type> 48 static inline auto premutate_impl( pass_type& pass, node_type * node, __attribute__((unused)) int unused ) ->decltype( pass.premutate( node ), void() ) { 49 return pass.premutate( node ); 50 } 51 52 template<typename pass_type, typename node_type> 53 static inline void premutate_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) {} 54 55 56 template<typename return_type, typename pass_type, typename node_type> 57 static inline auto postmutate_impl( pass_type& pass, node_type * node, __attribute__((unused)) int unused ) ->decltype( pass.postmutate( node ) ) { 58 return pass.postmutate( node ); 59 } 60 61 template<typename return_type, typename pass_type, typename node_type> 62 static inline return_type postmutate_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) { return node; } 39 63 40 64 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------- … … 44 68 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 45 69 template< typename pass_type > 46 class PassVisitor final : public Visitor {70 class PassVisitor final : public Visitor, public Mutator { 47 71 public: 48 72 PassVisitor() = default; … … 145 169 virtual void visit( Constant *constant ) override final; 146 170 171 virtual DeclarationWithType* mutate( ObjectDecl *objectDecl ) override final; 172 virtual DeclarationWithType* mutate( FunctionDecl *functionDecl ) override final; 173 virtual Declaration* mutate( StructDecl *aggregateDecl ) override final; 174 virtual Declaration* mutate( UnionDecl *aggregateDecl ) override final; 175 virtual Declaration* mutate( EnumDecl *aggregateDecl ) override final; 176 virtual Declaration* mutate( TraitDecl *aggregateDecl ) override final; 177 virtual TypeDecl* mutate( TypeDecl *typeDecl ) override final; 178 virtual Declaration* mutate( TypedefDecl *typeDecl ) override final; 179 virtual AsmDecl* mutate( AsmDecl *asmDecl ) override final; 180 181 virtual CompoundStmt* mutate( CompoundStmt *compoundStmt ) override final; 182 virtual Statement* mutate( ExprStmt *exprStmt ) override final; 183 virtual Statement* mutate( AsmStmt *asmStmt ) override final; 184 virtual Statement* mutate( IfStmt *ifStmt ) override final; 185 virtual Statement* mutate( WhileStmt *whileStmt ) override final; 186 virtual Statement* mutate( ForStmt *forStmt ) override final; 187 virtual Statement* mutate( SwitchStmt *switchStmt ) override final; 188 virtual Statement* mutate( CaseStmt *caseStmt ) override final; 189 virtual Statement* mutate( BranchStmt *branchStmt ) override final; 190 virtual Statement* mutate( ReturnStmt *returnStmt ) override final; 191 virtual Statement* mutate( TryStmt *returnStmt ) override final; 192 virtual Statement* mutate( CatchStmt *catchStmt ) override final; 193 virtual Statement* mutate( FinallyStmt *catchStmt ) override final; 194 virtual NullStmt* mutate( NullStmt *nullStmt ) override final; 195 virtual Statement* mutate( DeclStmt *declStmt ) override final; 196 virtual Statement* mutate( ImplicitCtorDtorStmt *impCtorDtorStmt ) override final; 197 198 virtual Expression* mutate( ApplicationExpr *applicationExpr ) override final; 199 virtual Expression* mutate( UntypedExpr *untypedExpr ) override final; 200 virtual Expression* mutate( NameExpr *nameExpr ) override final; 201 virtual Expression* mutate( AddressExpr *castExpr ) override final; 202 virtual Expression* mutate( LabelAddressExpr *labAddressExpr ) override final; 203 virtual Expression* mutate( CastExpr *castExpr ) override final; 204 virtual Expression* mutate( UntypedMemberExpr *memberExpr ) override final; 205 virtual Expression* mutate( MemberExpr *memberExpr ) override final; 206 virtual Expression* mutate( VariableExpr *variableExpr ) override final; 207 virtual Expression* mutate( ConstantExpr *constantExpr ) override final; 208 virtual Expression* mutate( SizeofExpr *sizeofExpr ) override final; 209 virtual Expression* mutate( AlignofExpr *alignofExpr ) override final; 210 virtual Expression* mutate( UntypedOffsetofExpr *offsetofExpr ) override final; 211 virtual Expression* mutate( OffsetofExpr *offsetofExpr ) override final; 212 virtual Expression* mutate( OffsetPackExpr *offsetPackExpr ) override final; 213 virtual Expression* mutate( AttrExpr *attrExpr ) override final; 214 virtual Expression* mutate( LogicalExpr *logicalExpr ) override final; 215 virtual Expression* mutate( ConditionalExpr *conditionalExpr ) override final; 216 virtual Expression* mutate( CommaExpr *commaExpr ) override final; 217 virtual Expression* mutate( TypeExpr *typeExpr ) override final; 218 virtual Expression* mutate( AsmExpr *asmExpr ) override final; 219 virtual Expression* mutate( ImplicitCopyCtorExpr *impCpCtorExpr ) override final; 220 virtual Expression* mutate( ConstructorExpr *ctorExpr ) override final; 221 virtual Expression* mutate( CompoundLiteralExpr *compLitExpr ) override final; 222 virtual Expression* mutate( UntypedValofExpr *valofExpr ) override final; 223 virtual Expression* mutate( RangeExpr *rangeExpr ) override final; 224 virtual Expression* mutate( UntypedTupleExpr *tupleExpr ) override final; 225 virtual Expression* mutate( TupleExpr *tupleExpr ) override final; 226 virtual Expression* mutate( TupleIndexExpr *tupleExpr ) override final; 227 virtual Expression* mutate( MemberTupleExpr *tupleExpr ) override final; 228 virtual Expression* mutate( TupleAssignExpr *assignExpr ) override final; 229 virtual Expression* mutate( StmtExpr * stmtExpr ) override final; 230 virtual Expression* mutate( UniqueExpr * uniqueExpr ) override final; 231 232 virtual Type* mutate( VoidType *basicType ) override final; 233 virtual Type* mutate( BasicType *basicType ) override final; 234 virtual Type* mutate( PointerType *pointerType ) override final; 235 virtual Type* mutate( ArrayType *arrayType ) override final; 236 virtual Type* mutate( FunctionType *functionType ) override final; 237 virtual Type* mutate( StructInstType *aggregateUseType ) override final; 238 virtual Type* mutate( UnionInstType *aggregateUseType ) override final; 239 virtual Type* mutate( EnumInstType *aggregateUseType ) override final; 240 virtual Type* mutate( TraitInstType *aggregateUseType ) override final; 241 virtual Type* mutate( TypeInstType *aggregateUseType ) override final; 242 virtual Type* mutate( TupleType *tupleType ) override final; 243 virtual Type* mutate( TypeofType *typeofType ) override final; 244 virtual Type* mutate( AttrType *attrType ) override final; 245 virtual Type* mutate( VarArgsType *varArgsType ) override final; 246 virtual Type* mutate( ZeroType *zeroType ) override final; 247 virtual Type* mutate( OneType *oneType ) override final; 248 249 virtual Initializer* mutate( SingleInit *singleInit ) override final; 250 virtual Initializer* mutate( ListInit *listInit ) override final; 251 virtual Initializer* mutate( ConstructorInit *ctorInit ) override final; 252 253 virtual Subrange *mutate( Subrange *subrange ) override final; 254 255 virtual Constant *mutate( Constant *constant ) override final; 256 147 257 private: 148 258 template<typename node_type> … … 159 269 postvisit_impl( pass, node, 0 ); 160 270 } 271 272 template<typename node_type> 273 auto call_premutate ( node_type * node ) 274 -> decltype( premutate_impl( pass, node, 0 ), void() ) 275 { 276 premutate_impl( pass, node, 0 ); 277 } 278 279 template<typename return_type, typename node_type> 280 auto call_postmutate ( node_type * node ) 281 -> decltype( postmutate_impl<return_type>( pass, node, 0 ) ) 282 { 283 return postmutate_impl<return_type>( pass, node, 0 ); 284 } 161 285 }; 162 286 -
src/Common/PassVisitor.impl.h
r7b15d7a rab904dc 6 6 call_postvisit( node ); \ 7 7 8 9 template< typename pass_type > 10 void PassVisitor< pass_type>::visit( ObjectDecl * node ) { 11 VISIT_BODY( node ); 12 } 13 14 template< typename pass_type > 15 void PassVisitor< pass_type>::visit( FunctionDecl * node ) { 16 VISIT_BODY( node ); 17 } 18 19 template< typename pass_type > 20 void PassVisitor< pass_type>::visit( StructDecl * node ) { 21 VISIT_BODY( node ); 22 } 23 24 template< typename pass_type > 25 void PassVisitor< pass_type>::visit( UnionDecl * node ) { 26 VISIT_BODY( node ); 27 } 28 29 template< typename pass_type > 30 void PassVisitor< pass_type>::visit( EnumDecl * node ) { 31 VISIT_BODY( node ); 32 } 33 34 template< typename pass_type > 35 void PassVisitor< pass_type>::visit( TraitDecl * node ) { 36 VISIT_BODY( node ); 37 } 38 39 template< typename pass_type > 40 void PassVisitor< pass_type>::visit( TypeDecl * node ) { 41 VISIT_BODY( node ); 42 } 43 44 template< typename pass_type > 45 void PassVisitor< pass_type>::visit( TypedefDecl * node ) { 46 VISIT_BODY( node ); 47 } 48 49 template< typename pass_type > 50 void PassVisitor< pass_type>::visit( AsmDecl * node ) { 51 VISIT_BODY( node ); 52 } 53 54 template< typename pass_type > 55 void PassVisitor< pass_type>::visit( CompoundStmt * node ) { 56 VISIT_BODY( node ); 57 } 58 59 template< typename pass_type > 60 void PassVisitor< pass_type>::visit( ExprStmt * node ) { 61 VISIT_BODY( node ); 62 } 63 64 template< typename pass_type > 65 void PassVisitor< pass_type>::visit( AsmStmt * node ) { 66 VISIT_BODY( node ); 67 } 68 69 template< typename pass_type > 70 void PassVisitor< pass_type>::visit( IfStmt * node ) { 71 VISIT_BODY( node ); 72 } 73 74 template< typename pass_type > 75 void PassVisitor< pass_type>::visit( WhileStmt * node ) { 76 VISIT_BODY( node ); 77 } 78 79 template< typename pass_type > 80 void PassVisitor< pass_type>::visit( ForStmt * node ) { 81 VISIT_BODY( node ); 82 } 83 84 template< typename pass_type > 85 void PassVisitor< pass_type>::visit( SwitchStmt * node ) { 86 VISIT_BODY( node ); 87 } 88 89 template< typename pass_type > 90 void PassVisitor< pass_type>::visit( CaseStmt * node ) { 91 VISIT_BODY( node ); 92 } 93 94 template< typename pass_type > 95 void PassVisitor< pass_type>::visit( BranchStmt * node ) { 96 VISIT_BODY( node ); 97 } 98 99 template< typename pass_type > 100 void PassVisitor< pass_type>::visit( ReturnStmt * node ) { 101 VISIT_BODY( node ); 102 } 103 104 template< typename pass_type > 105 void PassVisitor< pass_type>::visit( TryStmt * node ) { 106 VISIT_BODY( node ); 107 } 108 109 template< typename pass_type > 110 void PassVisitor< pass_type>::visit( CatchStmt * node ) { 111 VISIT_BODY( node ); 112 } 113 114 template< typename pass_type > 115 void PassVisitor< pass_type>::visit( FinallyStmt * node ) { 116 VISIT_BODY( node ); 117 } 118 119 template< typename pass_type > 120 void PassVisitor< pass_type>::visit( NullStmt * node ) { 121 VISIT_BODY( node ); 122 } 123 124 template< typename pass_type > 125 void PassVisitor< pass_type>::visit( DeclStmt * node ) { 126 VISIT_BODY( node ); 127 } 128 129 template< typename pass_type > 130 void PassVisitor< pass_type>::visit( ImplicitCtorDtorStmt * node ) { 131 VISIT_BODY( node ); 132 } 133 134 template< typename pass_type > 135 void PassVisitor< pass_type>::visit( ApplicationExpr * node ) { 136 VISIT_BODY( node ); 137 } 138 139 template< typename pass_type > 140 void PassVisitor< pass_type>::visit( UntypedExpr * node ) { 141 VISIT_BODY( node ); 142 } 143 144 template< typename pass_type > 145 void PassVisitor< pass_type>::visit( NameExpr * node ) { 146 VISIT_BODY( node ); 147 } 148 149 template< typename pass_type > 150 void PassVisitor< pass_type>::visit( CastExpr * node ) { 151 VISIT_BODY( node ); 152 } 153 154 template< typename pass_type > 155 void PassVisitor< pass_type>::visit( AddressExpr * node ) { 156 VISIT_BODY( node ); 157 } 158 159 template< typename pass_type > 160 void PassVisitor< pass_type>::visit( LabelAddressExpr * node ) { 161 VISIT_BODY( node ); 162 } 163 164 template< typename pass_type > 165 void PassVisitor< pass_type>::visit( UntypedMemberExpr * node ) { 166 VISIT_BODY( node ); 167 } 168 169 template< typename pass_type > 170 void PassVisitor< pass_type>::visit( MemberExpr * node ) { 171 VISIT_BODY( node ); 172 } 173 174 template< typename pass_type > 175 void PassVisitor< pass_type>::visit( VariableExpr * node ) { 176 VISIT_BODY( node ); 177 } 178 179 template< typename pass_type > 180 void PassVisitor< pass_type>::visit( ConstantExpr * node ) { 181 VISIT_BODY( node ); 182 } 183 184 template< typename pass_type > 185 void PassVisitor< pass_type>::visit( SizeofExpr * node ) { 186 VISIT_BODY( node ); 187 } 188 189 template< typename pass_type > 190 void PassVisitor< pass_type>::visit( AlignofExpr * node ) { 191 VISIT_BODY( node ); 192 } 193 194 template< typename pass_type > 195 void PassVisitor< pass_type>::visit( UntypedOffsetofExpr * node ) { 196 VISIT_BODY( node ); 197 } 198 199 template< typename pass_type > 200 void PassVisitor< pass_type>::visit( OffsetofExpr * node ) { 201 VISIT_BODY( node ); 202 } 203 204 template< typename pass_type > 205 void PassVisitor< pass_type>::visit( OffsetPackExpr * node ) { 206 VISIT_BODY( node ); 207 } 208 209 template< typename pass_type > 210 void PassVisitor< pass_type>::visit( AttrExpr * node ) { 211 VISIT_BODY( node ); 212 } 213 214 template< typename pass_type > 215 void PassVisitor< pass_type>::visit( LogicalExpr * node ) { 216 VISIT_BODY( node ); 217 } 218 219 template< typename pass_type > 220 void PassVisitor< pass_type>::visit( ConditionalExpr * node ) { 221 VISIT_BODY( node ); 222 } 223 224 template< typename pass_type > 225 void PassVisitor< pass_type>::visit( CommaExpr * node ) { 226 VISIT_BODY( node ); 227 } 228 229 template< typename pass_type > 230 void PassVisitor< pass_type>::visit( TypeExpr * node ) { 231 VISIT_BODY( node ); 232 } 233 234 template< typename pass_type > 235 void PassVisitor< pass_type>::visit( AsmExpr * node ) { 236 VISIT_BODY( node ); 237 } 238 239 template< typename pass_type > 240 void PassVisitor< pass_type>::visit( ImplicitCopyCtorExpr * node ) { 241 VISIT_BODY( node ); 242 } 243 244 template< typename pass_type > 245 void PassVisitor< pass_type>::visit( ConstructorExpr * node ) { 246 VISIT_BODY( node ); 247 } 248 249 template< typename pass_type > 250 void PassVisitor< pass_type>::visit( CompoundLiteralExpr * node ) { 251 VISIT_BODY( node ); 252 } 253 254 template< typename pass_type > 255 void PassVisitor< pass_type>::visit( UntypedValofExpr * node ) { 256 VISIT_BODY( node ); 257 } 258 259 template< typename pass_type > 260 void PassVisitor< pass_type>::visit( RangeExpr * node ) { 261 VISIT_BODY( node ); 262 } 263 264 template< typename pass_type > 265 void PassVisitor< pass_type>::visit( UntypedTupleExpr * node ) { 266 VISIT_BODY( node ); 267 } 268 269 template< typename pass_type > 270 void PassVisitor< pass_type>::visit( TupleExpr * node ) { 271 VISIT_BODY( node ); 272 } 273 274 template< typename pass_type > 275 void PassVisitor< pass_type>::visit( TupleIndexExpr * node ) { 276 VISIT_BODY( node ); 277 } 278 279 template< typename pass_type > 280 void PassVisitor< pass_type>::visit( MemberTupleExpr * node ) { 281 VISIT_BODY( node ); 282 } 283 284 template< typename pass_type > 285 void PassVisitor< pass_type>::visit( TupleAssignExpr * node ) { 286 VISIT_BODY( node ); 287 } 288 289 template< typename pass_type > 290 void PassVisitor< pass_type>::visit( StmtExpr * node ) { 291 VISIT_BODY( node ); 292 } 293 294 template< typename pass_type > 295 void PassVisitor< pass_type>::visit( UniqueExpr * node ) { 296 VISIT_BODY( node ); 297 } 298 299 template< typename pass_type > 300 void PassVisitor< pass_type>::visit( VoidType * node ) { 301 VISIT_BODY( node ); 302 } 303 304 template< typename pass_type > 305 void PassVisitor< pass_type>::visit( BasicType * node ) { 306 VISIT_BODY( node ); 307 } 308 309 template< typename pass_type > 310 void PassVisitor< pass_type>::visit( PointerType * node ) { 311 VISIT_BODY( node ); 312 } 313 314 template< typename pass_type > 315 void PassVisitor< pass_type>::visit( ArrayType * node ) { 316 VISIT_BODY( node ); 317 } 318 319 template< typename pass_type > 320 void PassVisitor< pass_type>::visit( FunctionType * node ) { 321 VISIT_BODY( node ); 322 } 323 324 template< typename pass_type > 325 void PassVisitor< pass_type>::visit( StructInstType * node ) { 326 VISIT_BODY( node ); 327 } 328 329 template< typename pass_type > 330 void PassVisitor< pass_type>::visit( UnionInstType * node ) { 331 VISIT_BODY( node ); 332 } 333 334 template< typename pass_type > 335 void PassVisitor< pass_type>::visit( EnumInstType * node ) { 336 VISIT_BODY( node ); 337 } 338 339 template< typename pass_type > 340 void PassVisitor< pass_type>::visit( TraitInstType * node ) { 341 VISIT_BODY( node ); 342 } 343 344 template< typename pass_type > 345 void PassVisitor< pass_type>::visit( TypeInstType * node ) { 346 VISIT_BODY( node ); 347 } 348 349 template< typename pass_type > 350 void PassVisitor< pass_type>::visit( TupleType * node ) { 351 VISIT_BODY( node ); 352 } 353 354 template< typename pass_type > 355 void PassVisitor< pass_type>::visit( TypeofType * node ) { 356 VISIT_BODY( node ); 357 } 358 359 template< typename pass_type > 360 void PassVisitor< pass_type>::visit( AttrType * node ) { 361 VISIT_BODY( node ); 362 } 363 364 template< typename pass_type > 365 void PassVisitor< pass_type>::visit( VarArgsType * node ) { 366 VISIT_BODY( node ); 367 } 368 369 template< typename pass_type > 370 void PassVisitor< pass_type>::visit( ZeroType * node ) { 371 VISIT_BODY( node ); 372 } 373 374 template< typename pass_type > 375 void PassVisitor< pass_type>::visit( OneType * node ) { 376 VISIT_BODY( node ); 377 } 378 379 template< typename pass_type > 380 void PassVisitor< pass_type>::visit( SingleInit * node ) { 381 VISIT_BODY( node ); 382 } 383 384 template< typename pass_type > 385 void PassVisitor< pass_type>::visit( ListInit * node ) { 386 VISIT_BODY( node ); 387 } 388 389 template< typename pass_type > 390 void PassVisitor< pass_type>::visit( ConstructorInit * node ) { 391 VISIT_BODY( node ); 392 } 393 394 template< typename pass_type > 395 void PassVisitor< pass_type>::visit( Subrange * node ) { 396 VISIT_BODY( node ); 397 } 398 399 template< typename pass_type > 400 void PassVisitor< pass_type>::visit( Constant * node ) { 401 VISIT_BODY( node ); 402 } 8 #define MUTATE_BODY( type, node ) \ 9 call_premutate( node ); \ 10 Mutator::mutate( node ); \ 11 auto ret = call_postmutate< type * >( node ); \ 12 return ret; \ 13 14 15 16 17 template< typename pass_type > 18 void PassVisitor< pass_type >::visit( ObjectDecl * node ) { 19 VISIT_BODY( node ); 20 } 21 22 template< typename pass_type > 23 void PassVisitor< pass_type >::visit( FunctionDecl * node ) { 24 VISIT_BODY( node ); 25 } 26 27 template< typename pass_type > 28 void PassVisitor< pass_type >::visit( StructDecl * node ) { 29 VISIT_BODY( node ); 30 } 31 32 template< typename pass_type > 33 void PassVisitor< pass_type >::visit( UnionDecl * node ) { 34 VISIT_BODY( node ); 35 } 36 37 template< typename pass_type > 38 void PassVisitor< pass_type >::visit( EnumDecl * node ) { 39 VISIT_BODY( node ); 40 } 41 42 template< typename pass_type > 43 void PassVisitor< pass_type >::visit( TraitDecl * node ) { 44 VISIT_BODY( node ); 45 } 46 47 template< typename pass_type > 48 void PassVisitor< pass_type >::visit( TypeDecl * node ) { 49 VISIT_BODY( node ); 50 } 51 52 template< typename pass_type > 53 void PassVisitor< pass_type >::visit( TypedefDecl * node ) { 54 VISIT_BODY( node ); 55 } 56 57 template< typename pass_type > 58 void PassVisitor< pass_type >::visit( AsmDecl * node ) { 59 VISIT_BODY( node ); 60 } 61 62 template< typename pass_type > 63 void PassVisitor< pass_type >::visit( CompoundStmt * node ) { 64 VISIT_BODY( node ); 65 } 66 67 template< typename pass_type > 68 void PassVisitor< pass_type >::visit( ExprStmt * node ) { 69 VISIT_BODY( node ); 70 } 71 72 template< typename pass_type > 73 void PassVisitor< pass_type >::visit( AsmStmt * node ) { 74 VISIT_BODY( node ); 75 } 76 77 template< typename pass_type > 78 void PassVisitor< pass_type >::visit( IfStmt * node ) { 79 VISIT_BODY( node ); 80 } 81 82 template< typename pass_type > 83 void PassVisitor< pass_type >::visit( WhileStmt * node ) { 84 VISIT_BODY( node ); 85 } 86 87 template< typename pass_type > 88 void PassVisitor< pass_type >::visit( ForStmt * node ) { 89 VISIT_BODY( node ); 90 } 91 92 template< typename pass_type > 93 void PassVisitor< pass_type >::visit( SwitchStmt * node ) { 94 VISIT_BODY( node ); 95 } 96 97 template< typename pass_type > 98 void PassVisitor< pass_type >::visit( CaseStmt * node ) { 99 VISIT_BODY( node ); 100 } 101 102 template< typename pass_type > 103 void PassVisitor< pass_type >::visit( BranchStmt * node ) { 104 VISIT_BODY( node ); 105 } 106 107 template< typename pass_type > 108 void PassVisitor< pass_type >::visit( ReturnStmt * node ) { 109 VISIT_BODY( node ); 110 } 111 112 template< typename pass_type > 113 void PassVisitor< pass_type >::visit( TryStmt * node ) { 114 VISIT_BODY( node ); 115 } 116 117 template< typename pass_type > 118 void PassVisitor< pass_type >::visit( CatchStmt * node ) { 119 VISIT_BODY( node ); 120 } 121 122 template< typename pass_type > 123 void PassVisitor< pass_type >::visit( FinallyStmt * node ) { 124 VISIT_BODY( node ); 125 } 126 127 template< typename pass_type > 128 void PassVisitor< pass_type >::visit( NullStmt * node ) { 129 VISIT_BODY( node ); 130 } 131 132 template< typename pass_type > 133 void PassVisitor< pass_type >::visit( DeclStmt * node ) { 134 VISIT_BODY( node ); 135 } 136 137 template< typename pass_type > 138 void PassVisitor< pass_type >::visit( ImplicitCtorDtorStmt * node ) { 139 VISIT_BODY( node ); 140 } 141 142 template< typename pass_type > 143 void PassVisitor< pass_type >::visit( ApplicationExpr * node ) { 144 VISIT_BODY( node ); 145 } 146 147 template< typename pass_type > 148 void PassVisitor< pass_type >::visit( UntypedExpr * node ) { 149 VISIT_BODY( node ); 150 } 151 152 template< typename pass_type > 153 void PassVisitor< pass_type >::visit( NameExpr * node ) { 154 VISIT_BODY( node ); 155 } 156 157 template< typename pass_type > 158 void PassVisitor< pass_type >::visit( CastExpr * node ) { 159 VISIT_BODY( node ); 160 } 161 162 template< typename pass_type > 163 void PassVisitor< pass_type >::visit( AddressExpr * node ) { 164 VISIT_BODY( node ); 165 } 166 167 template< typename pass_type > 168 void PassVisitor< pass_type >::visit( LabelAddressExpr * node ) { 169 VISIT_BODY( node ); 170 } 171 172 template< typename pass_type > 173 void PassVisitor< pass_type >::visit( UntypedMemberExpr * node ) { 174 VISIT_BODY( node ); 175 } 176 177 template< typename pass_type > 178 void PassVisitor< pass_type >::visit( MemberExpr * node ) { 179 VISIT_BODY( node ); 180 } 181 182 template< typename pass_type > 183 void PassVisitor< pass_type >::visit( VariableExpr * node ) { 184 VISIT_BODY( node ); 185 } 186 187 template< typename pass_type > 188 void PassVisitor< pass_type >::visit( ConstantExpr * node ) { 189 VISIT_BODY( node ); 190 } 191 192 template< typename pass_type > 193 void PassVisitor< pass_type >::visit( SizeofExpr * node ) { 194 VISIT_BODY( node ); 195 } 196 197 template< typename pass_type > 198 void PassVisitor< pass_type >::visit( AlignofExpr * node ) { 199 VISIT_BODY( node ); 200 } 201 202 template< typename pass_type > 203 void PassVisitor< pass_type >::visit( UntypedOffsetofExpr * node ) { 204 VISIT_BODY( node ); 205 } 206 207 template< typename pass_type > 208 void PassVisitor< pass_type >::visit( OffsetofExpr * node ) { 209 VISIT_BODY( node ); 210 } 211 212 template< typename pass_type > 213 void PassVisitor< pass_type >::visit( OffsetPackExpr * node ) { 214 VISIT_BODY( node ); 215 } 216 217 template< typename pass_type > 218 void PassVisitor< pass_type >::visit( AttrExpr * node ) { 219 VISIT_BODY( node ); 220 } 221 222 template< typename pass_type > 223 void PassVisitor< pass_type >::visit( LogicalExpr * node ) { 224 VISIT_BODY( node ); 225 } 226 227 template< typename pass_type > 228 void PassVisitor< pass_type >::visit( ConditionalExpr * node ) { 229 VISIT_BODY( node ); 230 } 231 232 template< typename pass_type > 233 void PassVisitor< pass_type >::visit( CommaExpr * node ) { 234 VISIT_BODY( node ); 235 } 236 237 template< typename pass_type > 238 void PassVisitor< pass_type >::visit( TypeExpr * node ) { 239 VISIT_BODY( node ); 240 } 241 242 template< typename pass_type > 243 void PassVisitor< pass_type >::visit( AsmExpr * node ) { 244 VISIT_BODY( node ); 245 } 246 247 template< typename pass_type > 248 void PassVisitor< pass_type >::visit( ImplicitCopyCtorExpr * node ) { 249 VISIT_BODY( node ); 250 } 251 252 template< typename pass_type > 253 void PassVisitor< pass_type >::visit( ConstructorExpr * node ) { 254 VISIT_BODY( node ); 255 } 256 257 template< typename pass_type > 258 void PassVisitor< pass_type >::visit( CompoundLiteralExpr * node ) { 259 VISIT_BODY( node ); 260 } 261 262 template< typename pass_type > 263 void PassVisitor< pass_type >::visit( UntypedValofExpr * node ) { 264 VISIT_BODY( node ); 265 } 266 267 template< typename pass_type > 268 void PassVisitor< pass_type >::visit( RangeExpr * node ) { 269 VISIT_BODY( node ); 270 } 271 272 template< typename pass_type > 273 void PassVisitor< pass_type >::visit( UntypedTupleExpr * node ) { 274 VISIT_BODY( node ); 275 } 276 277 template< typename pass_type > 278 void PassVisitor< pass_type >::visit( TupleExpr * node ) { 279 VISIT_BODY( node ); 280 } 281 282 template< typename pass_type > 283 void PassVisitor< pass_type >::visit( TupleIndexExpr * node ) { 284 VISIT_BODY( node ); 285 } 286 287 template< typename pass_type > 288 void PassVisitor< pass_type >::visit( MemberTupleExpr * node ) { 289 VISIT_BODY( node ); 290 } 291 292 template< typename pass_type > 293 void PassVisitor< pass_type >::visit( TupleAssignExpr * node ) { 294 VISIT_BODY( node ); 295 } 296 297 template< typename pass_type > 298 void PassVisitor< pass_type >::visit( StmtExpr * node ) { 299 VISIT_BODY( node ); 300 } 301 302 template< typename pass_type > 303 void PassVisitor< pass_type >::visit( UniqueExpr * node ) { 304 VISIT_BODY( node ); 305 } 306 307 template< typename pass_type > 308 void PassVisitor< pass_type >::visit( VoidType * node ) { 309 VISIT_BODY( node ); 310 } 311 312 template< typename pass_type > 313 void PassVisitor< pass_type >::visit( BasicType * node ) { 314 VISIT_BODY( node ); 315 } 316 317 template< typename pass_type > 318 void PassVisitor< pass_type >::visit( PointerType * node ) { 319 VISIT_BODY( node ); 320 } 321 322 template< typename pass_type > 323 void PassVisitor< pass_type >::visit( ArrayType * node ) { 324 VISIT_BODY( node ); 325 } 326 327 template< typename pass_type > 328 void PassVisitor< pass_type >::visit( FunctionType * node ) { 329 VISIT_BODY( node ); 330 } 331 332 template< typename pass_type > 333 void PassVisitor< pass_type >::visit( StructInstType * node ) { 334 VISIT_BODY( node ); 335 } 336 337 template< typename pass_type > 338 void PassVisitor< pass_type >::visit( UnionInstType * node ) { 339 VISIT_BODY( node ); 340 } 341 342 template< typename pass_type > 343 void PassVisitor< pass_type >::visit( EnumInstType * node ) { 344 VISIT_BODY( node ); 345 } 346 347 template< typename pass_type > 348 void PassVisitor< pass_type >::visit( TraitInstType * node ) { 349 VISIT_BODY( node ); 350 } 351 352 template< typename pass_type > 353 void PassVisitor< pass_type >::visit( TypeInstType * node ) { 354 VISIT_BODY( node ); 355 } 356 357 template< typename pass_type > 358 void PassVisitor< pass_type >::visit( TupleType * node ) { 359 VISIT_BODY( node ); 360 } 361 362 template< typename pass_type > 363 void PassVisitor< pass_type >::visit( TypeofType * node ) { 364 VISIT_BODY( node ); 365 } 366 367 template< typename pass_type > 368 void PassVisitor< pass_type >::visit( AttrType * node ) { 369 VISIT_BODY( node ); 370 } 371 372 template< typename pass_type > 373 void PassVisitor< pass_type >::visit( VarArgsType * node ) { 374 VISIT_BODY( node ); 375 } 376 377 template< typename pass_type > 378 void PassVisitor< pass_type >::visit( ZeroType * node ) { 379 VISIT_BODY( node ); 380 } 381 382 template< typename pass_type > 383 void PassVisitor< pass_type >::visit( OneType * node ) { 384 VISIT_BODY( node ); 385 } 386 387 template< typename pass_type > 388 void PassVisitor< pass_type >::visit( SingleInit * node ) { 389 VISIT_BODY( node ); 390 } 391 392 template< typename pass_type > 393 void PassVisitor< pass_type >::visit( ListInit * node ) { 394 VISIT_BODY( node ); 395 } 396 397 template< typename pass_type > 398 void PassVisitor< pass_type >::visit( ConstructorInit * node ) { 399 VISIT_BODY( node ); 400 } 401 402 template< typename pass_type > 403 void PassVisitor< pass_type >::visit( Subrange * node ) { 404 VISIT_BODY( node ); 405 } 406 407 template< typename pass_type > 408 void PassVisitor< pass_type >::visit( Constant * node ) { 409 VISIT_BODY( node ); 410 } 411 412 //--------------------------------------------------------------------------------------------------------------- 413 414 template< typename pass_type > 415 DeclarationWithType * PassVisitor< pass_type >::mutate( ObjectDecl * node ) { 416 MUTATE_BODY( DeclarationWithType, node ); 417 } 418 419 template< typename pass_type > 420 DeclarationWithType * PassVisitor< pass_type >::mutate( FunctionDecl * node ) { 421 MUTATE_BODY( DeclarationWithType, node ); 422 } 423 424 template< typename pass_type > 425 Declaration * PassVisitor< pass_type >::mutate( StructDecl * node ) { 426 MUTATE_BODY( Declaration, node ); 427 } 428 429 template< typename pass_type > 430 Declaration * PassVisitor< pass_type >::mutate( UnionDecl * node ) { 431 MUTATE_BODY( Declaration, node ); 432 } 433 434 template< typename pass_type > 435 Declaration * PassVisitor< pass_type >::mutate( EnumDecl * node ) { 436 MUTATE_BODY( Declaration, node ); 437 } 438 439 template< typename pass_type > 440 Declaration * PassVisitor< pass_type >::mutate( TraitDecl * node ) { 441 MUTATE_BODY( Declaration, node ); 442 } 443 444 template< typename pass_type > 445 TypeDecl * PassVisitor< pass_type >::mutate( TypeDecl * node ) { 446 MUTATE_BODY( TypeDecl, node ); 447 } 448 449 template< typename pass_type > 450 Declaration * PassVisitor< pass_type >::mutate( TypedefDecl * node ) { 451 MUTATE_BODY( Declaration, node ); 452 } 453 454 template< typename pass_type > 455 AsmDecl * PassVisitor< pass_type >::mutate( AsmDecl * node ) { 456 MUTATE_BODY( AsmDecl, node ); 457 } 458 459 template< typename pass_type > 460 CompoundStmt * PassVisitor< pass_type >::mutate( CompoundStmt * node ) { 461 MUTATE_BODY( CompoundStmt, node ); 462 } 463 464 template< typename pass_type > 465 Statement * PassVisitor< pass_type >::mutate( ExprStmt * node ) { 466 MUTATE_BODY( Statement, node ); 467 } 468 469 template< typename pass_type > 470 Statement * PassVisitor< pass_type >::mutate( AsmStmt * node ) { 471 MUTATE_BODY( Statement, node ); 472 } 473 474 template< typename pass_type > 475 Statement * PassVisitor< pass_type >::mutate( IfStmt * node ) { 476 MUTATE_BODY( Statement, node ); 477 } 478 479 template< typename pass_type > 480 Statement * PassVisitor< pass_type >::mutate( WhileStmt * node ) { 481 MUTATE_BODY( Statement, node ); 482 } 483 484 template< typename pass_type > 485 Statement * PassVisitor< pass_type >::mutate( ForStmt * node ) { 486 MUTATE_BODY( Statement, node ); 487 } 488 489 template< typename pass_type > 490 Statement * PassVisitor< pass_type >::mutate( SwitchStmt * node ) { 491 MUTATE_BODY( Statement, node ); 492 } 493 494 template< typename pass_type > 495 Statement * PassVisitor< pass_type >::mutate( CaseStmt * node ) { 496 MUTATE_BODY( Statement, node ); 497 } 498 499 template< typename pass_type > 500 Statement * PassVisitor< pass_type >::mutate( BranchStmt * node ) { 501 MUTATE_BODY( Statement, node ); 502 } 503 504 template< typename pass_type > 505 Statement * PassVisitor< pass_type >::mutate( ReturnStmt * node ) { 506 MUTATE_BODY( Statement, node ); 507 } 508 509 template< typename pass_type > 510 Statement * PassVisitor< pass_type >::mutate( TryStmt * node ) { 511 MUTATE_BODY( Statement, node ); 512 } 513 514 template< typename pass_type > 515 Statement * PassVisitor< pass_type >::mutate( CatchStmt * node ) { 516 MUTATE_BODY( Statement, node ); 517 } 518 519 template< typename pass_type > 520 Statement * PassVisitor< pass_type >::mutate( FinallyStmt * node ) { 521 MUTATE_BODY( Statement, node ); 522 } 523 524 template< typename pass_type > 525 NullStmt * PassVisitor< pass_type >::mutate( NullStmt * node ) { 526 MUTATE_BODY( NullStmt, node ); 527 } 528 529 template< typename pass_type > 530 Statement * PassVisitor< pass_type >::mutate( DeclStmt * node ) { 531 MUTATE_BODY( Statement, node ); 532 } 533 534 template< typename pass_type > 535 Statement * PassVisitor< pass_type >::mutate( ImplicitCtorDtorStmt * node ) { 536 MUTATE_BODY( Statement, node ); 537 } 538 539 template< typename pass_type > 540 Expression * PassVisitor< pass_type >::mutate( ApplicationExpr * node ) { 541 MUTATE_BODY( Expression, node ); 542 } 543 544 template< typename pass_type > 545 Expression * PassVisitor< pass_type >::mutate( UntypedExpr * node ) { 546 MUTATE_BODY( Expression, node ); 547 } 548 549 template< typename pass_type > 550 Expression * PassVisitor< pass_type >::mutate( NameExpr * node ) { 551 MUTATE_BODY( Expression, node ); 552 } 553 554 template< typename pass_type > 555 Expression * PassVisitor< pass_type >::mutate( AddressExpr * node ) { 556 MUTATE_BODY( Expression, node ); 557 } 558 559 template< typename pass_type > 560 Expression * PassVisitor< pass_type >::mutate( LabelAddressExpr * node ) { 561 MUTATE_BODY( Expression, node ); 562 } 563 564 template< typename pass_type > 565 Expression * PassVisitor< pass_type >::mutate( CastExpr * node ) { 566 MUTATE_BODY( Expression, node ); 567 } 568 569 template< typename pass_type > 570 Expression * PassVisitor< pass_type >::mutate( UntypedMemberExpr * node ) { 571 MUTATE_BODY( Expression, node ); 572 } 573 574 template< typename pass_type > 575 Expression * PassVisitor< pass_type >::mutate( MemberExpr * node ) { 576 MUTATE_BODY( Expression, node ); 577 } 578 579 template< typename pass_type > 580 Expression * PassVisitor< pass_type >::mutate( VariableExpr * node ) { 581 MUTATE_BODY( Expression, node ); 582 } 583 584 template< typename pass_type > 585 Expression * PassVisitor< pass_type >::mutate( ConstantExpr * node ) { 586 MUTATE_BODY( Expression, node ); 587 } 588 589 template< typename pass_type > 590 Expression * PassVisitor< pass_type >::mutate( SizeofExpr * node ) { 591 MUTATE_BODY( Expression, node ); 592 } 593 594 template< typename pass_type > 595 Expression * PassVisitor< pass_type >::mutate( AlignofExpr * node ) { 596 MUTATE_BODY( Expression, node ); 597 } 598 599 template< typename pass_type > 600 Expression * PassVisitor< pass_type >::mutate( UntypedOffsetofExpr * node ) { 601 MUTATE_BODY( Expression, node ); 602 } 603 604 template< typename pass_type > 605 Expression * PassVisitor< pass_type >::mutate( OffsetofExpr * node ) { 606 MUTATE_BODY( Expression, node ); 607 } 608 609 template< typename pass_type > 610 Expression * PassVisitor< pass_type >::mutate( OffsetPackExpr * node ) { 611 MUTATE_BODY( Expression, node ); 612 } 613 614 template< typename pass_type > 615 Expression * PassVisitor< pass_type >::mutate( AttrExpr * node ) { 616 MUTATE_BODY( Expression, node ); 617 } 618 619 template< typename pass_type > 620 Expression * PassVisitor< pass_type >::mutate( LogicalExpr * node ) { 621 MUTATE_BODY( Expression, node ); 622 } 623 624 template< typename pass_type > 625 Expression * PassVisitor< pass_type >::mutate( ConditionalExpr * node ) { 626 MUTATE_BODY( Expression, node ); 627 } 628 629 template< typename pass_type > 630 Expression * PassVisitor< pass_type >::mutate( CommaExpr * node ) { 631 MUTATE_BODY( Expression, node ); 632 } 633 634 template< typename pass_type > 635 Expression * PassVisitor< pass_type >::mutate( TypeExpr * node ) { 636 MUTATE_BODY( Expression, node ); 637 } 638 639 template< typename pass_type > 640 Expression * PassVisitor< pass_type >::mutate( AsmExpr * node ) { 641 MUTATE_BODY( Expression, node ); 642 } 643 644 template< typename pass_type > 645 Expression * PassVisitor< pass_type >::mutate( ImplicitCopyCtorExpr * node ) { 646 MUTATE_BODY( Expression, node ); 647 } 648 649 template< typename pass_type > 650 Expression * PassVisitor< pass_type >::mutate( ConstructorExpr * node ) { 651 MUTATE_BODY( Expression, node ); 652 } 653 654 template< typename pass_type > 655 Expression * PassVisitor< pass_type >::mutate( CompoundLiteralExpr * node ) { 656 MUTATE_BODY( Expression, node ); 657 } 658 659 template< typename pass_type > 660 Expression * PassVisitor< pass_type >::mutate( UntypedValofExpr * node ) { 661 MUTATE_BODY( Expression, node ); 662 } 663 664 template< typename pass_type > 665 Expression * PassVisitor< pass_type >::mutate( RangeExpr * node ) { 666 MUTATE_BODY( Expression, node ); 667 } 668 669 template< typename pass_type > 670 Expression * PassVisitor< pass_type >::mutate( UntypedTupleExpr * node ) { 671 MUTATE_BODY( Expression, node ); 672 } 673 674 template< typename pass_type > 675 Expression * PassVisitor< pass_type >::mutate( TupleExpr * node ) { 676 MUTATE_BODY( Expression, node ); 677 } 678 679 template< typename pass_type > 680 Expression * PassVisitor< pass_type >::mutate( TupleIndexExpr * node ) { 681 MUTATE_BODY( Expression, node ); 682 } 683 684 template< typename pass_type > 685 Expression * PassVisitor< pass_type >::mutate( MemberTupleExpr * node ) { 686 MUTATE_BODY( Expression, node ); 687 } 688 689 template< typename pass_type > 690 Expression * PassVisitor< pass_type >::mutate( TupleAssignExpr * node ) { 691 MUTATE_BODY( Expression, node ); 692 } 693 694 template< typename pass_type > 695 Expression * PassVisitor< pass_type >::mutate( StmtExpr * node ) { 696 MUTATE_BODY( Expression, node ); 697 } 698 699 template< typename pass_type > 700 Expression * PassVisitor< pass_type >::mutate( UniqueExpr * node ) { 701 MUTATE_BODY( Expression, node ); 702 } 703 704 template< typename pass_type > 705 Type * PassVisitor< pass_type >::mutate( VoidType * node ) { 706 MUTATE_BODY( Type, node ); 707 } 708 709 template< typename pass_type > 710 Type * PassVisitor< pass_type >::mutate( BasicType * node ) { 711 MUTATE_BODY( Type, node ); 712 } 713 714 template< typename pass_type > 715 Type * PassVisitor< pass_type >::mutate( PointerType * node ) { 716 MUTATE_BODY( Type, node ); 717 } 718 719 template< typename pass_type > 720 Type * PassVisitor< pass_type >::mutate( ArrayType * node ) { 721 MUTATE_BODY( Type, node ); 722 } 723 724 template< typename pass_type > 725 Type * PassVisitor< pass_type >::mutate( FunctionType * node ) { 726 MUTATE_BODY( Type, node ); 727 } 728 729 template< typename pass_type > 730 Type * PassVisitor< pass_type >::mutate( StructInstType * node ) { 731 MUTATE_BODY( Type, node ); 732 } 733 734 template< typename pass_type > 735 Type * PassVisitor< pass_type >::mutate( UnionInstType * node ) { 736 MUTATE_BODY( Type, node ); 737 } 738 739 template< typename pass_type > 740 Type * PassVisitor< pass_type >::mutate( EnumInstType * node ) { 741 MUTATE_BODY( Type, node ); 742 } 743 744 template< typename pass_type > 745 Type * PassVisitor< pass_type >::mutate( TraitInstType * node ) { 746 MUTATE_BODY( Type, node ); 747 } 748 749 template< typename pass_type > 750 Type * PassVisitor< pass_type >::mutate( TypeInstType * node ) { 751 MUTATE_BODY( Type, node ); 752 } 753 754 template< typename pass_type > 755 Type * PassVisitor< pass_type >::mutate( TupleType * node ) { 756 MUTATE_BODY( Type, node ); 757 } 758 759 template< typename pass_type > 760 Type * PassVisitor< pass_type >::mutate( TypeofType * node ) { 761 MUTATE_BODY( Type, node ); 762 } 763 764 template< typename pass_type > 765 Type * PassVisitor< pass_type >::mutate( AttrType * node ) { 766 MUTATE_BODY( Type, node ); 767 } 768 769 template< typename pass_type > 770 Type * PassVisitor< pass_type >::mutate( VarArgsType * node ) { 771 MUTATE_BODY( Type, node ); 772 } 773 774 template< typename pass_type > 775 Type * PassVisitor< pass_type >::mutate( ZeroType * node ) { 776 MUTATE_BODY( Type, node ); 777 } 778 779 template< typename pass_type > 780 Type * PassVisitor< pass_type >::mutate( OneType * node ) { 781 MUTATE_BODY( Type, node ); 782 } 783 784 template< typename pass_type > 785 Initializer * PassVisitor< pass_type >::mutate( SingleInit * node ) { 786 MUTATE_BODY( Initializer, node ); 787 } 788 789 template< typename pass_type > 790 Initializer * PassVisitor< pass_type >::mutate( ListInit * node ) { 791 MUTATE_BODY( Initializer, node ); 792 } 793 794 template< typename pass_type > 795 Initializer * PassVisitor< pass_type >::mutate( ConstructorInit * node ) { 796 MUTATE_BODY( Initializer, node ); 797 } 798 799 template< typename pass_type > 800 Subrange * PassVisitor< pass_type >::mutate( Subrange * node ) { 801 MUTATE_BODY( Subrange, node ); 802 } 803 804 template< typename pass_type > 805 Constant * PassVisitor< pass_type >::mutate( Constant * node ) { 806 MUTATE_BODY( Constant, node ); 807 }
Note: See TracChangeset
for help on using the changeset viewer.