Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew STUBBS <andrew.stubbs@st.com>
To: Daniel Jacobowitz <drow@false.org>
Cc: Eli Zaretskii <eliz@gnu.org>, gdb-patches@sources.redhat.com
Subject: Re: $argc variable
Date: Mon, 14 Nov 2005 22:12:00 -0000	[thread overview]
Message-ID: <4378BB1A.9070606@st.com> (raw)
In-Reply-To: <20051113173524.GC1945@nevyn.them.org>

[-- Attachment #1: Type: text/plain, Size: 676 bytes --]

Daniel Jacobowitz wrote:
> It looks OK to me.  Could you post the revised documentation (to
> gdb-patches, please) so that we can make sure that Eli and you did
> converge?  I couldn't quite follow your earlier conversation.

Here is the full patch including both code and docs.

In the end I have dropped the index altogether. Eli didn't like the 
kindex and the cindex would be so close to the cindex for the section, 
and so similar in content, that it would be pointless.

I still think there is an argument for a kindex entry for both $argc and 
$arg0...$arg1 in case people don't know they are looking for 
'user-defined', but I'm not really that bothered.

OK?

Andrew

[-- Attachment #2: argc.patch --]
[-- Type: text/plain, Size: 4178 bytes --]

2005-11-14  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.

Index: src/gdb/cli/cli-script.c
===================================================================
--- src.orig/gdb/cli/cli-script.c	2005-11-14 14:49:30.000000000 +0000
+++ src/gdb/cli/cli-script.c	2005-11-14 15:01:14.000000000 +0000
@@ -33,6 +33,7 @@
 #include "cli/cli-cmds.h"
 #include "cli/cli-decode.h"
 #include "cli/cli-script.h"
+#include "gdb_assert.h"
 
 /* Prototypes for local functions */
 
@@ -572,7 +573,8 @@ locate_arg (char *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;
       p++;
     }
@@ -596,12 +598,20 @@ insert_args (char *line)
       len += p - line;
       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);
 	  return NULL;
 	}
-      len += user_args->a[i].len;
+      else
+	{
+	  len += user_args->a[i].len;
+	}
       line = p + 5;
     }
 
@@ -625,13 +635,27 @@ insert_args (char *line)
 
       memcpy (new_line, line, p - line);
       new_line += p - line;
-      i = p[4] - '0';
 
-      len = user_args->a[i].len;
-      if (len)
+      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
 	{
-	  memcpy (new_line, user_args->a[i].arg, len);
-	  new_line += len;
+	  i = p[4] - '0';
+	  len = user_args->a[i].len;
+	  if (len)
+	  {
+	    memcpy (new_line, user_args->a[i].arg, len);
+	    new_line += len;
+	  }
 	}
       line = p + 5;
     }
Index: src/gdb/doc/gdb.texinfo
===================================================================
--- src.orig/gdb/doc/gdb.texinfo	2005-11-14 14:50:18.000000000 +0000
+++ src/gdb/doc/gdb.texinfo	2005-11-14 15:28:00.000000000 +0000
@@ -15708,11 +15708,12 @@ A @dfn{user-defined command} is a sequen
 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
 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
 define adder
   print $arg0 + $arg1 + $arg2
+end
 @end smallexample
 
 @noindent
@@ -15728,6 +15729,20 @@ its three arguments.  Note the arguments
 reference variables, use complex expressions, or even perform inferior
 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
 
 @kindex define
Index: src/gdb/Makefile.in
===================================================================
--- src.orig/gdb/Makefile.in	2005-11-14 14:49:30.000000000 +0000
+++ src/gdb/Makefile.in	2005-11-14 15:01:14.000000000 +0000
@@ -2807,7 +2807,7 @@ cli-logging.o: $(srcdir)/cli/cli-logging
 	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-logging.c
 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) \
-	$(cli_decode_h) $(cli_script_h)
+	$(cli_decode_h) $(cli_script_h) $(gdb_assert_h)
 	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-script.c
 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) \

       reply	other threads:[~2005-11-14 16:34 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <436A0BD2.5080505@st.com>
     [not found] ` <20051107001800.GF19200@nevyn.them.org>
     [not found]   ` <436F35E9.4070808@st.com>
     [not found]     ` <20051107133538.GA2331@nevyn.them.org>
     [not found]       ` <43709E94.4070004@st.com>
     [not found]         ` <u7jbisp6n.fsf@gnu.org>
     [not found]           ` <4371D9A6.40109@st.com>
     [not found]             ` <u3bm5sk6i.fsf@gnu.org>
     [not found]               ` <43731C16.2040203@st.com>
     [not found]                 ` <20051113173524.GC1945@nevyn.them.org>
2005-11-14 22:12                   ` Andrew STUBBS [this message]
2005-11-15 12:35                     ` Eli Zaretskii
2005-11-15 12:39                       ` Daniel Jacobowitz
2005-11-15 17:54                         ` Andrew STUBBS
2005-11-16  5:52                           ` Eli Zaretskii
2005-11-16 14:43                             ` Andrew STUBBS
2005-11-16 16:19                               ` Daniel Jacobowitz
2005-11-16  4:01                         ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4378BB1A.9070606@st.com \
    --to=andrew.stubbs@st.com \
    --cc=drow@false.org \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox