Mesa (master): glsl2: Parse #pragma lines

Ian Romanick idr at kemper.freedesktop.org
Mon Aug 30 19:58:15 UTC 2010


Module: Mesa
Branch: master
Commit: bea3963f59fb8da0687c3e3fbc6f15de8be7fddb
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=bea3963f59fb8da0687c3e3fbc6f15de8be7fddb

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Mon Aug 30 11:58:04 2010 -0700

glsl2: Parse #pragma lines

All pragmas are currently ignored.  Also, the error messages when a
pragma is used incorrectly (i.e., '#pragma debug(on)' inside a
function) are crap, but I think this is sufficient for now.

Fixes piglit test cases pragma-0[1-8].(vert|frag).

---

 src/glsl/glsl_lexer.lpp  |   24 ++++++++++++++++++++++--
 src/glsl/glsl_parser.ypp |   12 +++++++++++-
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/src/glsl/glsl_lexer.lpp b/src/glsl/glsl_lexer.lpp
index 3128cdd..1de1fb4 100644
--- a/src/glsl/glsl_lexer.lpp
+++ b/src/glsl/glsl_lexer.lpp
@@ -64,7 +64,7 @@
 %option prefix="_mesa_glsl_"
 %option extra-type="struct _mesa_glsl_parse_state *"
 
-%x PP
+%x PP PRAGMA
 
 DEC_INT		[1-9][0-9]*
 HEX_INT		0[xX][0-9a-fA-F]+
@@ -110,7 +110,27 @@ HASH		^{SPC}#{SPC}
 				    */
 				   yylineno = strtol(ptr, &ptr, 0) - 1;
 				}
-^[ \t]*#[ \t]*pragma		{ BEGIN PP; return PRAGMA; }
+^{SPC}#{SPC}pragma{SPCP}debug{SPC}\({SPC}on{SPC}\) {
+				  BEGIN PP;
+				  return PRAGMA_DEBUG_ON;
+				}
+^{SPC}#{SPC}pragma{SPCP}debug{SPC}\({SPC}off{SPC}\) {
+				  BEGIN PP;
+				  return PRAGMA_DEBUG_OFF;
+				}
+^{SPC}#{SPC}pragma{SPCP}optimize{SPC}\({SPC}on{SPC}\) {
+				  BEGIN PP;
+				  return PRAGMA_OPTIMIZE_ON;
+				}
+^{SPC}#{SPC}pragma{SPCP}optimize{SPC}\({SPC}off{SPC}\) {
+				  BEGIN PP;
+				  return PRAGMA_OPTIMIZE_OFF;
+				}
+^{SPC}#{SPC}pragma{SPCP}	{ BEGIN PRAGMA; }
+
+<PRAGMA>\n			{ BEGIN 0; yylineno++; yycolumn = 0; }
+<PRAGMA>.			{ }
+
 <PP>\/\/[^\n]*			{ }
 <PP>[ \t\r]*			{ }
 <PP>:				return COLON;
diff --git a/src/glsl/glsl_parser.ypp b/src/glsl/glsl_parser.ypp
index 4b6d9fe..6d99c52 100644
--- a/src/glsl/glsl_parser.ypp
+++ b/src/glsl/glsl_parser.ypp
@@ -103,7 +103,9 @@
 %token INVARIANT
 %token LOWP MEDIUMP HIGHP SUPERP PRECISION
 
-%token VERSION EXTENSION LINE PRAGMA COLON EOL INTERFACE OUTPUT
+%token VERSION EXTENSION LINE COLON EOL INTERFACE OUTPUT
+%token PRAGMA_DEBUG_ON PRAGMA_DEBUG_OFF
+%token PRAGMA_OPTIMIZE_ON PRAGMA_OPTIMIZE_OFF
 %token LAYOUT_TOK
 
    /* Reserved words that are not actually used in the grammar.
@@ -236,6 +238,13 @@ version_statement:
 	}
 	;
 
+pragma_statement:
+	PRAGMA_DEBUG_ON EOL
+	| PRAGMA_DEBUG_OFF EOL
+	| PRAGMA_OPTIMIZE_ON EOL
+	| PRAGMA_OPTIMIZE_OFF EOL
+	;
+
 extension_statement_list:
 
 	| extension_statement_list extension_statement
@@ -1496,6 +1505,7 @@ jump_statement:
 external_declaration:
 	function_definition	{ $$ = $1; }
 	| declaration		{ $$ = $1; }
+	| pragma_statement	{ $$ = NULL; }
 	;
 
 function_definition:




More information about the mesa-commit mailing list