Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision df00c78b128651274f61f1ce49367f7120e119e0)
+++ src/Parser/DeclarationNode.cc	(revision 66406f365e9192e865d0bc59380d3848f53578bb)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jul 14 17:36:57 2021
-// Update Count     : 1154
+// Last Modified On : Mon Aug  8 17:07:00 2022
+// Update Count     : 1185
 //
 
@@ -128,6 +128,4 @@
 	if ( name ) {
 		os << *name << ": ";
-	} else {
-		os << "unnamed: ";
 	} // if
 
@@ -154,6 +152,9 @@
 		initializer->printOneLine( os );
 		os << " maybe constructed? " << initializer->get_maybeConstructed();
-
-	} // if
+	} // if
+
+	for ( Attribute * attr: reverseIterate( attributes ) ) {
+		os << string( indent + 2, ' ' ) << "attr " << attr->name.c_str();
+	} // for
 
 	os << endl;
@@ -243,5 +244,5 @@
 	newnode->type = new TypeData( TypeData::Aggregate );
 	newnode->type->aggregate.kind = kind;
-	newnode->type->aggregate.name =  name == nullptr ? new string( DeclarationNode::anonymous.newName() ) : name;
+	newnode->type->aggregate.name = name == nullptr ? new string( DeclarationNode::anonymous.newName() ) : name;
 	newnode->type->aggregate.actuals = actuals;
 	newnode->type->aggregate.fields = fields;
@@ -518,5 +519,5 @@
 	storageClasses |= q->storageClasses;
 
-	for ( Attribute *attr: reverseIterate( q->attributes ) ) {
+	for ( Attribute * attr: reverseIterate( q->attributes ) ) {
 		attributes.push_front( attr->clone() );
 	} // for
@@ -683,4 +684,5 @@
 	} // if
 	delete o;
+
 	return this;
 }
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision df00c78b128651274f61f1ce49367f7120e119e0)
+++ src/Parser/TypeData.cc	(revision 66406f365e9192e865d0bc59380d3848f53578bb)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 15:12:51 2015
-// Last Modified By : Henry Xue
-// Last Modified On : Tue Jul 20 04:10:50 2021
-// Update Count     : 673
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue May 10 22:36:52 2022
+// Update Count     : 677
 //
 
@@ -283,12 +283,6 @@
 		if ( signedness != DeclarationNode::NoSignedness ) os << DeclarationNode::signednessNames[ signedness ] << " ";
 		if ( length != DeclarationNode::NoLength ) os << DeclarationNode::lengthNames[ length ] << " ";
-		if ( complextype == DeclarationNode::NoComplexType ) { // basic type
-			assert( basictype != DeclarationNode::NoBasicType );
-			os << DeclarationNode::basicTypeNames[ basictype ] << " ";
-		} else {										// complex type
-			// handle double _Complex
-			if ( basictype != DeclarationNode::NoBasicType ) os << DeclarationNode::basicTypeNames[ basictype ] << " ";
-			os << DeclarationNode::complexTypeNames[ complextype ] << " ";
-		} // if
+		if ( complextype != DeclarationNode::NoComplexType ) os << DeclarationNode::complexTypeNames[ complextype ] << " ";
+		if ( basictype != DeclarationNode::NoBasicType ) os << DeclarationNode::basicTypeNames[ basictype ] << " ";
 		break;
 	  case Pointer:
@@ -437,4 +431,5 @@
 			__attribute__((fallthrough));
 		#endif
+		// FALL THROUGH
 	  case Typeof:
 		os << "type-of expression ";
@@ -442,4 +437,7 @@
 			typeexpr->print( os, indent + 2 );
 		} // if
+		break;
+	  case Vtable:
+		os << "vtable";
 		break;
 	  case Builtin:
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision df00c78b128651274f61f1ce49367f7120e119e0)
+++ src/Parser/TypeData.h	(revision 66406f365e9192e865d0bc59380d3848f53578bb)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jul 14 17:44:05 2021
-// Update Count     : 202
+// Last Modified On : Tue May 10 22:18:49 2022
+// Update Count     : 203
 //
 
@@ -27,5 +27,5 @@
 struct TypeData {
 	enum Kind { Basic, Pointer, Reference, Array, Function, Aggregate, AggregateInst, Enum, EnumConstant, Symbolic,
-				SymbolicInst, Tuple, Typeof, Basetypeof, Vtable, Builtin, GlobalScope, Qualified, Unknown };
+				SymbolicInst, Tuple, Basetypeof, Typeof, Vtable, Builtin, GlobalScope, Qualified, Unknown };
 
 	struct Aggregate_t {
Index: src/Parser/TypedefTable.cc
===================================================================
--- src/Parser/TypedefTable.cc	(revision df00c78b128651274f61f1ce49367f7120e119e0)
+++ src/Parser/TypedefTable.cc	(revision 66406f365e9192e865d0bc59380d3848f53578bb)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:20:13 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 19 08:30:14 2021
-// Update Count     : 262
+// Last Modified On : Tue Feb 15 08:27:24 2022
+// Update Count     : 275
 //
 
@@ -18,4 +18,5 @@
 #include <cassert>										// for assert
 #include <iostream>
+using namespace std;
 
 #if 0
@@ -28,16 +29,16 @@
 
 debugPrint(
-static const char *kindName( int kind ) {
-	switch ( kind ) {
-	  case IDENTIFIER: return "identifier";
-	  case TYPEDIMname: return "typedim";
-	  case TYPEDEFname: return "typedef";
-	  case TYPEGENname: return "typegen";
-	  default:
-		cerr << "Error: cfa-cpp internal error, invalid kind of identifier" << endl;
-		abort();
-	} // switch
-} // kindName
-)
+	static const char *kindName( int kind ) {
+		switch ( kind ) {
+		  case IDENTIFIER: return "identifier";
+		  case TYPEDIMname: return "typedim";
+		  case TYPEDEFname: return "typedef";
+		  case TYPEGENname: return "typegen";
+		  default:
+			cerr << "Error: cfa-cpp internal error, invalid kind of identifier" << endl;
+			abort();
+		} // switch
+	} // kindName
+);
 
 TypedefTable::~TypedefTable() {
@@ -80,5 +81,5 @@
 
 void TypedefTable::addToScope( const string & identifier, int kind, const char * locn __attribute__((unused)) ) {
-	auto scope = kindTable.currentScope();
+	KindTable::size_type scope = kindTable.currentScope();
 	debugPrint( cerr << "Adding current at " << locn << " " << identifier << " as " << kindName( kind ) << " scope " << scope << endl );
 	kindTable.insertAt( scope, identifier, kind );
@@ -86,8 +87,8 @@
 
 void TypedefTable::addToEnclosingScope( const string & identifier, int kind, const char * locn __attribute__((unused)) ) {
-	auto scope = kindTable.currentScope() - 1 - kindTable.getNote( kindTable.currentScope() - 1 ).level;
-//	auto scope = level - kindTable.getNote( kindTable.currentScope() - 1 ).level;
+	KindTable::size_type scope = kindTable.currentScope() - 1 - kindTable.getNote( kindTable.currentScope() - 1 ).level;
+//	size_type scope = level - kindTable.getNote( kindTable.currentScope() - 1 ).level;
 	debugPrint( cerr << "Adding enclosing at " << locn << " " << identifier << " as " << kindName( kind ) << " scope " << scope << " level " << level << " note " << kindTable.getNote( kindTable.currentScope() - 1 ).level << endl );
-	auto ret = kindTable.insertAt( scope, identifier, kind );
+	pair< KindTable::iterator, bool > ret = kindTable.insertAt( scope, identifier, kind );
 	if ( ! ret.second ) ret.first->second = kind;		// exists => update
 } // TypedefTable::addToEnclosingScope
