Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 07771bcc1ea0f1cac935125bd5815f2f63111193)
+++ src/Parser/parser.yy	(revision 3b693980acdd9998e43ab2d670428143c51a1c7f)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun 17 21:43:02 2024
-// Update Count     : 6643
+// Last Modified On : Thu Jun 20 21:34:49 2024
+// Update Count     : 6654
 //
 
@@ -302,5 +302,5 @@
 		} // if
 	} else {
-		SemanticError( yylloc, "syntax error, loop-index name missing. Expression disallowed." ); return nullptr;
+		assert( false );
 	} // if
 } // enumRangeCtrl
@@ -390,5 +390,5 @@
 %token DECIMAL32 DECIMAL64 DECIMAL128					// GCC
 %token ZERO_T ONE_T										// CFA
-%token SIZEOF TYPEOF VA_LIST VA_ARG AUTO_TYPE COUNT		// GCC
+%token SIZEOF TYPEOF VA_LIST VA_ARG AUTO_TYPE COUNTOF	// GCC
 %token OFFSETOF BASETYPEOF TYPEID						// CFA
 %token ENUM STRUCT UNION
@@ -508,5 +508,5 @@
 %type<decl> elaborated_type elaborated_type_nobody
 
-%type<decl> enumerator_list enum_type enum_type_nobody enumerator_type
+%type<decl> enumerator_list enum_type enum_type_nobody enum_key enumerator_type
 %type<init> enumerator_value_opt
 
@@ -990,9 +990,8 @@
 			// $$ = new ExpressionNode( build_offsetOf( $3, build_varref( $5 ) ) );
 		}
-	| COUNT '(' type ')'
-		{
-			// SemanticError( yylloc, "Count is currently unimplemented. "); $$ = nullptr;
-			$$ = new ExpressionNode( new ast::CountExpr( yylloc, maybeMoveBuildType( $3 ) ) );
-		}
+	| COUNTOF '(' type_no_function ')'
+		{ $$ = new ExpressionNode( new ast::CountExpr( yylloc, maybeMoveBuildType( $3 ) ) ); }
+	| COUNTOF unary_expression
+		{ SemanticError( yylloc, "countof for expressions is currently unimplemented. "); $$ = nullptr; }
 	;
 
@@ -1626,9 +1625,9 @@
 		{ SemanticError( yylloc, "syntax error, missing low/high value for up/down-to range so index is uninitialized." ); $$ = nullptr; }
 
-	| comma_expression ';' enum_type					// CFA, enum type
-		{
-			$$ = enumRangeCtrl( $1, new ExpressionNode( new ast::TypeExpr(yylloc, $3->buildType() ) ) );
-		}
-	| comma_expression ';' downupdowneq enum_type		// CFA, enum type, reverse direction
+	| comma_expression ';' enum_key						// CFA, enum type
+		{
+			$$ = enumRangeCtrl( $1, new ExpressionNode( new ast::TypeExpr( yylloc, $3->buildType() ) ) );
+		}
+	| comma_expression ';' downupdowneq enum_key		// CFA, enum type, reverse direction
 		{
 			if ( $3 == OperKinds::LEThan || $3 == OperKinds::GEThan ) {
@@ -1637,4 +1636,13 @@
 			SemanticError( yylloc, "Type iterator is currently unimplemented." ); $$ = nullptr;
 		}
+	;
+
+enum_key:
+	type_name
+		{ $$ = DeclarationNode::newEnum( $1->symbolic.name, nullptr, false, false ); }
+	| ENUM identifier
+		{ $$ = DeclarationNode::newEnum( $2, nullptr, false, false ); }
+	| ENUM type_name
+		{ $$ = DeclarationNode::newEnum( $2->symbolic.name, nullptr, false, false ); }
 	;
 
