00001 // $Id: pass_utils.h,v 1.1.1.1 2000/06/08 00:10:03 afikes Exp $ 00002 00003 #ifndef OSUIFUTILITIES__PASS_UTILS_H 00004 #define OSUIFUTILITIES__PASS_UTILS_H 00005 00006 #include "suifkernel/suifkernel_forwarders.h" 00007 #include "iokernel/cast.h" 00008 #include "common/suif_list.h" 00009 #include "suifkernel/command_line_parsing.h" 00010 #include "suifkernel/token_stream.h" 00011 #include "suifpasses/passes.h" 00012 #include "osuifutilities/walker_utils.h" 00013 00014 00022 template<class T> 00023 class CollectWalkerPass : public Pass { 00024 protected: 00025 FileSetBlock* _fsb; 00026 CollectWalkerT<T>* _walker; 00027 00028 public: 00029 CollectWalkerPass( SuifEnv* env, const LString &name) : 00030 Pass( env, name ), 00031 _walker( new CollectWalkerT<T>( env ) ) 00032 { 00033 initialize_flags(); 00034 } 00035 00037 virtual void initialize_flags() { } 00038 00039 virtual void initialize() { 00040 Pass::initialize(); 00041 } 00042 00043 virtual bool parse_command_line(TokenStream *command_line_stream) { 00044 initialize_flags(); 00045 return Pass::parse_command_line( command_line_stream ); 00046 } 00047 00048 OptionList* get_command_line() { return _command_line; } 00049 Module *clone() const { return (Module *) this; } 00050 00051 virtual void do_file_set_block( FileSetBlock* fsb ) { 00052 suif_assert_message( fsb !=NULL, 00053 ("FileSetBlock is NULL.") ); 00054 _fsb = fsb; 00055 fsb->walk( *_walker ); 00056 process_walker( _walker ); 00057 } 00058 00059 virtual void process_walker( CollectWalkerT<T>* walker ) { 00060 preprocess(); 00061 for ( unsigned i = 0 ; i < walker->size() ; i++ ) { 00062 T* t = walker->at(i); 00063 process_suif_object( t ); 00064 } 00065 postprocess(); 00066 } 00067 00068 virtual void preprocess() { } 00069 virtual void postprocess() { } 00070 virtual void process_suif_object(T* t) =0; 00071 }; 00072 00073 00074 #endif /* OSUIFUTILITIES__PASS_UTILS_H */