mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 09:28:07 +02:00
indent, comments, etc
This commit is contained in:
parent
c058f69daa
commit
716091a6a0
2 changed files with 87 additions and 61 deletions
|
|
@ -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.
|
||||
*
|
||||
|
|
@ -31,68 +31,85 @@
|
|||
#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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue