public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [RFA 2/4] Constify struct stoken.ptr
@ 2013-09-30 18:57 Keith Seitz
  2013-10-01  4:12 ` Sergio Durigan Junior
  2013-10-01 20:12 ` Tom Tromey
  0 siblings, 2 replies; 3+ messages in thread
From: Keith Seitz @ 2013-09-30 18:57 UTC (permalink / raw)
  To: gdb-patches@sourceware.org ml

[-- Attachment #1: Type: text/plain, Size: 1773 bytes --]

Hi,

In this next patch, as I mentioned in the previous email on this series, 
the temporary casting needed for struct stoken.ptr is removed 
(stoken.ptr is made const).

Again, tested, regression-free, on x86_64 Fedora 18, native and gdbserver.

Keith

ChangeLog
2013-09-24  Keith Seitz  <keiths@redhat.com>

	* ada-exp.y (write_object_renaming): Update: struct stoken.ptr
	is now const.
	(block_lookup): Make 'raw_name' and 'name' const.
	* ada-lex.l (processString): Update for struct stoken.ptr.
	* c-exp.y (qualified_name : TYPENAME COLONCOLON '~' name): Likewise.
	(operator_stoken): Likewise.
	(lex_one_token): Remove temporary cast to char * for
	'yylval.sval.ptr'.
	* f-exp.y (yylex): Likewise.
	* gdb-types.c (lookup_struct_elt_type): Make argument 'name' const.
	* gdbtypes.h (lookup_struct_elt_type): Likewisee.
	* go-exp.y (lex_one_token): Remove temporary cast to char * for
	'yylval.sval.ptr'.
	* jv-exp.y (QualifiedName): Update for struct stoken.ptr.
	(yylex): Remove temporary cast to char * for 'yylval.sval.ptr'.
	* linespec.c (struct ls_parser): Make 'stream' const.
	(find_parameter_list_end): Make argument 'input' and local
	variable 'p' const.
	(linespec_lexer_lex_string): Make local variables 'start' and
	'p' const.
	Use skip_spaces_const instead of skip_spaces.
	(linespec_lexer_peek_token): Make local variable 'saved_stream'
	const.
	(parse_linespec): Temporarily cast 'argptr' to const for
	'parser->lexer.stream'.
	* m2-exp.y (yylex): Remove temporary cast to char * for
	'yylval.sval.ptr'.
	* objc-lang.c (add_msglist): Make local variable 'p' const.
	* p-exp.y (exp : exp '['): Update for struct stoken.ptr.
	(exp : STRING): Make 'sp' const.
	(parse_number): Make argument 'p' const.
	* parser-defs.h (struct stoken): Make 'ptr' const.



[-- Attachment #2: constify-stoken-ptr.patch --]
[-- Type: text/x-patch, Size: 12244 bytes --]

diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y
index 877dfaf..5270461 100644
--- a/gdb/ada-exp.y
+++ b/gdb/ada-exp.y
@@ -136,7 +136,7 @@ static void write_name_assoc (struct stoken);
 
 static void write_exp_op_with_string (enum exp_opcode, struct stoken);
 
-static struct block *block_lookup (struct block *, char *);
+static struct block *block_lookup (struct block *, const char *);
 
 static LONGEST convert_char_literal (struct type *, LONGEST);
 
@@ -952,6 +952,8 @@ write_object_renaming (const struct block *orig_left_context,
 	{
 	  struct stoken field_name;
 	  const char *end;
+	  char *buf;
+
 	  renaming_expr += 1;
 
 	  if (slice_state != SIMPLE_INDEX)
@@ -960,9 +962,10 @@ write_object_renaming (const struct block *orig_left_context,
 	  if (end == NULL)
 	    end = renaming_expr + strlen (renaming_expr);
 	  field_name.length = end - renaming_expr;
-	  field_name.ptr = malloc (end - renaming_expr + 1);
-	  strncpy (field_name.ptr, renaming_expr, end - renaming_expr);
-	  field_name.ptr[end - renaming_expr] = '\000';
+	  buf = malloc (end - renaming_expr + 1);
+	  field_name.ptr = buf;
+	  strncpy (buf, renaming_expr, end - renaming_expr);
+	  buf[end - renaming_expr] = '\000';
 	  renaming_expr = end;
 	  write_exp_op_with_string (STRUCTOP_STRUCT, field_name);
 	  break;
@@ -980,9 +983,9 @@ write_object_renaming (const struct block *orig_left_context,
 }
 
 static struct block*
-block_lookup (struct block *context, char *raw_name)
+block_lookup (struct block *context, const char *raw_name)
 {
-  char *name;
+  const char *name;
   struct ada_symbol_info *syms;
   int nsyms;
   struct symtab *symtab;
diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l
index 93df2fb..2f9e1b3 100644
--- a/gdb/ada-lex.l
+++ b/gdb/ada-lex.l
@@ -497,7 +497,8 @@ processString (const char *text, int len)
   const char *lim = text + len;
   struct stoken result;
 
-  q = result.ptr = obstack_alloc (&temp_parse_space, len);
+  q = obstack_alloc (&temp_parse_space, len);
+  result.ptr = q;
   p = text;
   while (p < lim)
     {
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index ea19178..3b2b42a 100644
--- a/gdb/c-exp.y
+++ b/gdb/c-exp.y
@@ -970,18 +970,20 @@ qualified_name:	TYPENAME COLONCOLON name
 			{
 			  struct type *type = $1.type;
 			  struct stoken tmp_token;
+			  char *buf;
+
 			  CHECK_TYPEDEF (type);
 			  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
 			      && TYPE_CODE (type) != TYPE_CODE_UNION
 			      && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
 			    error (_("`%s' is not defined as an aggregate type."),
 				   TYPE_SAFE_NAME (type));
-
-			  tmp_token.ptr = (char*) alloca ($4.length + 2);
+			  buf = alloca ($4.length + 2);
+			  tmp_token.ptr = buf;
 			  tmp_token.length = $4.length + 1;
-			  tmp_token.ptr[0] = '~';
-			  memcpy (tmp_token.ptr+1, $4.ptr, $4.length);
-			  tmp_token.ptr[tmp_token.length] = 0;
+			  buf[0] = '~';
+			  memcpy (buf+1, $4.ptr, $4.length);
+			  buf[tmp_token.length] = 0;
 
 			  /* Check for valid destructor name.  */
 			  destructor_name_p (tmp_token.ptr, $1.type);
@@ -1651,13 +1653,16 @@ operator_stoken (const char *op)
 {
   static const char *operator_string = "operator";
   struct stoken st = { NULL, 0 };
+  char *buf;
+
   st.length = strlen (operator_string) + strlen (op);
-  st.ptr = malloc (st.length + 1);
-  strcpy (st.ptr, operator_string);
-  strcat (st.ptr, op);
+  buf = malloc (st.length + 1);
+  strcpy (buf, operator_string);
+  strcat (buf, op);
+  st.ptr = buf;
 
   /* The toplevel (c_parse) will free the memory allocated here.  */
-  make_cleanup (free, st.ptr);
+  make_cleanup (free, buf);
   return st;
 };
 
@@ -2738,7 +2743,7 @@ lex_one_token (void)
 
   tryname:
 
-  yylval.sval.ptr = (char *) tokstart;
+  yylval.sval.ptr = tokstart;
   yylval.sval.length = namelen;
 
   /* Catch specific keywords.  */
diff --git a/gdb/f-exp.y b/gdb/f-exp.y
index 9a82230..59c5e6c 100644
--- a/gdb/f-exp.y
+++ b/gdb/f-exp.y
@@ -1159,7 +1159,7 @@ yylex (void)
 	return f77_keywords[i].token;
       }
   
-  yylval.sval.ptr = (char *) tokstart;
+  yylval.sval.ptr = tokstart;
   yylval.sval.length = namelen;
   
   if (*tokstart == '$')
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index ea5ca21..6c809a4 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -1353,7 +1353,7 @@ lookup_template_type (char *name, struct type *type,
    If NAME is the name of a baseclass type, return that type.  */
 
 struct type *
-lookup_struct_elt_type (struct type *type, char *name, int noerr)
+lookup_struct_elt_type (struct type *type, const char *name, int noerr)
 {
   int i;
   char *typename;
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 0ca7a87..5e8d1e7 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -1508,7 +1508,7 @@ extern const char *type_name_no_tag (const struct type *);
 
 extern const char *type_name_no_tag_or_error (struct type *type);
 
-extern struct type *lookup_struct_elt_type (struct type *, char *, int);
+extern struct type *lookup_struct_elt_type (struct type *, const char *, int);
 
 extern struct type *make_pointer_type (struct type *, struct type **);
 
diff --git a/gdb/go-exp.y b/gdb/go-exp.y
index 166d380..01c382a 100644
--- a/gdb/go-exp.y
+++ b/gdb/go-exp.y
@@ -1295,7 +1295,7 @@ lex_one_token (void)
 
   tryname:
 
-  yylval.sval.ptr = (char *) tokstart;
+  yylval.sval.ptr = tokstart;
   yylval.sval.length = namelen;
 
   /* Catch specific keywords.  */
diff --git a/gdb/jv-exp.y b/gdb/jv-exp.y
index c69caf5..a9ad4d9 100644
--- a/gdb/jv-exp.y
+++ b/gdb/jv-exp.y
@@ -345,10 +345,13 @@ QualifiedName:
 		    $$.ptr = $1.ptr;  /* Optimization.  */
 		  else
 		    {
-		      $$.ptr = (char *) malloc ($$.length + 1);
-		      make_cleanup (free, $$.ptr);
-		      sprintf ($$.ptr, "%.*s.%.*s",
+		      char *buf;
+
+		      buf = malloc ($$.length + 1);
+		      make_cleanup (free, buf);
+		      sprintf (buf, "%.*s.%.*s",
 			       $1.length, $1.ptr, $3.length, $3.ptr);
+		      $$.ptr = buf;
 		} }
 ;
 
@@ -1175,7 +1178,7 @@ yylex (void)
       break;
     }
 
-  yylval.sval.ptr = (char *) tokstart;
+  yylval.sval.ptr = tokstart;
   yylval.sval.length = namelen;
 
   if (*tokstart == '$')
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 8b7f3bd..96f1d07 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -281,7 +281,7 @@ struct ls_parser
     char *saved_arg;
 
     /* Head of the input stream.  */
-    char **stream;
+    const char **stream;
 #define PARSER_STREAM(P) (*(P)->lexer.stream)
 
     /* The current token.  */
@@ -515,12 +515,12 @@ is_closing_quote_enclosed (const char *p)
    This helper function assists with lexing string segments
    which might contain valid (non-terminating) commas.  */
 
-static char *
-find_parameter_list_end (char *input)
+static const char *
+find_parameter_list_end (const char *input)
 {
   char end_char, start_char;
   int depth;
-  char *p;
+  const char *p;
 
   start_char = *input;
   if (start_char == '(')
@@ -557,7 +557,7 @@ static linespec_token
 linespec_lexer_lex_string (linespec_parser *parser)
 {
   linespec_token token;
-  char *start = PARSER_STREAM (parser);
+  const char *start = PARSER_STREAM (parser);
 
   token.type = LSTOKEN_STRING;
 
@@ -607,7 +607,7 @@ linespec_lexer_lex_string (linespec_parser *parser)
     }
   else
     {
-      char *p;
+      const char *p;
 
       /* Otherwise, only identifier characters are permitted.
 	 Spaces are the exception.  In general, we keep spaces,
@@ -621,7 +621,7 @@ linespec_lexer_lex_string (linespec_parser *parser)
 	{
 	  if (isspace (*PARSER_STREAM (parser)))
 	    {
-	      p = skip_spaces (PARSER_STREAM (parser));
+	      p = skip_spaces_const (PARSER_STREAM (parser));
 	      /* When we get here we know we've found something followed by
 		 a space (we skip over parens and templates below).
 		 So if we find a keyword now, we know it is a keyword and not,
@@ -681,7 +681,7 @@ linespec_lexer_lex_string (linespec_parser *parser)
 	  else if (*PARSER_STREAM (parser) == '<'
 		   || *PARSER_STREAM (parser) == '(')
 	    {
-	      char *p;
+	      const char *p;
 
 	      p = find_parameter_list_end (PARSER_STREAM (parser));
 	      if (p != NULL)
@@ -733,7 +733,7 @@ linespec_lexer_lex_one (linespec_parser *parser)
   if (parser->lexer.current.type == LSTOKEN_CONSUMED)
     {
       /* Skip any whitespace.  */
-      PARSER_STREAM (parser) = skip_spaces (PARSER_STREAM (parser));
+      PARSER_STREAM (parser) = skip_spaces_const (PARSER_STREAM (parser));
 
       /* Check for a keyword, they end the linespec.  */
       keyword = NULL;
@@ -819,7 +819,7 @@ static linespec_token
 linespec_lexer_peek_token (linespec_parser *parser)
 {
   linespec_token next;
-  char *saved_stream = PARSER_STREAM (parser);
+  const char *saved_stream = PARSER_STREAM (parser);
   linespec_token saved_token = parser->lexer.current;
 
   next = linespec_lexer_consume_token (parser);
@@ -2175,7 +2175,7 @@ parse_linespec (linespec_parser *parser, char **argptr)
   parser->keyword_ok = 0;
 
   parser->lexer.saved_arg = *argptr;
-  parser->lexer.stream = argptr;
+  parser->lexer.stream = (const char **) argptr;
   file_exception.reason = 0;
 
   /* Initialize the default symtab and line offset.  */
diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y
index 47ea640..0002e45 100644
--- a/gdb/m2-exp.y
+++ b/gdb/m2-exp.y
@@ -907,7 +907,7 @@ yylex (void)
 	  }
       if(c != quote)
 	 error (_("Unterminated string or character constant."));
-      yylval.sval.ptr = (char *) (tokstart + 1);
+      yylval.sval.ptr = tokstart + 1;
       yylval.sval.length = namelen - 1;
       lexptr += namelen + 1;
 
@@ -987,7 +987,7 @@ yylex (void)
 	 && strncmp (tokstart, keytab[i].keyw, namelen) == 0)
 	   return keytab[i].token;
 
-  yylval.sval.ptr = (char *) tokstart;
+  yylval.sval.ptr = tokstart;
   yylval.sval.length = namelen;
 
   if (*tokstart == '$')
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index 734fc5d..cf99a0f 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -426,7 +426,8 @@ start_msglist(void)
 void
 add_msglist(struct stoken *str, int addcolon)
 {
-  char *s, *p;
+  char *s;
+  const char *p;
   int len, plen;
 
   if (str == 0)			/* Unnamed arg, or...  */
diff --git a/gdb/p-exp.y b/gdb/p-exp.y
index e0abd07..ca25393 100644
--- a/gdb/p-exp.y
+++ b/gdb/p-exp.y
@@ -158,7 +158,7 @@ static char * uptok (char *, int);
 
 %{
 /* YYSTYPE gets defined by %union */
-static int parse_number (char *, int, int, YYSTYPE *);
+static int parse_number (const char *, int, int, YYSTYPE *);
 
 static struct type *current_type;
 static struct internalvar *intvar;
@@ -352,9 +352,12 @@ exp	:	exp '['
 			  if (arrayfieldindex)
 			    {
 			      struct stoken stringsval;
-			      stringsval.ptr = alloca (strlen (arrayname) + 1);
+			      char *buf;
+
+			      buf = alloca (strlen (arrayname) + 1);
+			      stringsval.ptr = buf;
 			      stringsval.length = strlen (arrayname);
-			      strcpy (stringsval.ptr, arrayname);
+			      strcpy (buf, arrayname);
 			      current_type = TYPE_FIELD_TYPE (current_type,
 				arrayfieldindex - 1);
 			      write_exp_elt_opcode (STRUCTOP_STRUCT);
@@ -591,7 +594,8 @@ exp	:	STRING
 			     the array upper bound is the string length.
 			     There is no such thing in C as a completely empty
 			     string.  */
-			  char *sp = $1.ptr; int count = $1.length;
+			  const char *sp = $1.ptr; int count = $1.length;
+
 			  while (count-- > 0)
 			    {
 			      write_exp_elt_opcode (OP_LONG);
@@ -854,7 +858,7 @@ name_not_typename :	NAME
 /*** Needs some error checking for the float case ***/
 
 static int
-parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
+parse_number (const char *p, int len, int parsed_float, YYSTYPE *putithere)
 {
   /* FIXME: Shouldn't these be unsigned?  We don't deal with negative values
      here, and we do kind of silly things like cast to unsigned.  */
diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h
index aaefe3f..ed022ad 100644
--- a/gdb/parser-defs.h
+++ b/gdb/parser-defs.h
@@ -67,7 +67,7 @@ extern int arglist_len;
 struct stoken
   {
     /* Pointer to first byte of char-string or first bit of bit-string.  */
-    char *ptr;
+    const char *ptr;
     /* Length of string in bytes for char-string or bits for bit-string.  */
     int length;
   };


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [RFA 2/4] Constify struct stoken.ptr
  2013-09-30 18:57 [RFA 2/4] Constify struct stoken.ptr Keith Seitz
@ 2013-10-01  4:12 ` Sergio Durigan Junior
  2013-10-01 20:12 ` Tom Tromey
  1 sibling, 0 replies; 3+ messages in thread
From: Sergio Durigan Junior @ 2013-10-01  4:12 UTC (permalink / raw)
  To: Keith Seitz; +Cc: gdb-patches@sourceware.org ml

On Monday, September 30 2013, Keith Seitz wrote:

> Hi,
>
> In this next patch, as I mentioned in the previous email on this
> series, the temporary casting needed for struct stoken.ptr is removed
> (stoken.ptr is made const).
>
> Again, tested, regression-free, on x86_64 Fedora 18, native and gdbserver.

Thanks again.  I didn't find anything wrong with this one.  Looks good
to me, but I can't approve it.  And I keep my comment about commiting
this series as one single patch :-).

> Keith
>
> ChangeLog
> 2013-09-24  Keith Seitz  <keiths@redhat.com>
>
> 	* ada-exp.y (write_object_renaming): Update: struct stoken.ptr
> 	is now const.
> 	(block_lookup): Make 'raw_name' and 'name' const.
> 	* ada-lex.l (processString): Update for struct stoken.ptr.
> 	* c-exp.y (qualified_name : TYPENAME COLONCOLON '~' name): Likewise.
> 	(operator_stoken): Likewise.
> 	(lex_one_token): Remove temporary cast to char * for
> 	'yylval.sval.ptr'.
> 	* f-exp.y (yylex): Likewise.
> 	* gdb-types.c (lookup_struct_elt_type): Make argument 'name' const.
> 	* gdbtypes.h (lookup_struct_elt_type): Likewisee.
> 	* go-exp.y (lex_one_token): Remove temporary cast to char * for
> 	'yylval.sval.ptr'.
> 	* jv-exp.y (QualifiedName): Update for struct stoken.ptr.
> 	(yylex): Remove temporary cast to char * for 'yylval.sval.ptr'.
> 	* linespec.c (struct ls_parser): Make 'stream' const.
> 	(find_parameter_list_end): Make argument 'input' and local
> 	variable 'p' const.
> 	(linespec_lexer_lex_string): Make local variables 'start' and
> 	'p' const.
> 	Use skip_spaces_const instead of skip_spaces.
> 	(linespec_lexer_peek_token): Make local variable 'saved_stream'
> 	const.
> 	(parse_linespec): Temporarily cast 'argptr' to const for
> 	'parser->lexer.stream'.
> 	* m2-exp.y (yylex): Remove temporary cast to char * for
> 	'yylval.sval.ptr'.
> 	* objc-lang.c (add_msglist): Make local variable 'p' const.
> 	* p-exp.y (exp : exp '['): Update for struct stoken.ptr.
> 	(exp : STRING): Make 'sp' const.
> 	(parse_number): Make argument 'p' const.
> 	* parser-defs.h (struct stoken): Make 'ptr' const.
> diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y
> index 877dfaf..5270461 100644
> --- a/gdb/ada-exp.y
> +++ b/gdb/ada-exp.y
> @@ -136,7 +136,7 @@ static void write_name_assoc (struct stoken);
>  
>  static void write_exp_op_with_string (enum exp_opcode, struct stoken);
>  
> -static struct block *block_lookup (struct block *, char *);
> +static struct block *block_lookup (struct block *, const char *);
>  
>  static LONGEST convert_char_literal (struct type *, LONGEST);
>  
> @@ -952,6 +952,8 @@ write_object_renaming (const struct block *orig_left_context,
>  	{
>  	  struct stoken field_name;
>  	  const char *end;
> +	  char *buf;
> +
>  	  renaming_expr += 1;
>  
>  	  if (slice_state != SIMPLE_INDEX)
> @@ -960,9 +962,10 @@ write_object_renaming (const struct block *orig_left_context,
>  	  if (end == NULL)
>  	    end = renaming_expr + strlen (renaming_expr);
>  	  field_name.length = end - renaming_expr;
> -	  field_name.ptr = malloc (end - renaming_expr + 1);
> -	  strncpy (field_name.ptr, renaming_expr, end - renaming_expr);
> -	  field_name.ptr[end - renaming_expr] = '\000';
> +	  buf = malloc (end - renaming_expr + 1);
> +	  field_name.ptr = buf;
> +	  strncpy (buf, renaming_expr, end - renaming_expr);
> +	  buf[end - renaming_expr] = '\000';
>  	  renaming_expr = end;
>  	  write_exp_op_with_string (STRUCTOP_STRUCT, field_name);
>  	  break;
> @@ -980,9 +983,9 @@ write_object_renaming (const struct block *orig_left_context,
>  }
>  
>  static struct block*
> -block_lookup (struct block *context, char *raw_name)
> +block_lookup (struct block *context, const char *raw_name)
>  {
> -  char *name;
> +  const char *name;
>    struct ada_symbol_info *syms;
>    int nsyms;
>    struct symtab *symtab;
> diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l
> index 93df2fb..2f9e1b3 100644
> --- a/gdb/ada-lex.l
> +++ b/gdb/ada-lex.l
> @@ -497,7 +497,8 @@ processString (const char *text, int len)
>    const char *lim = text + len;
>    struct stoken result;
>  
> -  q = result.ptr = obstack_alloc (&temp_parse_space, len);
> +  q = obstack_alloc (&temp_parse_space, len);
> +  result.ptr = q;
>    p = text;
>    while (p < lim)
>      {
> diff --git a/gdb/c-exp.y b/gdb/c-exp.y
> index ea19178..3b2b42a 100644
> --- a/gdb/c-exp.y
> +++ b/gdb/c-exp.y
> @@ -970,18 +970,20 @@ qualified_name:	TYPENAME COLONCOLON name
>  			{
>  			  struct type *type = $1.type;
>  			  struct stoken tmp_token;
> +			  char *buf;
> +
>  			  CHECK_TYPEDEF (type);
>  			  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
>  			      && TYPE_CODE (type) != TYPE_CODE_UNION
>  			      && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
>  			    error (_("`%s' is not defined as an aggregate type."),
>  				   TYPE_SAFE_NAME (type));
> -
> -			  tmp_token.ptr = (char*) alloca ($4.length + 2);
> +			  buf = alloca ($4.length + 2);
> +			  tmp_token.ptr = buf;
>  			  tmp_token.length = $4.length + 1;
> -			  tmp_token.ptr[0] = '~';
> -			  memcpy (tmp_token.ptr+1, $4.ptr, $4.length);
> -			  tmp_token.ptr[tmp_token.length] = 0;
> +			  buf[0] = '~';
> +			  memcpy (buf+1, $4.ptr, $4.length);
> +			  buf[tmp_token.length] = 0;
>  
>  			  /* Check for valid destructor name.  */
>  			  destructor_name_p (tmp_token.ptr, $1.type);
> @@ -1651,13 +1653,16 @@ operator_stoken (const char *op)
>  {
>    static const char *operator_string = "operator";
>    struct stoken st = { NULL, 0 };
> +  char *buf;
> +
>    st.length = strlen (operator_string) + strlen (op);
> -  st.ptr = malloc (st.length + 1);
> -  strcpy (st.ptr, operator_string);
> -  strcat (st.ptr, op);
> +  buf = malloc (st.length + 1);
> +  strcpy (buf, operator_string);
> +  strcat (buf, op);
> +  st.ptr = buf;
>  
>    /* The toplevel (c_parse) will free the memory allocated here.  */
> -  make_cleanup (free, st.ptr);
> +  make_cleanup (free, buf);
>    return st;
>  };
>  
> @@ -2738,7 +2743,7 @@ lex_one_token (void)
>  
>    tryname:
>  
> -  yylval.sval.ptr = (char *) tokstart;
> +  yylval.sval.ptr = tokstart;
>    yylval.sval.length = namelen;
>  
>    /* Catch specific keywords.  */
> diff --git a/gdb/f-exp.y b/gdb/f-exp.y
> index 9a82230..59c5e6c 100644
> --- a/gdb/f-exp.y
> +++ b/gdb/f-exp.y
> @@ -1159,7 +1159,7 @@ yylex (void)
>  	return f77_keywords[i].token;
>        }
>    
> -  yylval.sval.ptr = (char *) tokstart;
> +  yylval.sval.ptr = tokstart;
>    yylval.sval.length = namelen;
>    
>    if (*tokstart == '$')
> diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
> index ea5ca21..6c809a4 100644
> --- a/gdb/gdbtypes.c
> +++ b/gdb/gdbtypes.c
> @@ -1353,7 +1353,7 @@ lookup_template_type (char *name, struct type *type,
>     If NAME is the name of a baseclass type, return that type.  */
>  
>  struct type *
> -lookup_struct_elt_type (struct type *type, char *name, int noerr)
> +lookup_struct_elt_type (struct type *type, const char *name, int noerr)
>  {
>    int i;
>    char *typename;
> diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
> index 0ca7a87..5e8d1e7 100644
> --- a/gdb/gdbtypes.h
> +++ b/gdb/gdbtypes.h
> @@ -1508,7 +1508,7 @@ extern const char *type_name_no_tag (const struct type *);
>  
>  extern const char *type_name_no_tag_or_error (struct type *type);
>  
> -extern struct type *lookup_struct_elt_type (struct type *, char *, int);
> +extern struct type *lookup_struct_elt_type (struct type *, const char *, int);
>  
>  extern struct type *make_pointer_type (struct type *, struct type **);
>  
> diff --git a/gdb/go-exp.y b/gdb/go-exp.y
> index 166d380..01c382a 100644
> --- a/gdb/go-exp.y
> +++ b/gdb/go-exp.y
> @@ -1295,7 +1295,7 @@ lex_one_token (void)
>  
>    tryname:
>  
> -  yylval.sval.ptr = (char *) tokstart;
> +  yylval.sval.ptr = tokstart;
>    yylval.sval.length = namelen;
>  
>    /* Catch specific keywords.  */
> diff --git a/gdb/jv-exp.y b/gdb/jv-exp.y
> index c69caf5..a9ad4d9 100644
> --- a/gdb/jv-exp.y
> +++ b/gdb/jv-exp.y
> @@ -345,10 +345,13 @@ QualifiedName:
>  		    $$.ptr = $1.ptr;  /* Optimization.  */
>  		  else
>  		    {
> -		      $$.ptr = (char *) malloc ($$.length + 1);
> -		      make_cleanup (free, $$.ptr);
> -		      sprintf ($$.ptr, "%.*s.%.*s",
> +		      char *buf;
> +
> +		      buf = malloc ($$.length + 1);
> +		      make_cleanup (free, buf);
> +		      sprintf (buf, "%.*s.%.*s",
>  			       $1.length, $1.ptr, $3.length, $3.ptr);
> +		      $$.ptr = buf;
>  		} }
>  ;
>  
> @@ -1175,7 +1178,7 @@ yylex (void)
>        break;
>      }
>  
> -  yylval.sval.ptr = (char *) tokstart;
> +  yylval.sval.ptr = tokstart;
>    yylval.sval.length = namelen;
>  
>    if (*tokstart == '$')
> diff --git a/gdb/linespec.c b/gdb/linespec.c
> index 8b7f3bd..96f1d07 100644
> --- a/gdb/linespec.c
> +++ b/gdb/linespec.c
> @@ -281,7 +281,7 @@ struct ls_parser
>      char *saved_arg;
>  
>      /* Head of the input stream.  */
> -    char **stream;
> +    const char **stream;
>  #define PARSER_STREAM(P) (*(P)->lexer.stream)
>  
>      /* The current token.  */
> @@ -515,12 +515,12 @@ is_closing_quote_enclosed (const char *p)
>     This helper function assists with lexing string segments
>     which might contain valid (non-terminating) commas.  */
>  
> -static char *
> -find_parameter_list_end (char *input)
> +static const char *
> +find_parameter_list_end (const char *input)
>  {
>    char end_char, start_char;
>    int depth;
> -  char *p;
> +  const char *p;
>  
>    start_char = *input;
>    if (start_char == '(')
> @@ -557,7 +557,7 @@ static linespec_token
>  linespec_lexer_lex_string (linespec_parser *parser)
>  {
>    linespec_token token;
> -  char *start = PARSER_STREAM (parser);
> +  const char *start = PARSER_STREAM (parser);
>  
>    token.type = LSTOKEN_STRING;
>  
> @@ -607,7 +607,7 @@ linespec_lexer_lex_string (linespec_parser *parser)
>      }
>    else
>      {
> -      char *p;
> +      const char *p;
>  
>        /* Otherwise, only identifier characters are permitted.
>  	 Spaces are the exception.  In general, we keep spaces,
> @@ -621,7 +621,7 @@ linespec_lexer_lex_string (linespec_parser *parser)
>  	{
>  	  if (isspace (*PARSER_STREAM (parser)))
>  	    {
> -	      p = skip_spaces (PARSER_STREAM (parser));
> +	      p = skip_spaces_const (PARSER_STREAM (parser));
>  	      /* When we get here we know we've found something followed by
>  		 a space (we skip over parens and templates below).
>  		 So if we find a keyword now, we know it is a keyword and not,
> @@ -681,7 +681,7 @@ linespec_lexer_lex_string (linespec_parser *parser)
>  	  else if (*PARSER_STREAM (parser) == '<'
>  		   || *PARSER_STREAM (parser) == '(')
>  	    {
> -	      char *p;
> +	      const char *p;
>  
>  	      p = find_parameter_list_end (PARSER_STREAM (parser));
>  	      if (p != NULL)
> @@ -733,7 +733,7 @@ linespec_lexer_lex_one (linespec_parser *parser)
>    if (parser->lexer.current.type == LSTOKEN_CONSUMED)
>      {
>        /* Skip any whitespace.  */
> -      PARSER_STREAM (parser) = skip_spaces (PARSER_STREAM (parser));
> +      PARSER_STREAM (parser) = skip_spaces_const (PARSER_STREAM (parser));
>  
>        /* Check for a keyword, they end the linespec.  */
>        keyword = NULL;
> @@ -819,7 +819,7 @@ static linespec_token
>  linespec_lexer_peek_token (linespec_parser *parser)
>  {
>    linespec_token next;
> -  char *saved_stream = PARSER_STREAM (parser);
> +  const char *saved_stream = PARSER_STREAM (parser);
>    linespec_token saved_token = parser->lexer.current;
>  
>    next = linespec_lexer_consume_token (parser);
> @@ -2175,7 +2175,7 @@ parse_linespec (linespec_parser *parser, char **argptr)
>    parser->keyword_ok = 0;
>  
>    parser->lexer.saved_arg = *argptr;
> -  parser->lexer.stream = argptr;
> +  parser->lexer.stream = (const char **) argptr;
>    file_exception.reason = 0;
>  
>    /* Initialize the default symtab and line offset.  */
> diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y
> index 47ea640..0002e45 100644
> --- a/gdb/m2-exp.y
> +++ b/gdb/m2-exp.y
> @@ -907,7 +907,7 @@ yylex (void)
>  	  }
>        if(c != quote)
>  	 error (_("Unterminated string or character constant."));
> -      yylval.sval.ptr = (char *) (tokstart + 1);
> +      yylval.sval.ptr = tokstart + 1;
>        yylval.sval.length = namelen - 1;
>        lexptr += namelen + 1;
>  
> @@ -987,7 +987,7 @@ yylex (void)
>  	 && strncmp (tokstart, keytab[i].keyw, namelen) == 0)
>  	   return keytab[i].token;
>  
> -  yylval.sval.ptr = (char *) tokstart;
> +  yylval.sval.ptr = tokstart;
>    yylval.sval.length = namelen;
>  
>    if (*tokstart == '$')
> diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
> index 734fc5d..cf99a0f 100644
> --- a/gdb/objc-lang.c
> +++ b/gdb/objc-lang.c
> @@ -426,7 +426,8 @@ start_msglist(void)
>  void
>  add_msglist(struct stoken *str, int addcolon)
>  {
> -  char *s, *p;
> +  char *s;
> +  const char *p;
>    int len, plen;
>  
>    if (str == 0)			/* Unnamed arg, or...  */
> diff --git a/gdb/p-exp.y b/gdb/p-exp.y
> index e0abd07..ca25393 100644
> --- a/gdb/p-exp.y
> +++ b/gdb/p-exp.y
> @@ -158,7 +158,7 @@ static char * uptok (char *, int);
>  
>  %{
>  /* YYSTYPE gets defined by %union */
> -static int parse_number (char *, int, int, YYSTYPE *);
> +static int parse_number (const char *, int, int, YYSTYPE *);
>  
>  static struct type *current_type;
>  static struct internalvar *intvar;
> @@ -352,9 +352,12 @@ exp	:	exp '['
>  			  if (arrayfieldindex)
>  			    {
>  			      struct stoken stringsval;
> -			      stringsval.ptr = alloca (strlen (arrayname) + 1);
> +			      char *buf;
> +
> +			      buf = alloca (strlen (arrayname) + 1);
> +			      stringsval.ptr = buf;
>  			      stringsval.length = strlen (arrayname);
> -			      strcpy (stringsval.ptr, arrayname);
> +			      strcpy (buf, arrayname);
>  			      current_type = TYPE_FIELD_TYPE (current_type,
>  				arrayfieldindex - 1);
>  			      write_exp_elt_opcode (STRUCTOP_STRUCT);
> @@ -591,7 +594,8 @@ exp	:	STRING
>  			     the array upper bound is the string length.
>  			     There is no such thing in C as a completely empty
>  			     string.  */
> -			  char *sp = $1.ptr; int count = $1.length;
> +			  const char *sp = $1.ptr; int count = $1.length;
> +
>  			  while (count-- > 0)
>  			    {
>  			      write_exp_elt_opcode (OP_LONG);
> @@ -854,7 +858,7 @@ name_not_typename :	NAME
>  /*** Needs some error checking for the float case ***/
>  
>  static int
> -parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
> +parse_number (const char *p, int len, int parsed_float, YYSTYPE *putithere)
>  {
>    /* FIXME: Shouldn't these be unsigned?  We don't deal with negative values
>       here, and we do kind of silly things like cast to unsigned.  */
> diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h
> index aaefe3f..ed022ad 100644
> --- a/gdb/parser-defs.h
> +++ b/gdb/parser-defs.h
> @@ -67,7 +67,7 @@ extern int arglist_len;
>  struct stoken
>    {
>      /* Pointer to first byte of char-string or first bit of bit-string.  */
> -    char *ptr;
> +    const char *ptr;
>      /* Length of string in bytes for char-string or bits for bit-string.  */
>      int length;
>    };

-- 
Sergio

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [RFA 2/4] Constify struct stoken.ptr
  2013-09-30 18:57 [RFA 2/4] Constify struct stoken.ptr Keith Seitz
  2013-10-01  4:12 ` Sergio Durigan Junior
@ 2013-10-01 20:12 ` Tom Tromey
  1 sibling, 0 replies; 3+ messages in thread
From: Tom Tromey @ 2013-10-01 20:12 UTC (permalink / raw)
  To: Keith Seitz; +Cc: gdb-patches@sourceware.org ml

>>>>> "Keith" == Keith Seitz <keiths@redhat.com> writes:

Keith> In this next patch, as I mentioned in the previous email on this
Keith> series, the temporary casting needed for struct stoken.ptr is removed
Keith> (stoken.ptr is made const).

This is ok.
Thanks again, I think this series is quite nice.

[linespec]
Keith> +  parser->lexer.stream = (const char **) argptr;

I have a feeling maybe this is fixed on my constification branch.
Can't remember for sure though.

Tom

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-10-01 20:12 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-30 18:57 [RFA 2/4] Constify struct stoken.ptr Keith Seitz
2013-10-01  4:12 ` Sergio Durigan Junior
2013-10-01 20:12 ` Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).