[gdb/ChangeLog]

2004-09-10  Jason Molenda  (jmolenda@apple.com)

        * cli/cli-script.c (read_next_line): Accept zero or more whitespace
        chars after 'if' or 'while' commands in user-defined commands.

[gdb/testsuite/ChangeLog]
2004-09-10  Jason Molenda  (jmolenda@apple.com)

        * gdb.base/define.exp: Two new tests to verify zero space chars
        after 'if' and 'while' commands in a user-defined command is correctly
        parsed.

Approved here:
http://sources.redhat.com/ml/gdb-patches/2004-09/msg00160.html
http://sources.redhat.com/ml/gdb-patches/2004-09/msg00157.html
This commit is contained in:
Jason Molenda 2004-09-10 23:12:12 +00:00
parent f4eae89cf7
commit 33f2d56778
4 changed files with 61 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2004-09-10 Jason Molenda (jmolenda@apple.com)
* cli/cli-script.c (read_next_line): Accept zero or more whitespace
chars after 'if' or 'while' commands in user-defined commands.
2004-09-08 Jim Blandy <jimb@redhat.com> 2004-09-08 Jim Blandy <jimb@redhat.com>
Fix bug reported and analyzed by Olivier Crete: Fix bug reported and analyzed by Olivier Crete:

View File

@ -1,7 +1,7 @@
/* GDB CLI command scripting. /* GDB CLI command scripting.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004 Free Software
Foundation, Inc. Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -727,9 +727,21 @@ read_next_line (struct command_line **command)
/* Check for while, if, break, continue, etc and build a new command /* Check for while, if, break, continue, etc and build a new command
line structure for them. */ line structure for them. */
if (p1 - p > 5 && !strncmp (p, "while", 5)) if (p1 - p > 5 && !strncmp (p, "while", 5))
*command = build_command_line (while_control, p + 6); {
char *first_arg;
first_arg = p + 5;
while (first_arg < p1 && isspace (*first_arg))
first_arg++;
*command = build_command_line (while_control, first_arg);
}
else if (p1 - p > 2 && !strncmp (p, "if", 2)) else if (p1 - p > 2 && !strncmp (p, "if", 2))
*command = build_command_line (if_control, p + 3); {
char *first_arg;
first_arg = p + 2;
while (first_arg < p1 && isspace (*first_arg))
first_arg++;
*command = build_command_line (if_control, first_arg);
}
else if (p1 - p == 10 && !strncmp (p, "loop_break", 10)) else if (p1 - p == 10 && !strncmp (p, "loop_break", 10))
{ {
*command = (struct command_line *) *command = (struct command_line *)

View File

@ -1,3 +1,9 @@
2004-09-10 Jason Molenda (jmolenda@apple.com)
* gdb.base/define.exp: Two new tests to verify zero space chars
after 'if' and 'while' commands in a user-defined command is correctly
parsed.
2004-09-08 Andrew Cagney <cagney@gnu.org> 2004-09-08 Andrew Cagney <cagney@gnu.org>
* gdb.base/signals.exp (signal_tests_1): Delete. Merge signal * gdb.base/signals.exp (signal_tests_1): Delete. Merge signal

View File

@ -1,4 +1,4 @@
# Copyright 1998, 1999, 2001, 2003 Free Software Foundation, Inc. # Copyright 1998, 1999, 2001, 2003, 2004 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -200,6 +200,40 @@ gdb_expect {
timeout {fail "(timeout) help user command: nextwhere"} timeout {fail "(timeout) help user command: nextwhere"}
} }
# Verify that the command parser doesn't require a space after an 'if'
# command in a user defined function.
#
gdb_test_multiple "define ifnospace" "define user command: ifnospace" \
{
-re "Type commands for definition of \"ifnospace\".\r\nEnd with a line saying just \"end\".\r\n>$" \
{
gdb_test_multiple "if(3<4)\nprint \"hi there\\n\"\nend\nend" "send body of ifnospace" \
{
-re "$gdb_prompt $"\
{pass "define user command: ifnospace"}
}
}
}
gdb_test "ifnospace" ".*hi there.*" "test ifnospace is parsed correctly"
# Verify that the command parser doesn't require a space after an 'while'
# command in a user defined function.
#
gdb_test_multiple "define whilenospace" "define user command: whilenospace" \
{
-re "Type commands for definition of \"whilenospace\".\r\nEnd with a line saying just \"end\".\r\n>$" \
{
gdb_test_multiple "set \$i=1\nwhile(\$i<2)\nset \$i=2\nprint \"hi there\\n\"\nend\nend" "send body of whilenospace" \
{
-re "$gdb_prompt $" \
{pass "define user command: whilenospace"}
}
}
}
gdb_test "whilenospace" ".*hi there.*" "test whilenospace is parsed correctly"
# Verify that the user can "hook" a builtin command. We choose to # Verify that the user can "hook" a builtin command. We choose to
# hook the "stop" pseudo command, and we'll define it to use a user- # hook the "stop" pseudo command, and we'll define it to use a user-
# define command. # define command.