/*
 * This file is part of the Cforall project
 *
 * $Id: FixFunction.h,v 1.3 2005/08/29 20:14:17 rcbilson Exp $
 *
 */

#ifndef SYMTAB_FIXFUNCTION_H
#define SYMTAB_FIXFUNCTION_H

#include "SynTree/Mutator.h"

namespace SymTab {

class FixFunction : public Mutator
{
  typedef Mutator Parent;

public:
  FixFunction();

  bool get_isVoid() const { return isVoid; }
  void set_isVoid( bool newValue ) { isVoid = newValue; }

private:
  virtual DeclarationWithType* mutate(FunctionDecl *functionDecl);

  virtual Type* mutate(VoidType *voidType);
  virtual Type* mutate(BasicType *basicType);
  virtual Type* mutate(PointerType *pointerType);
  virtual Type* mutate(ArrayType *arrayType);
  virtual Type* mutate(StructInstType *aggregateUseType);
  virtual Type* mutate(UnionInstType *aggregateUseType);
  virtual Type* mutate(EnumInstType *aggregateUseType);
  virtual Type* mutate(ContextInstType *aggregateUseType);
  virtual Type* mutate(TypeInstType *aggregateUseType);
  virtual Type* mutate(TupleType *tupleType);
  
  bool isVoid;
};

} // namespace SymTab

#endif /* #ifndef SYMTAB_FIXFUNCTION_H */
