Re: New scope checking patch

Rob Quill
2008-01-17T21:11:36Z

On 17/01/2008, Jim Blandy <jimb@codesourcery.com> wrote:
> Also, please be sure that the indentation follows the GNU coding
> conventions. Substatements should be indented by two spaces.
> (c-exp.y is not a great place to look for examples, since it's a mess,
> but look at, say, frame.c.)
>
> From looking at your patch as it arrived through my mailer, it seemed
> that the code block for the new $in_scope grammar rule was not
> indented in the same way as the other blocks. These should all be
> consistent.

Hey,

Sorry about getting the formatting consistently wrong. I've
reformatted it and it looks to me like it matches the other cases,
although it is hard to tell where to use tabs and where to use spaces,
and I'm never sure it's right as what if I have a different tab size
to you etc. I tried putting it through indent, but that just made a
mess, although as a rule is it OK to use that if it is a C file?

http://www.gnu.org/prep/standards/standards.html#Formatting states:

"The rest of this section gives our recommendations for other aspects
of C formatting style, which is also the default style of the indent
program in version 1.2 and newer."

Anyway, hopefully this version will have the formatting right.

Rob

2008-01-17 Rob Quill <rob.quill@gmail.com>
* c-exp.y : Add $in_scope as a type of expression.

Index: gdb/c-exp.y
===================================================================
RCS file: /cvs/src/src/gdb/c-exp.y,v
retrieving revision 1.42
diff -u -p -r1.42 c-exp.y
--- gdb/c-exp.y 9 Jan 2008 19:27:15 -0000 1.42
+++ gdb/c-exp.y 17 Jan 2008 20:59:33 -0000
@@ -208,6 +208,8 @@ static int parse_number (char *, int, in
%token TRUEKEYWORD
%token FALSEKEYWORD

+/* $in_scope opperator */
+%token IN_SCOPE

%left ','
%left ABOVE_COMMA
@@ -251,6 +253,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); }
;
@@ -1678,6 +1704,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;