Index: src/Common/utility.h
===================================================================
--- src/Common/utility.h	(revision ba7aa2de23109eea3961fea88a1aeeeb3989db22)
+++ src/Common/utility.h	(revision 1b7727498168639c89eefe42fd1a1772a41b30d1)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jun  8 17:33:59 2016
-// Update Count     : 22
+// Last Modified On : Fri Sep 16 19:13:21 2016
+// Update Count     : 26
 //
 
@@ -25,4 +25,5 @@
 #include <sstream>
 #include <string>
+#include <cassert>
 
 template< typename T >
@@ -104,12 +105,7 @@
 
 static inline std::string assign_strptr( const std::string *str ) {
-	if ( str == 0 ) {
-		return "";
-	} else {
-		std::string tmp;
-		tmp = *str;
-		delete str;
-		return tmp;
-	} // if
+	std::string tmp( *str );
+	delete str;
+	return tmp;
 }
 
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision ba7aa2de23109eea3961fea88a1aeeeb3989db22)
+++ src/Parser/DeclarationNode.cc	(revision 1b7727498168639c89eefe42fd1a1772a41b30d1)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Sep 15 23:36:02 2016
-// Update Count     : 515
+// Last Modified On : Fri Sep 16 18:17:16 2016
+// Update Count     : 527
 //
 
@@ -447,9 +447,13 @@
 	copyStorageClasses( q );
 
-	if ( ! q->type ) { delete q; return this; }
+	if ( ! q->type ) {
+		delete q;
+		return this;
+	} // if
 
 	if ( ! type ) {
-//		type = new TypeData;
-		type = q->type;
+		type = q->type;									// reuse this structure
+		q->type = nullptr;
+		delete q;
 		return this;
 	} // if
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision ba7aa2de23109eea3961fea88a1aeeeb3989db22)
+++ src/Parser/ExpressionNode.cc	(revision 1b7727498168639c89eefe42fd1a1772a41b30d1)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 25 21:39:40 2016
-// Update Count     : 503
+// Last Modified On : Fri Sep 16 16:27:44 2016
+// Update Count     : 508
 //
 
@@ -31,6 +31,4 @@
 
 using namespace std;
-
-ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.get_name() ), extension( other.extension ) {}
 
 //##############################################################################
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision ba7aa2de23109eea3961fea88a1aeeeb3989db22)
+++ src/Parser/ParseNode.h	(revision 1b7727498168639c89eefe42fd1a1772a41b30d1)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 12 08:00:05 2016
-// Update Count     : 603
+// Last Modified On : Fri Sep 16 15:02:38 2016
+// Update Count     : 613
 //
 
@@ -41,6 +41,4 @@
   public:
 	ParseNode() {};
-	ParseNode( const std::string * name ) : name( * name ) { assert( false ); delete name; }
-	ParseNode( const std::string &name ) : name( name ) { assert( false ); }
 	virtual ~ParseNode() { delete next; };
 	virtual ParseNode * clone() const = 0;
@@ -48,4 +46,5 @@
 	ParseNode * get_next() const { return next; }
 	ParseNode * set_next( ParseNode * newlink ) { next = newlink; return this; }
+
 	ParseNode * get_last() {
 		ParseNode * current;
@@ -58,10 +57,7 @@
 	}
 
-	const std::string &get_name() const { return name; }
-	void set_name( const std::string &newValue ) { name = newValue; }
-
 	virtual void print( std::ostream &os, int indent = 0 ) const {}
 	virtual void printList( std::ostream &os, int indent = 0 ) const {}
-  private:
+
 	static int indent_by;
 
@@ -106,5 +102,4 @@
   public:
 	ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
-	ExpressionNode( Expression * expr, const std::string * name ) : ParseNode( name ), expr( expr ) {}
 	ExpressionNode( const ExpressionNode &other );
 	virtual ~ExpressionNode() {}
@@ -286,5 +281,4 @@
 
 	bool get_hasEllipsis() const;
-	const std::string &get_name() const { return name; }
 	LinkageSpec::Spec get_linkage() const { return linkage; }
 	DeclarationNode * extractAggregate() const;
@@ -295,7 +289,4 @@
 	DeclarationNode * set_extension( bool exten ) { extension = exten; return this; }
   public:
-	// StorageClass buildStorageClass() const;
-	// bool buildFuncSpecifier( StorageClass key ) const;
-
 	struct Variable_t {
 		DeclarationNode::TypeClass tyClass;
@@ -315,5 +306,4 @@
 
 	TypeData * type;
-	std::string name;
 	StorageClass storageClass;
 	bool isInline, isNoreturn;
@@ -331,5 +321,4 @@
 
 Type * buildType( TypeData * type );
-//Type::Qualifiers buildQualifiers( const TypeData::Qualifiers & qualifiers );
 
 static inline Type * maybeMoveBuildType( const DeclarationNode * orig ) {
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision ba7aa2de23109eea3961fea88a1aeeeb3989db22)
+++ src/Parser/TypeData.cc	(revision 1b7727498168639c89eefe42fd1a1772a41b30d1)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Sep 15 23:05:01 2016
-// Update Count     : 384
+// Last Modified On : Fri Sep 16 15:12:55 2016
+// Update Count     : 388
 //
 
@@ -763,19 +763,4 @@
 } // buildTypeof
 
-AttrType * buildAttr( const TypeData * td ) {
-	assert( false );
-	return nullptr;
-	// assert( td->kind == TypeData::Attr );
-	// // assert( td->attr );
-	// AttrType * ret;
-	// if ( td->attr.expr ) {
-	// 	ret = new AttrType( buildQualifiers( td ), td->attr.name, td->attr.expr->build() );
-	// } else {
-	// 	assert( td->attr.type );
-	// 	ret = new AttrType( buildQualifiers( td ), td->attr.name, td->attr.type->buildType() );
-	// } // if
-	// return ret;
-} // buildAttr
-
 Declaration * buildDecl( const TypeData * td, std::string name, DeclarationNode::StorageClass sc, Expression * bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Spec linkage, Initializer * init ) {
 	if ( td->kind == TypeData::Function ) {
@@ -795,6 +780,6 @@
 		} // if
 		for ( DeclarationNode * cur = td->function.idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_next() ) ) {
-			if ( cur->get_name() != "" ) {
-				decl->get_oldIdents().insert( decl->get_oldIdents().end(), cur->get_name() );
+			if ( cur->name != "" ) {
+				decl->get_oldIdents().insert( decl->get_oldIdents().end(), cur->name );
 			} // if
 		} // for
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision ba7aa2de23109eea3961fea88a1aeeeb3989db22)
+++ src/Parser/TypeData.h	(revision 1b7727498168639c89eefe42fd1a1772a41b30d1)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 12 17:15:49 2016
-// Update Count     : 129
+// Last Modified On : Fri Sep 16 15:17:31 2016
+// Update Count     : 131
 //
 
@@ -88,5 +88,4 @@
 		DeclarationNode * tuple;
 		ExpressionNode * typeexpr;
-		// Attr_t attr;
 		// DeclarationNode::BuiltinType builtin;
 
@@ -111,5 +110,4 @@
 TupleType * buildTuple( const TypeData * );
 TypeofType * buildTypeof( const TypeData * );
-AttrType * buildAttr( const TypeData * );
 Declaration * buildDecl( const TypeData *, std::string, DeclarationNode::StorageClass, Expression *, bool isInline, bool isNoreturn, LinkageSpec::Spec, Initializer * init = 0 );
 FunctionType * buildFunction( const TypeData * );
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision ba7aa2de23109eea3961fea88a1aeeeb3989db22)
+++ src/Parser/parser.yy	(revision 1b7727498168639c89eefe42fd1a1772a41b30d1)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 12 17:29:45 2016
-// Update Count     : 1969
+// Last Modified On : Fri Sep 16 18:12:21 2016
+// Update Count     : 1978
 //
 
@@ -359,5 +359,5 @@
 		{ $$ = $2; }
 	| '(' compound_statement ')'						// GCC, lambda expression
-	{ $$ = new ExpressionNode( build_valexpr( $2 ) ); }
+		{ $$ = new ExpressionNode( build_valexpr( $2 ) ); }
 	;
 
@@ -896,5 +896,5 @@
 		{ $$ = new StatementNode( build_catch( $5, $8 ) ); }
 	| handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop
-	{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
 	| CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
 		{ $$ = new StatementNode( build_catch( $5, $8 ) ); }
@@ -968,5 +968,5 @@
 		{ $$ = new ExpressionNode( build_asmexpr( 0, $1, $3 ) ); }
 	| '[' constant_expression ']' string_literal '(' constant_expression ')'
-	{ $$ = new ExpressionNode( build_asmexpr( $2, $4, $6 ) ); }
+		{ $$ = new ExpressionNode( build_asmexpr( $2, $4, $6 ) ); }
 	;
 
@@ -1467,5 +1467,5 @@
 aggregate_name:
 	aggregate_key '{' field_declaration_list '}'
-		{ $$ = DeclarationNode::newAggregate( $1, 0, 0, $3, true ); }
+		{ $$ = DeclarationNode::newAggregate( $1, new std::string( "" ), nullptr, $3, true ); }
 	| aggregate_key no_attr_identifier_or_type_name
 		{
@@ -1476,7 +1476,7 @@
 		{ typedefTable.makeTypedef( *$2 ); }
 		'{' field_declaration_list '}'
-		{ $$ = DeclarationNode::newAggregate( $1, $2, 0, $5, true ); }
+		{ $$ = DeclarationNode::newAggregate( $1, $2, nullptr, $5, true ); }
 	| aggregate_key '(' type_name_list ')' '{' field_declaration_list '}' // CFA
-		{ $$ = DeclarationNode::newAggregate( $1, 0, $3, $6, false ); }
+		{ $$ = DeclarationNode::newAggregate( $1, new std::string( "" ), $3, $6, false ); }
 	| aggregate_key typegen_name						// CFA, S/R conflict
 		{ $$ = $2; }
@@ -1559,5 +1559,5 @@
 enum_name:
 	enum_key '{' enumerator_list comma_opt '}'
-		{ $$ = DeclarationNode::newEnum( 0, $3 ); }
+		{ $$ = DeclarationNode::newEnum( new std::string( "" ), $3 ); }
 	| enum_key no_attr_identifier_or_type_name
 		{
@@ -2520,5 +2520,5 @@
 abstract_function:
 	'(' push parameter_type_list_opt pop ')'			// empty parameter list OBSOLESCENT (see 3)
-		{ $$ = DeclarationNode::newFunction( 0, 0, $3, 0 ); }
+		{ $$ = DeclarationNode::newFunction( new std::string( "" ), nullptr, $3, nullptr ); }
 	| '(' abstract_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
 		{ $$ = $2->addParamList( $6 ); }
@@ -2589,5 +2589,5 @@
 abstract_parameter_function:
 	'(' push parameter_type_list_opt pop ')'			// empty parameter list OBSOLESCENT (see 3)
-		{ $$ = DeclarationNode::newFunction( 0, 0, $3, 0 ); }
+		{ $$ = DeclarationNode::newFunction( new std::string( "" ), nullptr, $3, nullptr ); }
 	| '(' abstract_parameter_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
 		{ $$ = $2->addParamList( $6 ); }
@@ -2813,9 +2813,9 @@
 new_abstract_function:									// CFA
 	'[' ']' '(' new_parameter_type_list_opt ')'
-		{ $$ = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), $4, 0 ); }
+	{ $$ = DeclarationNode::newFunction( new std::string( "" ), DeclarationNode::newTuple( nullptr ), $4, nullptr ); }
 	| new_abstract_tuple '(' push new_parameter_type_list_opt pop ')'
-		{ $$ = DeclarationNode::newFunction( 0, $1, $4, 0 ); }
+		{ $$ = DeclarationNode::newFunction( new std::string( "" ), $1, $4, nullptr ); }
 	| new_function_return '(' push new_parameter_type_list_opt pop ')'
-		{ $$ = DeclarationNode::newFunction( 0, $1, $4, 0 ); }
+		{ $$ = DeclarationNode::newFunction( new std::string( "" ), $1, $4, nullptr ); }
 	;
 
