xref: /netbsd-src/external/gpl3/gdb/dist/gdb/completer.c (revision 63aea4bd5b445e491ff0389fe27ec78b3099dba3)
1 /* Line completion stuff for GDB, the GNU debugger.
2    Copyright (C) 2000-2015 Free Software Foundation, Inc.
3 
4    This file is part of GDB.
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
18 
19 #include "defs.h"
20 #include "symtab.h"
21 #include "gdbtypes.h"
22 #include "expression.h"
23 #include "filenames.h"		/* For DOSish file names.  */
24 #include "language.h"
25 #include "gdb_signals.h"
26 #include "target.h"
27 #include "reggroups.h"
28 #include "user-regs.h"
29 
30 #include "cli/cli-decode.h"
31 
32 /* FIXME: This is needed because of lookup_cmd_1 ().  We should be
33    calling a hook instead so we eliminate the CLI dependency.  */
34 #include "gdbcmd.h"
35 
36 /* Needed for rl_completer_word_break_characters() and for
37    rl_filename_completion_function.  */
38 #include "readline/readline.h"
39 
40 /* readline defines this.  */
41 #undef savestring
42 
43 #include "completer.h"
44 
45 /* Prototypes for local functions.  */
46 static
47 char *line_completion_function (const char *text, int matches,
48 				char *line_buffer,
49 				int point);
50 
51 /* readline uses the word breaks for two things:
52    (1) In figuring out where to point the TEXT parameter to the
53    rl_completion_entry_function.  Since we don't use TEXT for much,
54    it doesn't matter a lot what the word breaks are for this purpose,
55    but it does affect how much stuff M-? lists.
56    (2) If one of the matches contains a word break character, readline
57    will quote it.  That's why we switch between
58    current_language->la_word_break_characters() and
59    gdb_completer_command_word_break_characters.  I'm not sure when
60    we need this behavior (perhaps for funky characters in C++
61    symbols?).  */
62 
63 /* Variables which are necessary for fancy command line editing.  */
64 
65 /* When completing on command names, we remove '-' from the list of
66    word break characters, since we use it in command names.  If the
67    readline library sees one in any of the current completion strings,
68    it thinks that the string needs to be quoted and automatically
69    supplies a leading quote.  */
70 static char *gdb_completer_command_word_break_characters =
71 " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,";
72 
73 /* When completing on file names, we remove from the list of word
74    break characters any characters that are commonly used in file
75    names, such as '-', '+', '~', etc.  Otherwise, readline displays
76    incorrect completion candidates.  */
77 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
78 /* MS-DOS and MS-Windows use colon as part of the drive spec, and most
79    programs support @foo style response files.  */
80 static char *gdb_completer_file_name_break_characters = " \t\n*|\"';?><@";
81 #else
82 static char *gdb_completer_file_name_break_characters = " \t\n*|\"';:?><";
83 #endif
84 
85 /* Characters that can be used to quote completion strings.  Note that
86    we can't include '"' because the gdb C parser treats such quoted
87    sequences as strings.  */
88 static char *gdb_completer_quote_characters = "'";
89 
90 /* Accessor for some completer data that may interest other files.  */
91 
92 char *
93 get_gdb_completer_quote_characters (void)
94 {
95   return gdb_completer_quote_characters;
96 }
97 
98 /* Line completion interface function for readline.  */
99 
100 char *
101 readline_line_completion_function (const char *text, int matches)
102 {
103   return line_completion_function (text, matches,
104 				   rl_line_buffer, rl_point);
105 }
106 
107 /* This can be used for functions which don't want to complete on
108    symbols but don't want to complete on anything else either.  */
109 VEC (char_ptr) *
110 noop_completer (struct cmd_list_element *ignore,
111 		const char *text, const char *prefix)
112 {
113   return NULL;
114 }
115 
116 /* Complete on filenames.  */
117 VEC (char_ptr) *
118 filename_completer (struct cmd_list_element *ignore,
119 		    const char *text, const char *word)
120 {
121   int subsequent_name;
122   VEC (char_ptr) *return_val = NULL;
123 
124   subsequent_name = 0;
125   while (1)
126     {
127       char *p, *q;
128 
129       p = rl_filename_completion_function (text, subsequent_name);
130       if (p == NULL)
131 	break;
132       /* We need to set subsequent_name to a non-zero value before the
133 	 continue line below, because otherwise, if the first file
134 	 seen by GDB is a backup file whose name ends in a `~', we
135 	 will loop indefinitely.  */
136       subsequent_name = 1;
137       /* Like emacs, don't complete on old versions.  Especially
138          useful in the "source" command.  */
139       if (p[strlen (p) - 1] == '~')
140 	{
141 	  xfree (p);
142 	  continue;
143 	}
144 
145       if (word == text)
146 	/* Return exactly p.  */
147 	q = p;
148       else if (word > text)
149 	{
150 	  /* Return some portion of p.  */
151 	  q = xmalloc (strlen (p) + 5);
152 	  strcpy (q, p + (word - text));
153 	  xfree (p);
154 	}
155       else
156 	{
157 	  /* Return some of TEXT plus p.  */
158 	  q = xmalloc (strlen (p) + (text - word) + 5);
159 	  strncpy (q, word, text - word);
160 	  q[text - word] = '\0';
161 	  strcat (q, p);
162 	  xfree (p);
163 	}
164       VEC_safe_push (char_ptr, return_val, q);
165     }
166 #if 0
167   /* There is no way to do this just long enough to affect quote
168      inserting without also affecting the next completion.  This
169      should be fixed in readline.  FIXME.  */
170   /* Ensure that readline does the right thing
171      with respect to inserting quotes.  */
172   rl_completer_word_break_characters = "";
173 #endif
174   return return_val;
175 }
176 
177 /* Complete on locations, which might be of two possible forms:
178 
179        file:line
180    or
181        symbol+offset
182 
183    This is intended to be used in commands that set breakpoints
184    etc.  */
185 
186 VEC (char_ptr) *
187 location_completer (struct cmd_list_element *ignore,
188 		    const char *text, const char *word)
189 {
190   int n_syms, n_files, ix;
191   VEC (char_ptr) *fn_list = NULL;
192   VEC (char_ptr) *list = NULL;
193   const char *p;
194   int quote_found = 0;
195   int quoted = *text == '\'' || *text == '"';
196   int quote_char = '\0';
197   const char *colon = NULL;
198   char *file_to_match = NULL;
199   const char *symbol_start = text;
200   const char *orig_text = text;
201   size_t text_len;
202 
203   /* Do we have an unquoted colon, as in "break foo.c:bar"?  */
204   for (p = text; *p != '\0'; ++p)
205     {
206       if (*p == '\\' && p[1] == '\'')
207 	p++;
208       else if (*p == '\'' || *p == '"')
209 	{
210 	  quote_found = *p;
211 	  quote_char = *p++;
212 	  while (*p != '\0' && *p != quote_found)
213 	    {
214 	      if (*p == '\\' && p[1] == quote_found)
215 		p++;
216 	      p++;
217 	    }
218 
219 	  if (*p == quote_found)
220 	    quote_found = 0;
221 	  else
222 	    break;		/* Hit the end of text.  */
223 	}
224 #if HAVE_DOS_BASED_FILE_SYSTEM
225       /* If we have a DOS-style absolute file name at the beginning of
226 	 TEXT, and the colon after the drive letter is the only colon
227 	 we found, pretend the colon is not there.  */
228       else if (p < text + 3 && *p == ':' && p == text + 1 + quoted)
229 	;
230 #endif
231       else if (*p == ':' && !colon)
232 	{
233 	  colon = p;
234 	  symbol_start = p + 1;
235 	}
236       else if (strchr (current_language->la_word_break_characters(), *p))
237 	symbol_start = p + 1;
238     }
239 
240   if (quoted)
241     text++;
242   text_len = strlen (text);
243 
244   /* Where is the file name?  */
245   if (colon)
246     {
247       char *s;
248 
249       file_to_match = (char *) xmalloc (colon - text + 1);
250       strncpy (file_to_match, text, colon - text + 1);
251       /* Remove trailing colons and quotes from the file name.  */
252       for (s = file_to_match + (colon - text);
253 	   s > file_to_match;
254 	   s--)
255 	if (*s == ':' || *s == quote_char)
256 	  *s = '\0';
257     }
258   /* If the text includes a colon, they want completion only on a
259      symbol name after the colon.  Otherwise, we need to complete on
260      symbols as well as on files.  */
261   if (colon)
262     {
263       list = make_file_symbol_completion_list (symbol_start, word,
264 					       file_to_match);
265       xfree (file_to_match);
266     }
267   else
268     {
269       list = make_symbol_completion_list (symbol_start, word);
270       /* If text includes characters which cannot appear in a file
271 	 name, they cannot be asking for completion on files.  */
272       if (strcspn (text,
273 		   gdb_completer_file_name_break_characters) == text_len)
274 	fn_list = make_source_files_completion_list (text, text);
275     }
276 
277   n_syms = VEC_length (char_ptr, list);
278   n_files = VEC_length (char_ptr, fn_list);
279 
280   /* Catenate fn_list[] onto the end of list[].  */
281   if (!n_syms)
282     {
283       VEC_free (char_ptr, list); /* Paranoia.  */
284       list = fn_list;
285       fn_list = NULL;
286     }
287   else
288     {
289       char *fn;
290 
291       for (ix = 0; VEC_iterate (char_ptr, fn_list, ix, fn); ++ix)
292 	VEC_safe_push (char_ptr, list, fn);
293       VEC_free (char_ptr, fn_list);
294     }
295 
296   if (n_syms && n_files)
297     {
298       /* Nothing.  */
299     }
300   else if (n_files)
301     {
302       char *fn;
303 
304       /* If we only have file names as possible completion, we should
305 	 bring them in sync with what rl_complete expects.  The
306 	 problem is that if the user types "break /foo/b TAB", and the
307 	 possible completions are "/foo/bar" and "/foo/baz"
308 	 rl_complete expects us to return "bar" and "baz", without the
309 	 leading directories, as possible completions, because `word'
310 	 starts at the "b".  But we ignore the value of `word' when we
311 	 call make_source_files_completion_list above (because that
312 	 would not DTRT when the completion results in both symbols
313 	 and file names), so make_source_files_completion_list returns
314 	 the full "/foo/bar" and "/foo/baz" strings.  This produces
315 	 wrong results when, e.g., there's only one possible
316 	 completion, because rl_complete will prepend "/foo/" to each
317 	 candidate completion.  The loop below removes that leading
318 	 part.  */
319       for (ix = 0; VEC_iterate (char_ptr, list, ix, fn); ++ix)
320 	{
321 	  memmove (fn, fn + (word - text),
322 		   strlen (fn) + 1 - (word - text));
323 	}
324     }
325   else if (!n_syms)
326     {
327       /* No completions at all.  As the final resort, try completing
328 	 on the entire text as a symbol.  */
329       list = make_symbol_completion_list (orig_text, word);
330     }
331 
332   return list;
333 }
334 
335 /* Helper for expression_completer which recursively adds field and
336    method names from TYPE, a struct or union type, to the array
337    OUTPUT.  */
338 static void
339 add_struct_fields (struct type *type, VEC (char_ptr) **output,
340 		   char *fieldname, int namelen)
341 {
342   int i;
343   int computed_type_name = 0;
344   const char *type_name = NULL;
345 
346   CHECK_TYPEDEF (type);
347   for (i = 0; i < TYPE_NFIELDS (type); ++i)
348     {
349       if (i < TYPE_N_BASECLASSES (type))
350 	add_struct_fields (TYPE_BASECLASS (type, i),
351 			   output, fieldname, namelen);
352       else if (TYPE_FIELD_NAME (type, i))
353 	{
354 	  if (TYPE_FIELD_NAME (type, i)[0] != '\0')
355 	    {
356 	      if (! strncmp (TYPE_FIELD_NAME (type, i),
357 			     fieldname, namelen))
358 		VEC_safe_push (char_ptr, *output,
359 			       xstrdup (TYPE_FIELD_NAME (type, i)));
360 	    }
361 	  else if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_UNION)
362 	    {
363 	      /* Recurse into anonymous unions.  */
364 	      add_struct_fields (TYPE_FIELD_TYPE (type, i),
365 				 output, fieldname, namelen);
366 	    }
367 	}
368     }
369 
370   for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
371     {
372       const char *name = TYPE_FN_FIELDLIST_NAME (type, i);
373 
374       if (name && ! strncmp (name, fieldname, namelen))
375 	{
376 	  if (!computed_type_name)
377 	    {
378 	      type_name = type_name_no_tag (type);
379 	      computed_type_name = 1;
380 	    }
381 	  /* Omit constructors from the completion list.  */
382 	  if (!type_name || strcmp (type_name, name))
383 	    VEC_safe_push (char_ptr, *output, xstrdup (name));
384 	}
385     }
386 }
387 
388 /* Complete on expressions.  Often this means completing on symbol
389    names, but some language parsers also have support for completing
390    field names.  */
391 VEC (char_ptr) *
392 expression_completer (struct cmd_list_element *ignore,
393 		      const char *text, const char *word)
394 {
395   struct type *type = NULL;
396   char *fieldname;
397   const char *p;
398   volatile struct gdb_exception except;
399   enum type_code code = TYPE_CODE_UNDEF;
400 
401   /* Perform a tentative parse of the expression, to see whether a
402      field completion is required.  */
403   fieldname = NULL;
404   TRY_CATCH (except, RETURN_MASK_ERROR)
405     {
406       type = parse_expression_for_completion (text, &fieldname, &code);
407     }
408   if (except.reason < 0)
409     return NULL;
410   if (fieldname && type)
411     {
412       for (;;)
413 	{
414 	  CHECK_TYPEDEF (type);
415 	  if (TYPE_CODE (type) != TYPE_CODE_PTR
416 	      && TYPE_CODE (type) != TYPE_CODE_REF)
417 	    break;
418 	  type = TYPE_TARGET_TYPE (type);
419 	}
420 
421       if (TYPE_CODE (type) == TYPE_CODE_UNION
422 	  || TYPE_CODE (type) == TYPE_CODE_STRUCT)
423 	{
424 	  int flen = strlen (fieldname);
425 	  VEC (char_ptr) *result = NULL;
426 
427 	  add_struct_fields (type, &result, fieldname, flen);
428 	  xfree (fieldname);
429 	  return result;
430 	}
431     }
432   else if (fieldname && code != TYPE_CODE_UNDEF)
433     {
434       VEC (char_ptr) *result;
435       struct cleanup *cleanup = make_cleanup (xfree, fieldname);
436 
437       result = make_symbol_completion_type (fieldname, fieldname, code);
438       do_cleanups (cleanup);
439       return result;
440     }
441   xfree (fieldname);
442 
443   /* Commands which complete on locations want to see the entire
444      argument.  */
445   for (p = word;
446        p > text && p[-1] != ' ' && p[-1] != '\t';
447        p--)
448     ;
449 
450   /* Not ideal but it is what we used to do before...  */
451   return location_completer (ignore, p, word);
452 }
453 
454 /* See definition in completer.h.  */
455 
456 void
457 set_gdb_completion_word_break_characters (completer_ftype *fn)
458 {
459   /* So far we are only interested in differentiating filename
460      completers from everything else.  */
461   if (fn == filename_completer)
462     rl_completer_word_break_characters
463       = gdb_completer_file_name_break_characters;
464   else
465     rl_completer_word_break_characters
466       = gdb_completer_command_word_break_characters;
467 }
468 
469 /* Here are some useful test cases for completion.  FIXME: These
470    should be put in the test suite.  They should be tested with both
471    M-? and TAB.
472 
473    "show output-" "radix"
474    "show output" "-radix"
475    "p" ambiguous (commands starting with p--path, print, printf, etc.)
476    "p "  ambiguous (all symbols)
477    "info t foo" no completions
478    "info t " no completions
479    "info t" ambiguous ("info target", "info terminal", etc.)
480    "info ajksdlfk" no completions
481    "info ajksdlfk " no completions
482    "info" " "
483    "info " ambiguous (all info commands)
484    "p \"a" no completions (string constant)
485    "p 'a" ambiguous (all symbols starting with a)
486    "p b-a" ambiguous (all symbols starting with a)
487    "p b-" ambiguous (all symbols)
488    "file Make" "file" (word break hard to screw up here)
489    "file ../gdb.stabs/we" "ird" (needs to not break word at slash)
490  */
491 
492 typedef enum
493 {
494   handle_brkchars,
495   handle_completions,
496   handle_help
497 }
498 complete_line_internal_reason;
499 
500 
501 /* Internal function used to handle completions.
502 
503 
504    TEXT is the caller's idea of the "word" we are looking at.
505 
506    LINE_BUFFER is available to be looked at; it contains the entire
507    text of the line.  POINT is the offset in that line of the cursor.
508    You should pretend that the line ends at POINT.
509 
510    REASON is of type complete_line_internal_reason.
511 
512    If REASON is handle_brkchars:
513    Preliminary phase, called by gdb_completion_word_break_characters
514    function, is used to determine the correct set of chars that are
515    word delimiters depending on the current command in line_buffer.
516    No completion list should be generated; the return value should be
517    NULL.  This is checked by an assertion in that function.
518 
519    If REASON is handle_completions:
520    Main phase, called by complete_line function, is used to get the list
521    of posible completions.
522 
523    If REASON is handle_help:
524    Special case when completing a 'help' command.  In this case,
525    once sub-command completions are exhausted, we simply return NULL.
526  */
527 
528 static VEC (char_ptr) *
529 complete_line_internal (const char *text,
530 			const char *line_buffer, int point,
531 			complete_line_internal_reason reason)
532 {
533   VEC (char_ptr) *list = NULL;
534   char *tmp_command;
535   const char *p;
536   int ignore_help_classes;
537   /* Pointer within tmp_command which corresponds to text.  */
538   char *word;
539   struct cmd_list_element *c, *result_list;
540 
541   /* Choose the default set of word break characters to break
542      completions.  If we later find out that we are doing completions
543      on command strings (as opposed to strings supplied by the
544      individual command completer functions, which can be any string)
545      then we will switch to the special word break set for command
546      strings, which leaves out the '-' character used in some
547      commands.  */
548   rl_completer_word_break_characters =
549     current_language->la_word_break_characters();
550 
551   /* Decide whether to complete on a list of gdb commands or on
552      symbols.  */
553   tmp_command = (char *) alloca (point + 1);
554   p = tmp_command;
555 
556   /* The help command should complete help aliases.  */
557   ignore_help_classes = reason != handle_help;
558 
559   strncpy (tmp_command, line_buffer, point);
560   tmp_command[point] = '\0';
561   /* Since text always contains some number of characters leading up
562      to point, we can find the equivalent position in tmp_command
563      by subtracting that many characters from the end of tmp_command.  */
564   word = tmp_command + point - strlen (text);
565 
566   if (point == 0)
567     {
568       /* An empty line we want to consider ambiguous; that is, it
569 	 could be any command.  */
570       c = CMD_LIST_AMBIGUOUS;
571       result_list = 0;
572     }
573   else
574     {
575       c = lookup_cmd_1 (&p, cmdlist, &result_list, ignore_help_classes);
576     }
577 
578   /* Move p up to the next interesting thing.  */
579   while (*p == ' ' || *p == '\t')
580     {
581       p++;
582     }
583 
584   if (!c)
585     {
586       /* It is an unrecognized command.  So there are no
587 	 possible completions.  */
588       list = NULL;
589     }
590   else if (c == CMD_LIST_AMBIGUOUS)
591     {
592       const char *q;
593 
594       /* lookup_cmd_1 advances p up to the first ambiguous thing, but
595 	 doesn't advance over that thing itself.  Do so now.  */
596       q = p;
597       while (*q && (isalnum (*q) || *q == '-' || *q == '_'))
598 	++q;
599       if (q != tmp_command + point)
600 	{
601 	  /* There is something beyond the ambiguous
602 	     command, so there are no possible completions.  For
603 	     example, "info t " or "info t foo" does not complete
604 	     to anything, because "info t" can be "info target" or
605 	     "info terminal".  */
606 	  list = NULL;
607 	}
608       else
609 	{
610 	  /* We're trying to complete on the command which was ambiguous.
611 	     This we can deal with.  */
612 	  if (result_list)
613 	    {
614 	      if (reason != handle_brkchars)
615 		list = complete_on_cmdlist (*result_list->prefixlist, p,
616 					    word, ignore_help_classes);
617 	    }
618 	  else
619 	    {
620 	      if (reason != handle_brkchars)
621 		list = complete_on_cmdlist (cmdlist, p, word,
622 					    ignore_help_classes);
623 	    }
624 	  /* Ensure that readline does the right thing with respect to
625 	     inserting quotes.  */
626 	  rl_completer_word_break_characters =
627 	    gdb_completer_command_word_break_characters;
628 	}
629     }
630   else
631     {
632       /* We've recognized a full command.  */
633 
634       if (p == tmp_command + point)
635 	{
636 	  /* There is no non-whitespace in the line beyond the
637 	     command.  */
638 
639 	  if (p[-1] == ' ' || p[-1] == '\t')
640 	    {
641 	      /* The command is followed by whitespace; we need to
642 		 complete on whatever comes after command.  */
643 	      if (c->prefixlist)
644 		{
645 		  /* It is a prefix command; what comes after it is
646 		     a subcommand (e.g. "info ").  */
647 		  if (reason != handle_brkchars)
648 		    list = complete_on_cmdlist (*c->prefixlist, p, word,
649 						ignore_help_classes);
650 
651 		  /* Ensure that readline does the right thing
652 		     with respect to inserting quotes.  */
653 		  rl_completer_word_break_characters =
654 		    gdb_completer_command_word_break_characters;
655 		}
656 	      else if (reason == handle_help)
657 		list = NULL;
658 	      else if (c->enums)
659 		{
660 		  if (reason != handle_brkchars)
661 		    list = complete_on_enum (c->enums, p, word);
662 		  rl_completer_word_break_characters =
663 		    gdb_completer_command_word_break_characters;
664 		}
665 	      else
666 		{
667 		  /* It is a normal command; what comes after it is
668 		     completed by the command's completer function.  */
669 		  if (c->completer == filename_completer)
670 		    {
671 		      /* Many commands which want to complete on
672 			 file names accept several file names, as
673 			 in "run foo bar >>baz".  So we don't want
674 			 to complete the entire text after the
675 			 command, just the last word.  To this
676 			 end, we need to find the beginning of the
677 			 file name by starting at `word' and going
678 			 backwards.  */
679 		      for (p = word;
680 			   p > tmp_command
681 			     && strchr (gdb_completer_file_name_break_characters, p[-1]) == NULL;
682 			   p--)
683 			;
684 		      rl_completer_word_break_characters =
685 			gdb_completer_file_name_break_characters;
686 		    }
687 		  else if (c->completer == location_completer)
688 		    {
689 		      /* Commands which complete on locations want to
690 			 see the entire argument.  */
691 		      for (p = word;
692 			   p > tmp_command
693 			     && p[-1] != ' ' && p[-1] != '\t';
694 			   p--)
695 			;
696 		    }
697 		  if (reason == handle_brkchars
698 		      && c->completer_handle_brkchars != NULL)
699 		    (*c->completer_handle_brkchars) (c, p, word);
700 		  if (reason != handle_brkchars && c->completer != NULL)
701 		    list = (*c->completer) (c, p, word);
702 		}
703 	    }
704 	  else
705 	    {
706 	      /* The command is not followed by whitespace; we need to
707 		 complete on the command itself, e.g. "p" which is a
708 		 command itself but also can complete to "print", "ptype"
709 		 etc.  */
710 	      const char *q;
711 
712 	      /* Find the command we are completing on.  */
713 	      q = p;
714 	      while (q > tmp_command)
715 		{
716 		  if (isalnum (q[-1]) || q[-1] == '-' || q[-1] == '_')
717 		    --q;
718 		  else
719 		    break;
720 		}
721 
722 	      if (reason != handle_brkchars)
723 		list = complete_on_cmdlist (result_list, q, word,
724 					    ignore_help_classes);
725 
726 	      /* Ensure that readline does the right thing
727 		 with respect to inserting quotes.  */
728 	      rl_completer_word_break_characters =
729 		gdb_completer_command_word_break_characters;
730 	    }
731 	}
732       else if (reason == handle_help)
733 	list = NULL;
734       else
735 	{
736 	  /* There is non-whitespace beyond the command.  */
737 
738 	  if (c->prefixlist && !c->allow_unknown)
739 	    {
740 	      /* It is an unrecognized subcommand of a prefix command,
741 		 e.g. "info adsfkdj".  */
742 	      list = NULL;
743 	    }
744 	  else if (c->enums)
745 	    {
746 	      if (reason != handle_brkchars)
747 		list = complete_on_enum (c->enums, p, word);
748 	    }
749 	  else
750 	    {
751 	      /* It is a normal command.  */
752 	      if (c->completer == filename_completer)
753 		{
754 		  /* See the commentary above about the specifics
755 		     of file-name completion.  */
756 		  for (p = word;
757 		       p > tmp_command
758 			 && strchr (gdb_completer_file_name_break_characters,
759 				    p[-1]) == NULL;
760 		       p--)
761 		    ;
762 		  rl_completer_word_break_characters =
763 		    gdb_completer_file_name_break_characters;
764 		}
765 	      else if (c->completer == location_completer)
766 		{
767 		  for (p = word;
768 		       p > tmp_command
769 			 && p[-1] != ' ' && p[-1] != '\t';
770 		       p--)
771 		    ;
772 		}
773 	      if (reason == handle_brkchars
774 		  && c->completer_handle_brkchars != NULL)
775 		(*c->completer_handle_brkchars) (c, p, word);
776 	      if (reason != handle_brkchars && c->completer != NULL)
777 		list = (*c->completer) (c, p, word);
778 	    }
779 	}
780     }
781 
782   return list;
783 }
784 /* Generate completions all at once.  Returns a vector of strings.
785    Each element is allocated with xmalloc.  It can also return NULL if
786    there are no completions.
787 
788    TEXT is the caller's idea of the "word" we are looking at.
789 
790    LINE_BUFFER is available to be looked at; it contains the entire
791    text of the line.
792 
793    POINT is the offset in that line of the cursor.  You
794    should pretend that the line ends at POINT.  */
795 
796 VEC (char_ptr) *
797 complete_line (const char *text, const char *line_buffer, int point)
798 {
799   return complete_line_internal (text, line_buffer,
800 				 point, handle_completions);
801 }
802 
803 /* Complete on command names.  Used by "help".  */
804 VEC (char_ptr) *
805 command_completer (struct cmd_list_element *ignore,
806 		   const char *text, const char *word)
807 {
808   return complete_line_internal (word, text,
809 				 strlen (text), handle_help);
810 }
811 
812 /* Complete on signals.  */
813 
814 VEC (char_ptr) *
815 signal_completer (struct cmd_list_element *ignore,
816 		  const char *text, const char *word)
817 {
818   VEC (char_ptr) *return_val = NULL;
819   size_t len = strlen (word);
820   enum gdb_signal signum;
821   const char *signame;
822 
823   for (signum = GDB_SIGNAL_FIRST; signum != GDB_SIGNAL_LAST; ++signum)
824     {
825       /* Can't handle this, so skip it.  */
826       if (signum == GDB_SIGNAL_0)
827 	continue;
828 
829       signame = gdb_signal_to_name (signum);
830 
831       /* Ignore the unknown signal case.  */
832       if (!signame || strcmp (signame, "?") == 0)
833 	continue;
834 
835       if (strncasecmp (signame, word, len) == 0)
836 	VEC_safe_push (char_ptr, return_val, xstrdup (signame));
837     }
838 
839   return return_val;
840 }
841 
842 /* Complete on a register or reggroup.  */
843 
844 VEC (char_ptr) *
845 reg_or_group_completer (struct cmd_list_element *ignore,
846 			const char *text, const char *word)
847 {
848   VEC (char_ptr) *result = NULL;
849   size_t len = strlen (word);
850   struct gdbarch *gdbarch;
851   struct reggroup *group;
852   const char *name;
853   int i;
854 
855   if (!target_has_registers)
856     return result;
857 
858   gdbarch = get_frame_arch (get_selected_frame (NULL));
859 
860   for (i = 0;
861        (name = user_reg_map_regnum_to_name (gdbarch, i)) != NULL;
862        i++)
863     {
864       if (*name != '\0' && strncmp (word, name, len) == 0)
865 	VEC_safe_push (char_ptr, result, xstrdup (name));
866     }
867 
868   for (group = reggroup_next (gdbarch, NULL);
869        group != NULL;
870        group = reggroup_next (gdbarch, group))
871     {
872       name = reggroup_name (group);
873       if (strncmp (word, name, len) == 0)
874 	VEC_safe_push (char_ptr, result, xstrdup (name));
875     }
876 
877   return result;
878 }
879 
880 
881 /* Get the list of chars that are considered as word breaks
882    for the current command.  */
883 
884 char *
885 gdb_completion_word_break_characters (void)
886 {
887   VEC (char_ptr) *list;
888 
889   list = complete_line_internal (rl_line_buffer, rl_line_buffer, rl_point,
890 				 handle_brkchars);
891   gdb_assert (list == NULL);
892   return rl_completer_word_break_characters;
893 }
894 
895 /* Generate completions one by one for the completer.  Each time we
896    are called return another potential completion to the caller.
897    line_completion just completes on commands or passes the buck to
898    the command's completer function, the stuff specific to symbol
899    completion is in make_symbol_completion_list.
900 
901    TEXT is the caller's idea of the "word" we are looking at.
902 
903    MATCHES is the number of matches that have currently been collected
904    from calling this completion function.  When zero, then we need to
905    initialize, otherwise the initialization has already taken place
906    and we can just return the next potential completion string.
907 
908    LINE_BUFFER is available to be looked at; it contains the entire
909    text of the line.  POINT is the offset in that line of the cursor.
910    You should pretend that the line ends at POINT.
911 
912    Returns NULL if there are no more completions, else a pointer to a
913    string which is a possible completion, it is the caller's
914    responsibility to free the string.  */
915 
916 static char *
917 line_completion_function (const char *text, int matches,
918 			  char *line_buffer, int point)
919 {
920   static VEC (char_ptr) *list = NULL;	/* Cache of completions.  */
921   static int index;			/* Next cached completion.  */
922   char *output = NULL;
923 
924   if (matches == 0)
925     {
926       /* The caller is beginning to accumulate a new set of
927          completions, so we need to find all of them now, and cache
928          them for returning one at a time on future calls.  */
929 
930       if (list)
931 	{
932 	  /* Free the storage used by LIST, but not by the strings
933 	     inside.  This is because rl_complete_internal () frees
934 	     the strings.  As complete_line may abort by calling
935 	     `error' clear LIST now.  */
936 	  VEC_free (char_ptr, list);
937 	}
938       index = 0;
939       list = complete_line (text, line_buffer, point);
940     }
941 
942   /* If we found a list of potential completions during initialization
943      then dole them out one at a time.  After returning the last one,
944      return NULL (and continue to do so) each time we are called after
945      that, until a new list is available.  */
946 
947   if (list)
948     {
949       if (index < VEC_length (char_ptr, list))
950 	{
951 	  output = VEC_index (char_ptr, list, index);
952 	  index++;
953 	}
954     }
955 
956 #if 0
957   /* Can't do this because readline hasn't yet checked the word breaks
958      for figuring out whether to insert a quote.  */
959   if (output == NULL)
960     /* Make sure the word break characters are set back to normal for
961        the next time that readline tries to complete something.  */
962     rl_completer_word_break_characters =
963       current_language->la_word_break_characters();
964 #endif
965 
966   return (output);
967 }
968 
969 /* Skip over the possibly quoted word STR (as defined by the quote
970    characters QUOTECHARS and the word break characters BREAKCHARS).
971    Returns pointer to the location after the "word".  If either
972    QUOTECHARS or BREAKCHARS is NULL, use the same values used by the
973    completer.  */
974 
975 const char *
976 skip_quoted_chars (const char *str, const char *quotechars,
977 		   const char *breakchars)
978 {
979   char quote_char = '\0';
980   const char *scan;
981 
982   if (quotechars == NULL)
983     quotechars = gdb_completer_quote_characters;
984 
985   if (breakchars == NULL)
986     breakchars = current_language->la_word_break_characters();
987 
988   for (scan = str; *scan != '\0'; scan++)
989     {
990       if (quote_char != '\0')
991 	{
992 	  /* Ignore everything until the matching close quote char.  */
993 	  if (*scan == quote_char)
994 	    {
995 	      /* Found matching close quote.  */
996 	      scan++;
997 	      break;
998 	    }
999 	}
1000       else if (strchr (quotechars, *scan))
1001 	{
1002 	  /* Found start of a quoted string.  */
1003 	  quote_char = *scan;
1004 	}
1005       else if (strchr (breakchars, *scan))
1006 	{
1007 	  break;
1008 	}
1009     }
1010 
1011   return (scan);
1012 }
1013 
1014 /* Skip over the possibly quoted word STR (as defined by the quote
1015    characters and word break characters used by the completer).
1016    Returns pointer to the location after the "word".  */
1017 
1018 const char *
1019 skip_quoted (const char *str)
1020 {
1021   return skip_quoted_chars (str, NULL, NULL);
1022 }
1023