Index: src/SymTab/FixFunction.cc
===================================================================
--- src/SymTab/FixFunction.cc	(revision d1969a607787c81d78565de2d2aaa145be1680e2)
+++ src/SymTab/FixFunction.cc	(revision 89e6ffcdff36e5cf99ff1d6c8bde150e2fb05235)
@@ -77,4 +77,12 @@
 		return varArgsType;
 	}
+
+	Type * FixFunction::mutate(ZeroType *zeroType) {
+		return zeroType;
+	}
+
+	Type * FixFunction::mutate(OneType *oneType) {
+		return oneType;
+	}
 } // namespace SymTab
 
Index: src/SymTab/FixFunction.h
===================================================================
--- src/SymTab/FixFunction.h	(revision d1969a607787c81d78565de2d2aaa145be1680e2)
+++ src/SymTab/FixFunction.h	(revision 89e6ffcdff36e5cf99ff1d6c8bde150e2fb05235)
@@ -42,4 +42,6 @@
 		virtual Type* mutate(TupleType *tupleType);
 		virtual Type* mutate(VarArgsType *varArgsType);
+		virtual Type* mutate(ZeroType *zeroType);
+		virtual Type* mutate(OneType *oneType);
   
 		bool isVoid;
Index: src/SymTab/ImplementationType.cc
===================================================================
--- src/SymTab/ImplementationType.cc	(revision d1969a607787c81d78565de2d2aaa145be1680e2)
+++ src/SymTab/ImplementationType.cc	(revision 89e6ffcdff36e5cf99ff1d6c8bde150e2fb05235)
@@ -41,4 +41,6 @@
 		virtual void visit(TupleType *tupleType);
 		virtual void visit(VarArgsType *varArgsType);
+		virtual void visit(ZeroType *zeroType);
+		virtual void visit(OneType *oneType);
 
 		Type *result;			// synthesized
@@ -120,4 +122,10 @@
 	void ImplementationType::visit(VarArgsType *varArgsType) {
 	}
+
+	void ImplementationType::visit(ZeroType *zeroType) {
+	}
+
+	void ImplementationType::visit(OneType *oneType) {
+	}
 } // namespace SymTab
 
Index: src/SymTab/Mangler.cc
===================================================================
--- src/SymTab/Mangler.cc	(revision d1969a607787c81d78565de2d2aaa145be1680e2)
+++ src/SymTab/Mangler.cc	(revision 89e6ffcdff36e5cf99ff1d6c8bde150e2fb05235)
@@ -229,4 +229,12 @@
 		printQualifiers( varArgsType );
 		mangleName << "VARGS";
+	}
+
+	void Mangler::visit( ZeroType *zeroType ) {
+		mangleName << "Z";
+	}
+
+	void Mangler::visit( OneType *oneType ) {
+		mangleName << "O";
 	}
 
Index: src/SymTab/Mangler.h
===================================================================
--- src/SymTab/Mangler.h	(revision d1969a607787c81d78565de2d2aaa145be1680e2)
+++ src/SymTab/Mangler.h	(revision 89e6ffcdff36e5cf99ff1d6c8bde150e2fb05235)
@@ -46,4 +46,6 @@
 		virtual void visit( TupleType *tupleType );
 		virtual void visit( VarArgsType *varArgsType );
+		virtual void visit( ZeroType *zeroType );
+		virtual void visit( OneType *oneType );
   
 		std::string get_mangleName() { return mangleName.str(); }
Index: src/SymTab/TypeEquality.cc
===================================================================
--- src/SymTab/TypeEquality.cc	(revision d1969a607787c81d78565de2d2aaa145be1680e2)
+++ src/SymTab/TypeEquality.cc	(revision 89e6ffcdff36e5cf99ff1d6c8bde150e2fb05235)
@@ -42,4 +42,6 @@
 		virtual void visit( TypeInstType *typeInst );
 		virtual void visit( VarArgsType *varArgsType );
+		virtual void visit( ZeroType *zeroType );
+		virtual void visit( OneType *oneType );
 
 		void handleQualifiers( Type * t );
@@ -199,3 +201,17 @@
 		}
 	}
+
+	void TypeEquality::visit( ZeroType *zeroType ) {
+		handleQualifiers( zeroType );
+		if ( ! dynamic_cast< ZeroType * >( other ) ) {
+			result = false;
+		}
+	}
+
+	void TypeEquality::visit( OneType *oneType ) {
+		handleQualifiers( oneType );
+		if ( ! dynamic_cast< OneType * >( other ) ) {
+			result = false;
+		}
+	}
 } // namespace SymTab
