[Mesa-dev] [PATCH 14/23] glsl: Add an internal-error catch-all rule

Carl Worth cworth at cworth.org
Thu Jun 26 15:19:14 PDT 2014


This is to avoid the default, silent flex rule which simply prints the
character to stdout.
---
 src/glsl/glsl_lexer.ll | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/glsl/glsl_lexer.ll b/src/glsl/glsl_lexer.ll
index db7b1d1..1cadf1f 100644
--- a/src/glsl/glsl_lexer.ll
+++ b/src/glsl/glsl_lexer.ll
@@ -153,6 +153,9 @@ literal_integer(char *text, int len, struct _mesa_glsl_parse_state *state,
 %option prefix="_mesa_glsl_lexer_"
 %option extra-type="struct _mesa_glsl_parse_state *"
 
+	/* Note: When adding any start conditions to this list, you must also
+	 * update the "Internal compiler error" catch-all rule near the end of
+	 * this file. */
 %x PP PRAGMA
 
 DEC_INT		[1-9][0-9]*
@@ -555,6 +558,16 @@ subroutine	KEYWORD(0, 300, 0, 0, SUBROUTINE);
 
 .			{ return yytext[0]; }
 
+	/* This is a catch-all to avoid the annoying default flex action which
+	 * matches any character and prints it. If any input ever matches this
+	 * rule, then we have made a mistake above and need to fix one or more
+	 * of the preceding patterns to match that input. */
+<PP,PRAGMA>. {
+	_mesa_glsl_error(yylloc, yyextra,
+                         "Internal compiler error: Unexpected character: %s", yytext);
+}
+
+
 %%
 
 int
-- 
2.0.0



More information about the mesa-dev mailing list