From: Kenneth Graunke Date: Thu, 26 Aug 2010 00:10:16 +0000 (-0700) Subject: glsl: Don't add overloads to existing structure constructors. X-Git-Tag: 062012170305~10205 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ac2376e6f51677ab321930b0200a79d1683cfbba;p=profile%2Fivi%2Fmesa.git 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. --- diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index 8caf950..c666da3 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -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) { diff --git a/src/glsl/glsl_symbol_table.cpp b/src/glsl/glsl_symbol_table.cpp index 76c440c..11e1671 100644 --- a/src/glsl/glsl_symbol_table.cpp +++ b/src/glsl/glsl_symbol_table.cpp @@ -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) diff --git a/src/glsl/glsl_symbol_table.h b/src/glsl/glsl_symbol_table.h index d71be55..c90fdc3 100644 --- a/src/glsl/glsl_symbol_table.h +++ b/src/glsl/glsl_symbol_table.h @@ -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: