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
next prev parent 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