X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fglsl%2Fglsl_symbol_table.h;h=2753bdf315696e37b609a3b58a9f0c08b6904f23;hb=93c8692ce92d396f0a4db5bc91d8e7322fa7dd50;hp=4cb7559e9a031e2a37960ad8521900a95e79a2c6;hpb=1cbcf6693aa490c4dcb56712bfb9998deb270f08;p=mesa.git diff --git a/src/glsl/glsl_symbol_table.h b/src/glsl/glsl_symbol_table.h index 4cb7559e9a0..2753bdf3156 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,71 +44,49 @@ 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 + static void _glsl_symbol_table_destructor (glsl_symbol_table *table) { table->~glsl_symbol_table(); - - return 0; } public: - /* Callers of this talloc-based new need not call delete. It's - * easier to just talloc_free 'ctx' (or any of its ancestors). */ + /* Callers of this ralloc-based new need not call delete. It's + * easier to just ralloc_free 'ctx' (or any of its ancestors). */ static void* operator new(size_t size, void *ctx) { void *table; - table = talloc_size(ctx, size); + table = ralloc_size(ctx, size); assert(table != NULL); - talloc_set_destructor(table, (int (*)(void*)) _glsl_symbol_table_destructor); + ralloc_set_destructor(table, (void (*)(void*)) _glsl_symbol_table_destructor); return table; } /* If the user *does* call delete, that's OK, we will just - * talloc_free in that case. Here, C++ will have already called the - * destructor so tell talloc not to do that again. */ + * ralloc_free in that case. Here, C++ will have already called the + * destructor so tell ralloc not to do that again. */ static void operator delete(void *table) { - talloc_set_destructor(table, NULL); - talloc_free(table); + ralloc_set_destructor(table, NULL); + ralloc_free(table); } - glsl_symbol_table() - { - table = _mesa_symbol_table_ctor(); - } + glsl_symbol_table(); + ~glsl_symbol_table(); - ~glsl_symbol_table() - { - _mesa_symbol_table_dtor(table); - } + /* In 1.10, functions and variables have separate namespaces. */ + bool separate_function_namespace; - 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 +96,34 @@ 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(ir_variable *v); + bool add_type(const char *name, const glsl_type *t); + bool add_function(ir_function *f); + bool add_interface(const char *name, const glsl_type *i, + enum ir_variable_mode mode); /*@}*/ + /** + * Add an function at global scope without checking for scoping conflicts. + */ + void add_global_function(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); + const glsl_type *get_interface(const char *name, + enum ir_variable_mode mode); /*@}*/ private: + symbol_table_entry *get_entry(const char *name); + struct _mesa_symbol_table *table; + void *mem_ctx; }; #endif /* GLSL_SYMBOL_TABLE */