gdb
authorTom Tromey <tromey@redhat.com>
Mon, 9 Jun 2008 19:25:15 +0000 (19:25 +0000)
committerTom Tromey <tromey@redhat.com>
Mon, 9 Jun 2008 19:25:15 +0000 (19:25 +0000)
* completer.c (complete_line): Don't special-case
expression_completer.
(expression_completer): Only pass last word to
location_completer.
* c-exp.y (yylex): Check 'token', not 'operator'.
gdb/testsuite
* gdb.base/completion.exp: New tests for field name completion
with spaces, and field name completion with '->'.

gdb/ChangeLog
gdb/c-exp.y
gdb/completer.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/completion.exp

index 89d6070..475d952 100644 (file)
@@ -1,3 +1,11 @@
+2008-06-09  Tom Tromey  <tromey@redhat.com>
+
+       * completer.c (complete_line): Don't special-case
+       expression_completer.
+       (expression_completer): Only pass last word to
+       location_completer.
+       * c-exp.y (yylex): Check 'token', not 'operator'.
+
 2008-06-09  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * configure.ac (build_warnings): Add -Wno-format for mingw.
index 9cf63d8..0f2ee16 100644 (file)
@@ -1433,7 +1433,7 @@ yylex ()
       {
        lexptr += 2;
        yylval.opcode = tokentab2[i].opcode;
-       if (in_parse_field && tokentab2[i].opcode == ARROW)
+       if (in_parse_field && tokentab2[i].token == ARROW)
          last_was_structop = 1;
        return tokentab2[i].token;
       }
index 163a9dc..62f0b69 100644 (file)
@@ -387,7 +387,7 @@ char **
 expression_completer (char *text, char *word)
 {
   struct type *type;
-  char *fieldname;
+  char *fieldname, *p;
 
   /* Perform a tentative parse of the expression, to see whether a
      field completion is required.  */
@@ -418,8 +418,15 @@ expression_completer (char *text, char *word)
        }
     }
 
+  /* Commands which complete on locations want to see the entire
+     argument.  */
+  for (p = word;
+       p > text && p[-1] != ' ' && p[-1] != '\t';
+       p--)
+    ;
+
   /* Not ideal but it is what we used to do before... */
-  return location_completer (text, word);
+  return location_completer (p, word);
 }
 
 /* Complete on command names.  Used by "help".  */
@@ -604,8 +611,7 @@ complete_line (const char *text, char *line_buffer, int point)
                      rl_completer_word_break_characters =
                        gdb_completer_file_name_break_characters;
                    }
-                 else if (c->completer == location_completer
-                          || c->completer == expression_completer)
+                 else if (c->completer == location_completer)
                    {
                      /* Commands which complete on locations want to
                         see the entire argument.  */
@@ -673,8 +679,7 @@ complete_line (const char *text, char *line_buffer, int point)
                  rl_completer_word_break_characters =
                    gdb_completer_file_name_break_characters;
                }
-             else if (c->completer == location_completer
-                      || c->completer == expression_completer)
+             else if (c->completer == location_completer)
                {
                  for (p = word;
                       p > tmp_command
index ef42b4d..d767305 100644 (file)
@@ -1,3 +1,8 @@
+2008-06-09  Tom Tromey  <tromey@redhat.com>
+
+       * gdb.base/completion.exp: New tests for field name completion
+       with spaces, and field name completion with '->'.
+
 2008-06-06  Tom Tromey  <tromey@redhat.com>
 
        * gdb.base/break1.c (struct some_struct): New struct.
index 79f588b..f4ab1b1 100644 (file)
@@ -654,6 +654,36 @@ gdb_expect  {
         timeout         { fail "(timeout) complete 'p values\[0\].a' 2" }
         }
 
+send_gdb "p values\[0\] . a\t"
+gdb_expect  {
+        -re "^p values.0. . a_field $"\
+            { send_gdb "\n"
+              gdb_expect {
+                      -re "^.* = 0.*$gdb_prompt $"\
+                                        { pass "complete 'p values\[0\] . a'"}
+                      -re ".*$gdb_prompt $" { fail "complete 'p values\[0\] . a'"}
+                      timeout           {fail "(timeout) complete 'p values\[0\] . a'"}
+                     }
+            }
+        -re ".*$gdb_prompt $"       { fail "complete 'p values\[0\] . a'" }
+        timeout         { fail "(timeout) complete 'p values\[0\] . a' 2" }
+        }
+
+send_gdb "p &values\[0\] -> a\t"
+gdb_expect  {
+        -re "^p &values.0. -> a_field $"\
+            { send_gdb "\n"
+              gdb_expect {
+                      -re "^.* = .*0x\[0-9a-fA-F\]*.*$gdb_prompt $"\
+                                        { pass "complete 'p &values\[0\] -> a'"}
+                      -re ".*$gdb_prompt $" { fail "complete 'p &values\[0\] -> a'"}
+                      timeout           {fail "(timeout) complete 'p &values\[0\] -> a'"}
+                     }
+            }
+        -re ".*$gdb_prompt $"       { fail "complete 'p &values\[0\] -> a'" }
+        timeout         { fail "(timeout) complete 'p &values\[0\] -> a' 2" }
+        }
+
 # The following tests used to simply try to complete `${objdir}/file',
 # and so on.  The problem is that ${objdir} can be very long; the
 # completed filename may be more than eighty characters wide.  When