Index: src/Parser/lex.cc
===================================================================
--- src/Parser/lex.cc	(revision 9b9679140d6a0e44be215f2f13589da50478b951)
+++ src/Parser/lex.cc	(revision f48796253086f286380820a4db1a40c0e294738d)
@@ -1469,6 +1469,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Tue Aug 16 22:34:31 2016
- * Update Count     : 460
+ * Last Modified On : Thu Aug 18 22:17:30 2016
+ * Update Count     : 472
  */
 #line 20 "lex.ll"
@@ -1480,4 +1480,5 @@
 
 #include <string>
+#include <cstdio>										// FILENAME_MAX
 
 #include "lex.h"
@@ -1494,8 +1495,8 @@
 #define RETURN_STR(x)		yylval.tok.str = strtext; RETURN_LOCN( x )
 
-#define WHITE_RETURN(x)									// do nothing
+#define WHITE_RETURN(x)		// do nothing
 #define NEWLINE_RETURN()	WHITE_RETURN( '\n' )
 #define ASCIIOP_RETURN()	RETURN_CHAR( (int)yytext[0] ) // single character operator
-#define NAMEDOP_RETURN(x)	RETURN_VAL( x )				// multichar operator, with a name
+#define NAMEDOP_RETURN(x)	RETURN_CHAR( x )			// multichar operator, with a name
 #define NUMERIC_RETURN(x)	rm_underscore(); RETURN_VAL( x ) // numeric constant
 #define KEYWORD_RETURN(x)	RETURN_CHAR( x )			// keyword
@@ -1531,5 +1532,5 @@
 
 
-#line 1534 "Parser/lex.cc"
+#line 1535 "Parser/lex.cc"
 
 #define INITIAL 0
@@ -1723,8 +1724,8 @@
 	register int yy_act;
     
-#line 138 "lex.ll"
+#line 139 "lex.ll"
 
 				   /* line directives */
-#line 1729 "Parser/lex.cc"
+#line 1730 "Parser/lex.cc"
 
 	if ( !(yy_init) )
@@ -1823,24 +1824,23 @@
 /* rule 1 can match eol */
 YY_RULE_SETUP
-#line 140 "lex.ll"
+#line 141 "lex.ll"
 {
 	/* " stop highlighting */
+	static char *filename[FILENAME_MAX];				// temporarily store current source-file name
 	char *end_num;
 	char *begin_string, *end_string;
-	char *filename;
 	long lineno, length;
 	lineno = strtol( yytext + 1, &end_num, 0 );
 	begin_string = strchr( end_num, '"' );
-	if ( begin_string ) {
-		end_string = strchr( begin_string + 1, '"' );
-		if ( end_string ) {
-			length = end_string - begin_string - 1;
-			filename = new char[ length + 1 ];
-			memcpy( filename, begin_string + 1, length );
-			filename[ length ] = '\0';
-			//std::cout << "file " << filename << " line " << lineno << std::endl;
-			yylineno = lineno;
-			yyfilename = filename;
-		} // if
+	if ( begin_string ) {								// file name ?
+		end_string = strchr( begin_string + 1, '"' );	// look for ending delimiter
+		assert( end_string );							// closing quote ?
+		length = end_string - begin_string - 1;			// file-name length without quotes or sentinel
+		assert( length < FILENAME_MAX );				// room for sentinel ?
+		memcpy( &filename, begin_string + 1, length );	// copy file name from yytext
+		filename[ length ] = '\0';						// terminate string with sentinel
+		//std::cout << "file " << filename << " line " << lineno << std::endl;
+		yylineno = lineno;
+		yyfilename = filename[0];
 	} // if
 }
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 9b9679140d6a0e44be215f2f13589da50478b951)
+++ src/Parser/lex.ll	(revision f48796253086f286380820a4db1a40c0e294738d)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Tue Aug 16 22:34:31 2016
- * Update Count     : 460
+ * Last Modified On : Thu Aug 18 22:17:30 2016
+ * Update Count     : 472
  */
 
@@ -25,4 +25,5 @@
 
 #include <string>
+#include <cstdio>										// FILENAME_MAX
 
 #include "lex.h"
@@ -39,8 +40,8 @@
 #define RETURN_STR(x)		yylval.tok.str = strtext; RETURN_LOCN( x )
 
-#define WHITE_RETURN(x)									// do nothing
+#define WHITE_RETURN(x)		// do nothing
 #define NEWLINE_RETURN()	WHITE_RETURN( '\n' )
 #define ASCIIOP_RETURN()	RETURN_CHAR( (int)yytext[0] ) // single character operator
-#define NAMEDOP_RETURN(x)	RETURN_VAL( x )				// multichar operator, with a name
+#define NAMEDOP_RETURN(x)	RETURN_CHAR( x )			// multichar operator, with a name
 #define NUMERIC_RETURN(x)	rm_underscore(); RETURN_VAL( x ) // numeric constant
 #define KEYWORD_RETURN(x)	RETURN_CHAR( x )			// keyword
@@ -140,21 +141,20 @@
 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" {
 	/* " stop highlighting */
+	static char *filename[FILENAME_MAX];				// temporarily store current source-file name
 	char *end_num;
 	char *begin_string, *end_string;
-	char *filename;
 	long lineno, length;
 	lineno = strtol( yytext + 1, &end_num, 0 );
 	begin_string = strchr( end_num, '"' );
-	if ( begin_string ) {
-		end_string = strchr( begin_string + 1, '"' );
-		if ( end_string ) {
-			length = end_string - begin_string - 1;
-			filename = new char[ length + 1 ];
-			memcpy( filename, begin_string + 1, length );
-			filename[ length ] = '\0';
-			//std::cout << "file " << filename << " line " << lineno << std::endl;
-			yylineno = lineno;
-			yyfilename = filename;
-		} // if
+	if ( begin_string ) {								// file name ?
+		end_string = strchr( begin_string + 1, '"' );	// look for ending delimiter
+		assert( end_string );							// closing quote ?
+		length = end_string - begin_string - 1;			// file-name length without quotes or sentinel
+		assert( length < FILENAME_MAX );				// room for sentinel ?
+		memcpy( &filename, begin_string + 1, length );	// copy file name from yytext
+		filename[ length ] = '\0';						// terminate string with sentinel
+		//std::cout << "file " << filename << " line " << lineno << std::endl;
+		yylineno = lineno;
+		yyfilename = filename[0];
 	} // if
 }
