diff options
author | Stu Grossman <grossman@cygnus> | 1998-06-10 23:29:59 +0000 |
---|---|---|
committer | Stu Grossman <grossman@cygnus> | 1998-06-10 23:29:59 +0000 |
commit | f6d23b6f3bc8e82684fc24b2d4d06ffeac38f509 (patch) | |
tree | fac622536d092e1dc9558550cf799fa8c784324f /gdb/c-exp.y | |
parent | a27a2a8de49c4bb4fb9cc9cbe911370feb344d18 (diff) | |
download | gdb-f6d23b6f3bc8e82684fc24b2d4d06ffeac38f509.zip gdb-f6d23b6f3bc8e82684fc24b2d4d06ffeac38f509.tar.gz gdb-f6d23b6f3bc8e82684fc24b2d4d06ffeac38f509.tar.bz2 |
* c-exp.y: Fix problems with parsing "'foo.bar'::func". Some languages
allow symbols with dots.
* gdbtypes.c (check_stub_method): Cosmetic. Use more descriptive
names for parameters.
start-sanitize-java
* jv-exp.y: Parser now accepts primitive types.
* (parse_number): Use correct ifdef for scanf long double support.
* jv-lang.c (java_array_type): Initial cut at array support.
end-sanitize-java
* language.c language.h (set_language): Now returns previous language.
* symtab.c (find_methods): Make static. Cosmetic changes, including
indentation, and adding descriptive comments. Move local variable defs
into the block they are used in.
* Don't call check_stub_method any more. Use gdb_mangle_name to
generate the full method name. find_method doesn't need all the other
goobldegook that check_stub_method does.
* (gdb_mangle_name): Use more descriptive names for parameters. Fix
comment.
start-sanitize-java
* (lookup_partial_symbol lookup_block_symbol): Check for java to
ensure we can find mangled names.
end-sanitize-java
* (decode_line_1): Move local variable defs into the block they are
used in. (Improves code readability.)
Diffstat (limited to 'gdb/c-exp.y')
-rw-r--r-- | gdb/c-exp.y | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/gdb/c-exp.y b/gdb/c-exp.y index 7316ae8..a6d21ae 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -214,6 +214,7 @@ parse_number PARAMS ((char *, int, int, YYSTYPE *)); %right UNARY INCREMENT DECREMENT %right ARROW '.' '[' '(' %token <ssym> BLOCKNAME +%token <bval> FILENAME %type <bval> block %left COLONCOLON @@ -531,18 +532,15 @@ exp : THIS block : BLOCKNAME { - if ($1.sym != 0) - $$ = SYMBOL_BLOCK_VALUE ($1.sym); + if ($1.sym) + $$ = SYMBOL_BLOCK_VALUE ($1.sym); else - { - struct symtab *tem = - lookup_symtab (copy_name ($1.stoken)); - if (tem) - $$ = BLOCKVECTOR_BLOCK (BLOCKVECTOR (tem), STATIC_BLOCK); - else - error ("No file or function \"%s\".", - copy_name ($1.stoken)); - } + error ("No file or function \"%s\".", + copy_name ($1.stoken)); + } + | FILENAME + { + $$ = $1; } ; @@ -1526,13 +1524,25 @@ yylex () /* Call lookup_symtab, not lookup_partial_symtab, in case there are no psymtabs (coff, xcoff, or some future change to blow away the psymtabs once once symbols are read). */ - if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK) || - lookup_symtab (tmp)) + if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK) { yylval.ssym.sym = sym; yylval.ssym.is_a_field_of_this = is_a_field_of_this; return BLOCKNAME; } + else if (!sym) + { /* See if it's a file name. */ + struct symtab *symtab; + + symtab = lookup_symtab (tmp); + + if (symtab) + { + yylval.bval = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK); + return FILENAME; + } + } + if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF) { #if 1 |