Re: [Mesa-dev] [PATCH 3/8] glsl: Change the parser to use the string buffer
On 29.08.2017 21:56, Thomas Helland wrote: V2: Pointed out by Timothy - Fix pp.c reralloc size issue and comment V3 - Use vprintf instead of printf where we should - Fixes failing make-check tests --- src/compiler/glsl/glcpp/glcpp-parse.y | 195 ++ src/compiler/glsl/glcpp/glcpp.h | 8 +- src/compiler/glsl/glcpp/pp.c | 39 +++ 3 files changed, 78 insertions(+), 164 deletions(-) diff --git a/src/compiler/glsl/glcpp/glcpp-parse.y b/src/compiler/glsl/glcpp/glcpp-parse.y index 898a26044f..debf12bef8 100644 --- a/src/compiler/glsl/glcpp/glcpp-parse.y +++ b/src/compiler/glsl/glcpp/glcpp-parse.y @@ -209,12 +209,7 @@ line: | SPACE control_line | text_line { _glcpp_parser_print_expanded_token_list (parser, $1); - const char *newline_str = "\n"; - size_t size = strlen(newline_str); - - ralloc_str_append(>output, newline_str, - parser->output_length, size); - parser->output_length += size; + _mesa_string_buffer_append_char(parser->output, '\n'); } | expanded_line ; @@ -233,20 +228,16 @@ expanded_line: | LINE_EXPANDED integer_constant NEWLINE { parser->has_new_line_number = 1; parser->new_line_number = $2; - ralloc_asprintf_rewrite_tail (>output, - >output_length, - "#line %" PRIiMAX "\n", - $2); + _mesa_string_buffer_printf(parser->output, "#line %" PRIiMAX "\n", $2); } | LINE_EXPANDED integer_constant integer_constant NEWLINE { parser->has_new_line_number = 1; parser->new_line_number = $2; parser->has_new_source_number = 1; parser->new_source_number = $3; - ralloc_asprintf_rewrite_tail (>output, - >output_length, - "#line %" PRIiMAX " %" PRIiMAX "\n", - $2, $3); + _mesa_string_buffer_printf(parser->output, + "#line %" PRIiMAX " %" PRIiMAX "\n", + $2, $3); } ; @@ -264,12 +255,7 @@ define: control_line: control_line_success { - const char *newline_str = "\n"; - size_t size = strlen(newline_str); - - ralloc_str_append(>output, newline_str, - parser->output_length, size); - parser->output_length += size; + _mesa_string_buffer_append_char(parser->output, '\n'); } | control_line_error | HASH_TOKEN LINE pp_tokens NEWLINE { @@ -459,7 +445,7 @@ control_line_success: glcpp_parser_resolve_implicit_version(parser); } | HASH_TOKEN PRAGMA NEWLINE { - ralloc_asprintf_rewrite_tail (>output, >output_length, "#%s", $2); + _mesa_string_buffer_printf(parser->output, "#%s", $2); } ; @@ -1137,133 +1123,61 @@ _token_list_equal_ignoring_space(token_list_t *a, token_list_t *b) } static void -_token_print(char **out, size_t *len, token_t *token) +_token_print(struct _mesa_string_buffer *out, token_t *token) { if (token->type < 256) { - size_t size = sizeof(char); - - ralloc_str_append(out, (char *) >type, *len, size); - *len += size; + _mesa_string_buffer_printf(out,"%c", token->type); _mesa_string_buffer_append_char? return; } switch (token->type) { case INTEGER: - ralloc_asprintf_rewrite_tail (out, len, "%" PRIiMAX, token->value.ival); + _mesa_string_buffer_printf(out, "%" PRIiMAX, token->value.ival); break; case IDENTIFIER: case INTEGER_STRING: - case OTHER: { - size_t size = strlen(token->value.str); - - ralloc_str_append(out, token->value.str, *len, size); - *len += size; + case OTHER: + _mesa_string_buffer_append(out, token->value.str); break; - } - case SPACE: { - const char *token_str = " "; - size_t size = strlen(token_str); - - ralloc_str_append(out, token_str, *len, size); - *len += size; + case SPACE: + _mesa_string_buffer_append(out, " "); _mesa_string_buffer_append_char? Apart from those: Reviewed-by: Nicolai Hähnlebreak; - } - case LEFT_SHIFT: { - const char *token_str = "<<"; - size_t size = strlen(token_str); - - ralloc_str_append(out, token_str, *len, size); - *len += size; + case LEFT_SHIFT: + _mesa_string_buffer_append(out, "<<"); break; - } - case RIGHT_SHIFT: { - const char *token_str = ">>"; - size_t size = strlen(token_str); -
[Mesa-dev] [PATCH 3/8] glsl: Change the parser to use the string buffer
V2: Pointed out by Timothy - Fix pp.c reralloc size issue and comment V3 - Use vprintf instead of printf where we should - Fixes failing make-check tests --- src/compiler/glsl/glcpp/glcpp-parse.y | 195 ++ src/compiler/glsl/glcpp/glcpp.h | 8 +- src/compiler/glsl/glcpp/pp.c | 39 +++ 3 files changed, 78 insertions(+), 164 deletions(-) diff --git a/src/compiler/glsl/glcpp/glcpp-parse.y b/src/compiler/glsl/glcpp/glcpp-parse.y index 898a26044f..debf12bef8 100644 --- a/src/compiler/glsl/glcpp/glcpp-parse.y +++ b/src/compiler/glsl/glcpp/glcpp-parse.y @@ -209,12 +209,7 @@ line: | SPACE control_line | text_line { _glcpp_parser_print_expanded_token_list (parser, $1); - const char *newline_str = "\n"; - size_t size = strlen(newline_str); - - ralloc_str_append(>output, newline_str, - parser->output_length, size); - parser->output_length += size; + _mesa_string_buffer_append_char(parser->output, '\n'); } | expanded_line ; @@ -233,20 +228,16 @@ expanded_line: | LINE_EXPANDED integer_constant NEWLINE { parser->has_new_line_number = 1; parser->new_line_number = $2; - ralloc_asprintf_rewrite_tail (>output, - >output_length, - "#line %" PRIiMAX "\n", - $2); + _mesa_string_buffer_printf(parser->output, "#line %" PRIiMAX "\n", $2); } | LINE_EXPANDED integer_constant integer_constant NEWLINE { parser->has_new_line_number = 1; parser->new_line_number = $2; parser->has_new_source_number = 1; parser->new_source_number = $3; - ralloc_asprintf_rewrite_tail (>output, - >output_length, - "#line %" PRIiMAX " %" PRIiMAX "\n", - $2, $3); + _mesa_string_buffer_printf(parser->output, + "#line %" PRIiMAX " %" PRIiMAX "\n", + $2, $3); } ; @@ -264,12 +255,7 @@ define: control_line: control_line_success { - const char *newline_str = "\n"; - size_t size = strlen(newline_str); - - ralloc_str_append(>output, newline_str, - parser->output_length, size); - parser->output_length += size; + _mesa_string_buffer_append_char(parser->output, '\n'); } | control_line_error | HASH_TOKEN LINE pp_tokens NEWLINE { @@ -459,7 +445,7 @@ control_line_success: glcpp_parser_resolve_implicit_version(parser); } | HASH_TOKEN PRAGMA NEWLINE { - ralloc_asprintf_rewrite_tail (>output, >output_length, "#%s", $2); + _mesa_string_buffer_printf(parser->output, "#%s", $2); } ; @@ -1137,133 +1123,61 @@ _token_list_equal_ignoring_space(token_list_t *a, token_list_t *b) } static void -_token_print(char **out, size_t *len, token_t *token) +_token_print(struct _mesa_string_buffer *out, token_t *token) { if (token->type < 256) { - size_t size = sizeof(char); - - ralloc_str_append(out, (char *) >type, *len, size); - *len += size; + _mesa_string_buffer_printf(out,"%c", token->type); return; } switch (token->type) { case INTEGER: - ralloc_asprintf_rewrite_tail (out, len, "%" PRIiMAX, token->value.ival); + _mesa_string_buffer_printf(out, "%" PRIiMAX, token->value.ival); break; case IDENTIFIER: case INTEGER_STRING: - case OTHER: { - size_t size = strlen(token->value.str); - - ralloc_str_append(out, token->value.str, *len, size); - *len += size; + case OTHER: + _mesa_string_buffer_append(out, token->value.str); break; - } - case SPACE: { - const char *token_str = " "; - size_t size = strlen(token_str); - - ralloc_str_append(out, token_str, *len, size); - *len += size; + case SPACE: + _mesa_string_buffer_append(out, " "); break; - } - case LEFT_SHIFT: { - const char *token_str = "<<"; - size_t size = strlen(token_str); - - ralloc_str_append(out, token_str, *len, size); - *len += size; + case LEFT_SHIFT: + _mesa_string_buffer_append(out, "<<"); break; - } - case RIGHT_SHIFT: { - const char *token_str = ">>"; - size_t size = strlen(token_str); - - ralloc_str_append(out, token_str, *len, size); - *len += size; + case RIGHT_SHIFT: + _mesa_string_buffer_append(out, ">>"); break; - } - case LESS_OR_EQUAL: { - const char *token_str = "<="; -