2005-11-15 Andrew Stubbs <andrew.stubbs@st.com>

* cli/cli-script.c: Include gdb_assert.h.
	(locate_arg): Detect $argc.
	(insert_args): Substitute $argc.
	* Makefile.in (cli-script.o): Add dependency on gdb_assert.h.

doc/
	* gdb.texinfo (User-defined commands): Add $argc. Add missing 'end'.
	Change @var{$arg0 to @code{$arg0.
This commit is contained in:
Andrew Stubbs 2005-11-15 12:03:08 +00:00
parent 1637cd900b
commit c03c782ff0
5 changed files with 61 additions and 10 deletions

View file

@ -1,3 +1,10 @@
2005-11-15 Andrew Stubbs <andrew.stubbs@st.com>
* cli/cli-script.c: Include gdb_assert.h.
(locate_arg): Detect $argc.
(insert_args): Substitute $argc.
* Makefile.in (cli-script.o): Add dependency on gdb_assert.h.
2005-11-14 James E Wilson <wilson@specifix.com> 2005-11-14 James E Wilson <wilson@specifix.com>
PR 2024 PR 2024

View file

@ -2807,7 +2807,7 @@ cli-logging.o: $(srcdir)/cli/cli-logging.c $(defs_h) $(gdbcmd_h) $(ui_out_h) \
$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-logging.c $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-logging.c
cli-script.o: $(srcdir)/cli/cli-script.c $(defs_h) $(value_h) $(language_h) \ cli-script.o: $(srcdir)/cli/cli-script.c $(defs_h) $(value_h) $(language_h) \
$(ui_out_h) $(gdb_string_h) $(exceptions_h) $(top_h) $(cli_cmds_h) \ $(ui_out_h) $(gdb_string_h) $(exceptions_h) $(top_h) $(cli_cmds_h) \
$(cli_decode_h) $(cli_script_h) $(cli_decode_h) $(cli_script_h) $(gdb_assert_h)
$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-script.c $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-script.c
cli-setshow.o: $(srcdir)/cli/cli-setshow.c $(defs_h) $(readline_tilde_h) \ cli-setshow.o: $(srcdir)/cli/cli-setshow.c $(defs_h) $(readline_tilde_h) \
$(value_h) $(gdb_string_h) $(ui_out_h) $(cli_decode_h) $(cli_cmds_h) \ $(value_h) $(gdb_string_h) $(ui_out_h) $(cli_decode_h) $(cli_cmds_h) \

View file

@ -33,6 +33,7 @@
#include "cli/cli-cmds.h" #include "cli/cli-cmds.h"
#include "cli/cli-decode.h" #include "cli/cli-decode.h"
#include "cli/cli-script.h" #include "cli/cli-script.h"
#include "gdb_assert.h"
/* Prototypes for local functions */ /* Prototypes for local functions */
@ -572,7 +573,8 @@ locate_arg (char *p)
{ {
while ((p = strchr (p, '$'))) while ((p = strchr (p, '$')))
{ {
if (strncmp (p, "$arg", 4) == 0 && isdigit (p[4])) if (strncmp (p, "$arg", 4) == 0
&& (isdigit (p[4]) || p[4] == 'c'))
return p; return p;
p++; p++;
} }
@ -596,12 +598,20 @@ insert_args (char *line)
len += p - line; len += p - line;
i = p[4] - '0'; i = p[4] - '0';
if (i >= user_args->count) if (p[4] == 'c')
{
/* $argc. Number will be <=10. */
len += user_args->count == 10 ? 2 : 1;
}
else if (i >= user_args->count)
{ {
error (_("Missing argument %d in user function."), i); error (_("Missing argument %d in user function."), i);
return NULL; return NULL;
} }
else
{
len += user_args->a[i].len; len += user_args->a[i].len;
}
line = p + 5; line = p + 5;
} }
@ -625,14 +635,28 @@ insert_args (char *line)
memcpy (new_line, line, p - line); memcpy (new_line, line, p - line);
new_line += p - line; new_line += p - line;
i = p[4] - '0';
if (p[4] == 'c')
{
gdb_assert (user_args->count >= 0 && user_args->count <= 10);
if (user_args->count == 10)
{
*(new_line++) = '1';
*(new_line++) = '0';
}
else
*(new_line++) = user_args->count + '0';
}
else
{
i = p[4] - '0';
len = user_args->a[i].len; len = user_args->a[i].len;
if (len) if (len)
{ {
memcpy (new_line, user_args->a[i].arg, len); memcpy (new_line, user_args->a[i].arg, len);
new_line += len; new_line += len;
} }
}
line = p + 5; line = p + 5;
} }
/* Don't forget the tail. */ /* Don't forget the tail. */

View file

@ -1,3 +1,8 @@
2005-11-15 Andrew Stubbs <andrew.stubbs@st.com>
* gdb.texinfo (User-defined commands): Add $argc. Add missing 'end'.
Change @var{$arg0 to @code{$arg0.
2005-11-14 Wu Zhou <woodzltc@cn.ibm.com> 2005-11-14 Wu Zhou <woodzltc@cn.ibm.com>
* gdb.texinfo (Fortran): Add some words about Fortran debugging. * gdb.texinfo (Fortran): Add some words about Fortran debugging.

View file

@ -15708,11 +15708,12 @@ A @dfn{user-defined command} is a sequence of @value{GDBN} commands to
which you assign a new name as a command. This is done with the which you assign a new name as a command. This is done with the
@code{define} command. User commands may accept up to 10 arguments @code{define} command. User commands may accept up to 10 arguments
separated by whitespace. Arguments are accessed within the user command separated by whitespace. Arguments are accessed within the user command
via @var{$arg0@dots{}$arg9}. A trivial example: via @code{$arg0@dots{}$arg9}. A trivial example:
@smallexample @smallexample
define adder define adder
print $arg0 + $arg1 + $arg2 print $arg0 + $arg1 + $arg2
end
@end smallexample @end smallexample
@noindent @noindent
@ -15728,6 +15729,20 @@ its three arguments. Note the arguments are text substitutions, so they may
reference variables, use complex expressions, or even perform inferior reference variables, use complex expressions, or even perform inferior
functions calls. functions calls.
In addition, @code{$argc} may be used to find out how many arguments have
been passed. This expands to a number in the range 0@dots{}10.
@smallexample
define adder
if $argc == 2
print $arg0 + $arg1
end
if $argc == 3
print $arg0 + $arg1 + $arg2
end
end
@end smallexample
@table @code @table @code
@kindex define @kindex define