Mesa (master): glsl/glcpp: Once again report undefined macro name in error message.

Carl Worth cworth at kemper.freedesktop.org
Wed Jul 9 19:05:35 UTC 2014


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

Author: Carl Worth <cworth at cworth.org>
Date:   Fri Jun 13 15:16:05 2014 -0700

glsl/glcpp: Once again report undefined macro name in error message.

While writing the previous commit message, I just felt bad documenting the
shortcoming of the change, (that undefined macro names would not be reported
in error messages).

Fix this by preserving the first-encounterd undefined macro name and reporting
that in any resulting error message.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/glsl/glcpp/glcpp-parse.y                       |  118 ++++++++++++++------
 src/glsl/glcpp/glcpp.h                             |    2 +-
 .../125-es-short-circuit-undefined.c.expected      |    4 +-
 3 files changed, 86 insertions(+), 38 deletions(-)

diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y
index 68e4ace..2679401 100644
--- a/src/glsl/glcpp/glcpp-parse.y
+++ b/src/glsl/glcpp/glcpp-parse.y
@@ -217,13 +217,13 @@ line:
 
 expanded_line:
 	IF_EXPANDED expression NEWLINE {
-		if (parser->is_gles && $2.has_undefined)
-			glcpp_error(& @1, parser, "undefined macro in expression (illegal in GLES)");
+		if (parser->is_gles && $2.undefined_macro)
+			glcpp_error(& @1, parser, "undefined macro %s in expression (illegal in GLES)", $2.undefined_macro);
 		_glcpp_parser_skip_stack_push_if (parser, & @1, $2.value);
 	}
 |	ELIF_EXPANDED expression NEWLINE {
-		if (parser->is_gles && $2.has_undefined)
-			glcpp_error(& @1, parser, "undefined macro in expression (illegal in GLES)");
+		if (parser->is_gles && $2.undefined_macro)
+			glcpp_error(& @1, parser, "undefined macro %s in expression (illegal in GLES)", $2.undefined_macro);
 		_glcpp_parser_skip_stack_change_if (parser, & @1, "elif", $2.value);
 	}
 |	LINE_EXPANDED integer_constant NEWLINE {
@@ -419,14 +419,14 @@ integer_constant:
 expression:
 	integer_constant {
 		$$.value = $1;
-		$$.has_undefined = false;
+		$$.undefined_macro = NULL;
 	}
 |	IDENTIFIER {
 		$$.value = 0;
 		if (parser->is_gles)
-			$$.has_undefined = true;
+			$$.undefined_macro = ralloc_strdup (parser, $1);
 		else
-			$$.has_undefined = false;
+			$$.undefined_macro = NULL;
 	}
 |	expression OR expression {
 		$$.value = $1.value || $3.value;
@@ -434,10 +434,10 @@ expression:
 		/* Short-circuit: Only flag undefined from right side
 		 * if left side evaluates to false.
 		 */
-		if ($1.value)
-			$$.has_undefined = $1.has_undefined;
-		else
-			$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else if (! $1.value)
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression AND expression {
 		$$.value = $1.value && $3.value;
@@ -445,62 +445,101 @@ expression:
 		/* Short-circuit: Only flag undefined from right-side
 		 * if left side evaluates to true.
 		 */
-		if ($1.value)
-			$$.has_undefined = $1.has_undefined || $3.has_undefined;
-		else
-			$$.has_undefined = $1.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else if ($1.value)
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression '|' expression {
 		$$.value = $1.value | $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression '^' expression {
 		$$.value = $1.value ^ $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression '&' expression {
 		$$.value = $1.value & $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression NOT_EQUAL expression {
 		$$.value = $1.value != $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression EQUAL expression {
 		$$.value = $1.value == $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression GREATER_OR_EQUAL expression {
 		$$.value = $1.value >= $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression LESS_OR_EQUAL expression {
 		$$.value = $1.value <= $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression '>' expression {
 		$$.value = $1.value > $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression '<' expression {
 		$$.value = $1.value < $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression RIGHT_SHIFT expression {
 		$$.value = $1.value >> $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression LEFT_SHIFT expression {
 		$$.value = $1.value << $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression '-' expression {
 		$$.value = $1.value - $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression '+' expression {
 		$$.value = $1.value + $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression '%' expression {
 		if ($3.value == 0) {
@@ -509,7 +548,10 @@ expression:
 		} else {
 			$$.value = $1.value % $3.value;
 		}
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression '/' expression {
 		if ($3.value == 0) {
@@ -518,27 +560,33 @@ expression:
 		} else {
 			$$.value = $1.value / $3.value;
 		}
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	expression '*' expression {
 		$$.value = $1.value * $3.value;
-		$$.has_undefined = $1.has_undefined || $3.has_undefined;
+		if ($1.undefined_macro)
+			$$.undefined_macro = $1.undefined_macro;
+                else
+			$$.undefined_macro = $3.undefined_macro;
 	}
 |	'!' expression %prec UNARY {
 		$$.value = ! $2.value;
-		$$.has_undefined = $2.has_undefined;
+		$$.undefined_macro = $2.undefined_macro;
 	}
 |	'~' expression %prec UNARY {
 		$$.value = ~ $2.value;
-		$$.has_undefined = $2.has_undefined;
+		$$.undefined_macro = $2.undefined_macro;
 	}
 |	'-' expression %prec UNARY {
 		$$.value = - $2.value;
-		$$.has_undefined = $2.has_undefined;
+		$$.undefined_macro = $2.undefined_macro;
 	}
 |	'+' expression %prec UNARY {
 		$$.value = + $2.value;
-		$$.has_undefined = $2.has_undefined;
+		$$.undefined_macro = $2.undefined_macro;
 	}
 |	'(' expression ')' {
 		$$ = $2;
diff --git a/src/glsl/glcpp/glcpp.h b/src/glsl/glcpp/glcpp.h
index 9783210..64b4872 100644
--- a/src/glsl/glcpp/glcpp.h
+++ b/src/glsl/glcpp/glcpp.h
@@ -39,7 +39,7 @@
 
 typedef struct expression_value {
 	intmax_t value;
-	bool has_undefined;
+	char *undefined_macro;
 } expression_value_t;
    
 
diff --git a/src/glsl/glcpp/tests/125-es-short-circuit-undefined.c.expected b/src/glsl/glcpp/tests/125-es-short-circuit-undefined.c.expected
index a52dae8..93bcffb 100644
--- a/src/glsl/glcpp/tests/125-es-short-circuit-undefined.c.expected
+++ b/src/glsl/glcpp/tests/125-es-short-circuit-undefined.c.expected
@@ -1,5 +1,5 @@
-0:10(16): preprocessor error: undefined macro in expression (illegal in GLES)
-0:14(23): preprocessor error: undefined macro in expression (illegal in GLES)
+0:10(16): preprocessor error: undefined macro NOT_DEFINED in expression (illegal in GLES)
+0:14(23): preprocessor error: undefined macro ALSO_NOT_DEFINED in expression (illegal in GLES)
  
 
 




More information about the mesa-commit mailing list