glsl/parser: Move anonymous struct name handling to the parser

There are two callers of the constructor, and they are right next to
each other.  Move the "#anon_struct" name handling to the parser so that
the conditional can be removed.

I've also deleted part of the comment (about the memory leak) because I
don't think it's quite accurate or relevant.

   text	   data	    bss	    dec	    hex	filename
8310399	 269336	 294072	8873807	 87674f	32-bit i965_dri.so before
8310339	 269336	 294072	8873747	 876713	32-bit i965_dri.so after
7845611	 346552	 420592	8612755	 836b93	64-bit i965_dri.so before
7845579	 346552	 420592	8612723	 836b73	64-bit i965_dri.so after

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Ian Romanick
2017-09-25 20:29:35 -07:00
parent fc07ab165b
commit 792acfc44a
2 changed files with 11 additions and 14 deletions

View File

@@ -2384,7 +2384,15 @@ struct_specifier:
| STRUCT '{' struct_declaration_list '}'
{
void *ctx = state->linalloc;
$$ = new(ctx) ast_struct_specifier(NULL, $3);
/* All anonymous structs have the same name. This simplifies matching of
* globals whose type is an unnamed struct.
*
* It also avoids a memory leak when the same shader is compiled over and
* over again.
*/
$$ = new(ctx) ast_struct_specifier("#anon_struct", $3);
$$->set_location_range(@2, @4);
}
;

View File

@@ -1674,21 +1674,10 @@ ast_struct_specifier::print(void) const
ast_struct_specifier::ast_struct_specifier(const char *identifier,
ast_declarator_list *declarator_list)
: name(identifier), layout(NULL), declarations(), is_declaration(true),
type(NULL)
{
if (identifier == NULL) {
/* All anonymous structs have the same name. This simplifies matching of
* globals whose type is an unnamed struct.
*
* It also avoids a memory leak when the same shader is compiled over and
* over again.
*/
identifier = "#anon_struct";
}
name = identifier;
this->declarations.push_degenerate_list_at_head(&declarator_list->link);
is_declaration = true;
layout = NULL;
type = NULL;
}
void ast_subroutine_list::print(void) const