Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Rob Quill" <rob.quill@gmail.com>
To: "Eli Zaretskii" <eliz@gnu.org>
Cc: "Jim Blandy" <jimb@red-bean.com>, gdb-patches@sourceware.org
Subject: Re: New scope checking patch
Date: Sun, 27 Jul 2008 23:45:00 -0000	[thread overview]
Message-ID: <baf6008d0807271645o7d03dd94rd5b3f0d08302085a@mail.gmail.com> (raw)
In-Reply-To: <utzkuws6q.fsf@gnu.org>

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

2008/1/31 Eli Zaretskii <eliz@gnu.org>:
>> Date: Wed, 30 Jan 2008 15:57:06 -0800
>> From: "Jim Blandy" <jimb@red-bean.com>
>> Cc: "Rob Quill" <rob.quill@gmail.com>, gdb-patches@sourceware.org
>>
>> I'd expect the primary description to be in "Expressions", in the
>> part that says, "GDB supports these operators, in addition to those
>> common to programming languages".
>
> Fine with me.
>

Hi all,

This patch (like the remove deprecated_set_value_type one) has been a
long time coming. Please find attached what I believe should be the
final version of this patch.

Rob

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: in_scope.patch --]
[-- Type: text/x-diff; name=in_scope.patch, Size: 4260 bytes --]

2008-07-27   Rob Quill <rob.quill@gmail.com>

	Add $in_scope as a type of expression.
	* c-exp.y (IN_SCOPE): New token.
	  (exp): IN_SCOPE (name): evaluates to 1 if name is in scope,
	  0 otherwise.
	(yylex): Match "$in_scope" as IN_SCOPE token
       * gdb.texinfo (expressions): Add a small paragraph (with an
	 example) about the $in_scope operator.
       * NEWS: Mentions $in_scope.

Index: gdb/NEWS
===================================================================
RCS file: /cvs/src/src/gdb/NEWS,v
retrieving revision 1.282
diff -u -p -r1.282 NEWS
--- gdb/NEWS	18 Jul 2008 20:55:32 -0000	1.282
+++ gdb/NEWS	27 Jul 2008 23:02:48 -0000
@@ -3,6 +3,12 @@
 
 *** Changes since GDB 6.8
 
+* New expression type
+
+$in_scope(...)
+  The value of this expression is 1 if the variable within the
+  parentheses is within the current scope, 0 otherwise.
+
 * Commands `set debug-file-directory', `set solib-search-path' and `set args'
 now complete on file names.
 
Index: gdb/c-exp.y
===================================================================
RCS file: /cvs/src/src/gdb/c-exp.y,v
retrieving revision 1.46
diff -u -p -r1.46 c-exp.y
--- gdb/c-exp.y	25 Jun 2008 15:49:20 -0000	1.46
+++ gdb/c-exp.y	27 Jul 2008 23:02:49 -0000
@@ -209,6 +209,8 @@ static int parse_number (char *, int, in
 %token TRUEKEYWORD
 %token FALSEKEYWORD
 
+/* $in_scope opperator */
+%token IN_SCOPE
 
 %left ','
 %left ABOVE_COMMA
@@ -252,6 +254,30 @@ exp1	:	exp
 	;
 
 /* Expressions, not including the comma operator.  */
+exp    :       IN_SCOPE '(' name_not_typename ')'
+                       {
+                         struct type *int_type;
+                         struct minimal_symbol *min_symbol;
+
+                         /* If there are no symbols then just stop right away */
+                         if (!have_full_symbols () && !have_partial_symbols ())
+                           error ("No symbol table is loaded.  Use the \"file\" command.");
+
+                         /* Otherwise, prepare to write out the value */
+                         int_type = builtin_type (current_gdbarch)->builtin_int;
+                         write_exp_elt_opcode (OP_LONG);
+                         write_exp_elt_type (int_type);
+
+                         min_symbol =
+                           lookup_minimal_symbol (copy_name($3.stoken), NULL, NULL);
+                         if ($3.sym || min_symbol)
+                           write_exp_elt_longcst ((LONGEST) 1);
+                         else
+                           write_exp_elt_longcst ((LONGEST) 0);
+
+                         write_exp_elt_opcode (OP_LONG); }
+       ;
+
 exp	:	'*' exp    %prec UNARY
 			{ write_exp_elt_opcode (UNOP_IND); }
 	;
@@ -1739,6 +1765,9 @@ yylex ()
   /* Catch specific keywords.  Should be done with a data structure.  */
   switch (namelen)
     {
+    case 9:
+      if (strncmp (tokstart, "$in_scope", 9) == 0)
+        return IN_SCOPE;
     case 8:
       if (strncmp (tokstart, "unsigned", 8) == 0)
 	return UNSIGNED;
Index: gdb/doc/gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.509
diff -u -p -r1.509 gdb.texinfo
--- gdb/doc/gdb.texinfo	18 Jul 2008 20:55:33 -0000	1.509
+++ gdb/doc/gdb.texinfo	27 Jul 2008 23:03:11 -0000
@@ -5750,6 +5750,24 @@ memory.  @var{addr} may be any expressio
 pointer (but parentheses are required around binary operators, just as in
 a cast).  This construct is allowed regardless of what kind of data is
 normally supposed to reside at @var{addr}.
+
+@vindex $in_scope
+@cindex variable in scope, testing
+@item $in_scope
+@samp{$in_scope} allows you to check if a variable is in scope,
+returning 1 if it is and 0 if it is not.  This is most useful when scripting @value{GDBN}
+as it means that the script will not stop executing if a variable is not in scope,
+provided that you check if it is in scope before you test it's value.  The operator
+only works on variables and will not work on structure members or array elements
+for instance.
+
+An example usage from a GDB script may be:
+
+@smallexample
+if ($in_scope(a) == 1 && $in_scope(b) == 1)
+  print a+b  
+@end smallexample
+
 @end table
 
 @node Ambiguous Expressions

  reply	other threads:[~2008-07-27 23:45 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-12 16:29 Rob Quill
2007-11-12 23:26 ` Michael Snyder
2008-01-10  1:00 ` Jim Blandy
2008-01-11  0:52   ` Rob Quill
2008-01-11 22:51     ` Jim Blandy
2008-01-14 23:07       ` Michael Snyder
2008-01-15 17:06         ` Jim Blandy
2008-01-17 19:32       ` Rob Quill
2008-01-17 20:15         ` Jim Blandy
2008-01-17 21:11           ` Rob Quill
2008-01-17 21:58             ` Jim Blandy
2008-01-17 23:40               ` Doug Evans
2008-01-18  1:31               ` Daniel Jacobowitz
2008-01-18  3:35               ` Rob Quill
2008-01-18 18:48                 ` Jim Blandy
2008-01-18 22:43                   ` Rob Quill
2008-01-19  0:38                     ` Jim Blandy
2008-01-30 13:11                       ` Rob Quill
2008-01-30 18:14                         ` Jim Blandy
2008-01-30 18:31                         ` Eli Zaretskii
2008-01-31  4:11                           ` Jim Blandy
2008-01-31  7:26                             ` Eli Zaretskii
2008-07-27 23:45                               ` Rob Quill [this message]
2008-07-28  3:18                                 ` Eli Zaretskii
2008-07-28 10:31                                   ` Rob Quill
2008-07-28 18:27                                     ` Eli Zaretskii
2008-07-29 20:31                                 ` Tom Tromey
2008-07-29 21:04                                   ` Rob Quill
2008-07-29 21:45                                     ` Tom Tromey
2008-07-29 22:53                                       ` Rob Quill
2008-07-30  3:34                                     ` Tom Tromey
2008-10-23 13:42                                       ` Convenience functions (was: Re: New scope checking patch) Daniel Jacobowitz
2008-10-23 15:17                                         ` Convenience functions Tom Tromey
2008-10-23 15:22                                           ` Daniel Jacobowitz
2008-10-23 15:26                                             ` Tom Tromey
2008-10-23 19:14                                             ` Tom Tromey
2008-10-24 12:53                                               ` Eli Zaretskii
2008-11-04 21:37                                         ` Convenience functions (was: Re: New scope checking patch) Thiago Jung Bauermann
2008-11-04 22:23                                           ` Daniel Jacobowitz
2008-11-04 22:43                                             ` Convenience functions Tom Tromey
2008-01-31  7:52                             ` New scope checking patch Michael Snyder
2008-01-19  1:35                     ` Michael Snyder

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=baf6008d0807271645o7d03dd94rd5b3f0d08302085a@mail.gmail.com \
    --to=rob.quill@gmail.com \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=jimb@red-bean.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