[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>
Fix bug reported and analyzed by Olivier Crete:

View File

@ -1,7 +1,7 @@
/* GDB CLI command scripting.
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.
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
line structure for them. */
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))
*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))
{
*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>
* 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
# 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"}
}
# 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
# hook the "stop" pseudo command, and we'll define it to use a user-
# define command.