Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision 5bf47126bd2626236e355b067fca0454ce0498fd)
+++ src/GenPoly/Box.cc	(revision f8b961b2dbd5821dc28db05e5097a385b8179c88)
@@ -50,4 +50,5 @@
 		FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars );
 
+		/// Replaces polymorphic return types with out-parameters, replaces calls to polymorphic functions with adapter calls as needed, and adds appropriate type variables to the function call
 		class Pass1 : public PolyMutator {
 		  public:
@@ -88,4 +89,5 @@
 		};
 
+		/// Moves polymorphic returns in function types to pointer-type parameters, adds type size and assertion parameters to parameter lists as well
 		class Pass2 : public PolyMutator {
 		  public:
@@ -105,4 +107,5 @@
 		};
 
+		/// Replaces initialization of polymorphic values with alloca, declaration of dtype/ftype with appropriate void expression, and sizeof expressions of polymorphic types with the proper variable
 		class Pass3 : public PolyMutator {
 		  public:
@@ -1008,5 +1011,5 @@
 			std::list< DeclarationWithType *> inferredParams;
 			ObjectDecl *newObj = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0 );
-///   ObjectDecl *newFunPtr = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ), 0 );
+//   ObjectDecl *newFunPtr = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ), 0 );
 			for ( std::list< TypeDecl *>::const_iterator tyParm = funcType->get_forall().begin(); tyParm != funcType->get_forall().end(); ++tyParm ) {
 				ObjectDecl *thisParm;
@@ -1020,5 +1023,5 @@
 				// move all assertions into parameter list
 				for ( std::list< DeclarationWithType *>::iterator assert = (*tyParm)->get_assertions().begin(); assert != (*tyParm)->get_assertions().end(); ++assert ) {
-///      *assert = (*assert)->acceptMutator( *this );
+//      *assert = (*assert)->acceptMutator( *this );
 					inferredParams.push_back( *assert );
 				}
@@ -1062,11 +1065,11 @@
 
 		TypeDecl * Pass3::mutate( TypeDecl *typeDecl ) {
-///   Initializer *init = 0;
-///   std::list< Expression *> designators;
-///   scopeTyVars[ typeDecl->get_name() ] = typeDecl->get_kind();
-///   if ( typeDecl->get_base() ) {
-///     init = new SimpleInit( new SizeofExpr( handleDecl( typeDecl, typeDecl->get_base() ) ), designators );
-///   }
-///   return new ObjectDecl( typeDecl->get_name(), Declaration::Extern, LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::UnsignedInt ), init );
+//   Initializer *init = 0;
+//   std::list< Expression *> designators;
+//   scopeTyVars[ typeDecl->get_name() ] = typeDecl->get_kind();
+//   if ( typeDecl->get_base() ) {
+//     init = new SimpleInit( new SizeofExpr( handleDecl( typeDecl, typeDecl->get_base() ) ), designators );
+//   }
+//   return new ObjectDecl( typeDecl->get_name(), Declaration::Extern, LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::UnsignedInt ), init );
 
 			scopeTyVars[ typeDecl->get_name() ] = typeDecl->get_kind();
Index: src/GenPoly/FindFunction.h
===================================================================
--- src/GenPoly/FindFunction.h	(revision 5bf47126bd2626236e355b067fca0454ce0498fd)
+++ src/GenPoly/FindFunction.h	(revision f8b961b2dbd5821dc28db05e5097a385b8179c88)
@@ -23,5 +23,7 @@
 	typedef bool (*FindFunctionPredicate)( FunctionType*, const TyVarMap& );
 
+	/// recursively walk `type`, placing all functions that match `predicate` under `tyVars` into `functions`
 	void findFunction( Type *type, std::list< FunctionType* > &functions, const TyVarMap &tyVars, FindFunctionPredicate predicate );
+	/// like `findFunction`, but also replaces the function type with void ()(void)
 	void findAndReplaceFunction( Type *&type, std::list< FunctionType* > &functions, const TyVarMap &tyVars, FindFunctionPredicate predicate );
 } // namespace GenPoly
Index: src/GenPoly/GenPoly.cc
===================================================================
--- src/GenPoly/GenPoly.cc	(revision 5bf47126bd2626236e355b067fca0454ce0498fd)
+++ src/GenPoly/GenPoly.cc	(revision f8b961b2dbd5821dc28db05e5097a385b8179c88)
@@ -21,6 +21,6 @@
 
 namespace GenPoly {
-	// A function needs an adapter if it returns a polymorphic value or if any of its
-	// parameters have polymorphic type
+	/// A function needs an adapter if it returns a polymorphic value or if any of its
+	/// parameters have polymorphic type
 	bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVars ) {
 		if ( ! adaptee->get_returnVals().empty() && isPolyVal( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {
Index: src/GenPoly/Lvalue.cc
===================================================================
--- src/GenPoly/Lvalue.cc	(revision 5bf47126bd2626236e355b067fca0454ce0498fd)
+++ src/GenPoly/Lvalue.cc	(revision f8b961b2dbd5821dc28db05e5097a385b8179c88)
@@ -35,4 +35,5 @@
 		const std::list<Label> noLabels;
 
+		/// Replace uses of lvalue returns with appropriate pointers
 		class Pass1 : public Mutator {
 		  public:
@@ -46,4 +47,5 @@
 		};
 
+		/// Replace declarations of lvalue returns with appropriate pointers
 		class Pass2 : public Visitor {
 		  public:
Index: src/GenPoly/ScrubTyVars.h
===================================================================
--- src/GenPoly/ScrubTyVars.h	(revision 5bf47126bd2626236e355b067fca0454ce0498fd)
+++ src/GenPoly/ScrubTyVars.h	(revision f8b961b2dbd5821dc28db05e5097a385b8179c88)
@@ -26,7 +26,9 @@
 	  public:
 		ScrubTyVars( bool doAll, const TyVarMap &tyVars ): doAll( doAll ), tyVars( tyVars ) {}
-  
+
+		/// Like scrub( SynTreeClass* ), but only applies to type variables in `tyVars`
 		template< typename SynTreeClass >
 		static SynTreeClass *scrub( SynTreeClass *target, const TyVarMap &tyVars );
+		/// Replaces dtypes and ftypes with the appropriate void type, and sizeof expressions of polymorphic types with the proper variable
 		template< typename SynTreeClass >
 		static SynTreeClass *scrub( SynTreeClass *target );
