From 649ef4da30e23f077087326a6a9116759f1d9dd3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Fri, 12 Jul 2013 09:27:22 +0100 Subject: [PATCH] glsl: Avoid variable length arrays. They are a non-standard GCC extension that's not widely supported by other C/C++ compilers. Use a dynamic array instead. Trivial. Should fix the MSVC build. --- src/glsl/glsl_symbol_table.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/glsl/glsl_symbol_table.cpp b/src/glsl/glsl_symbol_table.cpp index 0bea5364ef5..4c96620bfdb 100644 --- a/src/glsl/glsl_symbol_table.cpp +++ b/src/glsl/glsl_symbol_table.cpp @@ -175,13 +175,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[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, @@ -237,10 +245,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[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; } -- 2.30.2