On 07/05/2011 03:07 PM, Paul Berry wrote:
Previously ir_reader was only able to handle return of non-void.

This patch is necessary in order to allow optimization passes to be
tested in isolation.
---
  src/glsl/ir_reader.cpp |   24 +++++++++++++-----------
  1 files changed, 13 insertions(+), 11 deletions(-)

I wasn't sure if we wanted "(return)" or just "return", but this seems entirely reasonable [(return) and (return foo) are nice and symmetric]. Plus it matches what the printer already does.

Thanks for catching this.

Reviewed-by: Kenneth Graunke <kenn...@whitecape.org>

diff --git a/src/glsl/ir_reader.cpp b/src/glsl/ir_reader.cpp
index 30df257..f3a6217 100644
--- a/src/glsl/ir_reader.cpp
+++ b/src/glsl/ir_reader.cpp
@@ -482,19 +482,21 @@ ir_reader::read_return(s_expression *expr)
  {
     s_expression *s_retval;

-   s_pattern pat[] = { "return", s_retval};
-   if (!MATCH(expr, pat)) {
-      ir_read_error(expr, "expected (return<rvalue>)");
-      return NULL;
-   }
-
-   ir_rvalue *retval = read_rvalue(s_retval);
-   if (retval == NULL) {
-      ir_read_error(NULL, "when reading return value");
+   s_pattern return_value_pat[] = { "return", s_retval};
+   s_pattern return_void_pat[] = { "return" };
+   if (MATCH(expr, return_value_pat)) {
+      ir_rvalue *retval = read_rvalue(s_retval);
+      if (retval == NULL) {
+         ir_read_error(NULL, "when reading return value");
+         return NULL;
+      }
+      return new(mem_ctx) ir_return(retval);
+   } else if (MATCH(expr, return_void_pat)) {
+      return new(mem_ctx) ir_return;
+   } else {
+      ir_read_error(expr, "expected (return<rvalue>) or (return)");
        return NULL;
     }
-
-   return new(mem_ctx) ir_return(retval);
  }



_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to