Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 6926a6d7f7d25248636a86659e105cdffdbb320e)
+++ src/Parser/parser.yy	(revision 534d84ecf33237664da77b0cdc43872095a15533)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Apr 17 17:10:30 2018
-// Update Count     : 3144
+// Last Modified On : Sat Apr 28 09:37:03 2018
+// Update Count     : 3201
 //
 
@@ -133,5 +133,5 @@
 } // build_postfix_name
 
-bool forall = false;									// aggregate have one or more forall qualifiers ?
+bool forall = false, xxx = false;						// aggregate have one or more forall qualifiers ?
 
 // https://www.gnu.org/software/bison/manual/bison.html#Location-Type
@@ -282,5 +282,5 @@
 %type<decl> aggregate_type aggregate_type_nobody
 
-%type<decl> assertion assertion_list_opt
+%type<decl> assertion assertion_list assertion_list_opt
 
 %type<en>   bit_subrange_size_opt bit_subrange_size
@@ -1866,4 +1866,6 @@
 		{
 			typedefTable.makeTypedef( *$3 );
+			if ( forall ) typedefTable.changeKind( *$3, TypedefTable::TG ); // possibly update
+			forall = false;								// reset
 			$$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false )->addQualifiers( $2 );
 		}
@@ -2235,4 +2237,6 @@
 		{ $$ = DeclarationNode::newTypeParam( $1, $2 )->addTypeInitializer( $4 )->addAssertions( $5 ); }
 	| type_specifier identifier_parameter_declarator
+	| assertion_list
+		{ $$ = DeclarationNode::newTypeParam( DeclarationNode::Dtype, new string( DeclarationNode::anonymous.newName() ) )->addAssertions( $1 ); }
 	;
 
@@ -2251,5 +2255,10 @@
 	// empty
 		{ $$ = nullptr; }
-	| assertion_list_opt assertion
+	| assertion_list
+	;
+
+assertion_list:											// CFA
+	assertion
+	| assertion_list assertion
 		{ $$ = $1 ? $1->appendList( $2 ) : $2; }
 	;
@@ -2378,6 +2387,6 @@
 external_definition_list:
 	external_definition
-	| external_definition_list push external_definition
-		{ $$ = $1 ? $1->appendList( $3 ) : $3; }
+	| external_definition_list { forall = xxx; } push external_definition
+		{ $$ = $1 ? $1->appendList( $4 ) : $4; }
 	;
 
@@ -2411,5 +2420,45 @@
 			$$ = $2;
 		}
-	| type_qualifier_list '{' external_definition_list '}'			// CFA, namespace
+	| type_qualifier_list
+		{
+			if ( $1->type->forall ) xxx = forall = true; // remember generic type
+		}
+	  push '{' external_definition_list '}'				// CFA, namespace
+		{
+			for ( DeclarationNode * iter = $5; iter != nullptr; iter = (DeclarationNode *)iter->get_next() ) {
+				iter->addQualifiers( $1->clone() );
+			} // for
+ 			xxx = false;
+			delete $1;
+			$$ = $5;
+		}
+	| declaration_qualifier_list
+		{
+			if ( $1->type->forall ) xxx = forall = true; // remember generic type
+		}
+	  push '{' external_definition_list '}'				// CFA, namespace
+		{
+			for ( DeclarationNode * iter = $5; iter != nullptr; iter = (DeclarationNode *)iter->get_next() ) {
+				iter->addQualifiers( $1->clone() );
+			} // for
+ 			xxx = false;
+			delete $1;
+			$$ = $5;
+		}
+	| declaration_qualifier_list type_qualifier_list
+		{
+			if ( $1->type->forall ) xxx = forall = true; // remember generic type
+		}
+	  push '{' external_definition_list '}'				// CFA, namespace
+		{
+			for ( DeclarationNode * iter = $6; iter != nullptr; iter = (DeclarationNode *)iter->get_next() ) {
+				iter->addQualifiers( $1->clone() );
+				iter->addQualifiers( $2->clone() );
+			} // for
+ 			xxx = false;
+			delete $1;
+			delete $2;
+			$$ = $6;
+		}
 	;
 
@@ -2437,7 +2486,7 @@
 with_clause_opt:
 	// empty
-		{ $$ = nullptr; }
+		{ $$ = nullptr; forall = false; }
 	| WITH '(' tuple_expression_list ')'
-		{ $$ = $3; }
+		{ $$ = $3; forall = false; }
 	;
 
