Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 888339e49e0dfdc2d6c754b7216c77bd5a8afc43)
+++ src/InitTweak/InitTweak.cc	(revision 7c3f3bed98f4c85c46ddf743d7aba64073f91d3b)
@@ -270,4 +270,18 @@
 	}
 
+	Type * getThisType( FunctionType * ftype ) {
+		assertf( ftype, "getThisType: nullptr ftype" );
+		ObjectDecl * thisParam = getThisParam( ftype );
+		ReferenceType * refType = strict_dynamic_cast< ReferenceType * >( thisParam->type );
+		return refType->base;
+	}
+
+	ObjectDecl * getThisParam( FunctionType * ftype ) {
+		assertf( ftype, "getThisParam: nullptr ftype" );
+		auto & params = ftype->parameters;
+		assertf( ! params.empty(), "getThisParam: ftype with 0 parameters: %s", toString( ftype ).c_str() );
+		return strict_dynamic_cast< ObjectDecl * >( params.front() );
+	}
+
 	bool tryConstruct( DeclarationWithType * dwt ) {
 		ObjectDecl * objDecl = dynamic_cast< ObjectDecl * >( dwt );
Index: src/InitTweak/InitTweak.h
===================================================================
--- src/InitTweak/InitTweak.h	(revision 888339e49e0dfdc2d6c754b7216c77bd5a8afc43)
+++ src/InitTweak/InitTweak.h	(revision 7c3f3bed98f4c85c46ddf743d7aba64073f91d3b)
@@ -29,4 +29,10 @@
 	FunctionDecl * isCopyConstructor( Declaration * decl );
 	FunctionDecl * isCopyFunction( Declaration * decl, const std::string & fname );
+
+	/// returns the base type of the first parameter to a constructor/destructor/assignment function
+	Type * getThisType( FunctionType * ftype );
+
+	/// returns the first parameter of a constructor/destructor/assignment function
+	ObjectDecl * getThisParam( FunctionType * ftype );
 
 	/// transform Initializer into an argument list that can be passed to a call expression
