glsl: Create AST data structures for switch statement and case label
authorDan McCabe <zen3d.linux@gmail.com>
Mon, 7 Nov 2011 23:05:16 +0000 (15:05 -0800)
committerDan McCabe <zen3d.linux@gmail.com>
Tue, 8 Nov 2011 00:31:21 +0000 (16:31 -0800)
Data structures for switch statement and case label are created that parallel
the structure of other AST data.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/ast.h

index 9fe6c41252e40a2276c97096090f33caf9907e07..208ffc4197a410b7600eb30f61ff2e4c4ae8085e 100644 (file)
@@ -629,13 +629,19 @@ public:
 
 class ast_case_label : public ast_node {
 public:
+   ast_case_label(ast_expression *test_value);
+   virtual void print(void) const;
+
+   virtual ir_rvalue *hir(exec_list *instructions,
+                         struct _mesa_glsl_parse_state *state);
 
    /**
-    * An expression of NULL means 'default'.
+    * An test value of NULL means 'default'.
     */
-   ast_expression *expression;
+   ast_expression *test_value;
 };
 
+
 class ast_selection_statement : public ast_node {
 public:
    ast_selection_statement(ast_expression *condition,
@@ -654,8 +660,18 @@ public:
 
 class ast_switch_statement : public ast_node {
 public:
-   ast_expression *expression;
-   exec_list statements;
+   ast_switch_statement(ast_expression *test_expression,
+                       ast_node *body);
+   virtual void print(void) const;
+
+   virtual ir_rvalue *hir(exec_list *instructions,
+                         struct _mesa_glsl_parse_state *state);
+
+   ast_expression *test_expression;
+   ast_node *body;
+
+protected:
+   void test_to_hir(exec_list *, struct _mesa_glsl_parse_state *);
 };
 
 class ast_iteration_statement : public ast_node {