Index: src/Parser/ExpressionNode.cpp
===================================================================
--- src/Parser/ExpressionNode.cpp	(revision a16f2b6aa2dbe75a4f385cb3a76b9b6159ebea02)
+++ src/Parser/ExpressionNode.cpp	(revision 2853d6fb02befcb65b90aa2717750f5b7e57ad95)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Sep 12 22:40:35 2024
-// Update Count     : 1090
+// Last Modified On : Mon Dec 16 20:50:27 2024
+// Update Count     : 1110
 //
 
@@ -162,8 +162,8 @@
 		lnthSuffix( str, type, ltype );					// could have length suffix
 	} else {
-		// At least one digit in integer constant, so safe to backup while looking for suffix.
-		// This declaration and the comma expressions in the conditions mimic
-		// the declare and check pattern allowed in later compiler versions.
-		// (Only some early compilers/C++ standards do not support it.)
+		// At least one digit in integer constant, so safe to backup while looking for suffix.  This
+		// declaration and the comma expressions in the conditions mimic the declare and check
+		// pattern allowed in later compiler versions.  (Only some early compilers/C++ standards do
+		// not support it.)
 		string::size_type posn;
 		// pointer value
@@ -465,6 +465,6 @@
 }
 
-// A "sequence" is the series of characters in a character/string literal
-// that becomes a single character value in the runtime value.
+// A "sequence" is the series of characters in a character/string literal that becomes a single
+// character value in the runtime value.
 static size_t sequenceLength( const std::string & str, size_t pos ) {
 	// Most "sequences" are just a single character, filter those out:
@@ -497,10 +497,8 @@
 		assertf( false, "Unknown escape sequence (start %c).", str[pos] );
 		return 1;
-	}
+	} // switch
 }
 
-ast::Expr * build_constantStr(
-		const CodeLocation & location,
-		string & str ) {
+ast::Expr * build_constantStr( const CodeLocation & location, string & str ) {
 	assert( str.length() > 0 );
 	string units;										// units
@@ -525,23 +523,25 @@
 	} // switch
 
-	// The dimension value of the type is equal to the number of "sequences"
-	// not including the openning and closing quotes in the literal plus 1
-	// for the implicit null terminator.
-	size_t dimension = 1;
-	for ( size_t pos = 1 ; pos < str.size() - 1 ;
-			pos += sequenceLength( str, pos ) ) {
-		dimension += 1;
-	}
+	// The length value of the type is equal to the number of "sequences" not including the openning
+	// and closing quotes in the literal plus 1 for the implicit null terminator.
+	size_t length = 1;
+	for ( size_t pos = 1 ; pos < str.size() - 1 ; pos += sequenceLength( str, pos ) ) {
+		if ( '"' == str[pos] ) {						// concatenated strings ? "ABC" "DEF"
+			int cnt = 1;								// skip outside quotes and space between
+			for ( unsigned int i = pos + 1; str[i] != '"'; i += 1, cnt += 1 );
+			pos += cnt;
+			continue;									// not part of length
+		} // if
+		length += 1;
+	} // for
 
 	ast::ArrayType * at = new ast::ArrayType(
 		strtype,
-		ast::ConstantExpr::from_ulong( location, dimension ),
+		ast::ConstantExpr::from_ulong( location, length ),
 		ast::FixedLen,
 		ast::DynamicDim );
 	ast::Expr * ret = new ast::ConstantExpr( location, at, str, std::nullopt );
 	if ( units.length() != 0 ) {
-		ret = new ast::UntypedExpr( location,
-			new ast::NameExpr( location, units ),
-			{ ret } );
+		ret = new ast::UntypedExpr( location, new ast::NameExpr( location, units ),	{ ret } );
 	} // if
 
