aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/glsl/glsl_symbol_table.cpp
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-07-16 08:59:33 +0200
committermarha <marha@users.sourceforge.net>2013-07-16 08:59:33 +0200
commitd00d82f6017166fdeb927320ce4c656cb99319fd (patch)
tree75d388ec743971c4bdcc85b639f8bc35458b27e0 /mesalib/src/glsl/glsl_symbol_table.cpp
parent707c146a74f6ff862be3ebb2470d1f31e29dd907 (diff)
parent06f4de23ace4de1fd628c37891214f0a4ecb77db (diff)
downloadvcxsrv-d00d82f6017166fdeb927320ce4c656cb99319fd.tar.gz
vcxsrv-d00d82f6017166fdeb927320ce4c656cb99319fd.tar.bz2
vcxsrv-d00d82f6017166fdeb927320ce4c656cb99319fd.zip
Merge remote-tracking branch 'origin/released'
* origin/released: libxcb xcb-proto mesa xkbcomp git update 16 Jul 2013 Conflicts: mesalib/src/glsl/glsl_symbol_table.cpp
Diffstat (limited to 'mesalib/src/glsl/glsl_symbol_table.cpp')
-rwxr-xr-x[-rw-r--r--]mesalib/src/glsl/glsl_symbol_table.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/mesalib/src/glsl/glsl_symbol_table.cpp b/mesalib/src/glsl/glsl_symbol_table.cpp
index 94a5d5747..99057bced 100644..100755
--- a/mesalib/src/glsl/glsl_symbol_table.cpp
+++ b/mesalib/src/glsl/glsl_symbol_table.cpp
@@ -179,13 +179,21 @@ bool glsl_symbol_table::add_type(const char *name, const glsl_type *t)
return _mesa_symbol_table_add_symbol(table, -1, name, entry) == 0;
}
-bool glsl_symbol_table::add_type_ast(const char *name, const class ast_type_specifier *a)
+static char *make_ast_name(const char *name)
{
- symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(a);
- char *ast_name=(char*)alloca(strlen("#ast.") + strlen(name) + 1);
+ char *ast_name = new char[strlen("#ast.") + strlen(name) + 1];
strcpy(ast_name, "#ast.");
strcat(ast_name + strlen("#ast."), name);
- return _mesa_symbol_table_add_symbol(table, -1, ast_name, entry) == 0;
+ return ast_name;
+}
+
+bool glsl_symbol_table::add_type_ast(const char *name, const class ast_type_specifier *a)
+{
+ symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(a);
+ char *ast_name = make_ast_name(name);
+ bool ret = _mesa_symbol_table_add_symbol(table, -1, ast_name, entry) == 0;
+ delete [] ast_name;
+ return ret;
}
bool glsl_symbol_table::add_interface(const char *name, const glsl_type *i,
@@ -241,10 +249,9 @@ const glsl_type *glsl_symbol_table::get_type(const char *name)
const class ast_type_specifier *glsl_symbol_table::get_type_ast(const char *name)
{
- char *ast_name=(char*)alloca(strlen("#ast.") + strlen(name) + 1);
- strcpy(ast_name, "#ast.");
- strcat(ast_name + strlen("#ast."), name);
+ char *ast_name = make_ast_name(name);
symbol_table_entry *entry = get_entry(ast_name);
+ delete [] ast_name;
return entry != NULL ? entry->a : NULL;
}