diff options
author | Daniel Jacobowitz <dan@debian.org> | 2003-12-30 21:01:20 +0000 |
---|---|---|
committer | Daniel Jacobowitz <dan@debian.org> | 2003-12-30 21:01:20 +0000 |
commit | db6ed21e3316c19ecd0c0a3751df594f89642bce (patch) | |
tree | 914e050cdabe5a26a4ad36984a6fe77637bf6c77 | |
parent | c11bc4c3350d1246e63ad1a92e2825cb65974afd (diff) | |
download | gdb-db6ed21e3316c19ecd0c0a3751df594f89642bce.tar.gz |
* cp-names.y (yylex): Fix thinko for character constants.
* dwarf2read.c: Include "cp-names.h".
(read_structure_scope): Canonicalize class names.
-rw-r--r-- | gdb/ChangeLog.cplus | 6 | ||||
-rw-r--r-- | gdb/cp-names.y | 11 | ||||
-rw-r--r-- | gdb/dwarf2read.c | 11 |
3 files changed, 23 insertions, 5 deletions
diff --git a/gdb/ChangeLog.cplus b/gdb/ChangeLog.cplus index 99fd1c88419..a13d44f56cd 100644 --- a/gdb/ChangeLog.cplus +++ b/gdb/ChangeLog.cplus @@ -1,3 +1,9 @@ +2003-12-30 Daniel Jacobowitz <drow@mvista.com> + + * cp-names.y (yylex): Fix thinko for character constants. + * dwarf2read.c: Include "cp-names.h". + (read_structure_scope): Canonicalize class names. + 2003-12-24 Daniel Jacobowitz <drow@mvista.com> * Makefile.in (cp_names_h): New variable. diff --git a/gdb/cp-names.y b/gdb/cp-names.y index eac833336e4..60df8a8de3c 100644 --- a/gdb/cp-names.y +++ b/gdb/cp-names.y @@ -1597,13 +1597,18 @@ yylex (void) "character set `%s'.", tok, target_charset ()); } - yylval.typed_val_int.val = c; - yylval.typed_val_int.type = d_builtin_type ('c' - 'a'); - c = *lexptr++; if (c != '\'') error ("Invalid character constant."); + /* FIXME: We should refer to a canonical form of the character, + presumably the same one that appears in manglings - the decimal + representation. But if that isn't in our input then we have to + allocate memory for it somewhere. */ + yylval.comp = d_make_comp (di, D_COMP_LITERAL, + d_builtin_type ('c' - 'a'), + d_make_name (di, tokstart, lexptr - tokstart)); + return INT; case '(': diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index bf2a57e5197..0616a35d8e5 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -44,6 +44,7 @@ #include "dwarf2expr.h" #include "dwarf2loc.h" #include "cp-support.h" +#include "cp-names.h" #include <fcntl.h> #include "gdb_string.h" @@ -2779,9 +2780,15 @@ read_structure_scope (struct die_info *die, struct dwarf2_cu *cu) attr = dwarf_attr (die, DW_AT_name); if (attr && DW_STRING (attr)) { - TYPE_TAG_NAME (type) = obsavestring (DW_STRING (attr), - strlen (DW_STRING (attr)), + /* FIXME: This should be in a more general location. */ + char *name; + name = cp_canonicalize_string (DW_STRING (attr)); + if (name == NULL) + name = DW_STRING (attr); + TYPE_TAG_NAME (type) = obsavestring (name, strlen (name), &objfile->type_obstack); + if (name != DW_STRING (attr)) + free (name); } if (die->tag == DW_TAG_structure_type) |