Index: src/AST/Expr.cpp
===================================================================
--- src/AST/Expr.cpp	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
+++ src/AST/Expr.cpp	(revision c4b9fa97e347eb42780172529b967ce1034b3e2c)
@@ -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 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
+++ src/AST/Expr.hpp	(revision c4b9fa97e347eb42780172529b967ce1034b3e2c)
@@ -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
 };
