Index: src/AST/Decl.hpp
===================================================================
--- src/AST/Decl.hpp	(revision 1387ea0a67f58d42a195b4763adf85f77f4cad16)
+++ src/AST/Decl.hpp	(revision 7770cc8a0981a8a6485f2ec3ee49b6a51f60afde)
@@ -270,8 +270,8 @@
 	: AggregateDecl( loc, name, std::move(attrs), linkage ), kind( kind ) {}
 
-	bool is_coroutine() { return kind == Coroutine; }
-	bool is_generator() { return kind == Generator; }
-	bool is_monitor  () { return kind == Monitor  ; }
-	bool is_thread   () { return kind == Thread   ; }
+	bool is_coroutine() const { return kind == Coroutine; }
+	bool is_generator() const { return kind == Generator; }
+	bool is_monitor  () const { return kind == Monitor  ; }
+	bool is_thread   () const { return kind == Thread   ; }
 
 	const Decl * accept( Visitor & v ) const override { return v.visit( this ); }
Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision 1387ea0a67f58d42a195b4763adf85f77f4cad16)
+++ src/Concurrency/Keywords.cc	(revision 7770cc8a0981a8a6485f2ec3ee49b6a51f60afde)
@@ -979,4 +979,5 @@
 			// If this is the destructor for a monitor it must be mutex
 			if(isDtor) {
+				// This reflects MutexKeyword::validate, except does not produce an error.
 				Type* ty = decl->get_functionType()->get_parameters().front()->get_type();
 
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 1387ea0a67f58d42a195b4763adf85f77f4cad16)
+++ src/InitTweak/InitTweak.cc	(revision 7770cc8a0981a8a6485f2ec3ee49b6a51f60afde)
@@ -9,7 +9,7 @@
 // Author           : Rob Schluntz
 // Created On       : Fri May 13 11:26:36 2016
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jun 16 20:57:22 2021
-// Update Count     : 18
+// Last Modified By : Andrew Beach
+// Last Modified On : Fri Nov 19 19:22:00 2021
+// Update Count     : 19
 //
 
@@ -540,4 +540,14 @@
 	}
 
+	const ast::Type * getTypeofThis( const ast::FunctionType * ftype ) {
+		assertf( ftype, "getTypeofThis: nullptr ftype" );
+		const std::vector<ast::ptr<ast::Type>> & params = ftype->params;
+		assertf( !params.empty(), "getTypeofThis: ftype with 0 parameters: %s",
+				toString( ftype ).c_str() );
+		const ast::ReferenceType * refType =
+			params.front().strict_as<ast::ReferenceType>();
+		return refType->base;
+	}
+
 	ObjectDecl * getParamThis( FunctionType * ftype ) {
 		assertf( ftype, "getParamThis: nullptr ftype" );
Index: src/InitTweak/InitTweak.h
===================================================================
--- src/InitTweak/InitTweak.h	(revision 1387ea0a67f58d42a195b4763adf85f77f4cad16)
+++ src/InitTweak/InitTweak.h	(revision 7770cc8a0981a8a6485f2ec3ee49b6a51f60afde)
@@ -10,6 +10,6 @@
 // Created On       : Fri May 13 11:26:36 2016
 // Last Modified By : Andrew Beach
-// Last Modified On : Fri Jul 19 14:18:00 2019
-// Update Count     : 6
+// Last Modified On : Fri Nov 19 14:18:00 2021
+// Update Count     : 7
 //
 
@@ -35,4 +35,5 @@
 	/// returns the base type of the first parameter to a constructor/destructor/assignment function
 	Type * getTypeofThis( FunctionType * ftype );
+	const ast::Type * getTypeofThis( const ast::FunctionType * ftype );
 
 	/// returns the first parameter of a constructor/destructor/assignment function
