#pragma once #define VISIT_BODY( node ) \ call_previsit( node ); \ Visitor::visit( node ); \ call_postvisit( node ); \ template< typename pass_type > void PassVisitor< pass_type>::visit( ObjectDecl * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( FunctionDecl * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( StructDecl * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( UnionDecl * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( EnumDecl * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TraitDecl * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TypeDecl * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TypedefDecl * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( AsmDecl * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( CompoundStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ExprStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( AsmStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( IfStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( WhileStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ForStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( SwitchStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( CaseStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( BranchStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ReturnStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TryStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( CatchStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( FinallyStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( NullStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( DeclStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ImplicitCtorDtorStmt * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ApplicationExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( UntypedExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( NameExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( CastExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( AddressExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( LabelAddressExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( UntypedMemberExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( MemberExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( VariableExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ConstantExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( SizeofExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( AlignofExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( UntypedOffsetofExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( OffsetofExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( OffsetPackExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( AttrExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( LogicalExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ConditionalExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( CommaExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TypeExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( AsmExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ImplicitCopyCtorExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ConstructorExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( CompoundLiteralExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( UntypedValofExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( RangeExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( UntypedTupleExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TupleExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TupleIndexExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( MemberTupleExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TupleAssignExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( StmtExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( UniqueExpr * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( VoidType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( BasicType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( PointerType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ArrayType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( FunctionType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( StructInstType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( UnionInstType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( EnumInstType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TraitInstType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TypeInstType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TupleType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( TypeofType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( AttrType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( VarArgsType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ZeroType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( OneType * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( SingleInit * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ListInit * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( ConstructorInit * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( Subrange * node ) { VISIT_BODY( node ); } template< typename pass_type > void PassVisitor< pass_type>::visit( Constant * node ) { VISIT_BODY( node ); }