From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17102 invoked by alias); 23 Aug 2015 18:03:07 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 17089 invoked by uid 89); 23 Aug 2015 18:03:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.3 required=5.0 tests=AWL,BAYES_50,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-pd0-f172.google.com Received: from mail-pd0-f172.google.com (HELO mail-pd0-f172.google.com) (209.85.192.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sun, 23 Aug 2015 18:03:00 +0000 Received: by pdob1 with SMTP id b1so44444526pdo.2 for ; Sun, 23 Aug 2015 11:02:58 -0700 (PDT) X-Received: by 10.70.34.228 with SMTP id c4mr37806555pdj.114.1440352978282; Sun, 23 Aug 2015 11:02:58 -0700 (PDT) Received: from seba.sebabeach.org.gmail.com (173-13-178-53-sfba.hfc.comcastbusiness.net. [173.13.178.53]) by smtp.gmail.com with ESMTPSA id ud2sm14657968pab.45.2015.08.23.11.02.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Aug 2015 11:02:57 -0700 (PDT) From: Doug Evans To: Keith Seitz Cc: gdb-patches@sourceware.org Subject: Re: [PATCH v3 19/19] Remove the vector return result from the completion API. References: <20150806191404.32159.50755.stgit@valrhona.uglyboxes.com> <20150806192149.32159.83473.stgit@valrhona.uglyboxes.com> Date: Sun, 23 Aug 2015 18:03:00 -0000 In-Reply-To: <20150806192149.32159.83473.stgit@valrhona.uglyboxes.com> (Keith Seitz's message of "Thu, 06 Aug 2015 12:22:09 -0700") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2015-08/txt/msg00660.txt.bz2 Keith Seitz writes: > Differences in this revision: > > 1. Updated new TUI completion functions. > > --- > > This patch completes the redesign of the completion and completion- > limiting API. Since the completer's internal data is now responsible > for tracking all completions and the result of the completion operation > no longer uses vectors (except for the final list given to readline), > we can remove the vectors from the API entirely. > > gdb/ChangeLog > > * command.h (completer_ftype): Change return type from > VEC (char_ptr) * to void. Update all users of this definition. > * completer.h (add_completion): Remove vector argument. > All users updated. > * symtab.c (free_completion_list): Remove. > (do_free_completion_list): Remove. > (return_val): Remove global. Hi. Just a couple of nits. > diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c > index 5df08be..5effb48 100644 > --- a/gdb/ada-lang.c > +++ b/gdb/ada-lang.c > @@ -6199,8 +6199,7 @@ symbol_completion_match (const char *sym_name, > encoded). */ > > static enum add_completion_status > -symbol_completion_add (VEC(char_ptr) **sv, > - struct completer_data *cdata, > +symbol_completion_add (struct completer_data *cdata, > const char *sym_name, > const char *text, int text_len, > const char *orig_text, const char *word, > @@ -6213,14 +6212,13 @@ symbol_completion_add (VEC(char_ptr) **sv, > > /* We found a match, so add the appropriate completion to the given > string vector. */ > - return add_completion (cdata, sv, match, orig_text, word); > + return add_completion (cdata, match, orig_text, word); > } > > /* An object of this type is passed as the user_data argument to the > expand_symtabs_matching method. */ > struct add_partial_datum > { > - VEC(char_ptr) **completions; > const char *text; > int text_len; > const char *text0; > @@ -6243,7 +6241,7 @@ ada_complete_symbol_matcher (const char *name, void *user_data) > /* Return a list of possible symbol names completing TEXT0. WORD is > the entire command on which completion is made. */ > > -static VEC (char_ptr) * > +static void > ada_make_symbol_completion_list (struct completer_data *cdata, > const char *text0, const char *word, > enum type_code code) > @@ -6252,7 +6250,6 @@ ada_make_symbol_completion_list (struct completer_data *cdata, > int text_len; > int wild_match_p; > int encoded_p; > - VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128); > struct symbol *sym; > struct compunit_symtab *s; > struct minimal_symbol *msymbol; > @@ -6293,7 +6290,6 @@ ada_make_symbol_completion_list (struct completer_data *cdata, > { > struct add_partial_datum data; > > - data.completions = &completions; > data.text = text; > data.text_len = text_len; > data.text0 = text0; > @@ -6312,14 +6308,13 @@ ada_make_symbol_completion_list (struct completer_data *cdata, > ALL_MSYMBOLS (objfile, msymbol) > { > QUIT; > - status = symbol_completion_add (&completions, cdata, > - MSYMBOL_LINKAGE_NAME (msymbol), > - text, text_len, text0, word, > - wild_match_p, encoded_p); > + status = symbol_completion_add (cdata, MSYMBOL_LINKAGE_NAME (msymbol), > + text, text_len, text0, word, > + wild_match_p, encoded_p); > if (status == ADD_COMPLETION_MAX_REACHED) > { > do_cleanups (old_chain); > - return completions; > + return; > } > } > > @@ -6333,14 +6328,13 @@ ada_make_symbol_completion_list (struct completer_data *cdata, > > ALL_BLOCK_SYMBOLS (b, iter, sym) > { > - status = symbol_completion_add (&completions, cdata, > - SYMBOL_LINKAGE_NAME (sym), > - text, text_len, text0, word, > - wild_match_p, encoded_p); > + status = symbol_completion_add (cdata, SYMBOL_LINKAGE_NAME (sym), > + text, text_len, text0, word, > + wild_match_p, encoded_p); > if (status == ADD_COMPLETION_MAX_REACHED) > { > do_cleanups (old_chain); > - return completions; > + return; > } > } > } > @@ -6354,14 +6348,13 @@ ada_make_symbol_completion_list (struct completer_data *cdata, > b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK); > ALL_BLOCK_SYMBOLS (b, iter, sym) > { > - status = symbol_completion_add (&completions, cdata, > - SYMBOL_LINKAGE_NAME (sym), > - text, text_len, text0, word, > - wild_match_p, encoded_p); > + status = symbol_completion_add (cdata,SYMBOL_LINKAGE_NAME (sym), > + text, text_len, text0, word, > + wild_match_p, encoded_p); > if (status == ADD_COMPLETION_MAX_REACHED) > { > do_cleanups (old_chain); > - return completions; > + return; > } > } > } > @@ -6375,20 +6368,18 @@ ada_make_symbol_completion_list (struct completer_data *cdata, > continue; > ALL_BLOCK_SYMBOLS (b, iter, sym) > { > - status = symbol_completion_add (&completions, cdata, > - SYMBOL_LINKAGE_NAME (sym), > - text, text_len, text0, word, > - wild_match_p, encoded_p); > + status = symbol_completion_add (cdata, SYMBOL_LINKAGE_NAME (sym), > + text, text_len, text0, word, > + wild_match_p, encoded_p); > if (status == ADD_COMPLETION_MAX_REACHED) > { > do_cleanups (old_chain); > - return completions; > + return; > } > } > } > > do_cleanups (old_chain); > - return completions; > } > > /* Field Access */ > diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c > index 4677132..a542826 100644 > --- a/gdb/break-catch-syscall.c > +++ b/gdb/break-catch-syscall.c > @@ -591,17 +591,17 @@ catching_syscall_number (int syscall_number) > } > > /* Complete syscall names. Used by "catch syscall". */ > -static VEC (char_ptr) * > +static void > catch_syscall_completer (struct completer_data *cdata, > struct cmd_list_element *cmd, > const char *text, const char *word) > { > const char **list = get_syscall_names (get_current_arch ()); > - VEC (char_ptr) *retlist > - = (list == NULL) ? NULL : complete_on_enum (cdata, list, word, word); > + > + if (list != NULL) > + complete_on_enum (cdata, list, word, word); > > xfree (list); > - return retlist; > } > > static void > diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c > index 24243c4..08901ae 100644 > --- a/gdb/breakpoint.c > +++ b/gdb/breakpoint.c > @@ -1032,7 +1032,7 @@ set_breakpoint_condition (struct breakpoint *b, const char *exp, > > /* Completion for the "condition" command. */ > > -static VEC (char_ptr) * > +static void > condition_completer (struct completer_data *cdata, > struct cmd_list_element *cmd, > const char *text, const char *word) > @@ -1045,14 +1045,13 @@ condition_completer (struct completer_data *cdata, > { > int len; > struct breakpoint *b; > - VEC (char_ptr) *result = NULL; > > if (text[0] == '$') > { > /* We don't support completion of history indices. */ > - if (isdigit (text[1])) > - return NULL; > - return complete_internalvar (cdata, &text[1]); > + if (!isdigit (text[1])) > + complete_internalvar (cdata, &text[1]); > + return; > } > > /* We're completing the breakpoint number. */ > @@ -1066,18 +1065,18 @@ condition_completer (struct completer_data *cdata, > > if (strncmp (number, text, len) == 0) > { > - if (add_completion (cdata, &result, number, NULL, NULL) > + if (add_completion (cdata, number, NULL, NULL) > == ADD_COMPLETION_MAX_REACHED) > break; > } > } > > - return result; > + return; > } > > /* We're completing the expression part. */ > text = skip_spaces_const (space); > - return expression_completer (cdata, cmd, text, word); > + expression_completer (cdata, cmd, text, word); > } > > /* condition N EXP -- set break condition of breakpoint N to EXP. */ > diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c > index 9691fd1..9e7bf80 100644 > --- a/gdb/cli/cli-decode.c > +++ b/gdb/cli/cli-decode.c > @@ -647,7 +647,7 @@ add_setshow_optional_filename_cmd (const char *name, enum command_class theclass > /* Completes on literal "unlimited". Used by integer commands that > support a special "unlimited" value. */ > > -static VEC (char_ptr) * > +static void > integer_unlimited_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > @@ -658,7 +658,7 @@ integer_unlimited_completer (struct completer_data *cdata, > NULL, > }; > > - return complete_on_enum (cdata, keywords, text, word); > + complete_on_enum (cdata, keywords, text, word); > } > > /* Add element named NAME to both the set and show command LISTs (the > @@ -1757,22 +1757,21 @@ lookup_cmd_composition (const char *text, > > /* Helper function for SYMBOL_COMPLETION_FUNCTION. */ > > -/* Return a vector of char pointers which point to the different > - possible completions in LIST of TEXT. > +/* Add completions to CDATA for the different possible completions > + in LIST of TEXT. > > WORD points in the same buffer as TEXT, and completions should be > returned relative to this position. For example, suppose TEXT is > "foo" and we want to complete to "foobar". If WORD is "oo", return > "oobar"; if WORD is "baz/foo", return "baz/foobar". */ > > -VEC (char_ptr) * > +void > complete_on_cmdlist (struct completer_data *cdata, > struct cmd_list_element *list, > const char *text, const char *word, > int ignore_help_classes) > { > struct cmd_list_element *ptr; > - VEC (char_ptr) *matchlist = NULL; > int textlen = strlen (text); > int pass; > int saw_deprecated_match = 0; > @@ -1798,35 +1797,32 @@ complete_on_cmdlist (struct completer_data *cdata, > } > } > > - if (add_completion (cdata, &matchlist, ptr->name, text, word) > + if (add_completion (cdata, ptr->name, text, word) > == ADD_COMPLETION_MAX_REACHED) > - return matchlist; > + return; > } > /* If we saw no matching deprecated commands in the first pass, > just bail out. */ > if (!saw_deprecated_match) > break; > } > - > - return matchlist; > } > > /* Helper function for SYMBOL_COMPLETION_FUNCTION. */ > > -/* Return a vector of char pointers which point to the different > - possible completions in CMD of TEXT. > +/* Add completions to CDATA for the different possible completions in > + CMD of TEXT. > > WORD points in the same buffer as TEXT, and completions should be > returned relative to this position. For example, suppose TEXT is "foo" > and we want to complete to "foobar". If WORD is "oo", return > "oobar"; if WORD is "baz/foo", return "baz/foobar". */ > > -VEC (char_ptr) * > +void > complete_on_enum (struct completer_data *cdata, > const char *const *enumlist, > const char *text, const char *word) > { > - VEC (char_ptr) *matchlist = NULL; > int textlen = strlen (text); > int i; > const char *name; > @@ -1834,12 +1830,10 @@ complete_on_enum (struct completer_data *cdata, > for (i = 0; (name = enumlist[i]) != NULL; i++) > if (strncmp (name, text, textlen) == 0) > { > - if (add_completion (cdata, &matchlist, name, text, word) > + if (add_completion (cdata, name, text, word) > == ADD_COMPLETION_MAX_REACHED) > break; > } > - > - return matchlist; > } > > > diff --git a/gdb/command.h b/gdb/command.h > index b2aeb30..82872c0 100644 > --- a/gdb/command.h > +++ b/gdb/command.h > @@ -158,9 +158,9 @@ typedef void cmd_sfunc_ftype (char *args, int from_tty, > extern void set_cmd_sfunc (struct cmd_list_element *cmd, > cmd_sfunc_ftype *sfunc); > > -typedef VEC (char_ptr) *completer_ftype (struct completer_data *, > - struct cmd_list_element *, > - const char *, const char *); > +typedef void completer_ftype (struct completer_data *, > + struct cmd_list_element *, > + const char *, const char *); > > typedef void completer_ftype_void (struct cmd_list_element *, > const char *, const char *); > @@ -228,13 +228,13 @@ extern struct cmd_list_element *add_info (const char *, > extern struct cmd_list_element *add_info_alias (const char *, const char *, > int); > > -extern VEC (char_ptr) *complete_on_cmdlist (struct completer_data *, > - struct cmd_list_element *, > - const char *, const char *, int); > +extern void complete_on_cmdlist (struct completer_data *, > + struct cmd_list_element *, > + const char *, const char *, int); > > -extern VEC (char_ptr) *complete_on_enum (struct completer_data *, > - const char *const *enumlist, > - const char *, const char *); > +extern void complete_on_enum (struct completer_data *, > + const char *const *enumlist, > + const char *, const char *); > > /* Functions that implement commands about CLI commands. */ > > diff --git a/gdb/completer.c b/gdb/completer.c > index 6faed31..2ca7d2d 100644 > --- a/gdb/completer.c > +++ b/gdb/completer.c > @@ -144,22 +144,23 @@ readline_line_completion_function (const char *text, int matches) > > /* This can be used for functions which don't want to complete on > symbols but don't want to complete on anything else either. */ > -VEC (char_ptr) * > + > +void > noop_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *prefix) > { > - return NULL; > + /* Nothing. */ > } > > /* Complete on filenames. */ > -VEC (char_ptr) * > + > +void > filename_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > { > int subsequent_name; > - VEC (char_ptr) *return_val = NULL; > > subsequent_name = 0; > while (1) > @@ -182,7 +183,7 @@ filename_completer (struct completer_data *cdata, > continue; > } > > - if (add_completion (cdata, &return_val, p, text, word) > + if (add_completion (cdata, p, text, word) > == ADD_COMPLETION_MAX_REACHED) > break; > } > @@ -194,7 +195,6 @@ filename_completer (struct completer_data *cdata, > with respect to inserting quotes. */ > rl_completer_word_break_characters = ""; > #endif > - return return_val; > } > > /* A hashtable traversal function to remove leading file name > @@ -220,14 +220,12 @@ remove_leading_fn_component (void **slot, void *calldata) > This is intended to be used in commands that set breakpoints > etc. */ > > -VEC (char_ptr) * > +void > location_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > { > int n_syms, n_files, ix; > - VEC (char_ptr) *fn_list = NULL; > - VEC (char_ptr) *list = NULL; > const char *p; > int quote_found = 0; > int quoted = *text == '\'' || *text == '"'; > @@ -298,15 +296,15 @@ location_completer (struct completer_data *cdata, > symbols as well as on files. */ > if (colon) > { > - list = make_file_symbol_completion_list (cdata, symbol_start, word, > - file_to_match); > + make_file_symbol_completion_list (cdata, symbol_start, word, > + file_to_match); > n_syms = get_completion_count (cdata); > n_files = 0; > xfree (file_to_match); > } > else > { > - list = make_symbol_completion_list (cdata, symbol_start, word); > + make_symbol_completion_list (cdata, symbol_start, word); > n_syms = get_completion_count (cdata); > n_files = 0; > /* If text includes characters which cannot appear in a file > @@ -314,27 +312,11 @@ location_completer (struct completer_data *cdata, > if (strcspn (text, > gdb_completer_file_name_break_characters) == text_len) > { > - fn_list = make_source_files_completion_list (cdata, text, text); > + make_source_files_completion_list (cdata, text, text); > n_files = get_completion_count (cdata) - n_syms; > } > } > > - /* Catenate fn_list[] onto the end of list[]. */ > - if (!n_syms) > - { > - VEC_free (char_ptr, list); /* Paranoia. */ > - list = fn_list; > - fn_list = NULL; > - } > - else > - { > - char *fn; > - > - for (ix = 0; VEC_iterate (char_ptr, fn_list, ix, fn); ++ix) > - VEC_safe_push (char_ptr, list, fn); > - VEC_free (char_ptr, fn_list); > - } > - > if (n_syms && n_files) > { > /* Nothing. */ > @@ -365,18 +347,15 @@ location_completer (struct completer_data *cdata, > { > /* No completions at all. As the final resort, try completing > on the entire text as a symbol. */ > - list = make_symbol_completion_list (cdata, orig_text, word); > + make_symbol_completion_list (cdata, orig_text, word); > } > - > - return list; > } > > /* Helper for expression_completer which recursively adds field and > method names from TYPE, a struct or union type, to the array > OUTPUT. */ ==== Function comment needs updating. > static void > -add_struct_fields (struct completer_data *cdata, > - struct type *type, VEC (char_ptr) **output, > +add_struct_fields (struct completer_data *cdata, struct type *type, > char *fieldname, int namelen) > { > int i; > @@ -388,7 +367,7 @@ add_struct_fields (struct completer_data *cdata, > { > if (i < TYPE_N_BASECLASSES (type)) > add_struct_fields (cdata, TYPE_BASECLASS (type, i), > - output, fieldname, namelen); > + fieldname, namelen); > else if (TYPE_FIELD_NAME (type, i)) > { > if (TYPE_FIELD_NAME (type, i)[0] != '\0') > @@ -396,7 +375,7 @@ add_struct_fields (struct completer_data *cdata, > if (! strncmp (TYPE_FIELD_NAME (type, i), > fieldname, namelen)) > { > - if (add_completion (cdata, output, TYPE_FIELD_NAME (type, i), > + if (add_completion (cdata, TYPE_FIELD_NAME (type, i), > NULL, NULL) > == ADD_COMPLETION_MAX_REACHED) > return; > @@ -406,7 +385,7 @@ add_struct_fields (struct completer_data *cdata, > { > /* Recurse into anonymous unions. */ > add_struct_fields (cdata, TYPE_FIELD_TYPE (type, i), > - output, fieldname, namelen); > + fieldname, namelen); > } > } > } > @@ -425,7 +404,7 @@ add_struct_fields (struct completer_data *cdata, > /* Omit constructors from the completion list. */ > if (!type_name || strcmp (type_name, name)) > { > - if (add_completion (cdata, output, name, NULL, NULL) > + if (add_completion (cdata, name, NULL, NULL) > == ADD_COMPLETION_MAX_REACHED) > return; > } > @@ -436,7 +415,8 @@ add_struct_fields (struct completer_data *cdata, > /* Complete on expressions. Often this means completing on symbol > names, but some language parsers also have support for completing > field names. */ > -VEC (char_ptr) * > + > +void > expression_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > @@ -455,7 +435,7 @@ expression_completer (struct completer_data *cdata, > } > CATCH (except, RETURN_MASK_ERROR) > { > - return NULL; > + return; > } > END_CATCH > > @@ -474,22 +454,19 @@ expression_completer (struct completer_data *cdata, > || TYPE_CODE (type) == TYPE_CODE_STRUCT) > { > int flen = strlen (fieldname); > - VEC (char_ptr) *result = NULL; > > - add_struct_fields (cdata, type, &result, fieldname, flen); > + add_struct_fields (cdata, type, fieldname, flen); > xfree (fieldname); > - return result; > + return; > } > } > else if (fieldname && code != TYPE_CODE_UNDEF) > { > - VEC (char_ptr) *result; > struct cleanup *cleanup = make_cleanup (xfree, fieldname); > > - result > - = make_symbol_completion_type (cdata, fieldname, fieldname, code); > + make_symbol_completion_type (cdata, fieldname, fieldname, code); > do_cleanups (cleanup); > - return result; > + return; > } > xfree (fieldname); > > @@ -501,7 +478,7 @@ expression_completer (struct completer_data *cdata, > ; > > /* Not ideal but it is what we used to do before... */ > - return location_completer (cdata, ignore, p, word); > + location_completer (cdata, ignore, p, word); > } > > /* See definition in completer.h. */ > @@ -578,12 +555,11 @@ complete_line_internal_reason; > once sub-command completions are exhausted, we simply return NULL. > */ > > -static VEC (char_ptr) * > +static void > complete_line_internal (struct completer_data *cdata, > const char *text, const char *line_buffer, int point, > complete_line_internal_reason reason) > { > - VEC (char_ptr) *list = NULL; > char *tmp_command; > const char *p; > int ignore_help_classes; > @@ -638,7 +614,7 @@ complete_line_internal (struct completer_data *cdata, > { > /* It is an unrecognized command. So there are no > possible completions. */ > - list = NULL; > + return; > } > else if (c == CMD_LIST_AMBIGUOUS) > { > @@ -656,7 +632,7 @@ complete_line_internal (struct completer_data *cdata, > example, "info t " or "info t foo" does not complete > to anything, because "info t" can be "info target" or > "info terminal". */ > - list = NULL; > + return; > } > else > { > @@ -665,14 +641,14 @@ complete_line_internal (struct completer_data *cdata, > if (result_list) > { > if (reason != handle_brkchars) > - list = complete_on_cmdlist (cdata, *result_list->prefixlist, > - p, word, ignore_help_classes); > + complete_on_cmdlist (cdata, *result_list->prefixlist, > + p, word, ignore_help_classes); > } > else > { > if (reason != handle_brkchars) > - list = complete_on_cmdlist (cdata, cmdlist, p, word, > - ignore_help_classes); > + complete_on_cmdlist (cdata, cmdlist, p, word, > + ignore_help_classes); > } > /* Ensure that readline does the right thing with respect to > inserting quotes. */ > @@ -698,8 +674,8 @@ complete_line_internal (struct completer_data *cdata, > /* It is a prefix command; what comes after it is > a subcommand (e.g. "info "). */ > if (reason != handle_brkchars) > - list = complete_on_cmdlist (cdata, *c->prefixlist, p, > - word, ignore_help_classes); > + complete_on_cmdlist (cdata, *c->prefixlist, p, > + word, ignore_help_classes); > > /* Ensure that readline does the right thing > with respect to inserting quotes. */ > @@ -707,11 +683,11 @@ complete_line_internal (struct completer_data *cdata, > gdb_completer_command_word_break_characters; > } > else if (reason == handle_help) > - list = NULL; > + return; > else if (c->enums) > { > if (reason != handle_brkchars) > - list = complete_on_enum (cdata, c->enums, p, word); > + complete_on_enum (cdata, c->enums, p, word); > rl_completer_word_break_characters = > gdb_completer_command_word_break_characters; > } > @@ -751,7 +727,7 @@ complete_line_internal (struct completer_data *cdata, > && c->completer_handle_brkchars != NULL) > (*c->completer_handle_brkchars) (c, p, word); > if (reason != handle_brkchars && c->completer != NULL) > - list = (*c->completer) (cdata, c, p, word); > + (*c->completer) (cdata, c, p, word); > } > } > else > @@ -773,8 +749,8 @@ complete_line_internal (struct completer_data *cdata, > } > > if (reason != handle_brkchars) > - list = complete_on_cmdlist (cdata, result_list, q, word, > - ignore_help_classes); > + complete_on_cmdlist (cdata, result_list, q, word, > + ignore_help_classes); > > /* Ensure that readline does the right thing > with respect to inserting quotes. */ > @@ -783,7 +759,7 @@ complete_line_internal (struct completer_data *cdata, > } > } > else if (reason == handle_help) > - list = NULL; > + return; > else > { > /* There is non-whitespace beyond the command. */ > @@ -792,12 +768,12 @@ complete_line_internal (struct completer_data *cdata, > { > /* It is an unrecognized subcommand of a prefix command, > e.g. "info adsfkdj". */ > - list = NULL; > + return; > } > else if (c->enums) > { > if (reason != handle_brkchars) > - list = complete_on_enum (cdata, c->enums, p, word); > + complete_on_enum (cdata, c->enums, p, word); > } > else > { > @@ -827,12 +803,10 @@ complete_line_internal (struct completer_data *cdata, > && c->completer_handle_brkchars != NULL) > (*c->completer_handle_brkchars) (c, p, word); > if (reason != handle_brkchars && c->completer != NULL) > - list = (*c->completer) (cdata, c, p, word); > + (*c->completer) (cdata, c, p, word); > } > } > } > - > - return list; > } > > /* Allocate a new completer data structure. */ > @@ -986,8 +960,8 @@ get_maximum_completions (void) > /* See completer.h. */ > > enum add_completion_status > -add_completion (struct completer_data *cdata, VEC (char_ptr) **result, > - const char *match, const char *text, const char *word) > +add_completion (struct completer_data *cdata, const char *match, > + const char *text, const char *word) > { > enum maybe_add_completion_enum add_status; > char *alloc = completer_strdup (match, text, word); > @@ -996,10 +970,8 @@ add_completion (struct completer_data *cdata, VEC (char_ptr) **result, > switch (add_status) > { > case MAYBE_ADD_COMPLETION_OK: > - VEC_safe_push (char_ptr, *result, alloc); > break; > case MAYBE_ADD_COMPLETION_OK_MAX_REACHED: > - VEC_safe_push (char_ptr, *result, alloc); > return ADD_COMPLETION_MAX_REACHED; > case MAYBE_ADD_COMPLETION_MAX_REACHED: > xfree (alloc); > @@ -1054,23 +1026,23 @@ complete_line (const char *text, const char *line_buffer, int point) > } > > /* Complete on command names. Used by "help". */ > -VEC (char_ptr) * > + > +void > command_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > { > - return complete_line_internal (cdata, word, text, > - strlen (text), handle_help); > + complete_line_internal (cdata, word, text, > + strlen (text), handle_help); > } > > /* Complete on signals. */ > > -VEC (char_ptr) * > +void > signal_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > { > - VEC (char_ptr) *return_val = NULL; > size_t len = strlen (word); > int signum; > const char *signame; > @@ -1089,13 +1061,11 @@ signal_completer (struct completer_data *cdata, > > if (strncasecmp (signame, word, len) == 0) > { > - if (add_completion (cdata, &return_val, signame, NULL, NULL) > + if (add_completion (cdata, signame, NULL, NULL) > == ADD_COMPLETION_MAX_REACHED) > break; > } > } > - > - return return_val; > } > > /* Bit-flags for selecting what the register and/or register-group > @@ -1110,13 +1080,12 @@ enum reg_completer_targets > /* Complete register names and/or reggroup names based on the value passed > in TARGETS. At least one bit in TARGETS must be set. */ > > -static VEC (char_ptr) * > +static void > reg_or_group_completer_1 (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word, > enum reg_completer_targets targets) > { > - VEC (char_ptr) *result = NULL; > size_t len = strlen (word); > struct gdbarch *gdbarch; > const char *name; > @@ -1124,6 +1093,8 @@ reg_or_group_completer_1 (struct completer_data *cdata, > gdb_assert ((targets & (complete_register_names > | complete_reggroup_names)) != 0); > gdbarch = get_current_arch (); > + if (!target_has_registers) > + return; ==== This change probably belongs in a separate patchset. I could be missing something though. > > if ((targets & complete_register_names) != 0) > { > @@ -1135,9 +1106,9 @@ reg_or_group_completer_1 (struct completer_data *cdata, > { > if (*name != '\0' && strncmp (word, name, len) == 0) > { > - if (add_completion (cdata, &result, name, NULL, NULL) > + if (add_completion (cdata, name, NULL, NULL) > == ADD_COMPLETION_MAX_REACHED) > - return result; > + return; > } > } > } > @@ -1153,37 +1124,35 @@ reg_or_group_completer_1 (struct completer_data *cdata, > name = reggroup_name (group); > if (strncmp (word, name, len) == 0) > { > - if (add_completion (cdata, &result, name, NULL, NULL) > + if (add_completion (cdata, name, NULL, NULL) > == ADD_COMPLETION_MAX_REACHED) > - return result; > + return; > } > } > } > - > - return result; > } > > /* Perform completion on register and reggroup names. */ > > -VEC (char_ptr) * > +void > reg_or_group_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > { > - return reg_or_group_completer_1 (cdata, ignore, text, word, > - (complete_register_names > - | complete_reggroup_names)); > + reg_or_group_completer_1 (cdata, ignore, text, word, > + (complete_register_names > + | complete_reggroup_names)); > } > > /* Perform completion on reggroup names. */ > > -VEC (char_ptr) * > +void > reggroup_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > { > - return reg_or_group_completer_1 (cdata, ignore, text, word, > - complete_reggroup_names); > + reg_or_group_completer_1 (cdata, ignore, text, word, > + complete_reggroup_names); > } > > /* Get the list of chars that are considered as word breaks > diff --git a/gdb/completer.h b/gdb/completer.h > index 07c7d93..cfdca71 100644 > --- a/gdb/completer.h > +++ b/gdb/completer.h > @@ -76,37 +76,37 @@ extern VEC (char_ptr) *complete_line (const char *text, > extern char *readline_line_completion_function (const char *text, > int matches); > > -extern VEC (char_ptr) *noop_completer (struct completer_data *, > - struct cmd_list_element *, > - const char *, const char *); > +extern void noop_completer (struct completer_data *, > + struct cmd_list_element *, > + const char *, const char *); > > -extern VEC (char_ptr) *filename_completer (struct completer_data *, > - struct cmd_list_element *, > - const char *, const char *); > +extern void filename_completer (struct completer_data *, > + struct cmd_list_element *, > + const char *, const char *); > > -extern VEC (char_ptr) *expression_completer (struct completer_data *, > - struct cmd_list_element *, > - const char *, const char *); > +extern void expression_completer (struct completer_data *, > + struct cmd_list_element *, > + const char *, const char *); > > -extern VEC (char_ptr) *location_completer (struct completer_data *, > - struct cmd_list_element *, > - const char *, const char *); > +extern void location_completer (struct completer_data *, > + struct cmd_list_element *, > + const char *, const char *); > > -extern VEC (char_ptr) *command_completer (struct completer_data *, > - struct cmd_list_element *, > - const char *, const char *); > +extern void command_completer (struct completer_data *, > + struct cmd_list_element *, > + const char *, const char *); > > -extern VEC (char_ptr) *signal_completer (struct completer_data *, > - struct cmd_list_element *, > - const char *, const char *); > +extern void signal_completer (struct completer_data *, > + struct cmd_list_element *, > + const char *, const char *); > > -extern VEC (char_ptr) *reg_or_group_completer (struct completer_data *, > - struct cmd_list_element *, > - const char *, const char *); > +extern void reg_or_group_completer (struct completer_data *, > + struct cmd_list_element *, > + const char *, const char *); > > -extern VEC (char_ptr) *reggroup_completer (struct completer_data *cdata, > - struct cmd_list_element *, > - const char *, const char *); > +extern void reggroup_completer (struct completer_data *cdata, > + struct cmd_list_element *, > + const char *, const char *); > > extern char *get_gdb_completer_quote_characters (void); > > @@ -163,8 +163,7 @@ enum add_completion_status > saved into the completion list. See completer_strdup for more. */ > > extern enum add_completion_status > - add_completion (struct completer_data *cdata, > - VEC (char_ptr) **result, const char *match, > + add_completion (struct completer_data *cdata, const char *match, > const char *text, const char *word); > > /* Wrapper to throw MAX_COMPLETIONS_REACHED_ERROR. */ > diff --git a/gdb/corefile.c b/gdb/corefile.c > index 41b7cb0..4e5e96a 100644 > --- a/gdb/corefile.c > +++ b/gdb/corefile.c > @@ -467,7 +467,7 @@ set_gnutarget_command (char *ignore, int from_tty, > > /* A completion function for "set gnutarget". */ > > -static VEC (char_ptr) * > +static void > complete_set_gnutarget (struct completer_data *cdata, > struct cmd_list_element *cmd, > const char *text, const char *word) > @@ -487,7 +487,7 @@ complete_set_gnutarget (struct completer_data *cdata, > bfd_targets[last + 1] = NULL; > } > > - return complete_on_enum (cdata, bfd_targets, text, word); > + complete_on_enum (cdata, bfd_targets, text, word); > } > > /* Set the gnutarget. */ > diff --git a/gdb/cp-abi.c b/gdb/cp-abi.c > index 504bb20..cddc382 100644 > --- a/gdb/cp-abi.c > +++ b/gdb/cp-abi.c > @@ -358,7 +358,7 @@ set_cp_abi_cmd (char *args, int from_tty) > > /* A completion function for "set cp-abi". */ > > -static VEC (char_ptr) * > +static void > cp_abi_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > @@ -375,7 +375,7 @@ cp_abi_completer (struct completer_data *cdata, > cp_abi_names[i] = NULL; > } > > - return complete_on_enum (cdata, cp_abi_names, text, word); > + complete_on_enum (cdata, cp_abi_names, text, word); > } > > /* Show the currently selected C++ ABI. */ > diff --git a/gdb/f-lang.c b/gdb/f-lang.c > index 15c51d9..b5886a6 100644 > --- a/gdb/f-lang.c > +++ b/gdb/f-lang.c > @@ -228,13 +228,13 @@ f_word_break_characters (void) > /* Consider the modules separator :: as a valid symbol name character > class. */ > > -static VEC (char_ptr) * > +static void > f_make_symbol_completion_list (struct completer_data *cdata, > const char *text, const char *word, > enum type_code code) > { > - return default_make_symbol_completion_list_break_on (cdata, text, word, > - ":", code); > + default_make_symbol_completion_list_break_on (cdata, text, word, > + ":", code); > } > > const struct language_defn f_language_defn = > diff --git a/gdb/guile/scm-cmd.c b/gdb/guile/scm-cmd.c > index 1544c2b..8816346 100644 > --- a/gdb/guile/scm-cmd.c > +++ b/gdb/guile/scm-cmd.c > @@ -348,8 +348,7 @@ cmdscm_bad_completion_result (const char *msg, SCM completion) > The result is a boolean indicating success. */ > > static int > -cmdscm_add_completion (SCM completion, struct completer_data *cdata, > - VEC (char_ptr) **result) > +cmdscm_add_completion (SCM completion, struct completer_data *cdata) > { > char *item; > SCM except_scm; > @@ -371,14 +370,14 @@ cmdscm_add_completion (SCM completion, struct completer_data *cdata, > return 0; > } > > - (void) add_completion (cdata, result, item, NULL, NULL); > + (void) add_completion (cdata, item, NULL, NULL); > xfree (item); > return 1; > } > > /* Called by gdb for command completion. */ > > -static VEC (char_ptr) * > +static void > cmdscm_completer (struct completer_data *cdata, > struct cmd_list_element *command, > const char *text, const char *word) > @@ -386,7 +385,6 @@ cmdscm_completer (struct completer_data *cdata, > command_smob *c_smob/*obj*/ = (command_smob *) get_cmd_context (command); > SCM completer_result_scm; > SCM text_scm, word_scm, result_scm; > - VEC (char_ptr) *result = NULL; > > gdb_assert (c_smob != NULL); > gdb_assert (gdbscm_is_procedure (c_smob->complete)); > @@ -408,7 +406,7 @@ cmdscm_completer (struct completer_data *cdata, > { > /* Inform the user, but otherwise ignore. */ > gdbscm_print_gdb_exception (SCM_BOOL_F, completer_result_scm); > - goto done; > + return; > } > > if (gdbscm_is_true (scm_list_p (completer_result_scm))) > @@ -419,11 +417,8 @@ cmdscm_completer (struct completer_data *cdata, > { > SCM next = scm_car (list); > > - if (!cmdscm_add_completion (next, cdata, &result)) > - { > - VEC_free (char_ptr, result); > - goto done; > - } > + if (!cmdscm_add_completion (next, cdata)) > + return; > > list = scm_cdr (list); > } > @@ -439,15 +434,11 @@ cmdscm_completer (struct completer_data *cdata, > { > /* Inform the user, but otherwise ignore the entire result. */ > gdbscm_print_gdb_exception (SCM_BOOL_F, completer_result_scm); > - VEC_free (char_ptr, result); > - goto done; > + return; > } > > - if (!cmdscm_add_completion (next, cdata, &result)) > - { > - VEC_free (char_ptr, result); > - goto done; > - } > + if (!cmdscm_add_completion (next, cdata)) > + return; > > next = itscm_safe_call_next_x (iter, NULL); > } > @@ -458,9 +449,6 @@ cmdscm_completer (struct completer_data *cdata, > cmdscm_bad_completion_result (_("Bad completer result: "), > completer_result_scm); > } > - > - done: > - return result; > } > > /* Helper for gdbscm_make_command which locates the command list to use and > diff --git a/gdb/infrun.c b/gdb/infrun.c > index d858b28..343f9da 100644 > --- a/gdb/infrun.c > +++ b/gdb/infrun.c > @@ -7065,12 +7065,11 @@ Are you sure you want to change it? "), > > /* Complete the "handle" command. */ > > -static VEC (char_ptr) * > +static void > handle_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > { > - VEC (char_ptr) *vec_signals, *vec_keywords, *return_val; > static const char * const keywords[] = > { > "all", > @@ -7085,13 +7084,8 @@ handle_completer (struct completer_data *cdata, > NULL, > }; > > - vec_signals = signal_completer (cdata, ignore, text, word); > - vec_keywords = complete_on_enum (cdata, keywords, word, word); > - > - return_val = VEC_merge (char_ptr, vec_signals, vec_keywords); > - VEC_free (char_ptr, vec_signals); > - VEC_free (char_ptr, vec_keywords); > - return return_val; > + signal_completer (cdata, ignore, text, word); > + complete_on_enum (cdata, keywords, word, word); > } > > enum gdb_signal > diff --git a/gdb/interps.c b/gdb/interps.c > index 9e993c8..19cb716 100644 > --- a/gdb/interps.c > +++ b/gdb/interps.c > @@ -434,13 +434,12 @@ interpreter_exec_cmd (char *args, int from_tty) > } > > /* List the possible interpreters which could complete the given text. */ > -static VEC (char_ptr) * > +static void > interpreter_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > { > int textlen; > - VEC (char_ptr) *matches = NULL; > struct interp *interp; > > textlen = strlen (text); > @@ -448,13 +447,11 @@ interpreter_completer (struct completer_data *cdata, > { > if (strncmp (interp->name, text, textlen) == 0) > { > - if (add_completion (cdata, &matches, interp->name, text, word) > + if (add_completion (cdata, interp->name, text, word) > == ADD_COMPLETION_MAX_REACHED) > break; > } > } > - > - return matches; > } > > struct interp * > diff --git a/gdb/language.h b/gdb/language.h > index 954b4a8..24fb1e8 100644 > --- a/gdb/language.h > +++ b/gdb/language.h > @@ -302,7 +302,7 @@ struct language_defn > completion is being made. If CODE is TYPE_CODE_UNDEF, then all > symbols should be examined; otherwise, only STRUCT_DOMAIN > symbols whose type has a code of CODE should be matched. */ > - VEC (char_ptr) * > + void > (*la_make_symbol_completion_list) (struct completer_data *, > const char *text, > const char *word, > diff --git a/gdb/python/py-cmd.c b/gdb/python/py-cmd.c > index cf76bd1..7a57349 100644 > --- a/gdb/python/py-cmd.c > +++ b/gdb/python/py-cmd.c > @@ -330,13 +330,12 @@ cmdpy_completer_handle_brkchars (struct cmd_list_element *command, > > /* Called by gdb for command completion. */ > > -static VEC (char_ptr) * > +static void > cmdpy_completer (struct completer_data *cdata, > struct cmd_list_element *command, > const char *text, const char *word) > { > PyObject *resultobj = NULL; > - VEC (char_ptr) *result = NULL; > struct cleanup *cleanup; > > cleanup = ensure_python_env (get_current_arch (), current_language); > @@ -351,7 +350,6 @@ cmdpy_completer (struct completer_data *cdata, > if (resultobj == NULL) > goto done; > > - result = NULL; > if (PyInt_Check (resultobj)) > { > /* User code may also return one of the completion constants, > @@ -364,7 +362,7 @@ cmdpy_completer (struct completer_data *cdata, > PyErr_Clear (); > } > else if (value >= 0 && value < (long) N_COMPLETERS) > - result = completers[value].completer (cdata, command, text, word); > + completers[value].completer (cdata, command, text, word); > } > else > { > @@ -393,7 +391,7 @@ cmdpy_completer (struct completer_data *cdata, > continue; > } > > - if (add_completion (cdata, &result, item, NULL, NULL) > + if (add_completion (cdata, item, NULL, NULL) > == ADD_COMPLETION_MAX_REACHED) > { > xfree (item); > @@ -414,8 +412,6 @@ cmdpy_completer (struct completer_data *cdata, > > Py_XDECREF (resultobj); > do_cleanups (cleanup); > - > - return result; > } > > /* Helper for cmdpy_init which locates the command list to use and > diff --git a/gdb/remote-sim.c b/gdb/remote-sim.c > index c29d3c5..862683b 100644 > --- a/gdb/remote-sim.c > +++ b/gdb/remote-sim.c > @@ -1223,7 +1223,7 @@ simulator_command (char *args, int from_tty) > registers_changed (); > } > > -static VEC (char_ptr) * > +static void > sim_command_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, const char *text, > const char *word) > @@ -1235,22 +1235,20 @@ sim_command_completer (struct completer_data *cdata, > > sim_data = inferior_data (current_inferior (), sim_inferior_data_key); > if (sim_data == NULL || sim_data->gdbsim_desc == NULL) > - return NULL; > + return; > > tmp = sim_complete_command (sim_data->gdbsim_desc, text, word); > if (tmp == NULL) > - return NULL; > + return; > > /* Transform the array into a VEC, and then free the array. */ > for (i = 0; tmp[i] != NULL; i++) > { > - if (add_completion (cdata, &result, tmp[i], NULL, NULL) > + if (add_completion (cdata, tmp[i], NULL, NULL) > == ADD_COMPLETION_MAX_REACHED) > break; > } > xfree (tmp); > - > - return result; > } > > /* Check to see if a thread is still alive. */ > diff --git a/gdb/symtab.c b/gdb/symtab.c > index e24de89..18b7619 100644 > --- a/gdb/symtab.c > +++ b/gdb/symtab.c > @@ -5011,31 +5011,8 @@ compare_symbol_name (const char *name, const char *sym_text, int sym_text_len) > return 1; > } > > -/* Free any memory associated with a completion list. */ > - > -static void > -free_completion_list (VEC (char_ptr) **list_ptr) > -{ > - int i; > - char *p; > - > - for (i = 0; VEC_iterate (char_ptr, *list_ptr, i, p); ++i) > - xfree (p); > - VEC_free (char_ptr, *list_ptr); > -} > - > -/* Callback for make_cleanup. */ > - > -static void > -do_free_completion_list (void *list) > -{ > - free_completion_list (list); > -} > - > /* Helper routine for make_symbol_completion_list. */ > > -static VEC (char_ptr) *return_val; > - > #define COMPLETION_LIST_ADD_SYMBOL(cdata, symbol, sym_text, len, \ > text, word) \ > completion_list_add_name \ > @@ -5063,7 +5040,7 @@ completion_list_add_name (struct completer_data *cdata, > /* We have a match for a completion, so add SYMNAME to the current list > of matches. */ > > - if (add_completion (cdata, &return_val, symname, sym_text, word) > + if (add_completion (cdata, symname, sym_text, word) > == ADD_COMPLETION_MAX_REACHED) > throw_max_completions_reached_error (); > } > @@ -5499,18 +5476,13 @@ default_make_symbol_completion_list_break_on_1 (struct completer_data *cdata, > } > } > > -VEC (char_ptr) * > +void > default_make_symbol_completion_list_break_on (struct completer_data *cdata, > const char *text, > const char *word, > const char *break_on, > enum type_code code) > { > - struct cleanup *back_to; > - > - return_val = NULL; > - back_to = make_cleanup (do_free_completion_list, &return_val); > - > TRY > { > default_make_symbol_completion_list_break_on_1 (cdata, text, word, > @@ -5522,61 +5494,56 @@ default_make_symbol_completion_list_break_on (struct completer_data *cdata, > throw_exception (except); > } > END_CATCH > - > - discard_cleanups (back_to); > - return return_val; > } > > -VEC (char_ptr) * > +void > default_make_symbol_completion_list (struct completer_data *cdata, > const char *text, const char *word, > enum type_code code) > { > - return default_make_symbol_completion_list_break_on (cdata, text, word, "", > - code); > + default_make_symbol_completion_list_break_on (cdata, text, word, "", code); > } > > /* Return a vector of all symbols (regardless of class) which begin by > matching TEXT. If the answer is no symbols, then the return value > is NULL. */ > > -VEC (char_ptr) * > +void > make_symbol_completion_list (struct completer_data *cdata, > const char *text, const char *word) > { > - return current_language->la_make_symbol_completion_list (cdata, text, word, > - TYPE_CODE_UNDEF); > + current_language->la_make_symbol_completion_list (cdata, text, word, > + TYPE_CODE_UNDEF); > } > > /* Like make_symbol_completion_list, but only return STRUCT_DOMAIN > symbols whose type code is CODE. */ > > -VEC (char_ptr) * > +void > make_symbol_completion_type (struct completer_data *cdata, const char *text, > const char *word, enum type_code code) > { > gdb_assert (code == TYPE_CODE_UNION > || code == TYPE_CODE_STRUCT > || code == TYPE_CODE_ENUM); > - return current_language->la_make_symbol_completion_list (cdata, text, word, > - code); > + current_language->la_make_symbol_completion_list (cdata, text, word, code); > } > > /* Like make_symbol_completion_list, but suitable for use as a > completion function. */ > > -VEC (char_ptr) * > +void > make_symbol_completion_list_fn (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > { > - return make_symbol_completion_list (cdata, text, word); > + make_symbol_completion_list (cdata, text, word); > } > > /* Like make_symbol_completion_list, but returns a list of symbols > defined in a source file FILE. */ > > -VEC (char_ptr) * > +void > make_file_symbol_completion_list (struct completer_data *cdata, > const char *text, const char *word, > const char *srcfile) > @@ -5624,7 +5591,7 @@ make_file_symbol_completion_list (struct completer_data *cdata, > /* A double-quoted string is never a symbol, nor does it make sense > to complete it any other way. */ > { > - return NULL; > + return; > } > else > { > @@ -5635,8 +5602,6 @@ make_file_symbol_completion_list (struct completer_data *cdata, > > sym_text_len = strlen (sym_text); > > - return_val = NULL; > - > /* Find the symtab for SRCFILE (this loads it if it was not yet read > in). */ > s = lookup_symtab (srcfile); > @@ -5652,7 +5617,7 @@ make_file_symbol_completion_list (struct completer_data *cdata, > > /* If we have no symtab for that file, return an empty list. */ > if (s == NULL) > - return (return_val); > + return; > > /* Go through this symtab and check the externs and statics for > symbols which match. */ > @@ -5670,8 +5635,6 @@ make_file_symbol_completion_list (struct completer_data *cdata, > COMPLETION_LIST_ADD_SYMBOL (cdata, sym, sym_text, sym_text_len, > text, word); > } > - > - return (return_val); > } > > /* A helper function for make_source_files_completion_list. It adds > @@ -5680,10 +5643,9 @@ make_file_symbol_completion_list (struct completer_data *cdata, > > static void > add_filename_to_list (struct completer_data *cdata, const char *fname, > - const char *text, const char *word, > - VEC (char_ptr) **list) > + const char *text, const char *word) > { > - (void) add_completion (cdata, list, fname, text, word); > + (void) add_completion (cdata, fname, text, word); > } > > static int > @@ -5711,7 +5673,6 @@ struct add_partial_filename_data > const char *text; > const char *word; > int text_len; > - VEC (char_ptr) **list; > > /* Completion data used by the completer function. */ > struct completer_data *completer_data; > @@ -5733,7 +5694,7 @@ maybe_add_partial_symtab_filename (const char *filename, const char *fullname, > /* This file matches for a completion; add it to the > current list of matches. */ > add_filename_to_list (data->completer_data, filename, data->text, > - data->word, data->list); > + data->word); > } > else > { > @@ -5744,17 +5705,15 @@ maybe_add_partial_symtab_filename (const char *filename, const char *fullname, > && filename_ncmp (base_name, data->text, data->text_len) == 0) > { > add_filename_to_list (data->completer_data, base_name, data->text, > - data->word, data->list); > + data->word); > } > } > } > > -/* Return a vector of all source files whose names begin with matching > - TEXT. The file names are looked up in the symbol tables of this > - program. If the answer is no matchess, then the return value is > - NULL. */ > +/* Add all source files whose names begin with matching TEXT to CDATA. > + The file names are looked up in the symbol tables of this program. */ > > -VEC (char_ptr) * > +void > make_source_files_completion_list (struct completer_data *cdata, > const char *text, const char *word) > { > @@ -5762,16 +5721,13 @@ make_source_files_completion_list (struct completer_data *cdata, > struct symtab *s; > struct objfile *objfile; > size_t text_len = strlen (text); > - VEC (char_ptr) *list = NULL; > const char *base_name; > struct add_partial_filename_data datum; > struct filename_seen_cache *filename_seen_cache; > - struct cleanup *back_to, *cache_cleanup; > + struct cleanup *cache_cleanup; > > if (!have_full_symbols () && !have_partial_symbols ()) > - return list; > - > - back_to = make_cleanup (do_free_completion_list, &list); > + return; > > filename_seen_cache = create_filename_seen_cache (); > cache_cleanup = make_cleanup (delete_filename_seen_cache, > @@ -5786,7 +5742,7 @@ make_source_files_completion_list (struct completer_data *cdata, > { > /* This file matches for a completion; add it to the current > list of matches. */ > - add_filename_to_list (cdata, s->filename, text, word, &list); > + add_filename_to_list (cdata, s->filename, text, word); > } > else > { > @@ -5798,7 +5754,7 @@ make_source_files_completion_list (struct completer_data *cdata, > if (base_name != s->filename > && !filename_seen (filename_seen_cache, base_name, 1) > && filename_ncmp (base_name, text, text_len) == 0) > - add_filename_to_list (cdata, base_name, text, word, &list); > + add_filename_to_list (cdata, base_name, text, word); > } > } > > @@ -5806,15 +5762,11 @@ make_source_files_completion_list (struct completer_data *cdata, > datum.text = text; > datum.word = word; > datum.text_len = text_len; > - datum.list = &list; > datum.completer_data = cdata; > map_symbol_filenames (maybe_add_partial_symtab_filename, &datum, > 0 /*need_fullname*/); > > do_cleanups (cache_cleanup); > - discard_cleanups (back_to); > - > - return list; > } > > /* Track MAIN */ > diff --git a/gdb/symtab.h b/gdb/symtab.h > index 018852c..755e1d5 100644 > --- a/gdb/symtab.h > +++ b/gdb/symtab.h > @@ -1454,30 +1454,31 @@ extern void forget_cached_source_info (void); > > extern void select_source_symtab (struct symtab *); > > -extern VEC (char_ptr) *default_make_symbol_completion_list_break_on > +extern void default_make_symbol_completion_list_break_on > (struct completer_data *cdata, const char *text, const char *word, > const char *break_on, enum type_code code); > -extern VEC (char_ptr) * > + > +extern void > default_make_symbol_completion_list (struct completer_data *, > const char *, const char *, > enum type_code); > -extern VEC (char_ptr) * > +extern void > make_symbol_completion_list (struct completer_data *, const char *, > const char *); > -extern VEC (char_ptr) * > +extern void > make_symbol_completion_type (struct completer_data *, > const char *, const char *, > enum type_code); > -extern VEC (char_ptr) * > +extern void > make_symbol_completion_list_fn (struct completer_data *, > struct cmd_list_element *, > const char *, const char *); > > -extern VEC (char_ptr) * > +extern void > make_file_symbol_completion_list (struct completer_data *, > const char *, const char *, const char *); > > -extern VEC (char_ptr) * > +extern void > make_source_files_completion_list (struct completer_data *, const char *, > const char *); > > diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c > index 8d420894..c4c9cda 100644 > --- a/gdb/tui/tui-layout.c > +++ b/gdb/tui/tui-layout.c > @@ -353,7 +353,7 @@ tui_default_win_viewport_height (enum tui_win_type type, > /* Complete possible layout names. TEXT is the complete text entered so > far, WORD is the word currently being completed. */ > > -static VEC (char_ptr) * > +static void > layout_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > @@ -361,7 +361,7 @@ layout_completer (struct completer_data *cdata, > static const char *layout_names [] = > { "src", "asm", "split", "regs", "next", "prev", NULL }; > > - return complete_on_enum (cdata, layout_names, text, word); > + complete_on_enum (cdata, layout_names, text, word); > } > > /* Function to initialize gdb commands, for tui window layout > diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c > index 17efd9f..bef01e5 100644 > --- a/gdb/tui/tui-regs.c > +++ b/gdb/tui/tui-regs.c > @@ -668,29 +668,26 @@ tui_reg_command (char *args, int from_tty) > /* Complete names of register groups, and add the special "prev" and "next" > names. */ > > -static VEC (char_ptr) * > +static void > tui_reggroup_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > { > - VEC (char_ptr) *result = NULL; > static const char *extra[] = { "next", "prev", NULL }; > size_t len = strlen (word); > const char **tmp; > > - result = reggroup_completer (cdata, ignore, text, word); > + reggroup_completer (cdata, ignore, text, word); > > for (tmp = extra; *tmp != NULL; ++tmp) > { > if (strncmp (word, *tmp, len) == 0) > { > - if (add_completion (cdata, &result, *tmp, NULL, NULL) > + if (add_completion (cdata, *tmp, NULL, NULL) > == ADD_COMPLETION_MAX_REACHED) > break; > } > } > - > - return result; > } > > /* Provide a prototype to silence -Wmissing-prototypes. */ > diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c > index 8e7fbd1..4690af1 100644 > --- a/gdb/tui/tui-win.c > +++ b/gdb/tui/tui-win.c > @@ -359,13 +359,12 @@ tui_set_var_cmd (char *null_args, int from_tty, struct cmd_list_element *c) > window names 'next' and 'prev' will also be considered as possible > completions of the window name. */ > > -static VEC (char_ptr) * > +static void > window_name_completer (int include_next_prev_p, > struct completer_data *cdata, > const char *text, const char *word) > { > VEC (const_char_ptr) *completion_name_vec = NULL; > - VEC (char_ptr) *matches_vec; > int win_type; > > for (win_type = SRC_WIN; win_type < MAX_MAJOR_WINDOWS; win_type++) > @@ -399,32 +398,29 @@ window_name_completer (int include_next_prev_p, > } > > VEC_safe_push (const_char_ptr, completion_name_vec, NULL); > - matches_vec > - = complete_on_enum (cdata, > - VEC_address (const_char_ptr, completion_name_vec), > - text, word); > + complete_on_enum (cdata, > + VEC_address (const_char_ptr, completion_name_vec), > + text, word); > > VEC_free (const_char_ptr, completion_name_vec); > - > - return matches_vec; > } > > /* Complete possible window names to focus on. TEXT is the complete text > entered so far, WORD is the word currently being completed. */ > > -static VEC (char_ptr) * > +static void > focus_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > { > - return window_name_completer (1, cdata, text, word); > + window_name_completer (1, cdata, text, word); > } > > /* Complete possible window names for winheight command. TEXT is the > complete text entered so far, WORD is the word currently being > completed. */ > > -static VEC (char_ptr) * > +static void > winheight_completer (struct completer_data *cdata, > struct cmd_list_element *ignore, > const char *text, const char *word) > @@ -432,9 +428,9 @@ winheight_completer (struct completer_data *cdata, > /* The first word is the window name. That we can complete. Subsequent > words can't be completed. */ > if (word != text) > - return NULL; > + return; > > - return window_name_completer (0, cdata, text, word); > + window_name_completer (0, cdata, text, word); > } > > /* Function to initialize gdb commands, for tui window > diff --git a/gdb/value.c b/gdb/value.c > index 22d392a..b3d4f04 100644 > --- a/gdb/value.c > +++ b/gdb/value.c > @@ -2062,10 +2062,9 @@ lookup_only_internalvar (const char *name) > Returns a vector of newly allocated strings, or NULL if no matches > were found. */ > > -VEC (char_ptr) * > +void > complete_internalvar (struct completer_data *cdata, const char *name) > { > - VEC (char_ptr) *result = NULL; > struct internalvar *var; > int len; > > @@ -2074,12 +2073,10 @@ complete_internalvar (struct completer_data *cdata, const char *name) > for (var = internalvars; var; var = var->next) > if (strncmp (var->name, name, len) == 0) > { > - if (add_completion (cdata, &result, var->name, NULL, NULL) > + if (add_completion (cdata, var->name, NULL, NULL) > == ADD_COMPLETION_MAX_REACHED) > break; > } > - > - return result; > } > > /* Create an internal variable with name NAME and with a void value. > diff --git a/gdb/value.h b/gdb/value.h > index 03df1b7..58c5c26 100644 > --- a/gdb/value.h > +++ b/gdb/value.h > @@ -876,8 +876,8 @@ extern struct internalvar *lookup_only_internalvar (const char *name); > > extern struct internalvar *create_internalvar (const char *name); > > -extern VEC (char_ptr) *complete_internalvar (struct completer_data *cdata, > - const char *name); > +extern void complete_internalvar (struct completer_data *cdata, > + const char *name); > > /* An internalvar can be dynamically computed by supplying a vector of > function pointers to perform various operations. */