#ifndef _FUNFIX_H_ #define _FUNFIX_H_ #include "SynTree/Mutator.h" #include "SynTree/Declaration.h" #include "SynTree/Expression.h" #include "SynTree/Statement.h" #include "SynTree/Type.h" #include "SymTab/Indexer.h" #include "ResolvExpr/Resolver.h" #include "ResolvExpr/AlternativeFinder.h" namespace Tuples { class FunctionFixer : public Mutator { typedef Mutator Parent; public: FunctionFixer() {} virtual ~FunctionFixer() {} virtual Type *mutate( FunctionType *functionType ); virtual Statement *mutate( ReturnStmt *retStmt ); virtual DeclarationWithType *mutate( FunctionDecl *functionDecl ); virtual Expression *mutate( VariableExpr *variableExpr); // indexer runs virtual ObjectDecl *mutate( ObjectDecl *objectDecl ) { index.visit( objectDecl ); return objectDecl; } virtual TypeDecl *mutate( TypeDecl *typeDecl ) { index.visit( typeDecl ); return typeDecl; } virtual TypedefDecl *mutate( TypedefDecl *typeDecl ) { index.visit( typeDecl ); return typeDecl; } virtual StructDecl *mutate( StructDecl *aggregateDecl ) { index.visit( aggregateDecl ); return aggregateDecl; } virtual UnionDecl *mutate( UnionDecl *aggregateDecl ) { index.visit( aggregateDecl ); return aggregateDecl; } virtual EnumDecl *mutate( EnumDecl *aggregateDecl ) { index.visit( aggregateDecl ); return aggregateDecl; } virtual Type *mutate( StructInstType *aggrInst ) { index.visit( aggrInst ); return aggrInst; } virtual Type *mutate( UnionInstType *aggrInst ) { index.visit( aggrInst ); return aggrInst; } private: std::list< DeclarationWithType * > rets; SymTab::Indexer index; }; } // namespace Tuples #endif // #ifndef _FUNFIX_H_ /* Local Variables: mode: c++ End: */