Index: src/AST/Type.cpp
===================================================================
--- src/AST/Type.cpp	(revision 1469a8aabaefc9cc2ab5e6284f5782dfe30243f5)
+++ src/AST/Type.cpp	(revision cfaa2873f31b6edf27dbf9fb7a544ce6a7bb2a93)
@@ -9,7 +9,7 @@
 // Author           : Aaron B. Moss
 // Created On       : Mon May 13 15:00:00 2019
-// Last Modified By : Aaron B. Moss
-// Last Modified On : Mon May 13 15:00:00 2019
-// Update Count     : 1
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Dec 15 16:56:28 2019
+// Update Count     : 4
 //
 
@@ -48,5 +48,7 @@
 // --- BasicType
 
-const char *BasicType::typeNames[] = {
+// GENERATED START, DO NOT EDIT
+// GENERATED BY BasicTypes-gen.cc
+const char * BasicType::typeNames[] = {
 	"_Bool",
 	"char",
@@ -86,8 +88,5 @@
 	"_Float128x _Complex",
 };
-static_assert(
-	sizeof(BasicType::typeNames)/sizeof(BasicType::typeNames[0]) == BasicType::NUMBER_OF_BASIC_TYPES,
-	"Each basic type name should have a corresponding kind enum value"
-);
+// GENERATED END
 
 // --- FunctionType
Index: src/BasicTypes-gen.cc
===================================================================
--- src/BasicTypes-gen.cc	(revision 1469a8aabaefc9cc2ab5e6284f5782dfe30243f5)
+++ src/BasicTypes-gen.cc	(revision cfaa2873f31b6edf27dbf9fb7a544ce6a7bb2a93)
@@ -273,8 +273,8 @@
 
 
-	#define Type TOP_SRCDIR "src/SynTree/Type.h"
-	resetInput( file, Type, buffer, code, str );
-
-	if ( (start = str.find( STARTMK )) == string::npos ) Abort( "start", Type );
+	#define TypeH TOP_SRCDIR "src/SynTree/Type.h"
+	resetInput( file, TypeH, buffer, code, str );
+
+	if ( (start = str.find( STARTMK )) == string::npos ) Abort( "start", TypeH );
 	start += sizeof( STARTMK );							// includes newline
 	code << str.substr( 0, start );
@@ -289,16 +289,37 @@
 	code << "\t";										// indentation for end marker
 
-	if ( (start = str.find( ENDMK, start + 1 )) == string::npos ) Abort( "end", Type );
-	code << str.substr( start );
-
-	output( file, Type, code );
+	if ( (start = str.find( ENDMK, start + 1 )) == string::npos ) Abort( "end", TypeH );
+	code << str.substr( start );
+
+	output( file, TypeH, code );
+	// cout << code.str();
+
+
+	#define TypeC TOP_SRCDIR "src/SynTree/Type.cc"
+	resetInput( file, TypeC, buffer, code, str );
+
+	if ( (start = str.find( STARTMK )) == string::npos ) Abort( "start", TypeC );
+	start += sizeof( STARTMK );							// includes newline
+	code << str.substr( 0, start );
+
+	code << BYMK << endl;
+	code << "const char * BasicType::typeNames[] = {" << endl;
+	for ( int r = 0; r < NUMBER_OF_BASIC_TYPES; r += 1 ) {
+		code << "\t\"" << graph[r].type << "\"," << endl;
+	} // for	
+	code << "};" << endl;
+
+	if ( (start = str.find( ENDMK, start + 1 )) == string::npos ) Abort( "end", TypeC );
+	code << str.substr( start );
+
+	output( file, TypeC, code );
 	// cout << code.str();
 
 
 	// TEMPORARY DURING CHANGE OVER
-	#define TypeAST TOP_SRCDIR "src/AST/Type.hpp"
-	resetInput( file, TypeAST, buffer, code, str );
-
-	if ( (start = str.find( STARTMK )) == string::npos ) Abort( "start", TypeAST );
+	#define TypeH_AST TOP_SRCDIR "src/AST/Type.hpp"
+	resetInput( file, TypeH_AST, buffer, code, str );
+
+	if ( (start = str.find( STARTMK )) == string::npos ) Abort( "start", TypeH_AST );
 	start += sizeof( STARTMK );							// includes newline
 	code << str.substr( 0, start );
@@ -313,8 +334,29 @@
 	code << "\t";										// indentation for end marker
 
-	if ( (start = str.find( ENDMK, start + 1 )) == string::npos ) Abort( "end", TypeAST );
-	code << str.substr( start );
-
-	output( file, TypeAST, code );
+	if ( (start = str.find( ENDMK, start + 1 )) == string::npos ) Abort( "end", TypeH_AST );
+	code << str.substr( start );
+
+	output( file, TypeH_AST, code );
+	// cout << code.str();
+
+
+	#define TypeC_AST TOP_SRCDIR "src/AST/Type.cpp"
+	resetInput( file, TypeC_AST, buffer, code, str );
+
+	if ( (start = str.find( STARTMK )) == string::npos ) Abort( "start", TypeC_AST );
+	start += sizeof( STARTMK );							// includes newline
+	code << str.substr( 0, start );
+
+	code << BYMK << endl;
+	code << "const char * BasicType::typeNames[] = {" << endl;
+	for ( int r = 0; r < NUMBER_OF_BASIC_TYPES; r += 1 ) {
+		code << "\t\"" << graph[r].type << "\"," << endl;
+	} // for	
+	code << "};" << endl;
+
+	if ( (start = str.find( ENDMK, start + 1 )) == string::npos ) Abort( "end", TypeC_AST );
+	code << str.substr( start );
+
+	output( file, TypeC_AST, code );
 	// cout << code.str();
 
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision 1469a8aabaefc9cc2ab5e6284f5782dfe30243f5)
+++ src/SynTree/Type.cc	(revision cfaa2873f31b6edf27dbf9fb7a544ce6a7bb2a93)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug  4 21:05:07 2019
-// Update Count     : 45
+// Last Modified On : Sun Dec 15 16:52:37 2019
+// Update Count     : 49
 //
 #include "Type.h"
@@ -24,4 +24,6 @@
 using namespace std;
 
+// GENERATED START, DO NOT EDIT
+// GENERATED BY BasicTypes-gen.cc
 const char * BasicType::typeNames[] = {
 	"_Bool",
@@ -45,5 +47,4 @@
 	"float",
 	"float _Complex",
-	//"float _Imaginary",
 	"_Float32x",
 	"_Float32x _Complex",
@@ -52,5 +53,4 @@
 	"double",
 	"double _Complex",
-	//"double _Imaginary",
 	"_Float64x",
 	"_Float64x _Complex",
@@ -61,12 +61,8 @@
 	"long double",
 	"long double _Complex",
-	//"long double _Imaginary",
 	"_Float128x",
 	"_Float128x _Complex",
 };
-static_assert(
-	sizeof(BasicType::typeNames) / sizeof(BasicType::typeNames[0]) == BasicType::NUMBER_OF_BASIC_TYPES,
-	"Each basic type name should have a corresponding kind enum value"
-);
+// GENERATED END
 
 Type::Type( const Qualifiers &tq, const std::list< Attribute * > & attributes ) : tq( tq ), attributes( attributes ) {}
