mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
glsl: Don't add overloads to existing structure constructors.
Instead, make a new ir_function and try to add it to the symbol table. Fixes piglit test redeclaration-08.vert.
This commit is contained in:
parent
e09591317b
commit
ac2376e6f5
3 changed files with 9 additions and 4 deletions
|
|
@ -2172,7 +2172,7 @@ ast_function::hir(exec_list *instructions,
|
|||
* seen signature for a function with the same name, or, if a match is found,
|
||||
* that the previously seen signature does not have an associated definition.
|
||||
*/
|
||||
f = state->symbols->get_function(name);
|
||||
f = state->symbols->get_function(name, false);
|
||||
if (f != NULL) {
|
||||
sig = f->exact_matching_signature(&hir_parameters);
|
||||
if (sig != NULL) {
|
||||
|
|
|
|||
|
|
@ -147,10 +147,15 @@ const glsl_type *glsl_symbol_table::get_type(const char *name)
|
|||
return entry != NULL ? entry->t : NULL;
|
||||
}
|
||||
|
||||
ir_function *glsl_symbol_table::get_function(const char *name)
|
||||
ir_function *glsl_symbol_table::get_function(const char *name,
|
||||
bool return_constructors)
|
||||
{
|
||||
symbol_table_entry *entry = get_entry(name);
|
||||
return entry != NULL ? entry->f : NULL;
|
||||
// If there's a type, the function is a constructor; caller may not want it.
|
||||
if (entry != NULL && (return_constructors || entry->t == NULL))
|
||||
return entry->f;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
symbol_table_entry *glsl_symbol_table::get_entry(const char *name)
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ public:
|
|||
/*@{*/
|
||||
ir_variable *get_variable(const char *name);
|
||||
const glsl_type *get_type(const char *name);
|
||||
ir_function *get_function(const char *name);
|
||||
ir_function *get_function(const char *name, bool return_constructors = true);
|
||||
/*@}*/
|
||||
|
||||
private:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue