[Mesa-dev] [PATCH 04/18] glsl: Don't hide the type of struct_declaration_list.

Eric Anholt eric at anholt.net
Mon Jul 2 17:38:13 PDT 2012


I've been trying to derive from this for UBO support, and the slightly
obfuscated types were putting me over the edge.
---
 src/glsl/ast.h                  |    6 +++++-
 src/glsl/glsl_parser.yy         |    6 +++---
 src/glsl/glsl_parser_extras.cpp |    2 +-
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/glsl/ast.h b/src/glsl/ast.h
index b096c83..7538b58 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 248376b..7024ee4 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
@@ -1474,12 +1474,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 c19b6f9..d9ee406 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;
-- 
1.7.10



More information about the mesa-dev mailing list