indent, comments, etc
authorBrian Paul <brian.paul@tungstengraphics.com>
Tue, 28 Nov 2006 15:46:50 +0000 (15:46 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Tue, 28 Nov 2006 15:46:50 +0000 (15:46 +0000)
src/mesa/shader/slang/slang_compile_operation.c
src/mesa/shader/slang/slang_compile_operation.h

index 7e9201355979cc47236372067ba0512c18e93c55..73f57bfb123ce0402dea6f5bf7475d05499b5fe9 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.5
+ * Version:  6.5.2
  *
  * Copyright (C) 2005-2006  Brian Paul   All Rights Reserved.
  *
 #include "imports.h"
 #include "slang_compile.h"
 
-/* slang_operation */
 
-int slang_operation_construct (slang_operation *oper)
+/**
+ * Init a slang_operation object
+ */
+GLboolean
+slang_operation_construct(slang_operation * oper)
 {
-       oper->type = slang_oper_none;
-       oper->children = NULL;
-       oper->num_children = 0;
-       oper->literal = (float) 0;
-       oper->a_id = SLANG_ATOM_NULL;
-       oper->locals = (slang_variable_scope *) slang_alloc_malloc (sizeof (slang_variable_scope));
-       if (oper->locals == NULL)
-               return 0;
-   _slang_variable_scope_ctr (oper->locals);
-       return 1;
+   oper->type = slang_oper_none;
+   oper->children = NULL;
+   oper->num_children = 0;
+   oper->literal = (float) 0;
+   oper->a_id = SLANG_ATOM_NULL;
+   oper->locals =
+      (slang_variable_scope *)
+      slang_alloc_malloc(sizeof(slang_variable_scope));
+   if (oper->locals == NULL)
+      return GL_FALSE;
+   _slang_variable_scope_ctr(oper->locals);
+   return GL_TRUE;
 }
 
-void slang_operation_destruct (slang_operation *oper)
+void
+slang_operation_destruct(slang_operation * oper)
 {
-       unsigned int i;
+   GLuint i;
 
-       for (i = 0; i < oper->num_children; i++)
-               slang_operation_destruct (oper->children + i);
-       slang_alloc_free (oper->children);
-       slang_variable_scope_destruct (oper->locals);
-       slang_alloc_free (oper->locals);
+   for (i = 0; i < oper->num_children; i++)
+      slang_operation_destruct(oper->children + i);
+   slang_alloc_free(oper->children);
+   slang_variable_scope_destruct(oper->locals);
+   slang_alloc_free(oper->locals);
 }
 
-int slang_operation_copy (slang_operation *x, const slang_operation *y)
+/**
+ * Recursively copy a slang_operation node.
+ * \return GL_TRUE for success, GL_FALSE if failure
+ */
+GLboolean
+slang_operation_copy(slang_operation * x, const slang_operation * y)
 {
-       slang_operation z;
-       unsigned int i;
+   slang_operation z;
+   GLuint i;
 
-       if (!slang_operation_construct (&z))
-               return 0;
-       z.type = y->type;
-       z.children = (slang_operation *) slang_alloc_malloc (y->num_children * sizeof (slang_operation));
-       if (z.children == NULL)
-       {
-               slang_operation_destruct (&z);
-               return 0;
-       }
-       for (z.num_children = 0; z.num_children < y->num_children; z.num_children++)
-               if (!slang_operation_construct (&z.children[z.num_children]))
-               {
-                       slang_operation_destruct (&z);
-                       return 0;
-               }
-       for (i = 0; i < z.num_children; i++)
-               if (!slang_operation_copy (&z.children[i], &y->children[i]))
-               {
-                       slang_operation_destruct (&z);
-                       return 0;
-               }
-       z.literal = y->literal;
-       z.a_id = y->a_id;
-       if (!slang_variable_scope_copy (z.locals, y->locals))
-       {
-               slang_operation_destruct (&z);
-               return 0;
-       }
-       slang_operation_destruct (x);
-       *x = z;
-       return 1;
+   if (!slang_operation_construct(&z))
+      return GL_FALSE;
+   z.type = y->type;
+   z.children = (slang_operation *)
+      slang_alloc_malloc(y->num_children * sizeof(slang_operation));
+   if (z.children == NULL) {
+      slang_operation_destruct(&z);
+      return GL_FALSE;
+   }
+   for (z.num_children = 0; z.num_children < y->num_children;
+        z.num_children++) {
+      if (!slang_operation_construct(&z.children[z.num_children])) {
+         slang_operation_destruct(&z);
+         return GL_FALSE;
+      }
+   }
+   for (i = 0; i < z.num_children; i++) {
+      if (!slang_operation_copy(&z.children[i], &y->children[i])) {
+         slang_operation_destruct(&z);
+         return GL_FALSE;
+      }
+   }
+   z.literal = y->literal;
+   z.a_id = y->a_id;
+   if (!slang_variable_scope_copy(z.locals, y->locals)) {
+      slang_operation_destruct(&z);
+      return GL_FALSE;
+   }
+   slang_operation_destruct(x);
+   *x = z;
+   return GL_TRUE;
 }
 
+
+slang_operation *
+slang_operation_new(GLuint count)
+{
+   return (slang_operation *) _mesa_calloc(count * sizeof(slang_operation));
+}
index f3c45de3c2a4c672a3dc3f426f6134ea0558bfe7..a9376ec945fba93648890ad22199338860472feb 100644 (file)
@@ -32,7 +32,7 @@ extern "C" {
 
 /**
  * Types of slang operations.
- * These are the basic intermediate code representations.
+ * These are the types of the AST (abstract syntax tree) nodes.
  * [foo] indicates a sub-tree or reference to another type of node
  */
 typedef enum slang_operation_type_
@@ -105,6 +105,7 @@ typedef enum slang_operation_type_
 /**
  * A slang_operation is basically a compiled instruction (such as assignment,
  * a while-loop, a conditional, a multiply, a function call, etc).
+ * The AST (abstract syntax tree) is built from these nodes.
  * NOTE: This structure could have been implemented as a union of simpler
  * structs which would correspond to the operation types above.
  */
@@ -112,16 +113,24 @@ typedef struct slang_operation_
 {
    slang_operation_type type;
    struct slang_operation_ *children;
-   unsigned int num_children;
-   float literal;            /**< Used for float, int and bool values */
-   slang_atom a_id;          /**< type: asm, identifier, call, field */
+   GLuint num_children;
+   GLfloat literal;            /**< Used for float, int and bool values */
+   slang_atom a_id;            /**< type: asm, identifier, call, field */
    slang_variable_scope *locals;       /**< local vars for scope */
 } slang_operation;
 
 
-extern int slang_operation_construct(slang_operation *);
-extern void slang_operation_destruct(slang_operation *);
-extern int slang_operation_copy(slang_operation *, const slang_operation *);
+extern GLboolean
+slang_operation_construct(slang_operation *);
+
+extern void
+slang_operation_destruct(slang_operation *);
+
+extern GLboolean
+slang_operation_copy(slang_operation *, const slang_operation *);
+
+extern slang_operation *
+slang_operation_new(GLuint count);
 
 
 #ifdef __cplusplus