Merge branch 'mesa_7_6_branch'
This should fix the memory leaks in the assembly parser without the regressions. The conflicts in program_lexer.l were related to changes in returning strings between the branches (always return IDENTIFIER vs. returing either IDENTIFIER or USED_IDENTIFIER). The conflicts in program_parse.y were related to two changes in master One change prints a variable name in an error message. The other change adds outputVarSize to the OUTPUT_statement rule. The cause the position of the IDENTIFIER to change from $2 to $3. Conflicts: src/mesa/shader/lex.yy.c src/mesa/shader/program_lexer.l src/mesa/shader/program_parse.tab.c src/mesa/shader/program_parse.y
This commit is contained in:
@@ -77,45 +77,6 @@
|
||||
#define SWIZZLE_INVAL MAKE_SWIZZLE4(SWIZZLE_NIL, SWIZZLE_NIL, \
|
||||
SWIZZLE_NIL, SWIZZLE_NIL)
|
||||
|
||||
/**
|
||||
* Send a string to the parser using asm_parser_state::string_dumpster
|
||||
*
|
||||
* Sends a string to the parser using asm_parser_state::string_dumpster as a
|
||||
* temporary storage buffer. Data previously stored in
|
||||
* asm_parser_state::string_dumpster will be lost. If
|
||||
* asm_parser_state::string_dumpster is not large enough to hold the new
|
||||
* string, the buffer size will be increased. The buffer size is \b never
|
||||
* decreased.
|
||||
*
|
||||
* \param state Assembler parser state tracking
|
||||
* \param str String to be passed to the parser
|
||||
*
|
||||
* \return
|
||||
* A pointer to asm_parser_state::string_dumpster on success or \c NULL on
|
||||
* failure. Currently the only failure case is \c ENOMEM.
|
||||
*/
|
||||
static char *
|
||||
return_string(struct asm_parser_state *state, const char *str)
|
||||
{
|
||||
const size_t len = strlen(str);
|
||||
|
||||
if (len >= state->dumpster_size) {
|
||||
char *const dumpster = _mesa_realloc(state->string_dumpster,
|
||||
state->dumpster_size,
|
||||
len + 1);
|
||||
if (dumpster == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
state->string_dumpster = dumpster;
|
||||
state->dumpster_size = len + 1;
|
||||
}
|
||||
|
||||
memcpy(state->string_dumpster, str, len + 1);
|
||||
return state->string_dumpster;
|
||||
}
|
||||
|
||||
|
||||
static unsigned
|
||||
mask_from_char(char c)
|
||||
{
|
||||
@@ -161,7 +122,7 @@ swiz_from_char(char c)
|
||||
static int
|
||||
handle_ident(struct asm_parser_state *state, const char *text, YYSTYPE *lval)
|
||||
{
|
||||
lval->string = return_string(state, text);
|
||||
lval->string = strdup(text);
|
||||
|
||||
return (_mesa_symbol_table_find_symbol(state->st, 0, text) == NULL)
|
||||
? IDENTIFIER : USED_IDENTIFIER;
|
||||
|
Reference in New Issue
Block a user