This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA 4/4] Constify parse_linesepc


On Monday, September 30 2013, Keith Seitz wrote:

> Hi,
>
> This last patch const-ifies a fair bit of linespec.c around parse_linespec.

Looks good too, but I can't approve it.

Thanks again!

> Tested as in all previous patches.
>
> Keith
>
> ChangeLog
> 2013-09-24  Keith Seitz  <keiths@redhat.com>
>
> 	* linespec.c (struct ls_parser): Make 'saved_arg' const.
> 	(parse_linespec): Make 'argptr' const.
> 	Remove temporary cast of 'argptr' to const char **.
> 	(decode_line_full): Pass const pointer to parse_linespec.
> 	(decode_line_1): Likewise.
> 	(decode_objc): Make local variable 'new_argptr' const.
> 	(find_function_symbols): Remove temporary cast to char *
> 	to find_imps.
> 	* objc-lang.c (find_imps): Make argument 'method' const.
> 	Return const.
> 	* objc-lang.h (find_imps): Likewise.
> diff --git a/gdb/linespec.c b/gdb/linespec.c
> index 96f1d07..9468f26 100644
> --- a/gdb/linespec.c
> +++ b/gdb/linespec.c
> @@ -278,7 +278,7 @@ struct ls_parser
>    struct
>    {
>      /* Save head of input stream.  */
> -    char *saved_arg;
> +    const char *saved_arg;
>  
>      /* Head of the input stream.  */
>      const char **stream;
> @@ -320,7 +320,7 @@ static CORE_ADDR linespec_expression_to_pc (const char **exp_ptr);
>  
>  static struct symtabs_and_lines decode_objc (struct linespec_state *self,
>  					     linespec_p ls,
> -					     char **argptr);
> +					     const char **argptr);
>  
>  static VEC (symtab_ptr) *symtabs_from_filename (const char *);
>  
> @@ -2144,7 +2144,7 @@ convert_linespec_to_sals (struct linespec_state *state, linespec_p ls)
>  /* Parse the linespec in ARGPTR.  */
>  
>  static struct symtabs_and_lines
> -parse_linespec (linespec_parser *parser, char **argptr)
> +parse_linespec (linespec_parser *parser, const char **argptr)
>  {
>    linespec_token token;
>    struct symtabs_and_lines values;
> @@ -2175,7 +2175,7 @@ parse_linespec (linespec_parser *parser, char **argptr)
>    parser->keyword_ok = 0;
>  
>    parser->lexer.saved_arg = *argptr;
> -  parser->lexer.stream = (const char **) argptr;
> +  parser->lexer.stream = argptr;
>    file_exception.reason = 0;
>  
>    /* Initialize the default symtab and line offset.  */
> @@ -2426,6 +2426,7 @@ decode_line_full (char **argptr, int flags,
>    VEC (const_char_ptr) *filters = NULL;
>    linespec_parser parser;
>    struct linespec_state *state;
> +  const char *copy, *orig;
>  
>    gdb_assert (canonical != NULL);
>    /* The filter only makes sense for 'all'.  */
> @@ -2441,7 +2442,9 @@ decode_line_full (char **argptr, int flags,
>    cleanups = make_cleanup (linespec_parser_delete, &parser);
>    save_current_program_space ();
>  
> -  result = parse_linespec (&parser, argptr);
> +  orig = copy = *argptr;
> +  result = parse_linespec (&parser, &copy);
> +  *argptr += copy - orig;
>    state = PARSER_STATE (&parser);
>  
>    gdb_assert (result.nelts == 1 || canonical->pre_expanded);
> @@ -2496,13 +2499,16 @@ decode_line_1 (char **argptr, int flags,
>    struct symtabs_and_lines result;
>    linespec_parser parser;
>    struct cleanup *cleanups;
> +  const char *copy, *orig;
>  
>    linespec_parser_new (&parser, flags, current_language, default_symtab,
>  		       default_line, NULL);
>    cleanups = make_cleanup (linespec_parser_delete, &parser);
>    save_current_program_space ();
>  
> -  result = parse_linespec (&parser, argptr);
> +  orig = copy = *argptr;
> +  result = parse_linespec (&parser, &copy);
> +  *argptr += copy - orig;
>  
>    do_cleanups (cleanups);
>    return result;
> @@ -2602,12 +2608,12 @@ linespec_expression_to_pc (const char **exp_ptr)
>     the existing C++ code to let the user choose one.  */
>  
>  static struct symtabs_and_lines
> -decode_objc (struct linespec_state *self, linespec_p ls, char **argptr)
> +decode_objc (struct linespec_state *self, linespec_p ls, const char **argptr)
>  {
>    struct collect_info info;
>    VEC (const_char_ptr) *symbol_names = NULL;
>    struct symtabs_and_lines values;
> -  char *new_argptr;
> +  const char *new_argptr;
>    struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
>  					  &symbol_names);
>  
> @@ -3053,7 +3059,7 @@ find_function_symbols (struct linespec_state *state,
>    info.file_symtabs = file_symtabs;
>  
>    /* Try NAME as an Objective-C selector.  */
> -  find_imps ((char *) name, &symbol_names);
> +  find_imps (name, &symbol_names);
>    if (!VEC_empty (const_char_ptr, symbol_names))
>      add_all_symbol_names_from_pspace (&info, NULL, symbol_names);
>    else
> diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
> index cf99a0f..bcce435 100644
> --- a/gdb/objc-lang.c
> +++ b/gdb/objc-lang.c
> @@ -1072,7 +1072,7 @@ uniquify_strings (VEC (const_char_ptr) **strings)
>  }
>  
>  /* 
> - * Function: find_imps (char *selector, struct symbol **sym_arr)
> + * Function: find_imps (const char *selector, struct symbol **sym_arr)
>   *
>   * Input:  a string representing a selector
>   *         a pointer to an array of symbol pointers
> @@ -1101,8 +1101,8 @@ uniquify_strings (VEC (const_char_ptr) **strings)
>   *       be the index of the first non-debuggable one).
>   */
>  
> -char *
> -find_imps (char *method, VEC (const_char_ptr) **symbol_names)
> +const char *
> +find_imps (const char *method, VEC (const_char_ptr) **symbol_names)
>  {
>    char type = '\0';
>    char *class = NULL;
> diff --git a/gdb/objc-lang.h b/gdb/objc-lang.h
> index 23fac1b..2409363 100644
> --- a/gdb/objc-lang.h
> +++ b/gdb/objc-lang.h
> @@ -36,7 +36,8 @@ extern char *objc_demangle (const char *mangled, int options);
>  
>  extern int find_objc_msgcall (CORE_ADDR pc, CORE_ADDR *new_pc);
>  
> -extern char *find_imps (char *method, VEC (const_char_ptr) **symbol_names);
> +extern const char *
> +  find_imps (const char *method, VEC (const_char_ptr) **symbol_names);
>  
>  extern struct value *value_nsstring (struct gdbarch *gdbarch,
>  				     char *ptr, int len);

-- 
Sergio


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]