Add test for declaring variables of type void.
[mesa.git] / ast.h
diff --git a/ast.h b/ast.h
index cd5bf6b3f5f1dd92b9902e51d48125ca596d56b1..5fd69695c1aff2d8c35e986f6922928d64df220f 100644 (file)
--- a/ast.h
+++ b/ast.h
@@ -1,3 +1,4 @@
+/* -*- c++ -*- */
 /*
  * Copyright © 2009 Intel Corporation
  *
@@ -197,16 +198,35 @@ public:
  */
 class ast_function_expression : public ast_expression {
 public:
-   ast_function_expression(ast_node *callee)
-      : ast_expression(ast_function_call, (ast_expression *) callee,
-                      NULL, NULL)
+   ast_function_expression(ast_expression *callee)
+      : ast_expression(ast_function_call, callee,
+                      NULL, NULL),
+       cons(false)
    {
       /* empty */
    }
 
+   ast_function_expression(class ast_type_specifier *type)
+      : ast_expression(ast_function_call, (ast_expression *) type,
+                      NULL, NULL),
+       cons(true)
+   {
+      /* empty */
+   }
+
+   bool is_constructor() const
+   {
+      return cons;
+   }
 
    virtual ir_instruction *hir(exec_list *instructions,
                               struct _mesa_glsl_parse_state *state);
+
+private:
+   /**
+    * Is this function call actually a constructor?
+    */
+   bool cons;
 };
 
 
@@ -337,11 +357,27 @@ class ast_type_specifier : public ast_node {
 public:
    ast_type_specifier(int specifier);
 
+   /** Construct a type specifier from a type name */
+   ast_type_specifier(const char *name) 
+      : type_specifier(ast_type_name), type_name(name), structure(NULL),
+       is_array(false), array_size(NULL), precision(ast_precision_high)
+   {
+      /* empty */
+   }
+
+   /** Construct a type specifier from a structure definition */
+   ast_type_specifier(ast_struct_specifier *s)
+      : type_specifier(ast_struct), type_name(s->name), structure(s),
+       is_array(false), array_size(NULL), precision(ast_precision_high)
+   {
+      /* empty */
+   }
+
    virtual void print(void) const;
 
    enum ast_types type_specifier;
 
-   char *type_name;
+   const char *type_name;
    ast_struct_specifier *structure;
 
    int is_array;
@@ -495,6 +531,9 @@ public:
    ast_jump_statement(int mode, ast_expression *return_value);
    virtual void print(void) const;
 
+   virtual ir_instruction *hir(exec_list *instructions,
+                              struct _mesa_glsl_parse_state *state);
+
    enum ast_jump_modes {
       ast_continue,
       ast_break,