diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2010-08-21 20:23:18 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-08-26 09:19:48 -0700 |
commit | e9c7ceed27f6811ad1cae46c93ce9bc3fb3668d8 (patch) | |
tree | e66302bca944353decf9b78291effb9cee7a4982 /src/glsl/glsl_symbol_table.h | |
parent | 86ddb356e8278423ef41125be627e57e073471d1 (diff) | |
download | external_mesa3d-e9c7ceed27f6811ad1cae46c93ce9bc3fb3668d8.zip external_mesa3d-e9c7ceed27f6811ad1cae46c93ce9bc3fb3668d8.tar.gz external_mesa3d-e9c7ceed27f6811ad1cae46c93ce9bc3fb3668d8.tar.bz2 |
glsl: Use a single shared namespace in the symbol table.
As of 1.20, variable names, function names, and structure type names all
share a single namespace, and should conflict with one another in the
same scope, or hide each other in nested scopes.
However, in 1.10, variables and functions can share the same name in the
same scope. Structure types, however, conflict with/hide both.
Fixes piglit tests redeclaration-06.vert, redeclaration-11.vert,
redeclaration-19.vert, and struct-05.vert.
Diffstat (limited to 'src/glsl/glsl_symbol_table.h')
-rw-r--r-- | src/glsl/glsl_symbol_table.h | 85 |
1 files changed, 18 insertions, 67 deletions
diff --git a/src/glsl/glsl_symbol_table.h b/src/glsl/glsl_symbol_table.h index 4cb7559..d71be55 100644 --- a/src/glsl/glsl_symbol_table.h +++ b/src/glsl/glsl_symbol_table.h @@ -34,6 +34,8 @@ extern "C" { #include "ir.h" #include "glsl_types.h" +class symbol_table_entry; + /** * Facade class for _mesa_symbol_table * @@ -42,12 +44,6 @@ extern "C" { */ struct glsl_symbol_table { private: - enum glsl_symbol_name_space { - glsl_variable_name_space = 0, - glsl_type_name_space = 1, - glsl_function_name_space = 2 - }; - static int _glsl_symbol_table_destructor (glsl_symbol_table *table) { @@ -80,33 +76,18 @@ public: talloc_free(table); } - glsl_symbol_table() - { - table = _mesa_symbol_table_ctor(); - } + glsl_symbol_table(); + ~glsl_symbol_table(); - ~glsl_symbol_table() - { - _mesa_symbol_table_dtor(table); - } + unsigned int language_version; - void push_scope() - { - _mesa_symbol_table_push_scope(table); - } - - void pop_scope() - { - _mesa_symbol_table_pop_scope(table); - } + void push_scope(); + void pop_scope(); /** * Determine whether a name was declared at the current scope */ - bool name_declared_this_scope(const char *name) - { - return _mesa_symbol_table_symbol_scope(table, -1, name) == 0; - } + bool name_declared_this_scope(const char *name); /** * \name Methods to add symbols to the table @@ -116,56 +97,26 @@ public: * reduces the clarity of the intention of code that uses these methods. */ /*@{*/ - bool add_variable(const char *name, ir_variable *v) - { - return _mesa_symbol_table_add_symbol(table, glsl_variable_name_space, - name, v) == 0; - } - - bool add_type(const char *name, const glsl_type *t) - { - return _mesa_symbol_table_add_symbol(table, glsl_type_name_space, - name, (void *) t) == 0; - } - - bool add_function(const char *name, ir_function *f) - { - return _mesa_symbol_table_add_symbol(table, glsl_function_name_space, - name, f) == 0; - } - - bool remove_function(const char *name, ir_function *f) - { - return _mesa_symbol_table_add_symbol(table, glsl_function_name_space, - name, f) == 0; - } + bool add_variable(const char *name, ir_variable *v); + bool add_type(const char *name, const glsl_type *t, + ir_function *constructor = NULL); + bool add_function(const char *name, ir_function *f); /*@}*/ /** * \name Methods to get symbols from the table */ /*@{*/ - ir_variable *get_variable(const char *name) - { - return (ir_variable *) - _mesa_symbol_table_find_symbol(table, glsl_variable_name_space, name); - } - - glsl_type *get_type(const char *name) - { - return (glsl_type *) - _mesa_symbol_table_find_symbol(table, glsl_type_name_space, name); - } - - ir_function *get_function(const char *name) - { - return (ir_function *) - _mesa_symbol_table_find_symbol(table, glsl_function_name_space, name); - } + ir_variable *get_variable(const char *name); + const glsl_type *get_type(const char *name); + ir_function *get_function(const char *name); /*@}*/ private: + symbol_table_entry *get_entry(const char *name); + struct _mesa_symbol_table *table; + void *mem_ctx; }; #endif /* GLSL_SYMBOL_TABLE */ |