glsl: remove remaining is_array variables
authorTimothy Arceri <t_arceri@yahoo.com.au>
Thu, 23 Jan 2014 12:22:01 +0000 (23:22 +1100)
committerTimothy Arceri <t_arceri@yahoo.com.au>
Thu, 23 Jan 2014 12:37:37 +0000 (23:37 +1100)
Previously the reason we needed is_array was because we used array_size == NULL to
 represent both non-arrays and unsized arrays.  Now that we use a non-NULL
array_specifier to represent an unsized array, is_array is redundant.

Signed-off-by: Timothy Arceri <t_arceri@yahoo.com.au>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
src/glsl/ast.h
src/glsl/ast_to_hir.cpp
src/glsl/ast_type.cpp
src/glsl/glsl_parser.yy
src/glsl/glsl_parser_extras.cpp

index d462dd5976347d2cdaffb8c732f307fde18c5eec..0bda28d20dd41ecba0afa580878368e6854bfa0f 100644 (file)
@@ -371,14 +371,13 @@ public:
 
 class ast_declaration : public ast_node {
 public:
-   ast_declaration(const char *identifier, bool is_array,
+   ast_declaration(const char *identifier,
                    ast_array_specifier *array_specifier,
                    ast_expression *initializer);
    virtual void print(void) const;
 
    const char *identifier;
-   
-   bool is_array;
+
    ast_array_specifier *array_specifier;
 
    ast_expression *initializer;
@@ -588,10 +587,10 @@ public:
     * Use only if the objects are allocated from the same context and will not
     * be modified. Zeros the inherited ast_node's fields.
     */
-   ast_type_specifier(const ast_type_specifier *that, bool is_array,
+   ast_type_specifier(const ast_type_specifier *that,
                       ast_array_specifier *array_specifier)
       : ast_node(), type_name(that->type_name), structure(that->structure),
-        is_array(is_array), array_specifier(array_specifier),
+        array_specifier(array_specifier),
         default_precision(that->default_precision)
    {
       /* empty */
@@ -599,8 +598,7 @@ public:
 
    /** Construct a type specifier from a type name */
    ast_type_specifier(const char *name) 
-      : type_name(name), structure(NULL),
-       is_array(false), array_specifier(NULL),
+      : type_name(name), structure(NULL), array_specifier(NULL),
        default_precision(ast_precision_none)
    {
       /* empty */
@@ -608,8 +606,7 @@ public:
 
    /** Construct a type specifier from a structure definition */
    ast_type_specifier(ast_struct_specifier *s)
-      : type_name(s->name), structure(s),
-       is_array(false), array_specifier(NULL),
+      : type_name(s->name), structure(s), array_specifier(NULL),
        default_precision(ast_precision_none)
    {
       /* empty */
@@ -626,7 +623,6 @@ public:
    const char *type_name;
    ast_struct_specifier *structure;
 
-   bool is_array;
    ast_array_specifier *array_specifier;
 
    /** For precision statements, this is the given precision; otherwise none. */
@@ -680,7 +676,6 @@ public:
    ast_parameter_declarator() :
       type(NULL),
       identifier(NULL),
-      is_array(false),
       array_specifier(NULL),
       formal_parameter(false),
       is_void(false)
@@ -695,7 +690,6 @@ public:
 
    ast_fully_specified_type *type;
    const char *identifier;
-   bool is_array;
    ast_array_specifier *array_specifier;
 
    static void parameters_to_hir(exec_list *ast_parameters,
@@ -943,13 +937,10 @@ class ast_interface_block : public ast_node {
 public:
    ast_interface_block(ast_type_qualifier layout,
                        const char *instance_name,
-                       bool is_array,
                        ast_array_specifier *array_specifier)
    : layout(layout), block_name(NULL), instance_name(instance_name),
-     is_array(is_array), array_specifier(array_specifier)
+     array_specifier(array_specifier)
    {
-      if (!is_array)
-         assert(array_specifier == NULL);
    }
 
    virtual ir_rvalue *hir(exec_list *instructions,
@@ -969,15 +960,6 @@ public:
    /** List of ast_declarator_list * */
    exec_list declarations;
 
-   /**
-    * True if the block is declared as an array
-    *
-    * \note
-    * A block can only be an array if it also has an instance name.  If this
-    * field is true, ::instance_name must also not be \c NULL.
-    */
-   bool is_array;
-
    /**
     * Declared array size of the block instance
     *
index f13ac51c164f534417502141d6009e6388b68438..c71078ede1eca50ebf9e56d6ffb2b47aa0e7518f 100644 (file)
@@ -2874,7 +2874,6 @@ ast_declarator_list::hir(exec_list *instructions,
       }
 
       foreach_list_typed (ast_declaration, decl, link, &this->declarations) {
-        assert(!decl->is_array);
         assert(decl->array_specifier == NULL);
         assert(decl->initializer == NULL);
 
@@ -4507,7 +4506,7 @@ ast_type_specifier::hir(exec_list *instructions,
          return NULL;
       }
 
-      if (this->is_array) {
+      if (this->array_specifier != NULL) {
          _mesa_glsl_error(&loc, state,
                           "default precision statements do not apply to "
                           "arrays");
@@ -4924,7 +4923,7 @@ ast_interface_block::hir(exec_list *instructions,
                              _mesa_shader_stage_to_string(state->stage));
          }
          if (this->instance_name == NULL ||
-             strcmp(this->instance_name, "gl_in") != 0 || !this->is_array) {
+             strcmp(this->instance_name, "gl_in") != 0 || this->array_specifier == NULL) {
             _mesa_glsl_error(&loc, state,
                              "gl_PerVertex input must be redeclared as "
                              "gl_in[]");
@@ -5026,7 +5025,7 @@ ast_interface_block::hir(exec_list *instructions,
     *     variable (or input block, see interface blocks below) needs to be
     *     declared as an array.
     */
-   if (state->stage == MESA_SHADER_GEOMETRY && !this->is_array &&
+   if (state->stage == MESA_SHADER_GEOMETRY && this->array_specifier == NULL &&
        var_mode == ir_var_shader_in) {
       _mesa_glsl_error(&loc, state, "geometry shader inputs must be arrays");
    }
@@ -5060,7 +5059,7 @@ ast_interface_block::hir(exec_list *instructions,
 
       ir_variable *var;
 
-      if (this->is_array) {
+      if (this->array_specifier != NULL) {
          /* Section 4.3.7 (Interface Blocks) of the GLSL 1.50 spec says:
           *
           *     For uniform blocks declared an array, each individual array
@@ -5121,7 +5120,7 @@ ast_interface_block::hir(exec_list *instructions,
       /* In order to have an array size, the block must also be declared with
        * an instane name.
        */
-      assert(!this->is_array);
+      assert(this->array_specifier == NULL);
 
       for (unsigned i = 0; i < num_variables; i++) {
          ir_variable *var =
index 0dd1180c37f02e5c5368a7ac154cadb17c1073b0..637da0dfb7c8c156019e61e6414384a7493defc8 100644 (file)
@@ -32,10 +32,8 @@ ast_type_specifier::print(void) const
       printf("%s ", type_name);
    }
 
-   if (is_array) {
-      if (array_specifier) {
-         array_specifier->print();
-      }
+   if (array_specifier) {
+      array_specifier->print();
    }
 }
 
index 2786e9209220ae679b597763d91c3e64cc54af34..928c57e20d1764a897726e4b7190ec19322329b2 100644 (file)
@@ -977,7 +977,7 @@ init_declarator_list:
    | init_declarator_list ',' any_identifier
    {
       void *ctx = state;
-      ast_declaration *decl = new(ctx) ast_declaration($3, false, NULL, NULL);
+      ast_declaration *decl = new(ctx) ast_declaration($3, NULL, NULL);
       decl->set_location(yylloc);
 
       $$ = $1;
@@ -987,7 +987,7 @@ init_declarator_list:
    | init_declarator_list ',' any_identifier array_specifier
    {
       void *ctx = state;
-      ast_declaration *decl = new(ctx) ast_declaration($3, true, $4, NULL);
+      ast_declaration *decl = new(ctx) ast_declaration($3, $4, NULL);
       decl->set_location(yylloc);
 
       $$ = $1;
@@ -997,7 +997,7 @@ init_declarator_list:
    | init_declarator_list ',' any_identifier array_specifier '=' initializer
    {
       void *ctx = state;
-      ast_declaration *decl = new(ctx) ast_declaration($3, true, $4, $6);
+      ast_declaration *decl = new(ctx) ast_declaration($3, $4, $6);
       decl->set_location(yylloc);
 
       $$ = $1;
@@ -1007,7 +1007,7 @@ init_declarator_list:
    | init_declarator_list ',' any_identifier '=' initializer
    {
       void *ctx = state;
-      ast_declaration *decl = new(ctx) ast_declaration($3, false, NULL, $5);
+      ast_declaration *decl = new(ctx) ast_declaration($3, NULL, $5);
       decl->set_location(yylloc);
 
       $$ = $1;
@@ -1028,7 +1028,7 @@ single_declaration:
    | fully_specified_type any_identifier
    {
       void *ctx = state;
-      ast_declaration *decl = new(ctx) ast_declaration($2, false, NULL, NULL);
+      ast_declaration *decl = new(ctx) ast_declaration($2, NULL, NULL);
 
       $$ = new(ctx) ast_declarator_list($1);
       $$->set_location(yylloc);
@@ -1037,7 +1037,7 @@ single_declaration:
    | fully_specified_type any_identifier array_specifier
    {
       void *ctx = state;
-      ast_declaration *decl = new(ctx) ast_declaration($2, true, $3, NULL);
+      ast_declaration *decl = new(ctx) ast_declaration($2, $3, NULL);
 
       $$ = new(ctx) ast_declarator_list($1);
       $$->set_location(yylloc);
@@ -1046,7 +1046,7 @@ single_declaration:
    | fully_specified_type any_identifier array_specifier '=' initializer
    {
       void *ctx = state;
-      ast_declaration *decl = new(ctx) ast_declaration($2, true, $3, $5);
+      ast_declaration *decl = new(ctx) ast_declaration($2, $3, $5);
 
       $$ = new(ctx) ast_declarator_list($1);
       $$->set_location(yylloc);
@@ -1055,7 +1055,7 @@ single_declaration:
    | fully_specified_type any_identifier '=' initializer
    {
       void *ctx = state;
-      ast_declaration *decl = new(ctx) ast_declaration($2, false, NULL, $4);
+      ast_declaration *decl = new(ctx) ast_declaration($2, NULL, $4);
 
       $$ = new(ctx) ast_declarator_list($1);
       $$->set_location(yylloc);
@@ -1064,7 +1064,7 @@ single_declaration:
    | INVARIANT variable_identifier // Vertex only.
    {
       void *ctx = state;
-      ast_declaration *decl = new(ctx) ast_declaration($2, false, NULL, NULL);
+      ast_declaration *decl = new(ctx) ast_declaration($2, NULL, NULL);
 
       $$ = new(ctx) ast_declarator_list(NULL);
       $$->set_location(yylloc);
@@ -1771,13 +1771,13 @@ struct_declarator:
    any_identifier
    {
       void *ctx = state;
-      $$ = new(ctx) ast_declaration($1, false, NULL, NULL);
+      $$ = new(ctx) ast_declaration($1, NULL, NULL);
       $$->set_location(yylloc);
    }
    | any_identifier array_specifier
    {
       void *ctx = state;
-      $$ = new(ctx) ast_declaration($1, true, $2, NULL);
+      $$ = new(ctx) ast_declaration($1, $2, NULL);
       $$->set_location(yylloc);
    }
    ;
@@ -1935,7 +1935,7 @@ condition:
    | fully_specified_type any_identifier '=' initializer
    {
       void *ctx = state;
-      ast_declaration *decl = new(ctx) ast_declaration($2, false, NULL, $4);
+      ast_declaration *decl = new(ctx) ast_declaration($2, NULL, $4);
       ast_declarator_list *declarator = new(ctx) ast_declarator_list($1);
       decl->set_location(yylloc);
       declarator->set_location(yylloc);
@@ -2270,17 +2270,17 @@ instance_name_opt:
    /* empty */
    {
       $$ = new(state) ast_interface_block(*state->default_uniform_qualifier,
-                                          NULL, false, NULL);
+                                          NULL, NULL);
    }
    | NEW_IDENTIFIER
    {
       $$ = new(state) ast_interface_block(*state->default_uniform_qualifier,
-                                          $1, false, NULL);
+                                          $1, NULL);
    }
    | NEW_IDENTIFIER array_specifier
    {
       $$ = new(state) ast_interface_block(*state->default_uniform_qualifier,
-                                          $1, true, $2);
+                                          $1, $2);
    }
    ;
 
index ceb42b617221e42bba498abc5f88bc3033099981..ba1c969724dd10b1988398fc466f8b9c60364e8b 100644 (file)
@@ -790,12 +790,10 @@ ast_node::ast_node(void)
 
 
 static void
-ast_opt_array_dimensions_print(bool is_array, const ast_array_specifier *array_specifier)
+ast_opt_array_dimensions_print(const ast_array_specifier *array_specifier)
 {
-   if (is_array) {
-      if (array_specifier)
-         array_specifier->print();
-   }
+   if (array_specifier)
+      array_specifier->print();
 }
 
 
@@ -1018,7 +1016,7 @@ ast_parameter_declarator::print(void) const
    type->print();
    if (identifier)
       printf("%s ", identifier);
-   ast_opt_array_dimensions_print(is_array, array_specifier);
+   ast_opt_array_dimensions_print(array_specifier);
 }
 
 
@@ -1034,7 +1032,7 @@ void
 ast_declaration::print(void) const
 {
    printf("%s ", identifier);
-   ast_opt_array_dimensions_print(is_array, array_specifier);
+   ast_opt_array_dimensions_print(array_specifier);
 
    if (initializer) {
       printf("= ");
@@ -1043,12 +1041,11 @@ ast_declaration::print(void) const
 }
 
 
-ast_declaration::ast_declaration(const char *identifier, bool is_array,
+ast_declaration::ast_declaration(const char *identifier,
                                 ast_array_specifier *array_specifier,
                                 ast_expression *initializer)
 {
    this->identifier = identifier;
-   this->is_array = is_array;
    this->array_specifier = array_specifier;
    this->initializer = initializer;
 }