/* * This file is part of the Cforall project * * $Id: ScrubTyVars.h,v 1.4 2005/08/29 20:14:13 rcbilson Exp $ * */ #ifndef GENPOLY_SCRUBTYVARS_H #define GENPOLY_SCRUBTYVARS_H #include "GenPoly.h" #include "SynTree/SynTree.h" #include "SynTree/Mutator.h" namespace GenPoly { class ScrubTyVars : public Mutator { public: ScrubTyVars( bool doAll, const TyVarMap &tyVars ): doAll( doAll ), tyVars( tyVars ) {} template< typename SynTreeClass > static SynTreeClass *scrub( SynTreeClass *target, const TyVarMap &tyVars ); template< typename SynTreeClass > static SynTreeClass *scrub( SynTreeClass *target ); virtual Type* mutate( TypeInstType *typeInst ); virtual Type* mutate( PointerType *pointer ); private: bool doAll; const TyVarMap &tyVars; }; /* static class method */ template< typename SynTreeClass > SynTreeClass * ScrubTyVars::scrub( SynTreeClass *target, const TyVarMap &tyVars ) { ScrubTyVars scrubber( false, tyVars ); return static_cast< SynTreeClass* >( target->acceptMutator( scrubber ) ); } /* static class method */ template< typename SynTreeClass > SynTreeClass * ScrubTyVars::scrub( SynTreeClass *target ) { TyVarMap tyVars; ScrubTyVars scrubber( true, tyVars ); return static_cast< SynTreeClass* >( target->acceptMutator( scrubber ) ); } } // namespace GenPoly #endif /* #ifndef GENPOLY_SCRUBTYVARS_H */