Index: translator/Common/CompilerError.h
===================================================================
--- translator/Common/CompilerError.h	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
+++ translator/Common/CompilerError.h	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
@@ -0,0 +1,27 @@
+#ifndef COMPILER_ERROR_H
+#define COMPILER_ERROR_H
+
+#include <string>
+//#include "../config.h"
+
+class CompilerError : public std::exception
+{
+public:
+  CompilerError();
+  CompilerError( std::string what ) : what( what ) {}
+  ~CompilerError() throw () {}
+
+  std::string get_what() const { return what; }
+  void set_what( std::string newValue ) { what = newValue; }
+
+private:
+  std::string what;
+};
+
+#endif /* COMPILER_ERROR_H */
+
+/*
+  Local Variables:
+  mode: c++
+  End:
+*/
Index: translator/Common/SemanticError.cc
===================================================================
--- translator/Common/SemanticError.cc	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
+++ translator/Common/SemanticError.cc	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
@@ -0,0 +1,41 @@
+/*
+ * This file is part of the Cforall project
+ *
+ * $Id: SemanticError.cc,v 1.1 2002/04/27 19:57:10 rcbilson Exp $
+ *
+ */
+
+#include <iostream>
+#include <list>
+#include <string>
+#include <algorithm>
+#include <iterator>
+
+#include "SemanticError.h"
+
+SemanticError::SemanticError()
+{
+}
+
+SemanticError::SemanticError( std::string error )
+{
+  errors.push_back( std::string( "Error: " ) + error );
+}
+
+void
+SemanticError::append( SemanticError &other )
+{
+  errors.splice( errors.end(), other.errors );
+}
+
+bool
+SemanticError::isEmpty() const
+{
+  return errors.empty();
+}
+
+void
+SemanticError::print( std::ostream &os )
+{
+  std::copy( errors.begin(), errors.end(), std::ostream_iterator< std::string >( os, "\n" ) );
+}
Index: translator/Common/SemanticError.h
===================================================================
--- translator/Common/SemanticError.h	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
+++ translator/Common/SemanticError.h	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
@@ -0,0 +1,45 @@
+/*
+ * This file is part of the Cforall project
+ *
+ * $Id: SemanticError.h,v 1.1 2002/04/27 19:57:10 rcbilson Exp $
+ *
+ */
+
+#ifndef SEMANTICERROR_H
+#define SEMANTICERROR_H
+
+#include <exception>
+#include <string>
+#include <strstream>
+#include <list>
+#include <iostream>
+
+class SemanticError : public std::exception
+{
+public:
+  SemanticError();
+  SemanticError( std::string error );
+  template< typename T > SemanticError( const std::string &error, const T *obj );
+  ~SemanticError() throw() {}
+
+  void append( SemanticError &other );
+  bool isEmpty() const;
+  void print( std::ostream &os );
+
+  // constructs an exception using the given message and the printed
+  // representation of the obj (T must have a print method)
+
+private:
+  std::list< std::string > errors;
+};
+
+template< typename T >
+SemanticError::SemanticError( const std::string &error, const T *obj )
+{
+  std::ostrstream os;
+  os << "Error: " << error;
+  obj->print( os );
+  errors.push_back( std::string( os.str(), os.pcount() ) );
+}
+
+#endif /* SEMANTICERROR_H */
Index: translator/Common/UnimplementedError.h
===================================================================
--- translator/Common/UnimplementedError.h	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
+++ translator/Common/UnimplementedError.h	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
@@ -0,0 +1,27 @@
+/*
+ * This file is part of the Cforall project
+ *
+ * $Id: UnimplementedError.h,v 1.1 2002/09/02 20:31:53 rcbilson Exp $
+ *
+ */
+
+#ifndef COMMON_UNIMPLEMENTEDERROR_H
+#define COMMON_UNIMPLEMENTEDERROR_H
+
+#include <string>
+
+class UnimplementedError : public std::exception
+{
+public:
+  UnimplementedError();
+  UnimplementedError( std::string what ) : what( what ) {}
+  ~UnimplementedError() throw () {}
+  
+  std::string get_what() const { return what; }
+  void set_what( std::string newValue ) { what = newValue; }
+  
+private:
+  std::string what;
+};
+
+#endif /* #ifndef COMMON_UNIMPLEMENTEDERROR_H */
Index: translator/Common/UniqueName.cc
===================================================================
--- translator/Common/UniqueName.cc	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
+++ translator/Common/UniqueName.cc	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
@@ -0,0 +1,25 @@
+/*
+ * This file is part of the Cforall project
+ *
+ * $Id: UniqueName.cc,v 1.1 2002/04/30 03:30:14 rcbilson Exp $
+ *
+ */
+
+#include <string>
+#include <strstream>
+
+#include "UniqueName.h"
+
+UniqueName::UniqueName( const std::string &base )
+  : base( base ), count( 0 )
+{
+}
+
+std::string 
+UniqueName::newName( const std::string &additional )
+{
+  std::ostrstream os;
+  os << base << additional << count++;
+  return std::string( os.str(), os.pcount() );
+}
+
Index: translator/Common/UniqueName.h
===================================================================
--- translator/Common/UniqueName.h	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
+++ translator/Common/UniqueName.h	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
@@ -0,0 +1,25 @@
+/*
+ * This file is part of the Cforall project
+ *
+ * $Id: UniqueName.h,v 1.1 2002/04/30 03:30:14 rcbilson Exp $
+ *
+ */
+
+#ifndef UNIQUENAME_H
+#define UNIQUENAME_H
+
+#include <string>
+
+class UniqueName
+{
+public:
+  UniqueName( const std::string &base = "" );
+
+  std::string newName( const std::string &additional = "" );
+
+private:
+  std::string base;
+  int count;
+};
+
+#endif /* #ifndef UNIQUENAME_H */
Index: translator/Common/module.mk
===================================================================
--- translator/Common/module.mk	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
+++ translator/Common/module.mk	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
@@ -0,0 +1,2 @@
+SRC += Common/SemanticError.cc \
+       Common/UniqueName.cc
Index: translator/Common/utility.h
===================================================================
--- translator/Common/utility.h	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
+++ translator/Common/utility.h	(revision 51b734528489f81a5af985bfee9aa3b6625b9774)
@@ -0,0 +1,218 @@
+/*
+ * This file is part of the Cforall project
+ *
+ * Some useful template utility functions
+ *
+ * $Id: utility.h,v 1.17 2003/11/26 18:05:21 rgesteve Exp $
+ *
+ */
+
+#ifndef COMMON_UTILITY_H
+#define COMMON_UTILITY_H
+
+#include <iostream>
+#include <strstream>
+#include <iterator>
+#include <string>
+#include <cctype>
+#include <list>
+
+template< typename T >
+static inline T*
+maybeClone( const T *orig )
+{
+  if( orig ) {
+    return orig->clone();
+  } else {
+    return 0;
+  }
+}
+
+template< typename T, typename U >
+static inline T*
+maybeBuild( const U *orig )
+{
+  if( orig ) {
+    return orig->build();
+  } else {
+    return 0;
+  }
+}
+
+template< typename Input_iterator >
+void
+printEnums( Input_iterator begin, Input_iterator end, const char * const *name_array, std::ostream &os )
+{
+  for( Input_iterator i = begin; i != end; ++i ) {
+    os << name_array[ *i ] << ' ';
+  }
+}
+
+template< typename Container >
+void
+deleteAll( Container &container )
+{
+  for( typename Container::iterator i = container.begin(); i != container.end(); ++i ) {
+    delete *i;
+  }
+}
+
+template< typename Container >
+void
+printAll( const Container &container, std::ostream &os, int indent = 0 )
+{
+  for( typename Container::const_iterator i = container.begin(); i != container.end(); ++i ) {
+    if( *i ) {
+      os << std::string(indent,  ' ');
+      (*i)->print( os, indent + 2 );
+      os << std::endl;
+    }
+  }
+}
+
+template< typename SrcContainer, typename DestContainer >
+void
+cloneAll( const SrcContainer &src, DestContainer &dest )
+{
+  typename SrcContainer::const_iterator in = src.begin();
+  std::back_insert_iterator< DestContainer > out( dest );
+  while( in != src.end() ) {
+    *out++ = (*in++)->clone();
+  }
+}
+
+template< typename Container >
+void
+assertAll( const Container &container )
+{
+  int count = 0;
+  for( typename Container::const_iterator i = container.begin(); i != container.end(); ++i ) {
+    if( !(*i) ) {
+      std::cerr << count << " is null" << std::endl;
+    }
+  }
+}
+
+static inline std::string
+assign_strptr( std::string *str )
+{
+  if( str == 0 ) {
+    return "";
+  } else {
+    std::string tmp;
+    tmp = *str;
+    delete str;
+    return tmp;
+  }
+}
+
+template< class T, typename ResultType, ResultType (T::* memfunc)() >
+ResultType dispatch(T *pT){
+  return (pT->*memfunc)();
+}
+
+template < typename T >
+std::list<T> tail( std::list<T> l )
+{
+  if(! l.empty()){
+    std::list<T> ret(++(l.begin()), l.end());
+    return ret;
+  }
+}
+
+template < typename T >
+std::list<T> flatten( std::list < std::list<T> > l) {
+  typedef std::list <T> Ts;
+
+  Ts ret;
+
+  switch( l.size() ){
+  case 0:
+    return ret;
+  case 1:
+    return l.front();
+  default:
+    ret = flatten(tail(l));
+    ret.insert(ret.begin(), l.front().begin(), l.front().end());
+    return ret;
+  }
+}
+
+template < typename T > 
+std::string toString ( T value ) {
+  std::ostrstream os;
+  
+  os << value; // << std::ends;
+  os.freeze( false );
+
+  return std::string(os.str(), os.pcount());
+}
+
+template< class Constructed, typename Arg >
+Constructed *ctor( Arg arg ) {
+  Constructed *c = new Constructed( arg );
+  return c;
+}
+
+template< class Constructed, typename Arg >
+Constructed ctor_noptr( Arg arg ) {
+  return Constructed( arg );
+}
+
+template< typename T >
+void replace( std::list< T > &org, typename std::list< T >::iterator pos, std::list< T > &with ) {
+  // TIter should secretly be a typename std::list< T >::iterator
+  //   ( g++ 3.2 issues a 'is implicitly a typename' warning if I make this explicit )
+   typename std::list< T >::iterator next = pos; advance( next, 1 );
+
+   //if ( next != org.end() ) {
+    org.erase( pos );
+    org.splice( next, with );
+    //}
+
+  return;
+}
+
+template< typename T1, typename T2 >
+T2 *cast_ptr( T1 *from ) {
+  return dynamic_cast< T2 * >( from );
+}
+
+template< class Exception, typename Arg >
+void inline assert_throw( bool pred, Arg arg ) {
+  if (pred) throw Exception( arg );
+}
+
+template< typename T >
+struct is_null_pointer {
+  bool operator()( const T *ptr ){ return ( ptr == 0 ); }
+};
+
+template< class InputIterator, class OutputIterator, class Predicate >
+void filter(InputIterator begin, InputIterator end, OutputIterator out, Predicate pred)
+{
+  while ( begin++ != end )
+    if( pred(*begin) ) *out++ = *begin;
+
+  return;
+}
+
+template< class InputIterator1, class InputIterator2, class OutputIterator >
+void zip( InputIterator1 b1, InputIterator1 e1, InputIterator2 b2, InputIterator2 e2, OutputIterator out ) {
+  while( b1 != e1 && b2 != e2 )
+    *out++ = std::pair<typename InputIterator1::value_type, typename InputIterator2::value_type>(*b1++, *b2++);
+}
+
+template< class InputIterator1, class InputIterator2, class OutputIterator, class BinFunction >
+void zipWith( InputIterator1 b1, InputIterator1 e1, InputIterator2 b2, InputIterator2 e2, OutputIterator out, BinFunction func ) {
+  while( b1 != e1 && b2 != e2 )
+    *out++ = func(*b1++, *b2++);
+}
+
+#endif /* #ifndef COMMON_UTILITY_H */
+
+/*
+  Local Variables:
+  mode: c++
+  End:
+*/
