Index: src/Parser/RunParser.cpp
===================================================================
--- src/Parser/RunParser.cpp	(revision 6b608c77fa31ad308d36321e04a5e96f72a0b22a)
+++ src/Parser/RunParser.cpp	(revision 019b2d3d8a6969b118fb79b95ec14714637937aa)
@@ -10,10 +10,14 @@
 // Created On       : Mon Dec 19 11:00:00 2022
 // Last Modified By : Andrew Beach
-// Last Modified On : Mon Dec 19 11:15:00 2022
-// Update Count     : 0
+// Last Modified On : Thr Dec 22 10:18:00 2022
+// Update Count     : 1
 //
 
 #include "RunParser.hpp"
 
+#include "AST/Convert.hpp"                  // for convert
+#include "AST/TranslationUnit.hpp"          // for TranslationUnit
+#include "CodeTools/TrackLoc.h"             // for fillLocations
+#include "Common/CodeLocationTools.hpp"     // for forceFillCodeLocations
 #include "Parser/ParseNode.h"               // for DeclarationNode, buildList
 #include "Parser/TypedefTable.h"            // for TypedefTable
@@ -47,5 +51,5 @@
 }
 
-std::list<Declaration *> buildUnit(void) {
+ast::TranslationUnit buildUnit(void) {
 	std::list<Declaration *> translationUnit;
 	buildList( parseTree, translationUnit );
@@ -54,5 +58,11 @@
 	parseTree = nullptr;
 
-	return translationUnit;
+	// When the parse/buildList code is translated to the new ast, these
+	// fill passes (and the one after 'Hoist Type Decls') should be redundent
+	// because the code locations should already be filled.
+	CodeTools::fillLocations( translationUnit );
+	ast::TranslationUnit transUnit = convert( std::move( translationUnit ) );
+	forceFillCodeLocations( transUnit );
+	return transUnit;
 }
 
Index: src/Parser/RunParser.hpp
===================================================================
--- src/Parser/RunParser.hpp	(revision 6b608c77fa31ad308d36321e04a5e96f72a0b22a)
+++ src/Parser/RunParser.hpp	(revision 019b2d3d8a6969b118fb79b95ec14714637937aa)
@@ -10,6 +10,6 @@
 // Created On       : Mon Dec 19 10:42:00 2022
 // Last Modified By : Andrew Beach
-// Last Modified On : Mon Dec 19 11:15:00 2022
-// Update Count     : 0
+// Last Modified On : Thr Dec 22 10:23:00 2022
+// Update Count     : 1
 //
 
@@ -17,8 +17,9 @@
 
 #include <iosfwd>                           // for ostream
-#include <list>                             // for list
 
 #include "SynTree/LinkageSpec.h"            // for Spec
-class Declaration;
+namespace ast {
+	class TranslationUnit;
+}
 
 // The Parser does not have an enclosing namespace.
@@ -35,5 +36,5 @@
 /// Drain the internal accumulator of parsed code and build a translation
 /// unit from it.
-std::list<Declaration *> buildUnit(void);
+ast::TranslationUnit buildUnit(void);
 
 // Local Variables: //
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 6b608c77fa31ad308d36321e04a5e96f72a0b22a)
+++ src/main.cc	(revision 019b2d3d8a6969b118fb79b95ec14714637937aa)
@@ -299,15 +299,11 @@
 		} // if
 
-		translationUnit = buildUnit();
+		auto transUnit = buildUnit();
 
 		if ( astp ) {
-			dump( translationUnit );
-			return EXIT_SUCCESS;
-		} // if
-
-		// Temporary: fill locations after parsing so that every node has a location, for early error messages.
-		// Eventually we should pass the locations from the parser to every node, but this quick and dirty solution
-		// works okay for now.
-		CodeTools::fillLocations( translationUnit );
+			dump( std::move( transUnit ) );
+			return EXIT_SUCCESS;
+		} // if
+
 		Stats::Time::StopBlock();
 
@@ -316,7 +312,4 @@
 			ast::pass_visitor_stats.max = Stats::Counters::build<Stats::Counters::MaxCounter<double>>("Max depth - New");
 		}
-		auto transUnit = convert( std::move( translationUnit ) );
-
-		forceFillCodeLocations( transUnit );
 
 		PASS( "Hoist Type Decls", Validate::hoistTypeDecls( transUnit ) );
