Re: [Mesa-dev] [PATCH 3/8] glsl: Change the parser to use the string buffer

2017-09-06 Thread Nicolai Hähnle

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ähnle 



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);
-

[Mesa-dev] [PATCH 3/8] glsl: Change the parser to use the string buffer

2017-08-29 Thread Thomas Helland
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 = "<=";
-