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 18 Jan 2008 03:32:41 -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;