Index: src/SynTree/DeclReplacer.h
===================================================================
--- src/SynTree/DeclReplacer.h	(revision 3cd5fdde9ed74eb5131706e7f87dc45dcdd63a34)
+++ src/SynTree/DeclReplacer.h	(revision 2773ab8093ebc7eed8a7fbbfedaadcd2f239a6c1)
@@ -33,11 +33,13 @@
 
 	size_t replace( BaseSyntaxNode *& node, const ExprMap & exprMap, bool debug = false);
+
 	template<typename T>
-		void replace( T *& node, const ExprMap & exprMap, bool debug = false ) {
-		if ( ! node ) return;
+	size_t replace( T *& node, const ExprMap & exprMap, bool debug = false ) {
+		if ( ! node ) return 0ul;
 		BaseSyntaxNode * arg = node;
-		replace( arg, exprMap, debug );
+		size_t replaced = replace( arg, exprMap, debug );
 		node = dynamic_cast<T *>( arg );
 		assertf( node, "DeclReplacer fundamentally changed the type of its argument." );
+		return replaced;
 	}
 }
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 3cd5fdde9ed74eb5131706e7f87dc45dcdd63a34)
+++ src/SynTree/Expression.cc	(revision 2773ab8093ebc7eed8a7fbbfedaadcd2f239a6c1)
@@ -102,4 +102,6 @@
 	SemanticError( this, "Constant expression of non-integral type " );
 }
+
+VariableExpr::VariableExpr() : Expression(), var( nullptr ) {}
 
 VariableExpr::VariableExpr( DeclarationWithType *_var ) : Expression(), var( _var ) {
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 3cd5fdde9ed74eb5131706e7f87dc45dcdd63a34)
+++ src/SynTree/Expression.h	(revision 2773ab8093ebc7eed8a7fbbfedaadcd2f239a6c1)
@@ -299,4 +299,5 @@
 	DeclarationWithType * var;
 
+	VariableExpr();
 	VariableExpr( DeclarationWithType * var );
 	VariableExpr( const VariableExpr & other );
