Index: src/AST/Expr.cpp
===================================================================
--- src/AST/Expr.cpp	(revision 37b3151afe3f5f5142ae98ef04ed2e1fe9e82ce7)
+++ src/AST/Expr.cpp	(revision c4570af36d5be981e5714c9d730a86bc48ac9d4a)
@@ -222,13 +222,4 @@
 }
 
-MemberExpr::MemberExpr( const CodeLocation & loc, const DeclWithType * mem, const Expr * agg,
-    MemberExpr::NoOpConstruction overloadSelector )
-: Expr( loc ), member( mem ), aggregate( agg ) {
-	assert( member );
-	assert( aggregate );
-	assert( aggregate->result );
-	(void) overloadSelector;
-}
-
 bool MemberExpr::get_lvalue() const {
 	// This is actually wrong by C, but it works with our current set-up.
@@ -388,10 +379,4 @@
 	stmts.emplace_back( new ExprStmt{ loc, tupleExpr } );
 	stmtExpr = new StmtExpr{ loc, new CompoundStmt{ loc, std::move(stmts) } };
-}
-
-TupleAssignExpr::TupleAssignExpr(
-	const CodeLocation & loc, const Type * result, const StmtExpr * s )
-: Expr( loc, result ), stmtExpr() {
-	stmtExpr = s;
 }
 
Index: src/AST/Expr.hpp
===================================================================
--- src/AST/Expr.hpp	(revision 37b3151afe3f5f5142ae98ef04ed2e1fe9e82ce7)
+++ src/AST/Expr.hpp	(revision c4570af36d5be981e5714c9d730a86bc48ac9d4a)
@@ -35,8 +35,4 @@
 	template<typename node_t> friend node_t * shallowCopy(const node_t * node);
 
-
-class ConverterOldToNew;
-class ConverterNewToOld;
-
 namespace ast {
 
@@ -439,11 +435,4 @@
 	MemberExpr * clone() const override { return new MemberExpr{ *this }; }
 	MUTATE_FRIEND
-
-	// Custructor overload meant only for AST conversion
-	enum NoOpConstruction { NoOpConstructionChosen };
-	MemberExpr( const CodeLocation & loc, const DeclWithType * mem, const Expr * agg,
-	    NoOpConstruction overloadSelector );
-	friend class ::ConverterOldToNew;
-	friend class ::ConverterNewToOld;
 };
 
@@ -458,6 +447,6 @@
 	ConstantExpr(
 		const CodeLocation & loc, const Type * ty, const std::string & r,
-			std::optional<unsigned long long> i )
-	: Expr( loc, ty ), rep( r ), ival( i ), underlyer(ty) {}
+			const std::optional<unsigned long long> & i )
+	: Expr( loc, ty ), rep( r ), ival( i ) {}
 
 	/// Gets the integer value of this constant, if one is appropriate to its type.
@@ -483,11 +472,4 @@
 
 	std::optional<unsigned long long> ival;
-
-	// Intended only for legacy support of roundtripping the old AST.
-	// Captures the very-locally inferred type, before the resolver modifies the type of this ConstantExpression.
-	// In the old AST it's constExpr->constant.type
-	ptr<Type> underlyer;
-	friend class ::ConverterOldToNew;
-	friend class ::ConverterNewToOld;
 };
 
@@ -779,10 +761,6 @@
 	const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
 
-	friend class ::ConverterOldToNew;
-
 private:
 	TupleAssignExpr * clone() const override { return new TupleAssignExpr{ *this }; }
-    TupleAssignExpr( const CodeLocation & loc, const Type * result, const StmtExpr * s );
-
 	MUTATE_FRIEND
 };
