Index: src/CodeGen/module.mk
===================================================================
--- src/CodeGen/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/CodeGen/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -18,8 +18,11 @@
 #	ArgTweak/Mutate.cc
 
-SRC +=  CodeGen/Generate.cc \
+SRC_CODEGEN = \
 	CodeGen/CodeGenerator.cc \
+	CodeGen/FixMain.cc \
 	CodeGen/GenType.cc \
-	CodeGen/FixNames.cc \
-	CodeGen/FixMain.cc \
 	CodeGen/OperatorTable.cc
+
+
+SRC += $(SRC_CODEGEN) CodeGen/Generate.cc CodeGen/FixNames.cc
+SRCDEMANGLE += $(SRC_CODEGEN)
Index: src/Common/Heap.cc
===================================================================
--- src/Common/Heap.cc	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ 	(revision )
@@ -1,209 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// Heap.cc --
-//
-// Author           : Thierry Delisle
-// Created On       : Thu May  3 16:16:10 2018
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri May  4 17:27:31 2018
-// Update Count     : 28
-//
-
-#include <cassert>
-#include <cmath>
-#include <cstddef>
-#include <cstring>
-#include <iomanip>
-#include <iostream>
-
-//#define WITH_HEAP_STATISTICS
-
-namespace HeapStats {
-#if !defined( WITH_HEAP_STATISTICS )
-	void newPass( const char * const ) {}
-
-	void printStats() {}
-#else
-	struct StatBlock {
-		const char * name  = nullptr;	///< Name of this pass
-		size_t mallocs     = 0;			///< Allocations in this pass
-		size_t frees       = 0;			///< Frees in this pass
-		size_t n_allocs    = 0;			///< Current number of live allocations
-		size_t peak_allocs = 0;			///< Peak number of live allocations this pass
-	};
-
-	StatBlock    passes[100] = {{ "Pre-Parse", 0, 0, 0, 0 }};
-	const size_t passes_size = sizeof(passes) / sizeof(passes[0]);
-	size_t       passes_cnt = 1;
-
-	void newPass( const char * const name ) {
-		passes[passes_cnt].name    = name;
-		passes[passes_cnt].mallocs = 0;
-		passes[passes_cnt].frees   = 0;
-		passes[passes_cnt].n_allocs 
-			= passes[passes_cnt].peak_allocs 
-			= passes[passes_cnt-1].n_allocs;
-		passes_cnt++;
-
-		assertf(passes_cnt < passes_size, "Too many passes for HeapStats, increase the size of the array in Heap.h");
-	}
-
-	void print(size_t value, size_t total) {
-		std::cerr << std::setw(12) << value;
-		std::cerr << "(" << std::setw(3);
-		std::cerr << (value == 0 ? 0 : value * 100 / total);
-		std::cerr << "%) | ";
-	}
-
-	void print(const StatBlock& stat, size_t nc, size_t total_mallocs, size_t total_frees, size_t overall_peak) {
-		std::cerr << std::setw(nc) << stat.name;
-		std::cerr << " | ";
-
-		print(stat.mallocs,     total_mallocs);
-		print(stat.frees,       total_frees  );
-		print(stat.peak_allocs, overall_peak );
-		std::cerr << "\n";
-	}
-
-	void print(char c, size_t nc) {
-		for(size_t i = 0; i < nc; i++) {
-			std::cerr << c;
-		}
-		std::cerr << '\n';
-	}
-
-	void printStats() {
-		size_t nc = 0;
-		size_t total_mallocs = 0;
-		size_t total_frees   = 0;
-		size_t overall_peak  = 0;
-		for(size_t i = 0; i < passes_cnt; i++) {
-			nc = std::max(nc, std::strlen(passes[i].name));
-			total_mallocs += passes[i].mallocs;
-			total_frees   += passes[i].frees;
-			overall_peak = std::max(overall_peak, passes[i].peak_allocs);
-		}
-		size_t nct = nc + 65;
-
-		const char * const title = "Heap Usage Statistic";
-		print('=', nct);
-		for(size_t i = 0; i < (nct - std::strlen(title)) / 2; i++) std::cerr << ' ';
-		std::cerr << title << std::endl;
-		print('-', nct);
-		std::cerr << std::setw(nc) << "Pass";
-		std::cerr << " |       Malloc Count |         Free Count |        Peak Allocs |" << std::endl;
-
-		print('-', nct);
-		for(size_t i = 0; i < passes_cnt; i++) {
-			print(passes[i], nc, total_mallocs, total_frees, overall_peak);
-		}
-		print('-', nct);
-		print({"Sum", total_mallocs, total_frees, 0, overall_peak}, 
-			nc, total_mallocs, total_frees, overall_peak);
-
-	}
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <signal.h>
-	extern "C" {
-#include <dlfcn.h>
-#include <execinfo.h>
-	}
-
-//=============================================================================================
-// Interposing helpers
-//=============================================================================================
-
-	typedef void (* generic_fptr_t)(void);
-	generic_fptr_t interpose_symbol( const char * symbol, const char * version ) {
-		const char * error;
-
-		static void * library;
-		if ( ! library ) {
-#if defined( RTLD_NEXT )
-			library = RTLD_NEXT;
-#else
-			// missing RTLD_NEXT => must hard-code library name, assuming libstdc++
-			library = dlopen( "libc.so.6", RTLD_LAZY );
-			error = dlerror();
-			if ( error ) {
-				std::cerr << "interpose_symbol : failed to open libc, " << error << std::endl;
-				abort();
-			}
-#endif // RTLD_NEXT
-		} // if
-
-		generic_fptr_t fptr;
-
-#if defined( _GNU_SOURCE )
-		if ( version ) {
-			fptr = (generic_fptr_t)dlvsym( library, symbol, version );
-		} else {
-			fptr = (generic_fptr_t)dlsym( library, symbol );
-		}
-#else
-		fptr = (generic_fptr_t)dlsym( library, symbol );
-#endif // _GNU_SOURCE
-
-		error = dlerror();
-		if ( error ) {
-			std::cerr << "interpose_symbol : internal error, " << error << std::endl;
-			abort();
-		}
-
-		return fptr;
-	}
-
-	extern "C" {
-		void * malloc( size_t size ) __attribute__((malloc));
-		void * malloc( size_t size ) {
-			static auto __malloc = reinterpret_cast<void * (*)(size_t)>(interpose_symbol( "malloc", nullptr ));
-			if( passes_cnt > 0 ) {
-				passes[passes_cnt - 1].mallocs++;
-				passes[passes_cnt - 1].n_allocs++;
-				passes[passes_cnt - 1].peak_allocs 
-					= std::max(passes[passes_cnt - 1].peak_allocs, passes[passes_cnt - 1].n_allocs);
-			}
-			return __malloc( size );
-		}
-
-		void free( void * ptr ) {
-			static auto __free = reinterpret_cast<void   (*)(void *)>(interpose_symbol( "free", nullptr ));
-			if( passes_cnt > 0 ) {
-				passes[passes_cnt - 1].frees++;
-				passes[passes_cnt - 1].n_allocs--;
-			}
-			return __free( ptr );
-		}
-
-		void * calloc( size_t nelem, size_t size ) {
-			static auto __calloc = reinterpret_cast<void * (*)(size_t, size_t)>(interpose_symbol( "calloc", nullptr ));
-			if( passes_cnt > 0 ) {
-				passes[passes_cnt - 1].mallocs++;
-				passes[passes_cnt - 1].n_allocs++;
-				passes[passes_cnt - 1].peak_allocs 
-					= std::max(passes[passes_cnt - 1].peak_allocs, passes[passes_cnt - 1].n_allocs);
-			}
-			return __calloc( nelem, size );
-		}
-
-		void * realloc( void * ptr, size_t size ) {
-			static auto __realloc = reinterpret_cast<void * (*)(void *, size_t)>(interpose_symbol( "realloc", nullptr ));
-			void * s = __realloc( ptr, size );
-			if ( s != ptr && passes_cnt > 0 ) {			// did realloc get new storage ?
-				passes[passes_cnt - 1].mallocs++;
-				passes[passes_cnt - 1].frees++;
-			} // if
-			return s;
-		}
-	}
-#endif
-}
Index: src/Common/Heap.h
===================================================================
--- src/Common/Heap.h	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ 	(revision )
@@ -1,21 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// Heap.h --
-//
-// Author           : Thierry Delisle
-// Created On       : Thu May  3 16:16:10 2018
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri May  4 14:34:08 2018
-// Update Count     : 3
-//
-
-#pragma once
-
-namespace HeapStats {
-	void newPass( const char * const name );
-	void printStats();
-}
Index: src/Common/Stats.h
===================================================================
--- src/Common/Stats.h	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
+++ src/Common/Stats.h	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -0,0 +1,18 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2019 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// Heap.h --
+//
+// Author           : Thierry Delisle
+// Created On       : Thu Feb 28 11::27:10 2019
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
+#pragma once
+
+#include "Common/Stats/Heap.h"
Index: src/Common/Stats/Heap.cc
===================================================================
--- src/Common/Stats/Heap.cc	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
+++ src/Common/Stats/Heap.cc	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -0,0 +1,211 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// Heap.cc --
+//
+// Author           : Thierry Delisle
+// Created On       : Thu May  3 16:16:10 2018
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri May  4 17:27:31 2018
+// Update Count     : 28
+//
+
+#include <cassert>
+#include <cmath>
+#include <cstddef>
+#include <cstring>
+#include <iomanip>
+#include <iostream>
+
+//#define WITH_HEAP_STATISTICS
+
+namespace Stats {
+	namespace Heap {
+#if !defined( WITH_HEAP_STATISTICS )
+		void newPass( const char * const ) {}
+
+		void printStats() {}
+#else
+		struct StatBlock {
+			const char * name  = nullptr;	///< Name of this pass
+			size_t mallocs     = 0;			///< Allocations in this pass
+			size_t frees       = 0;			///< Frees in this pass
+			size_t n_allocs    = 0;			///< Current number of live allocations
+			size_t peak_allocs = 0;			///< Peak number of live allocations this pass
+		};
+
+		StatBlock    passes[100] = {{ "Pre-Parse", 0, 0, 0, 0 }};
+		const size_t passes_size = sizeof(passes) / sizeof(passes[0]);
+		size_t       passes_cnt = 1;
+
+		void newPass( const char * const name ) {
+			passes[passes_cnt].name    = name;
+			passes[passes_cnt].mallocs = 0;
+			passes[passes_cnt].frees   = 0;
+			passes[passes_cnt].n_allocs
+				= passes[passes_cnt].peak_allocs
+				= passes[passes_cnt-1].n_allocs;
+			passes_cnt++;
+
+			assertf(passes_cnt < passes_size, "Too many passes for Stats::Heap, increase the size of the array in Heap.cc");
+		}
+
+		void print(size_t value, size_t total) {
+			std::cerr << std::setw(12) << value;
+			std::cerr << "(" << std::setw(3);
+			std::cerr << (value == 0 ? 0 : value * 100 / total);
+			std::cerr << "%) | ";
+		}
+
+		void print(const StatBlock& stat, size_t nc, size_t total_mallocs, size_t total_frees, size_t overall_peak) {
+			std::cerr << std::setw(nc) << stat.name;
+			std::cerr << " | ";
+
+			print(stat.mallocs,     total_mallocs);
+			print(stat.frees,       total_frees  );
+			print(stat.peak_allocs, overall_peak );
+			std::cerr << "\n";
+		}
+
+		void print(char c, size_t nc) {
+			for(size_t i = 0; i < nc; i++) {
+				std::cerr << c;
+			}
+			std::cerr << '\n';
+		}
+
+		void printStats() {
+			size_t nc = 0;
+			size_t total_mallocs = 0;
+			size_t total_frees   = 0;
+			size_t overall_peak  = 0;
+			for(size_t i = 0; i < passes_cnt; i++) {
+				nc = std::max(nc, std::strlen(passes[i].name));
+				total_mallocs += passes[i].mallocs;
+				total_frees   += passes[i].frees;
+				overall_peak = std::max(overall_peak, passes[i].peak_allocs);
+			}
+			size_t nct = nc + 65;
+
+			const char * const title = "Heap Usage Statistic";
+			print('=', nct);
+			for(size_t i = 0; i < (nct - std::strlen(title)) / 2; i++) std::cerr << ' ';
+			std::cerr << title << std::endl;
+			print('-', nct);
+			std::cerr << std::setw(nc) << "Pass";
+			std::cerr << " |       Malloc Count |         Free Count |        Peak Allocs |" << std::endl;
+
+			print('-', nct);
+			for(size_t i = 0; i < passes_cnt; i++) {
+				print(passes[i], nc, total_mallocs, total_frees, overall_peak);
+			}
+			print('-', nct);
+			print({"Sum", total_mallocs, total_frees, 0, overall_peak},
+				nc, total_mallocs, total_frees, overall_peak);
+
+		}
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <signal.h>
+		extern "C" {
+#include <dlfcn.h>
+#include <execinfo.h>
+		}
+
+	//=============================================================================================
+	// Interposing helpers
+	//=============================================================================================
+
+		typedef void (* generic_fptr_t)(void);
+		generic_fptr_t interpose_symbol( const char * symbol, const char * version ) {
+			const char * error;
+
+			static void * library;
+			if ( ! library ) {
+#				if defined( RTLD_NEXT )
+					library = RTLD_NEXT;
+#				else
+					// missing RTLD_NEXT => must hard-code library name, assuming libstdc++
+					library = dlopen( "libc.so.6", RTLD_LAZY );
+					error = dlerror();
+					if ( error ) {
+						std::cerr << "interpose_symbol : failed to open libc, " << error << std::endl;
+						abort();
+					}
+#				endif // RTLD_NEXT
+			} // if
+
+			generic_fptr_t fptr;
+
+#			if defined( _GNU_SOURCE )
+				if ( version ) {
+					fptr = (generic_fptr_t)dlvsym( library, symbol, version );
+				} else {
+					fptr = (generic_fptr_t)dlsym( library, symbol );
+				}
+#			else
+				fptr = (generic_fptr_t)dlsym( library, symbol );
+#			endif // _GNU_SOURCE
+
+			error = dlerror();
+			if ( error ) {
+				std::cerr << "interpose_symbol : internal error, " << error << std::endl;
+				abort();
+			}
+
+			return fptr;
+		}
+
+		extern "C" {
+			void * malloc( size_t size ) __attribute__((malloc));
+			void * malloc( size_t size ) {
+				static auto __malloc = reinterpret_cast<void * (*)(size_t)>(interpose_symbol( "malloc", nullptr ));
+				if( passes_cnt > 0 ) {
+					passes[passes_cnt - 1].mallocs++;
+					passes[passes_cnt - 1].n_allocs++;
+					passes[passes_cnt - 1].peak_allocs
+						= std::max(passes[passes_cnt - 1].peak_allocs, passes[passes_cnt - 1].n_allocs);
+				}
+				return __malloc( size );
+			}
+
+			void free( void * ptr ) {
+				static auto __free = reinterpret_cast<void   (*)(void *)>(interpose_symbol( "free", nullptr ));
+				if( passes_cnt > 0 ) {
+					passes[passes_cnt - 1].frees++;
+					passes[passes_cnt - 1].n_allocs--;
+				}
+				return __free( ptr );
+			}
+
+			void * calloc( size_t nelem, size_t size ) {
+				static auto __calloc = reinterpret_cast<void * (*)(size_t, size_t)>(interpose_symbol( "calloc", nullptr ));
+				if( passes_cnt > 0 ) {
+					passes[passes_cnt - 1].mallocs++;
+					passes[passes_cnt - 1].n_allocs++;
+					passes[passes_cnt - 1].peak_allocs
+						= std::max(passes[passes_cnt - 1].peak_allocs, passes[passes_cnt - 1].n_allocs);
+				}
+				return __calloc( nelem, size );
+			}
+
+			void * realloc( void * ptr, size_t size ) {
+				static auto __realloc = reinterpret_cast<void * (*)(void *, size_t)>(interpose_symbol( "realloc", nullptr ));
+				void * s = __realloc( ptr, size );
+				if ( s != ptr && passes_cnt > 0 ) {			// did realloc get new storage ?
+					passes[passes_cnt - 1].mallocs++;
+					passes[passes_cnt - 1].frees++;
+				} // if
+				return s;
+			}
+		}
+#endif
+	}
+}
Index: src/Common/Stats/Heap.h
===================================================================
--- src/Common/Stats/Heap.h	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
+++ src/Common/Stats/Heap.h	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -0,0 +1,23 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// Heap.h --
+//
+// Author           : Thierry Delisle
+// Created On       : Thu May  3 16:16:10 2018
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri May  4 14:34:08 2018
+// Update Count     : 3
+//
+
+#pragma once
+
+namespace Stats {
+	namespace Heap {
+		void newPass( const char * const name );
+		void printStats();
+	}
+}
Index: src/Common/module.mk
===================================================================
--- src/Common/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/Common/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -15,8 +15,11 @@
 ###############################################################################
 
-SRC += Common/SemanticError.cc \
-       Common/UniqueName.cc \
-       Common/DebugMalloc.cc \
-       Common/Assert.cc \
-       Common/Heap.cc \
-       Common/Eval.cc
+SRC_COMMON = \
+      Common/Assert.cc \
+      Common/Stats/Heap.cc \
+      Common/Eval.cc \
+      Common/SemanticError.cc \
+      Common/UniqueName.cc
+
+SRC += $(SRC_COMMON) Common/DebugMalloc.cc
+SRCDEMANGLE += $(SRC_COMMON)
Index: src/Concurrency/module.mk
===================================================================
--- src/Concurrency/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/Concurrency/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -15,5 +15,5 @@
 ###############################################################################
 
-SRC += Concurrency/Keywords.cc \
-       Concurrency/Waitfor.cc
+SRC += Concurrency/Keywords.cc Concurrency/Waitfor.cc
+SRCDEMANGLE += Concurrency/Keywords.cc
 
Index: src/ControlStruct/module.mk
===================================================================
--- src/ControlStruct/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/ControlStruct/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -15,8 +15,12 @@
 ###############################################################################
 
-SRC +=  ControlStruct/LabelGenerator.cc \
+SRC_CONTROLSTRUCT = \
+	ControlStruct/ForExprMutator.cc \
 	ControlStruct/LabelFixer.cc \
+	ControlStruct/LabelGenerator.cc \
 	ControlStruct/MLEMutator.cc \
-	ControlStruct/Mutate.cc \
-	ControlStruct/ForExprMutator.cc \
-	ControlStruct/ExceptTranslate.cc
+	ControlStruct/Mutate.cc
+
+SRC += $(SRC_CONTROLSTRUCT) ControlStruct/ExceptTranslate.cc
+SRCDEMANGLE += $(SRC_CONTROLSTRUCT)
+
Index: src/GenPoly/module.mk
===================================================================
--- src/GenPoly/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/GenPoly/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -22,2 +22,5 @@
        GenPoly/FindFunction.cc \
        GenPoly/InstantiateGeneric.cc
+
+SRCDEMANGLE += GenPoly/GenPoly.cc GenPoly/Lvalue.cc
+
Index: src/InitTweak/module.mk
===================================================================
--- src/InitTweak/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/InitTweak/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -20,2 +20,5 @@
 	InitTweak/InitTweak.cc
 
+SRCDEMANGLE += InitTweak/GenInit.cc \
+	InitTweak/InitTweak.cc
+
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/Makefile.am	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -20,6 +20,8 @@
 
 SRC = main.cc \
-			MakeLibCfa.cc \
-			CompilationState.cc
+      MakeLibCfa.cc \
+      CompilationState.cc
+
+SRCDEMANGLE = CompilationState.cc
 
 MAINTAINERCLEANFILES =
@@ -60,91 +62,8 @@
 demangler_SOURCES = SymTab/demangler.cc
 
-demangler_LDADD = libdemangle.a			# yywrap
+demangler_LDADD = libdemangle.a -ldl			# yywrap
 
 noinst_LIBRARIES = libdemangle.a
-libdemangle_a_SOURCES = SymTab/Demangle.cc SymTab/ManglerCommon.cc \
-	SynTree/Type.cc \
-	SynTree/VoidType.cc \
-	SynTree/BasicType.cc \
-	SynTree/PointerType.cc \
-	SynTree/ArrayType.cc \
-	SynTree/ReferenceType.cc \
-	SynTree/FunctionType.cc \
-	SynTree/ReferenceToType.cc \
-	SynTree/TupleType.cc \
-	SynTree/TypeofType.cc \
-	SynTree/AttrType.cc \
-	SynTree/VarArgsType.cc \
-	SynTree/ZeroOneType.cc \
-	SynTree/Constant.cc \
-	SynTree/Expression.cc \
-	SynTree/TupleExpr.cc \
-	SynTree/CommaExpr.cc \
-	SynTree/TypeExpr.cc \
-	SynTree/ApplicationExpr.cc \
-	SynTree/AddressExpr.cc \
-	SynTree/Statement.cc \
-	SynTree/CompoundStmt.cc \
-	SynTree/DeclStmt.cc \
-	SynTree/Declaration.cc \
-	SynTree/DeclarationWithType.cc \
-	SynTree/ObjectDecl.cc \
-	SynTree/FunctionDecl.cc \
-	SynTree/AggregateDecl.cc \
-	SynTree/NamedTypeDecl.cc \
-	SynTree/TypeDecl.cc \
-	SynTree/Initializer.cc \
-	SynTree/TypeSubstitution.cc \
-	SynTree/Attribute.cc \
-	SynTree/DeclReplacer.cc \
-	CompilationState.cc \
-	CodeGen/CodeGenerator.cc \
-	CodeGen/FixMain.cc \
-	CodeGen/GenType.cc \
-	CodeGen/OperatorTable.cc \
-	Common/Assert.cc \
-	Common/Eval.cc \
-	Common/SemanticError.cc \
-	Common/UniqueName.cc \
-	Concurrency/Keywords.cc \
-	ControlStruct/ForExprMutator.cc \
-	ControlStruct/LabelFixer.cc \
-	ControlStruct/LabelGenerator.cc \
-	ControlStruct/MLEMutator.cc \
-	ControlStruct/Mutate.cc \
-	GenPoly/GenPoly.cc \
-	GenPoly/Lvalue.cc \
-	InitTweak/GenInit.cc \
-	InitTweak/InitTweak.cc \
-	Parser/LinkageSpec.cc \
-	ResolvExpr/AdjustExprType.cc \
-	ResolvExpr/Alternative.cc \
-	ResolvExpr/AlternativeFinder.cc \
-	ResolvExpr/ExplodedActual.cc \
-	ResolvExpr/CastCost.cc \
-	ResolvExpr/CommonType.cc \
-	ResolvExpr/ConversionCost.cc \
-	ResolvExpr/CurrentObject.cc \
-	ResolvExpr/FindOpenVars.cc \
-	ResolvExpr/Occurs.cc \
-	ResolvExpr/PolyCost.cc \
-	ResolvExpr/PtrsAssignable.cc \
-	ResolvExpr/PtrsCastable.cc \
-	ResolvExpr/RenameVars.cc \
-	ResolvExpr/ResolveAssertions.cc \
-	ResolvExpr/Resolver.cc \
-	ResolvExpr/ResolveTypeof.cc \
-	ResolvExpr/SpecCost.cc \
-	ResolvExpr/TypeEnvironment.cc \
-	ResolvExpr/Unify.cc \
-	SymTab/Autogen.cc \
-	SymTab/FixFunction.cc \
-	SymTab/Indexer.cc \
-	SymTab/Mangler.cc \
-	SymTab/Validate.cc \
-	Tuples/Explode.cc \
-	Tuples/TupleAssignment.cc \
-	Tuples/TupleExpansion.cc \
-	Validate/HandleAttributes.cc
+libdemangle_a_SOURCES = $(SRCDEMANGLE)
 
 MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/Makefile.in	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -162,44 +162,22 @@
 libdemangle_a_LIBADD =
 am__dirstamp = $(am__leading_dot)dirstamp
-am_libdemangle_a_OBJECTS = SymTab/Demangle.$(OBJEXT) \
-	SymTab/ManglerCommon.$(OBJEXT) SynTree/Type.$(OBJEXT) \
-	SynTree/VoidType.$(OBJEXT) SynTree/BasicType.$(OBJEXT) \
-	SynTree/PointerType.$(OBJEXT) SynTree/ArrayType.$(OBJEXT) \
-	SynTree/ReferenceType.$(OBJEXT) SynTree/FunctionType.$(OBJEXT) \
-	SynTree/ReferenceToType.$(OBJEXT) SynTree/TupleType.$(OBJEXT) \
-	SynTree/TypeofType.$(OBJEXT) SynTree/AttrType.$(OBJEXT) \
-	SynTree/VarArgsType.$(OBJEXT) SynTree/ZeroOneType.$(OBJEXT) \
-	SynTree/Constant.$(OBJEXT) SynTree/Expression.$(OBJEXT) \
-	SynTree/TupleExpr.$(OBJEXT) SynTree/CommaExpr.$(OBJEXT) \
-	SynTree/TypeExpr.$(OBJEXT) SynTree/ApplicationExpr.$(OBJEXT) \
-	SynTree/AddressExpr.$(OBJEXT) SynTree/Statement.$(OBJEXT) \
-	SynTree/CompoundStmt.$(OBJEXT) SynTree/DeclStmt.$(OBJEXT) \
-	SynTree/Declaration.$(OBJEXT) \
-	SynTree/DeclarationWithType.$(OBJEXT) \
-	SynTree/ObjectDecl.$(OBJEXT) SynTree/FunctionDecl.$(OBJEXT) \
-	SynTree/AggregateDecl.$(OBJEXT) \
-	SynTree/NamedTypeDecl.$(OBJEXT) SynTree/TypeDecl.$(OBJEXT) \
-	SynTree/Initializer.$(OBJEXT) \
-	SynTree/TypeSubstitution.$(OBJEXT) SynTree/Attribute.$(OBJEXT) \
-	SynTree/DeclReplacer.$(OBJEXT) CompilationState.$(OBJEXT) \
-	CodeGen/CodeGenerator.$(OBJEXT) CodeGen/FixMain.$(OBJEXT) \
-	CodeGen/GenType.$(OBJEXT) CodeGen/OperatorTable.$(OBJEXT) \
-	Common/Assert.$(OBJEXT) Common/Eval.$(OBJEXT) \
-	Common/SemanticError.$(OBJEXT) Common/UniqueName.$(OBJEXT) \
-	Concurrency/Keywords.$(OBJEXT) \
-	ControlStruct/ForExprMutator.$(OBJEXT) \
+am__objects_1 = CodeGen/CodeGenerator.$(OBJEXT) \
+	CodeGen/FixMain.$(OBJEXT) CodeGen/GenType.$(OBJEXT) \
+	CodeGen/OperatorTable.$(OBJEXT)
+am__objects_2 = Common/Assert.$(OBJEXT) Common/Stats/Heap.$(OBJEXT) \
+	Common/Eval.$(OBJEXT) Common/SemanticError.$(OBJEXT) \
+	Common/UniqueName.$(OBJEXT)
+am__objects_3 = ControlStruct/ForExprMutator.$(OBJEXT) \
 	ControlStruct/LabelFixer.$(OBJEXT) \
 	ControlStruct/LabelGenerator.$(OBJEXT) \
 	ControlStruct/MLEMutator.$(OBJEXT) \
-	ControlStruct/Mutate.$(OBJEXT) GenPoly/GenPoly.$(OBJEXT) \
-	GenPoly/Lvalue.$(OBJEXT) InitTweak/GenInit.$(OBJEXT) \
-	InitTweak/InitTweak.$(OBJEXT) Parser/LinkageSpec.$(OBJEXT) \
-	ResolvExpr/AdjustExprType.$(OBJEXT) \
+	ControlStruct/Mutate.$(OBJEXT)
+am__objects_4 = ResolvExpr/AdjustExprType.$(OBJEXT) \
 	ResolvExpr/Alternative.$(OBJEXT) \
 	ResolvExpr/AlternativeFinder.$(OBJEXT) \
-	ResolvExpr/ExplodedActual.$(OBJEXT) \
 	ResolvExpr/CastCost.$(OBJEXT) ResolvExpr/CommonType.$(OBJEXT) \
 	ResolvExpr/ConversionCost.$(OBJEXT) \
 	ResolvExpr/CurrentObject.$(OBJEXT) \
+	ResolvExpr/ExplodedActual.$(OBJEXT) \
 	ResolvExpr/FindOpenVars.$(OBJEXT) ResolvExpr/Occurs.$(OBJEXT) \
 	ResolvExpr/PolyCost.$(OBJEXT) \
@@ -212,64 +190,9 @@
 	ResolvExpr/SpecCost.$(OBJEXT) \
 	ResolvExpr/TypeEnvironment.$(OBJEXT) \
-	ResolvExpr/Unify.$(OBJEXT) SymTab/Autogen.$(OBJEXT) \
-	SymTab/FixFunction.$(OBJEXT) SymTab/Indexer.$(OBJEXT) \
-	SymTab/Mangler.$(OBJEXT) SymTab/Validate.$(OBJEXT) \
-	Tuples/Explode.$(OBJEXT) Tuples/TupleAssignment.$(OBJEXT) \
-	Tuples/TupleExpansion.$(OBJEXT) \
-	Validate/HandleAttributes.$(OBJEXT)
-libdemangle_a_OBJECTS = $(am_libdemangle_a_OBJECTS)
-am__installdirs = "$(DESTDIR)$(cfa_cpplibdir)"
-PROGRAMS = $(cfa_cpplib_PROGRAMS)
-am__objects_1 = main.$(OBJEXT) MakeLibCfa.$(OBJEXT) \
-	CompilationState.$(OBJEXT) CodeGen/Generate.$(OBJEXT) \
-	CodeGen/CodeGenerator.$(OBJEXT) CodeGen/GenType.$(OBJEXT) \
-	CodeGen/FixNames.$(OBJEXT) CodeGen/FixMain.$(OBJEXT) \
-	CodeGen/OperatorTable.$(OBJEXT) CodeTools/DeclStats.$(OBJEXT) \
-	CodeTools/ResolvProtoDump.$(OBJEXT) \
-	CodeTools/TrackLoc.$(OBJEXT) Concurrency/Keywords.$(OBJEXT) \
-	Concurrency/Waitfor.$(OBJEXT) Common/SemanticError.$(OBJEXT) \
-	Common/UniqueName.$(OBJEXT) Common/DebugMalloc.$(OBJEXT) \
-	Common/Assert.$(OBJEXT) Common/Heap.$(OBJEXT) \
-	Common/Eval.$(OBJEXT) ControlStruct/LabelGenerator.$(OBJEXT) \
-	ControlStruct/LabelFixer.$(OBJEXT) \
-	ControlStruct/MLEMutator.$(OBJEXT) \
-	ControlStruct/Mutate.$(OBJEXT) \
-	ControlStruct/ForExprMutator.$(OBJEXT) \
-	ControlStruct/ExceptTranslate.$(OBJEXT) GenPoly/Box.$(OBJEXT) \
-	GenPoly/GenPoly.$(OBJEXT) GenPoly/ScrubTyVars.$(OBJEXT) \
-	GenPoly/Lvalue.$(OBJEXT) GenPoly/Specialize.$(OBJEXT) \
-	GenPoly/FindFunction.$(OBJEXT) \
-	GenPoly/InstantiateGeneric.$(OBJEXT) \
-	InitTweak/GenInit.$(OBJEXT) InitTweak/FixInit.$(OBJEXT) \
-	InitTweak/FixGlobalInit.$(OBJEXT) \
-	InitTweak/InitTweak.$(OBJEXT) Parser/parser.$(OBJEXT) \
-	Parser/lex.$(OBJEXT) Parser/TypedefTable.$(OBJEXT) \
-	Parser/ParseNode.$(OBJEXT) Parser/DeclarationNode.$(OBJEXT) \
-	Parser/ExpressionNode.$(OBJEXT) Parser/StatementNode.$(OBJEXT) \
-	Parser/InitializerNode.$(OBJEXT) Parser/TypeData.$(OBJEXT) \
-	Parser/LinkageSpec.$(OBJEXT) Parser/parserutility.$(OBJEXT) \
-	ResolvExpr/AlternativeFinder.$(OBJEXT) \
-	ResolvExpr/Alternative.$(OBJEXT) ResolvExpr/Unify.$(OBJEXT) \
-	ResolvExpr/PtrsAssignable.$(OBJEXT) \
-	ResolvExpr/CommonType.$(OBJEXT) \
-	ResolvExpr/ConversionCost.$(OBJEXT) \
-	ResolvExpr/CastCost.$(OBJEXT) \
-	ResolvExpr/PtrsCastable.$(OBJEXT) \
-	ResolvExpr/AdjustExprType.$(OBJEXT) \
-	ResolvExpr/AlternativePrinter.$(OBJEXT) \
-	ResolvExpr/Resolver.$(OBJEXT) \
-	ResolvExpr/ResolveTypeof.$(OBJEXT) \
-	ResolvExpr/RenameVars.$(OBJEXT) \
-	ResolvExpr/FindOpenVars.$(OBJEXT) \
-	ResolvExpr/PolyCost.$(OBJEXT) ResolvExpr/Occurs.$(OBJEXT) \
-	ResolvExpr/TypeEnvironment.$(OBJEXT) \
-	ResolvExpr/CurrentObject.$(OBJEXT) \
-	ResolvExpr/ExplodedActual.$(OBJEXT) \
-	ResolvExpr/SpecCost.$(OBJEXT) \
-	ResolvExpr/ResolveAssertions.$(OBJEXT) \
+	ResolvExpr/Unify.$(OBJEXT)
+am__objects_5 = SymTab/Autogen.$(OBJEXT) SymTab/FixFunction.$(OBJEXT) \
 	SymTab/Indexer.$(OBJEXT) SymTab/Mangler.$(OBJEXT) \
-	SymTab/ManglerCommon.$(OBJEXT) SymTab/Validate.$(OBJEXT) \
-	SymTab/FixFunction.$(OBJEXT) SymTab/Autogen.$(OBJEXT) \
-	SynTree/Type.$(OBJEXT) SynTree/VoidType.$(OBJEXT) \
+	SymTab/ManglerCommon.$(OBJEXT) SymTab/Validate.$(OBJEXT)
+am__objects_6 = SynTree/Type.$(OBJEXT) SynTree/VoidType.$(OBJEXT) \
 	SynTree/BasicType.$(OBJEXT) SynTree/PointerType.$(OBJEXT) \
 	SynTree/ArrayType.$(OBJEXT) SynTree/ReferenceType.$(OBJEXT) \
@@ -290,10 +213,46 @@
 	SynTree/Initializer.$(OBJEXT) \
 	SynTree/TypeSubstitution.$(OBJEXT) SynTree/Attribute.$(OBJEXT) \
-	SynTree/DeclReplacer.$(OBJEXT) \
+	SynTree/DeclReplacer.$(OBJEXT)
+am__objects_7 = CompilationState.$(OBJEXT) $(am__objects_1) \
+	Concurrency/Keywords.$(OBJEXT) $(am__objects_2) \
+	$(am__objects_3) GenPoly/GenPoly.$(OBJEXT) \
+	GenPoly/Lvalue.$(OBJEXT) InitTweak/GenInit.$(OBJEXT) \
+	InitTweak/InitTweak.$(OBJEXT) Parser/LinkageSpec.$(OBJEXT) \
+	$(am__objects_4) $(am__objects_5) SymTab/Demangle.$(OBJEXT) \
+	$(am__objects_6) Tuples/TupleAssignment.$(OBJEXT) \
+	Tuples/TupleExpansion.$(OBJEXT) Tuples/Explode.$(OBJEXT) \
+	Validate/HandleAttributes.$(OBJEXT)
+am_libdemangle_a_OBJECTS = $(am__objects_7)
+libdemangle_a_OBJECTS = $(am_libdemangle_a_OBJECTS)
+am__installdirs = "$(DESTDIR)$(cfa_cpplibdir)"
+PROGRAMS = $(cfa_cpplib_PROGRAMS)
+am__objects_8 = main.$(OBJEXT) MakeLibCfa.$(OBJEXT) \
+	CompilationState.$(OBJEXT) $(am__objects_1) \
+	CodeGen/Generate.$(OBJEXT) CodeGen/FixNames.$(OBJEXT) \
+	CodeTools/DeclStats.$(OBJEXT) \
+	CodeTools/ResolvProtoDump.$(OBJEXT) \
+	CodeTools/TrackLoc.$(OBJEXT) Concurrency/Keywords.$(OBJEXT) \
+	Concurrency/Waitfor.$(OBJEXT) $(am__objects_2) \
+	Common/DebugMalloc.$(OBJEXT) $(am__objects_3) \
+	ControlStruct/ExceptTranslate.$(OBJEXT) GenPoly/Box.$(OBJEXT) \
+	GenPoly/GenPoly.$(OBJEXT) GenPoly/ScrubTyVars.$(OBJEXT) \
+	GenPoly/Lvalue.$(OBJEXT) GenPoly/Specialize.$(OBJEXT) \
+	GenPoly/FindFunction.$(OBJEXT) \
+	GenPoly/InstantiateGeneric.$(OBJEXT) \
+	InitTweak/GenInit.$(OBJEXT) InitTweak/FixInit.$(OBJEXT) \
+	InitTweak/FixGlobalInit.$(OBJEXT) \
+	InitTweak/InitTweak.$(OBJEXT) Parser/parser.$(OBJEXT) \
+	Parser/lex.$(OBJEXT) Parser/TypedefTable.$(OBJEXT) \
+	Parser/ParseNode.$(OBJEXT) Parser/DeclarationNode.$(OBJEXT) \
+	Parser/ExpressionNode.$(OBJEXT) Parser/StatementNode.$(OBJEXT) \
+	Parser/InitializerNode.$(OBJEXT) Parser/TypeData.$(OBJEXT) \
+	Parser/LinkageSpec.$(OBJEXT) Parser/parserutility.$(OBJEXT) \
+	$(am__objects_4) ResolvExpr/AlternativePrinter.$(OBJEXT) \
+	$(am__objects_5) $(am__objects_6) \
 	Tuples/TupleAssignment.$(OBJEXT) \
 	Tuples/TupleExpansion.$(OBJEXT) Tuples/Explode.$(OBJEXT) \
 	Validate/HandleAttributes.$(OBJEXT) \
 	Virtual/ExpandCasts.$(OBJEXT)
-am____driver_cfa_cpp_OBJECTS = $(am__objects_1)
+am____driver_cfa_cpp_OBJECTS = $(am__objects_8)
 ___driver_cfa_cpp_OBJECTS = $(am____driver_cfa_cpp_OBJECTS)
 ___driver_cfa_cpp_DEPENDENCIES =
@@ -563,15 +522,9 @@
 AUTOMAKE_OPTIONS = foreign subdir-objects
 ACLOCAL_AMFLAGS = -I automake
-SRC = main.cc MakeLibCfa.cc CompilationState.cc CodeGen/Generate.cc \
-	CodeGen/CodeGenerator.cc CodeGen/GenType.cc \
-	CodeGen/FixNames.cc CodeGen/FixMain.cc \
-	CodeGen/OperatorTable.cc CodeTools/DeclStats.cc \
+SRC = main.cc MakeLibCfa.cc CompilationState.cc $(SRC_CODEGEN) \
+	CodeGen/Generate.cc CodeGen/FixNames.cc CodeTools/DeclStats.cc \
 	CodeTools/ResolvProtoDump.cc CodeTools/TrackLoc.cc \
-	Concurrency/Keywords.cc Concurrency/Waitfor.cc \
-	Common/SemanticError.cc Common/UniqueName.cc \
-	Common/DebugMalloc.cc Common/Assert.cc Common/Heap.cc \
-	Common/Eval.cc ControlStruct/LabelGenerator.cc \
-	ControlStruct/LabelFixer.cc ControlStruct/MLEMutator.cc \
-	ControlStruct/Mutate.cc ControlStruct/ForExprMutator.cc \
+	Concurrency/Keywords.cc Concurrency/Waitfor.cc $(SRC_COMMON) \
+	Common/DebugMalloc.cc $(SRC_CONTROLSTRUCT) \
 	ControlStruct/ExceptTranslate.cc GenPoly/Box.cc \
 	GenPoly/GenPoly.cc GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc \
@@ -584,41 +537,107 @@
 	Parser/StatementNode.cc Parser/InitializerNode.cc \
 	Parser/TypeData.cc Parser/LinkageSpec.cc \
-	Parser/parserutility.cc ResolvExpr/AlternativeFinder.cc \
-	ResolvExpr/Alternative.cc ResolvExpr/Unify.cc \
-	ResolvExpr/PtrsAssignable.cc ResolvExpr/CommonType.cc \
-	ResolvExpr/ConversionCost.cc ResolvExpr/CastCost.cc \
-	ResolvExpr/PtrsCastable.cc ResolvExpr/AdjustExprType.cc \
-	ResolvExpr/AlternativePrinter.cc ResolvExpr/Resolver.cc \
-	ResolvExpr/ResolveTypeof.cc ResolvExpr/RenameVars.cc \
-	ResolvExpr/FindOpenVars.cc ResolvExpr/PolyCost.cc \
-	ResolvExpr/Occurs.cc ResolvExpr/TypeEnvironment.cc \
-	ResolvExpr/CurrentObject.cc ResolvExpr/ExplodedActual.cc \
-	ResolvExpr/SpecCost.cc ResolvExpr/ResolveAssertions.cc \
-	SymTab/Indexer.cc SymTab/Mangler.cc SymTab/ManglerCommon.cc \
-	SymTab/Validate.cc SymTab/FixFunction.cc SymTab/Autogen.cc \
-	SynTree/Type.cc SynTree/VoidType.cc SynTree/BasicType.cc \
-	SynTree/PointerType.cc SynTree/ArrayType.cc \
-	SynTree/ReferenceType.cc SynTree/FunctionType.cc \
-	SynTree/ReferenceToType.cc SynTree/TupleType.cc \
-	SynTree/TypeofType.cc SynTree/AttrType.cc \
-	SynTree/VarArgsType.cc SynTree/ZeroOneType.cc \
-	SynTree/Constant.cc SynTree/Expression.cc SynTree/TupleExpr.cc \
-	SynTree/CommaExpr.cc SynTree/TypeExpr.cc \
-	SynTree/ApplicationExpr.cc SynTree/AddressExpr.cc \
-	SynTree/Statement.cc SynTree/CompoundStmt.cc \
-	SynTree/DeclStmt.cc SynTree/Declaration.cc \
-	SynTree/DeclarationWithType.cc SynTree/ObjectDecl.cc \
-	SynTree/FunctionDecl.cc SynTree/AggregateDecl.cc \
-	SynTree/NamedTypeDecl.cc SynTree/TypeDecl.cc \
-	SynTree/Initializer.cc SynTree/TypeSubstitution.cc \
-	SynTree/Attribute.cc SynTree/DeclReplacer.cc \
+	Parser/parserutility.cc $(SRC_RESOLVEXPR) \
+	ResolvExpr/AlternativePrinter.cc $(SRC_SYMTAB) $(SRC_SYNTREE) \
 	Tuples/TupleAssignment.cc Tuples/TupleExpansion.cc \
 	Tuples/Explode.cc Validate/HandleAttributes.cc \
 	Virtual/ExpandCasts.cc
+SRCDEMANGLE = CompilationState.cc $(SRC_CODEGEN) \
+	Concurrency/Keywords.cc $(SRC_COMMON) $(SRC_CONTROLSTRUCT) \
+	GenPoly/GenPoly.cc GenPoly/Lvalue.cc InitTweak/GenInit.cc \
+	InitTweak/InitTweak.cc Parser/LinkageSpec.cc $(SRC_RESOLVEXPR) \
+	$(SRC_SYMTAB) SymTab/Demangle.cc $(SRC_SYNTREE) \
+	Tuples/TupleAssignment.cc Tuples/TupleExpansion.cc \
+	Tuples/Explode.cc Validate/HandleAttributes.cc
 MAINTAINERCLEANFILES = ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
 MOSTLYCLEANFILES = Parser/lex.cc Parser/parser.cc Parser/parser.hh \
 	Parser/parser.output
+SRC_CODEGEN = \
+	CodeGen/CodeGenerator.cc \
+	CodeGen/FixMain.cc \
+	CodeGen/GenType.cc \
+	CodeGen/OperatorTable.cc
+
+SRC_COMMON = \
+      Common/Assert.cc \
+      Common/Stats/Heap.cc \
+      Common/Eval.cc \
+      Common/SemanticError.cc \
+      Common/UniqueName.cc
+
+SRC_CONTROLSTRUCT = \
+	ControlStruct/ForExprMutator.cc \
+	ControlStruct/LabelFixer.cc \
+	ControlStruct/LabelGenerator.cc \
+	ControlStruct/MLEMutator.cc \
+	ControlStruct/Mutate.cc
+
 BUILT_SOURCES = Parser/parser.hh
 AM_YFLAGS = -d -t -v
+SRC_RESOLVEXPR = \
+      ResolvExpr/AdjustExprType.cc \
+      ResolvExpr/Alternative.cc \
+      ResolvExpr/AlternativeFinder.cc \
+      ResolvExpr/CastCost.cc \
+      ResolvExpr/CommonType.cc \
+      ResolvExpr/ConversionCost.cc \
+      ResolvExpr/CurrentObject.cc \
+      ResolvExpr/ExplodedActual.cc \
+      ResolvExpr/FindOpenVars.cc \
+      ResolvExpr/Occurs.cc \
+      ResolvExpr/PolyCost.cc \
+      ResolvExpr/PtrsAssignable.cc \
+      ResolvExpr/PtrsCastable.cc \
+      ResolvExpr/RenameVars.cc \
+      ResolvExpr/ResolveAssertions.cc \
+      ResolvExpr/Resolver.cc \
+      ResolvExpr/ResolveTypeof.cc \
+      ResolvExpr/SpecCost.cc \
+      ResolvExpr/TypeEnvironment.cc \
+      ResolvExpr/Unify.cc
+
+SRC_SYMTAB = \
+      SymTab/Autogen.cc \
+      SymTab/FixFunction.cc \
+      SymTab/Indexer.cc \
+      SymTab/Mangler.cc \
+      SymTab/ManglerCommon.cc \
+      SymTab/Validate.cc
+
+SRC_SYNTREE = \
+      SynTree/Type.cc \
+      SynTree/VoidType.cc \
+      SynTree/BasicType.cc \
+      SynTree/PointerType.cc \
+      SynTree/ArrayType.cc \
+      SynTree/ReferenceType.cc \
+      SynTree/FunctionType.cc \
+      SynTree/ReferenceToType.cc \
+      SynTree/TupleType.cc \
+      SynTree/TypeofType.cc \
+      SynTree/AttrType.cc \
+      SynTree/VarArgsType.cc \
+      SynTree/ZeroOneType.cc \
+      SynTree/Constant.cc \
+      SynTree/Expression.cc \
+      SynTree/TupleExpr.cc \
+      SynTree/CommaExpr.cc \
+      SynTree/TypeExpr.cc \
+      SynTree/ApplicationExpr.cc \
+      SynTree/AddressExpr.cc \
+      SynTree/Statement.cc \
+      SynTree/CompoundStmt.cc \
+      SynTree/DeclStmt.cc \
+      SynTree/Declaration.cc \
+      SynTree/DeclarationWithType.cc \
+      SynTree/ObjectDecl.cc \
+      SynTree/FunctionDecl.cc \
+      SynTree/AggregateDecl.cc \
+      SynTree/NamedTypeDecl.cc \
+      SynTree/TypeDecl.cc \
+      SynTree/Initializer.cc \
+      SynTree/TypeSubstitution.cc \
+      SynTree/Attribute.cc \
+      SynTree/DeclReplacer.cc
+
 
 # put into lib for now
@@ -630,91 +649,7 @@
 ARFLAGS = cr
 demangler_SOURCES = SymTab/demangler.cc
-demangler_LDADD = libdemangle.a			# yywrap
+demangler_LDADD = libdemangle.a -ldl			# yywrap
 noinst_LIBRARIES = libdemangle.a
-libdemangle_a_SOURCES = SymTab/Demangle.cc SymTab/ManglerCommon.cc \
-	SynTree/Type.cc \
-	SynTree/VoidType.cc \
-	SynTree/BasicType.cc \
-	SynTree/PointerType.cc \
-	SynTree/ArrayType.cc \
-	SynTree/ReferenceType.cc \
-	SynTree/FunctionType.cc \
-	SynTree/ReferenceToType.cc \
-	SynTree/TupleType.cc \
-	SynTree/TypeofType.cc \
-	SynTree/AttrType.cc \
-	SynTree/VarArgsType.cc \
-	SynTree/ZeroOneType.cc \
-	SynTree/Constant.cc \
-	SynTree/Expression.cc \
-	SynTree/TupleExpr.cc \
-	SynTree/CommaExpr.cc \
-	SynTree/TypeExpr.cc \
-	SynTree/ApplicationExpr.cc \
-	SynTree/AddressExpr.cc \
-	SynTree/Statement.cc \
-	SynTree/CompoundStmt.cc \
-	SynTree/DeclStmt.cc \
-	SynTree/Declaration.cc \
-	SynTree/DeclarationWithType.cc \
-	SynTree/ObjectDecl.cc \
-	SynTree/FunctionDecl.cc \
-	SynTree/AggregateDecl.cc \
-	SynTree/NamedTypeDecl.cc \
-	SynTree/TypeDecl.cc \
-	SynTree/Initializer.cc \
-	SynTree/TypeSubstitution.cc \
-	SynTree/Attribute.cc \
-	SynTree/DeclReplacer.cc \
-	CompilationState.cc \
-	CodeGen/CodeGenerator.cc \
-	CodeGen/FixMain.cc \
-	CodeGen/GenType.cc \
-	CodeGen/OperatorTable.cc \
-	Common/Assert.cc \
-	Common/Eval.cc \
-	Common/SemanticError.cc \
-	Common/UniqueName.cc \
-	Concurrency/Keywords.cc \
-	ControlStruct/ForExprMutator.cc \
-	ControlStruct/LabelFixer.cc \
-	ControlStruct/LabelGenerator.cc \
-	ControlStruct/MLEMutator.cc \
-	ControlStruct/Mutate.cc \
-	GenPoly/GenPoly.cc \
-	GenPoly/Lvalue.cc \
-	InitTweak/GenInit.cc \
-	InitTweak/InitTweak.cc \
-	Parser/LinkageSpec.cc \
-	ResolvExpr/AdjustExprType.cc \
-	ResolvExpr/Alternative.cc \
-	ResolvExpr/AlternativeFinder.cc \
-	ResolvExpr/ExplodedActual.cc \
-	ResolvExpr/CastCost.cc \
-	ResolvExpr/CommonType.cc \
-	ResolvExpr/ConversionCost.cc \
-	ResolvExpr/CurrentObject.cc \
-	ResolvExpr/FindOpenVars.cc \
-	ResolvExpr/Occurs.cc \
-	ResolvExpr/PolyCost.cc \
-	ResolvExpr/PtrsAssignable.cc \
-	ResolvExpr/PtrsCastable.cc \
-	ResolvExpr/RenameVars.cc \
-	ResolvExpr/ResolveAssertions.cc \
-	ResolvExpr/Resolver.cc \
-	ResolvExpr/ResolveTypeof.cc \
-	ResolvExpr/SpecCost.cc \
-	ResolvExpr/TypeEnvironment.cc \
-	ResolvExpr/Unify.cc \
-	SymTab/Autogen.cc \
-	SymTab/FixFunction.cc \
-	SymTab/Indexer.cc \
-	SymTab/Mangler.cc \
-	SymTab/Validate.cc \
-	Tuples/Explode.cc \
-	Tuples/TupleAssignment.cc \
-	Tuples/TupleExpansion.cc \
-	Validate/HandleAttributes.cc
-
+libdemangle_a_SOURCES = $(SRCDEMANGLE)
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -755,88 +690,4 @@
 clean-noinstLIBRARIES:
 	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-SymTab/$(am__dirstamp):
-	@$(MKDIR_P) SymTab
-	@: > SymTab/$(am__dirstamp)
-SymTab/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) SymTab/$(DEPDIR)
-	@: > SymTab/$(DEPDIR)/$(am__dirstamp)
-SymTab/Demangle.$(OBJEXT): SymTab/$(am__dirstamp) \
-	SymTab/$(DEPDIR)/$(am__dirstamp)
-SymTab/ManglerCommon.$(OBJEXT): SymTab/$(am__dirstamp) \
-	SymTab/$(DEPDIR)/$(am__dirstamp)
-SynTree/$(am__dirstamp):
-	@$(MKDIR_P) SynTree
-	@: > SynTree/$(am__dirstamp)
-SynTree/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) SynTree/$(DEPDIR)
-	@: > SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Type.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/VoidType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/BasicType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/PointerType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ArrayType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ReferenceType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/FunctionType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ReferenceToType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TupleType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TypeofType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/AttrType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/VarArgsType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ZeroOneType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Constant.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Expression.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TupleExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/CommaExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TypeExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ApplicationExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/AddressExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Statement.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/CompoundStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/DeclStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Declaration.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/DeclarationWithType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ObjectDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/FunctionDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/AggregateDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/NamedTypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Initializer.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TypeSubstitution.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Attribute.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/DeclReplacer.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
 CodeGen/$(am__dirstamp):
 	@$(MKDIR_P) CodeGen
@@ -853,4 +704,12 @@
 CodeGen/OperatorTable.$(OBJEXT): CodeGen/$(am__dirstamp) \
 	CodeGen/$(DEPDIR)/$(am__dirstamp)
+Concurrency/$(am__dirstamp):
+	@$(MKDIR_P) Concurrency
+	@: > Concurrency/$(am__dirstamp)
+Concurrency/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) Concurrency/$(DEPDIR)
+	@: > Concurrency/$(DEPDIR)/$(am__dirstamp)
+Concurrency/Keywords.$(OBJEXT): Concurrency/$(am__dirstamp) \
+	Concurrency/$(DEPDIR)/$(am__dirstamp)
 Common/$(am__dirstamp):
 	@$(MKDIR_P) Common
@@ -861,4 +720,12 @@
 Common/Assert.$(OBJEXT): Common/$(am__dirstamp) \
 	Common/$(DEPDIR)/$(am__dirstamp)
+Common/Stats/$(am__dirstamp):
+	@$(MKDIR_P) Common/Stats
+	@: > Common/Stats/$(am__dirstamp)
+Common/Stats/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) Common/Stats/$(DEPDIR)
+	@: > Common/Stats/$(DEPDIR)/$(am__dirstamp)
+Common/Stats/Heap.$(OBJEXT): Common/Stats/$(am__dirstamp) \
+	Common/Stats/$(DEPDIR)/$(am__dirstamp)
 Common/Eval.$(OBJEXT): Common/$(am__dirstamp) \
 	Common/$(DEPDIR)/$(am__dirstamp)
@@ -867,12 +734,4 @@
 Common/UniqueName.$(OBJEXT): Common/$(am__dirstamp) \
 	Common/$(DEPDIR)/$(am__dirstamp)
-Concurrency/$(am__dirstamp):
-	@$(MKDIR_P) Concurrency
-	@: > Concurrency/$(am__dirstamp)
-Concurrency/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) Concurrency/$(DEPDIR)
-	@: > Concurrency/$(DEPDIR)/$(am__dirstamp)
-Concurrency/Keywords.$(OBJEXT): Concurrency/$(am__dirstamp) \
-	Concurrency/$(DEPDIR)/$(am__dirstamp)
 ControlStruct/$(am__dirstamp):
 	@$(MKDIR_P) ControlStruct
@@ -931,14 +790,14 @@
 ResolvExpr/AlternativeFinder.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
 	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
+ResolvExpr/CastCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
+	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
+ResolvExpr/CommonType.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
+	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
+ResolvExpr/ConversionCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
+	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
+ResolvExpr/CurrentObject.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
+	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
 ResolvExpr/ExplodedActual.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
 	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/CastCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/CommonType.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/ConversionCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/CurrentObject.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
 ResolvExpr/FindOpenVars.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
 	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
@@ -965,4 +824,10 @@
 ResolvExpr/Unify.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
 	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
+SymTab/$(am__dirstamp):
+	@$(MKDIR_P) SymTab
+	@: > SymTab/$(am__dirstamp)
+SymTab/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) SymTab/$(DEPDIR)
+	@: > SymTab/$(DEPDIR)/$(am__dirstamp)
 SymTab/Autogen.$(OBJEXT): SymTab/$(am__dirstamp) \
 	SymTab/$(DEPDIR)/$(am__dirstamp)
@@ -973,6 +838,84 @@
 SymTab/Mangler.$(OBJEXT): SymTab/$(am__dirstamp) \
 	SymTab/$(DEPDIR)/$(am__dirstamp)
+SymTab/ManglerCommon.$(OBJEXT): SymTab/$(am__dirstamp) \
+	SymTab/$(DEPDIR)/$(am__dirstamp)
 SymTab/Validate.$(OBJEXT): SymTab/$(am__dirstamp) \
 	SymTab/$(DEPDIR)/$(am__dirstamp)
+SymTab/Demangle.$(OBJEXT): SymTab/$(am__dirstamp) \
+	SymTab/$(DEPDIR)/$(am__dirstamp)
+SynTree/$(am__dirstamp):
+	@$(MKDIR_P) SynTree
+	@: > SynTree/$(am__dirstamp)
+SynTree/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) SynTree/$(DEPDIR)
+	@: > SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/Type.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/VoidType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/BasicType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/PointerType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/ArrayType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/ReferenceType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/FunctionType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/ReferenceToType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/TupleType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/TypeofType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/AttrType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/VarArgsType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/ZeroOneType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/Constant.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/Expression.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/TupleExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/CommaExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/TypeExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/ApplicationExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/AddressExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/Statement.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/CompoundStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/DeclStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/Declaration.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/DeclarationWithType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/ObjectDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/FunctionDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/AggregateDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/NamedTypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/TypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/Initializer.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/TypeSubstitution.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/Attribute.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/DeclReplacer.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
 Tuples/$(am__dirstamp):
 	@$(MKDIR_P) Tuples
@@ -981,9 +924,9 @@
 	@$(MKDIR_P) Tuples/$(DEPDIR)
 	@: > Tuples/$(DEPDIR)/$(am__dirstamp)
-Tuples/Explode.$(OBJEXT): Tuples/$(am__dirstamp) \
-	Tuples/$(DEPDIR)/$(am__dirstamp)
 Tuples/TupleAssignment.$(OBJEXT): Tuples/$(am__dirstamp) \
 	Tuples/$(DEPDIR)/$(am__dirstamp)
 Tuples/TupleExpansion.$(OBJEXT): Tuples/$(am__dirstamp) \
+	Tuples/$(DEPDIR)/$(am__dirstamp)
+Tuples/Explode.$(OBJEXT): Tuples/$(am__dirstamp) \
 	Tuples/$(DEPDIR)/$(am__dirstamp)
 Validate/$(am__dirstamp):
@@ -1068,6 +1011,4 @@
 	Concurrency/$(DEPDIR)/$(am__dirstamp)
 Common/DebugMalloc.$(OBJEXT): Common/$(am__dirstamp) \
-	Common/$(DEPDIR)/$(am__dirstamp)
-Common/Heap.$(OBJEXT): Common/$(am__dirstamp) \
 	Common/$(DEPDIR)/$(am__dirstamp)
 ControlStruct/ExceptTranslate.$(OBJEXT):  \
@@ -1140,4 +1081,5 @@
 	-rm -f CodeTools/*.$(OBJEXT)
 	-rm -f Common/*.$(OBJEXT)
+	-rm -f Common/Stats/*.$(OBJEXT)
 	-rm -f Concurrency/*.$(OBJEXT)
 	-rm -f ControlStruct/*.$(OBJEXT)
@@ -1170,7 +1112,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/DebugMalloc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/Eval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/Heap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/SemanticError.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/UniqueName.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@Common/Stats/$(DEPDIR)/Heap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Concurrency/$(DEPDIR)/Keywords.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Concurrency/$(DEPDIR)/Waitfor.Po@am__quote@
@@ -1434,4 +1376,6 @@
 	-rm -f Common/$(DEPDIR)/$(am__dirstamp)
 	-rm -f Common/$(am__dirstamp)
+	-rm -f Common/Stats/$(DEPDIR)/$(am__dirstamp)
+	-rm -f Common/Stats/$(am__dirstamp)
 	-rm -f Concurrency/$(DEPDIR)/$(am__dirstamp)
 	-rm -f Concurrency/$(am__dirstamp)
@@ -1471,5 +1415,5 @@
 
 distclean: distclean-am
-	-rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) CodeTools/$(DEPDIR) Common/$(DEPDIR) Concurrency/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR) Validate/$(DEPDIR) Virtual/$(DEPDIR)
+	-rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) CodeTools/$(DEPDIR) Common/$(DEPDIR) Common/Stats/$(DEPDIR) Concurrency/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR) Validate/$(DEPDIR) Virtual/$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
@@ -1517,5 +1461,5 @@
 
 maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) CodeTools/$(DEPDIR) Common/$(DEPDIR) Concurrency/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR) Validate/$(DEPDIR) Virtual/$(DEPDIR)
+	-rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) CodeTools/$(DEPDIR) Common/$(DEPDIR) Common/Stats/$(DEPDIR) Concurrency/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR) Validate/$(DEPDIR) Virtual/$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
Index: src/Parser/module.mk
===================================================================
--- src/Parser/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/Parser/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -31,3 +31,7 @@
        Parser/parserutility.cc
 
+SRCDEMANGLE += \
+	Parser/LinkageSpec.cc
+
+
 MOSTLYCLEANFILES += Parser/lex.cc Parser/parser.cc Parser/parser.hh Parser/parser.output
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/ResolvExpr/CommonType.cc	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -177,5 +177,5 @@
 
 	// GENERATED START, DO NOT EDIT
-	// GENERATED BY BasicTypes-gen.cc
+	// GENERATED BY ../../main/src/BasicTypes-gen.cc
 	#define BT BasicType::
 	static const BasicType::Kind commonTypes[BasicType::NUMBER_OF_BASIC_TYPES][BasicType::NUMBER_OF_BASIC_TYPES] = { // nearest common ancestor
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/ResolvExpr/ConversionCost.cc	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -182,5 +182,5 @@
 
 	// GENERATED START, DO NOT EDIT
-	// GENERATED BY BasicTypes-gen.cc
+	// GENERATED BY ../../main/src/BasicTypes-gen.cc
 	/* EXTENDED INTEGRAL RANK HIERARCHY (root to leaves)
 	                         _Bool
@@ -207,5 +207,5 @@
 
 	// GENERATED START, DO NOT EDIT
-	// GENERATED BY BasicTypes-gen.cc
+	// GENERATED BY ../../main/src/BasicTypes-gen.cc
 	static const int costMatrix[BasicType::NUMBER_OF_BASIC_TYPES][BasicType::NUMBER_OF_BASIC_TYPES] = { // path length from root to node
 		/*             B    C   SC   UC   SI  SUI    I   UI   LI  LUI  LLI LLUI   IB  UIB  _FH  _FH   _F  _FC    F   FC  _FX _FXC   FD _FDC    D   DC F80X_FDXC  F80  _FB_FLDC   FB   LD  LDC _FBX_FLDXC */
@@ -254,5 +254,5 @@
 
 	// GENERATED START, DO NOT EDIT
-	// GENERATED BY BasicTypes-gen.cc
+	// GENERATED BY ../../main/src/BasicTypes-gen.cc
 	static const int signMatrix[BasicType::NUMBER_OF_BASIC_TYPES][BasicType::NUMBER_OF_BASIC_TYPES] = { // number of sign changes in safe conversion
 		/*             B    C   SC   UC   SI  SUI    I   UI   LI  LUI  LLI LLUI   IB  UIB  _FH  _FH   _F  _FC    F   FC  _FX _FXC   FD _FDC    D   DC F80X_FDXC  F80  _FB_FLDC   FB   LD  LDC _FBX_FLDXC */
Index: src/ResolvExpr/module.mk
===================================================================
--- src/ResolvExpr/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/ResolvExpr/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -15,23 +15,26 @@
 ###############################################################################
 
-SRC += ResolvExpr/AlternativeFinder.cc \
-       ResolvExpr/Alternative.cc \
-       ResolvExpr/Unify.cc \
-       ResolvExpr/PtrsAssignable.cc \
-       ResolvExpr/CommonType.cc \
-       ResolvExpr/ConversionCost.cc \
-       ResolvExpr/CastCost.cc \
-       ResolvExpr/PtrsCastable.cc \
-       ResolvExpr/AdjustExprType.cc \
-       ResolvExpr/AlternativePrinter.cc \
-       ResolvExpr/Resolver.cc \
-       ResolvExpr/ResolveTypeof.cc \
-       ResolvExpr/RenameVars.cc \
-       ResolvExpr/FindOpenVars.cc \
-       ResolvExpr/PolyCost.cc \
-       ResolvExpr/Occurs.cc \
-       ResolvExpr/TypeEnvironment.cc \
-       ResolvExpr/CurrentObject.cc \
-       ResolvExpr/ExplodedActual.cc \
-       ResolvExpr/SpecCost.cc \
-       ResolvExpr/ResolveAssertions.cc
+SRC_RESOLVEXPR = \
+      ResolvExpr/AdjustExprType.cc \
+      ResolvExpr/Alternative.cc \
+      ResolvExpr/AlternativeFinder.cc \
+      ResolvExpr/CastCost.cc \
+      ResolvExpr/CommonType.cc \
+      ResolvExpr/ConversionCost.cc \
+      ResolvExpr/CurrentObject.cc \
+      ResolvExpr/ExplodedActual.cc \
+      ResolvExpr/FindOpenVars.cc \
+      ResolvExpr/Occurs.cc \
+      ResolvExpr/PolyCost.cc \
+      ResolvExpr/PtrsAssignable.cc \
+      ResolvExpr/PtrsCastable.cc \
+      ResolvExpr/RenameVars.cc \
+      ResolvExpr/ResolveAssertions.cc \
+      ResolvExpr/Resolver.cc \
+      ResolvExpr/ResolveTypeof.cc \
+      ResolvExpr/SpecCost.cc \
+      ResolvExpr/TypeEnvironment.cc \
+      ResolvExpr/Unify.cc
+
+SRC += $(SRC_RESOLVEXPR) ResolvExpr/AlternativePrinter.cc
+SRCDEMANGLE += $(SRC_RESOLVEXPR)
Index: src/SymTab/ManglerCommon.cc
===================================================================
--- src/SymTab/ManglerCommon.cc	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/SymTab/ManglerCommon.cc	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -24,5 +24,5 @@
 
 			// GENERATED START, DO NOT EDIT
-			// GENERATED BY BasicTypes-gen.cc
+			// GENERATED BY ../../main/src/BasicTypes-gen.cc
 			// NOTES ON MANGLING:
 			// * Itanium spec says that Float80 encodes to "e" (like LongDouble), but the distinct lengths cause resolution problems.
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/SymTab/Validate.cc	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -49,4 +49,5 @@
 #include "CodeGen/OperatorTable.h"     // for isCtorDtor, isCtorDtorAssign
 #include "ControlStruct/Mutate.h"      // for ForExprMutator
+#include "Common/Stats.h"              // for Stats::Heap
 #include "Common/PassVisitor.h"        // for PassVisitor, WithDeclsToAdd
 #include "Common/ScopedMap.h"          // for ScopedMap
@@ -303,24 +304,30 @@
 		PassVisitor<FixQualifiedTypes> fixQual;
 
+		Stats::Heap::newPass("validate-A");
 		acceptAll( translationUnit, hoistDecls );
 		ReplaceTypedef::replaceTypedef( translationUnit );
 		ReturnTypeFixer::fix( translationUnit ); // must happen before autogen
 		acceptAll( translationUnit, epc ); // must happen before VerifyCtorDtorAssign, because void return objects should not exist; before LinkReferenceToTypes because it is an indexer and needs correct types for mangling
+		Stats::Heap::newPass("validate-B");
 		acceptAll( translationUnit, lrt ); // must happen before autogen, because sized flag needs to propagate to generated functions
 		mutateAll( translationUnit, fixQual ); // must happen after LinkReferenceToTypes, because aggregate members are accessed
 		HoistStruct::hoistStruct( translationUnit ); // must happen after EliminateTypedef, so that aggregate typedefs occur in the correct order
 		EliminateTypedef::eliminateTypedef( translationUnit ); //
+		Stats::Heap::newPass("validate-C");
 		acceptAll( translationUnit, genericParams );  // check as early as possible - can't happen before LinkReferenceToTypes
 		VerifyCtorDtorAssign::verify( translationUnit );  // must happen before autogen, because autogen examines existing ctor/dtors
 		ReturnChecker::checkFunctionReturns( translationUnit );
 		InitTweak::fixReturnStatements( translationUnit ); // must happen before autogen
+		Stats::Heap::newPass("validate-D");
 		Concurrency::applyKeywords( translationUnit );
 		acceptAll( translationUnit, fpd ); // must happen before autogenerateRoutines, after Concurrency::applyKeywords because uniqueIds must be set on declaration before resolution
 		ControlStruct::hoistControlDecls( translationUnit );  // hoist initialization out of for statements; must happen before autogenerateRoutines
 		autogenerateRoutines( translationUnit ); // moved up, used to be below compoundLiteral - currently needs EnumAndPointerDecay
+		Stats::Heap::newPass("validate-E");
 		Concurrency::implementMutexFuncs( translationUnit );
 		Concurrency::implementThreadStarter( translationUnit );
 		mutateAll( translationUnit, compoundliteral );
 		ResolvExpr::resolveWithExprs( translationUnit ); // must happen before FixObjectType because user-code is resolved and may contain with variables
+		Stats::Heap::newPass("validate-F");
 		FixObjectType::fix( translationUnit );
 		ArrayLength::computeLength( translationUnit );
Index: src/SymTab/module.mk
===================================================================
--- src/SymTab/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/SymTab/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -15,8 +15,12 @@
 ###############################################################################
 
-SRC += SymTab/Indexer.cc \
-       SymTab/Mangler.cc \
-       SymTab/ManglerCommon.cc \
-       SymTab/Validate.cc \
-       SymTab/FixFunction.cc \
-       SymTab/Autogen.cc
+SRC_SYMTAB = \
+      SymTab/Autogen.cc \
+      SymTab/FixFunction.cc \
+      SymTab/Indexer.cc \
+      SymTab/Mangler.cc \
+      SymTab/ManglerCommon.cc \
+      SymTab/Validate.cc
+
+SRC += $(SRC_SYMTAB)
+SRCDEMANGLE += $(SRC_SYMTAB) SymTab/Demangle.cc
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/SynTree/Type.h	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -208,5 +208,5 @@
   public:
 	// GENERATED START, DO NOT EDIT
-	// GENERATED BY BasicTypes-gen.cc
+	// GENERATED BY ../../main/src/BasicTypes-gen.cc
 	enum Kind {
 		Bool,
Index: src/SynTree/module.mk
===================================================================
--- src/SynTree/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/SynTree/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -15,37 +15,40 @@
 ###############################################################################
 
-SRC += SynTree/Type.cc \
-       SynTree/VoidType.cc \
-       SynTree/BasicType.cc \
-       SynTree/PointerType.cc \
-       SynTree/ArrayType.cc \
-       SynTree/ReferenceType.cc \
-       SynTree/FunctionType.cc \
-       SynTree/ReferenceToType.cc \
-       SynTree/TupleType.cc \
-       SynTree/TypeofType.cc \
-       SynTree/AttrType.cc \
-       SynTree/VarArgsType.cc \
-       SynTree/ZeroOneType.cc \
-       SynTree/Constant.cc \
-       SynTree/Expression.cc \
-       SynTree/TupleExpr.cc \
-       SynTree/CommaExpr.cc \
-       SynTree/TypeExpr.cc \
-       SynTree/ApplicationExpr.cc \
-       SynTree/AddressExpr.cc \
-       SynTree/Statement.cc \
-       SynTree/CompoundStmt.cc \
-       SynTree/DeclStmt.cc \
-       SynTree/Declaration.cc \
-       SynTree/DeclarationWithType.cc \
-       SynTree/ObjectDecl.cc \
-       SynTree/FunctionDecl.cc \
-       SynTree/AggregateDecl.cc \
-       SynTree/NamedTypeDecl.cc \
-       SynTree/TypeDecl.cc \
-       SynTree/Initializer.cc \
-       SynTree/TypeSubstitution.cc \
-       SynTree/Attribute.cc \
-       SynTree/DeclReplacer.cc
+SRC_SYNTREE = \
+      SynTree/Type.cc \
+      SynTree/VoidType.cc \
+      SynTree/BasicType.cc \
+      SynTree/PointerType.cc \
+      SynTree/ArrayType.cc \
+      SynTree/ReferenceType.cc \
+      SynTree/FunctionType.cc \
+      SynTree/ReferenceToType.cc \
+      SynTree/TupleType.cc \
+      SynTree/TypeofType.cc \
+      SynTree/AttrType.cc \
+      SynTree/VarArgsType.cc \
+      SynTree/ZeroOneType.cc \
+      SynTree/Constant.cc \
+      SynTree/Expression.cc \
+      SynTree/TupleExpr.cc \
+      SynTree/CommaExpr.cc \
+      SynTree/TypeExpr.cc \
+      SynTree/ApplicationExpr.cc \
+      SynTree/AddressExpr.cc \
+      SynTree/Statement.cc \
+      SynTree/CompoundStmt.cc \
+      SynTree/DeclStmt.cc \
+      SynTree/Declaration.cc \
+      SynTree/DeclarationWithType.cc \
+      SynTree/ObjectDecl.cc \
+      SynTree/FunctionDecl.cc \
+      SynTree/AggregateDecl.cc \
+      SynTree/NamedTypeDecl.cc \
+      SynTree/TypeDecl.cc \
+      SynTree/Initializer.cc \
+      SynTree/TypeSubstitution.cc \
+      SynTree/Attribute.cc \
+      SynTree/DeclReplacer.cc
 
+SRC += $(SRC_SYNTREE)
+SRCDEMANGLE += $(SRC_SYNTREE)
Index: src/Tuples/module.mk
===================================================================
--- src/Tuples/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/Tuples/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -15,5 +15,4 @@
 ###############################################################################
 
-SRC += 	Tuples/TupleAssignment.cc \
-	Tuples/TupleExpansion.cc \
-	Tuples/Explode.cc
+SRC += Tuples/TupleAssignment.cc Tuples/TupleExpansion.cc Tuples/Explode.cc
+SRCDEMANGLE += Tuples/TupleAssignment.cc Tuples/TupleExpansion.cc Tuples/Explode.cc
Index: src/Validate/module.mk
===================================================================
--- src/Validate/module.mk	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/Validate/module.mk	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -16,2 +16,3 @@
 
 SRC += Validate/HandleAttributes.cc
+SRCDEMANGLE += Validate/HandleAttributes.cc
Index: src/main.cc
===================================================================
--- src/main.cc	(revision fd9ae1d407fed0d7679bdcbba50a7cc3f3694386)
+++ src/main.cc	(revision 7abee383f06a7fe5690784e7676edcdf68ff7660)
@@ -37,5 +37,5 @@
 #include "CodeTools/TrackLoc.h"             // for fillLocations
 #include "Common/CompilerError.h"           // for CompilerError
-#include "Common/Heap.h"
+#include "Common/Stats.h"
 #include "Common/PassVisitor.h"
 #include "Common/SemanticError.h"           // for SemanticError
@@ -67,5 +67,5 @@
 #define PASS(name, pass)                   \
 	if ( errorp ) { cerr << name << endl; } \
-	HeapStats::newPass(name);               \
+	Stats::Heap::newPass(name);               \
 	pass;
 
@@ -377,5 +377,5 @@
 
 	deleteAll( translationUnit );
-	if(!libcfap && !treep) HeapStats::printStats();
+	if(!libcfap && !treep) Stats::Heap::printStats();
 	return 0;
 } // main
