diff options
-rw-r--r-- | src/glsl/glsl_lexer.lpp | 24 | ||||
-rw-r--r-- | 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 3128cdd3a78..1de1fb4cf7c 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 4b6d9fe7eaa..6d99c52503e 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: |