summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2012-04-26 10:16:52 -0700
committerEric Anholt <eric@anholt.net>2012-07-09 11:12:18 -0700
commit912a429bc529a017a426f06631b31da1c0eaa3ae (patch)
tree833d049708e6c6199edff8e81bba5e771bb1ec8f
parent532e99cbf26d175220eac245b12011939ea07d0c (diff)
glsl: Don't hide the type of struct_declaration_list.
I've been trying to derive from this for UBO support, and the slightly obfuscated types were putting me over the edge. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
-rw-r--r--src/glsl/ast.h6
-rw-r--r--src/glsl/glsl_parser.yy6
-rw-r--r--src/glsl/glsl_parser_extras.cpp2
3 files changed, 9 insertions, 5 deletions
diff --git a/src/glsl/ast.h b/src/glsl/ast.h
index b096c838c06..7538b58e460 100644
--- a/src/glsl/ast.h
+++ b/src/glsl/ast.h
@@ -417,15 +417,19 @@ struct ast_type_qualifier {
const char *interpolation_string() const;
};
+class ast_declarator_list;
+
class ast_struct_specifier : public ast_node {
public:
- ast_struct_specifier(const char *identifier, ast_node *declarator_list);
+ ast_struct_specifier(const char *identifier,
+ ast_declarator_list *declarator_list);
virtual void print(void) const;
virtual ir_rvalue *hir(exec_list *instructions,
struct _mesa_glsl_parse_state *state);
const char *name;
+ /* List of ast_declarator_list * */
exec_list declarations;
};
diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
index 531d257c9d1..8759863271e 100644
--- a/src/glsl/glsl_parser.yy
+++ b/src/glsl/glsl_parser.yy
@@ -214,7 +214,7 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
%type <node> declaration_statement
%type <node> jump_statement
%type <struct_specifier> struct_specifier
-%type <node> struct_declaration_list
+%type <declarator_list> struct_declaration_list
%type <declarator_list> struct_declaration
%type <declaration> struct_declarator
%type <declaration> struct_declarator_list
@@ -1479,12 +1479,12 @@ struct_specifier:
struct_declaration_list:
struct_declaration
{
- $$ = (ast_node *) $1;
+ $$ = $1;
$1->link.self_link();
}
| struct_declaration_list struct_declaration
{
- $$ = (ast_node *) $1;
+ $$ = $1;
$$->link.insert_before(& $2->link);
}
;
diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
index c19b6f9e6a4..d9ee406cfd4 100644
--- a/src/glsl/glsl_parser_extras.cpp
+++ b/src/glsl/glsl_parser_extras.cpp
@@ -1003,7 +1003,7 @@ ast_struct_specifier::print(void) const
ast_struct_specifier::ast_struct_specifier(const char *identifier,
- ast_node *declarator_list)
+ ast_declarator_list *declarator_list)
{
if (identifier == NULL) {
static unsigned anon_count = 1;