From: Ulrich Weigand Date: Wed, 17 Jun 2009 18:46:26 +0000 (+0000) Subject: * gdbtypes.h (struct language_defn): Add forward declaration. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e6c014f28ffa7d52bf7e9b599422f5ca910a17dd;p=binutils-gdb.git * gdbtypes.h (struct language_defn): Add forward declaration. (lookup_typename): Add LANGUAGE and GDBARCH parameters. (lookup_unsigned_typename): Likewise. (lookup_signed_typename): Likewise. * gdbtypes.c (lookup_typename): Add LANGUAGE and GDBARCH parameters. Use them instead of current_language and current_gdbarch. (lookup_unsigned_typename): Add LANGUAGE and GDBARCH parameters. Pass them to lookup_typename. (lookup_signed_typename): Likewise. * c-exp.y: Pass parse_language and parse_gdbarch to lookup_unsigned_typename and lookup_signed_typename. * objc-exp.y: Likewise. * m2-exp.y: Pass parse_language and parse_gdbarch to lookup_typename. * c-lang.c (evaluate_subexp_c): Pass expression language and gdbarch to lookup_typename. * printcmd.c (printf_command): Pass current language and gdbarch to lookup_typename. * python/python-type.c (typy_lookup_typename): Likewise. Include "language.h". --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 230c564c2e7..2c277d72015 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,27 @@ +2009-06-17 Ulrich Weigand + + * gdbtypes.h (struct language_defn): Add forward declaration. + (lookup_typename): Add LANGUAGE and GDBARCH parameters. + (lookup_unsigned_typename): Likewise. + (lookup_signed_typename): Likewise. + * gdbtypes.c (lookup_typename): Add LANGUAGE and GDBARCH parameters. + Use them instead of current_language and current_gdbarch. + (lookup_unsigned_typename): Add LANGUAGE and GDBARCH parameters. + Pass them to lookup_typename. + (lookup_signed_typename): Likewise. + + * c-exp.y: Pass parse_language and parse_gdbarch to + lookup_unsigned_typename and lookup_signed_typename. + * objc-exp.y: Likewise. + * m2-exp.y: Pass parse_language and parse_gdbarch to lookup_typename. + + * c-lang.c (evaluate_subexp_c): Pass expression language and + gdbarch to lookup_typename. + * printcmd.c (printf_command): Pass current language and + gdbarch to lookup_typename. + * python/python-type.c (typy_lookup_typename): Likewise. + Include "language.h". + 2009-06-17 Ulrich Weigand * sparc64-nat.c (sparc64_gregset_supplies_p): Add GDBARCH parameter. diff --git a/gdb/c-exp.y b/gdb/c-exp.y index d8b39752591..75851d0c509 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -969,11 +969,15 @@ typebase /* Implements (approximately): (type-qualifier)* type-specifier */ { $$ = lookup_enum (copy_name ($2), expression_context_block); } | UNSIGNED typename - { $$ = lookup_unsigned_typename (TYPE_NAME($2.type)); } + { $$ = lookup_unsigned_typename (parse_language, + parse_gdbarch, + TYPE_NAME($2.type)); } | UNSIGNED { $$ = parse_type->builtin_unsigned_int; } | SIGNED_KEYWORD typename - { $$ = lookup_signed_typename (TYPE_NAME($2.type)); } + { $$ = lookup_signed_typename (parse_language, + parse_gdbarch, + TYPE_NAME($2.type)); } | SIGNED_KEYWORD { $$ = parse_type->builtin_int; } /* It appears that this rule for templates is never diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 0d3b50a119b..109d4a169b9 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -908,13 +908,16 @@ evaluate_subexp_c (struct type *expect_type, struct expression *exp, exp->gdbarch); break; case C_WIDE_STRING: - type = lookup_typename ("wchar_t", NULL, 0); + type = lookup_typename (exp->language_defn, exp->gdbarch, + "wchar_t", NULL, 0); break; case C_STRING_16: - type = lookup_typename ("char16_t", NULL, 0); + type = lookup_typename (exp->language_defn, exp->gdbarch, + "char16_t", NULL, 0); break; case C_STRING_32: - type = lookup_typename ("char32_t", NULL, 0); + type = lookup_typename (exp->language_defn, exp->gdbarch, + "char32_t", NULL, 0); break; default: internal_error (__FILE__, __LINE__, "unhandled c_string_type"); diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 63f2e357263..17df58e13f2 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -1036,7 +1036,9 @@ type_name_no_tag (const struct type *type) suitably defined. */ struct type * -lookup_typename (char *name, struct block *block, int noerr) +lookup_typename (const struct language_defn *language, + struct gdbarch *gdbarch, char *name, + struct block *block, int noerr) { struct symbol *sym; struct type *tmp; @@ -1044,9 +1046,7 @@ lookup_typename (char *name, struct block *block, int noerr) sym = lookup_symbol (name, block, VAR_DOMAIN, 0); if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF) { - tmp = language_lookup_primitive_type_by_name (current_language, - current_gdbarch, - name); + tmp = language_lookup_primitive_type_by_name (language, gdbarch, name); if (tmp) { return tmp; @@ -1064,28 +1064,30 @@ lookup_typename (char *name, struct block *block, int noerr) } struct type * -lookup_unsigned_typename (char *name) +lookup_unsigned_typename (const struct language_defn *language, + struct gdbarch *gdbarch, char *name) { char *uns = alloca (strlen (name) + 10); strcpy (uns, "unsigned "); strcpy (uns + 9, name); - return (lookup_typename (uns, (struct block *) NULL, 0)); + return lookup_typename (language, gdbarch, uns, (struct block *) NULL, 0); } struct type * -lookup_signed_typename (char *name) +lookup_signed_typename (const struct language_defn *language, + struct gdbarch *gdbarch, char *name) { struct type *t; char *uns = alloca (strlen (name) + 8); strcpy (uns, "signed "); strcpy (uns + 7, name); - t = lookup_typename (uns, (struct block *) NULL, 1); + t = lookup_typename (language, gdbarch, uns, (struct block *) NULL, 1); /* If we don't find "signed FOO" just try again with plain "FOO". */ if (t != NULL) return t; - return lookup_typename (name, (struct block *) NULL, 0); + return lookup_typename (language, gdbarch, name, (struct block *) NULL, 0); } /* Lookup a structure type named "struct NAME", diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 522d26f77a2..f23aedeef1f 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -29,6 +29,7 @@ struct field; struct block; struct value_print_options; +struct language_defn; /* Some macros for char-based bitfields. */ @@ -1180,9 +1181,11 @@ extern struct type *create_string_type (struct type *, struct type *); extern struct type *create_set_type (struct type *, struct type *); -extern struct type *lookup_unsigned_typename (char *); +extern struct type *lookup_unsigned_typename (const struct language_defn *, + struct gdbarch *,char *); -extern struct type *lookup_signed_typename (char *); +extern struct type *lookup_signed_typename (const struct language_defn *, + struct gdbarch *,char *); extern struct type *check_typedef (struct type *); @@ -1195,7 +1198,9 @@ extern void check_stub_method_group (struct type *, int); extern char *gdb_mangle_name (struct type *, int, int); -extern struct type *lookup_typename (char *, struct block *, int); +extern struct type *lookup_typename (const struct language_defn *, + struct gdbarch *, char *, + struct block *, int); extern struct type *lookup_template_type (char *, struct type *, struct block *); diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y index 0c3c6576e60..6c387aca30c 100644 --- a/gdb/m2-exp.y +++ b/gdb/m2-exp.y @@ -643,7 +643,8 @@ variable: NAME type : TYPENAME - { $$ = lookup_typename (copy_name ($1), + { $$ = lookup_typename (parse_language, parse_gdbarch, + copy_name ($1), expression_context_block, 0); } ; @@ -1026,7 +1027,8 @@ yylex () sym = lookup_symbol (tmp, expression_context_block, VAR_DOMAIN, 0); if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK) return BLOCKNAME; - if (lookup_typename (copy_name (yylval.sval), expression_context_block, 1)) + if (lookup_typename (parse_language, parse_gdbarch, + copy_name (yylval.sval), expression_context_block, 1)) return TYPENAME; if(sym) diff --git a/gdb/objc-exp.y b/gdb/objc-exp.y index 746b7457f8d..1a31f5edc82 100644 --- a/gdb/objc-exp.y +++ b/gdb/objc-exp.y @@ -898,11 +898,15 @@ typebase /* Implements (approximately): (type-qualifier)* type-specifier. */ { $$ = lookup_enum (copy_name ($2), expression_context_block); } | UNSIGNED typename - { $$ = lookup_unsigned_typename (TYPE_NAME($2.type)); } + { $$ = lookup_unsigned_typename (parse_language, + parse_gdbarch, + TYPE_NAME($2.type)); } | UNSIGNED { $$ = parse_type->builtin_unsigned_int; } | SIGNED_KEYWORD typename - { $$ = lookup_signed_typename (TYPE_NAME($2.type)); } + { $$ = lookup_signed_typename (parse_language, + parse_gdbarch, + TYPE_NAME($2.type)); } | SIGNED_KEYWORD { $$ = parse_type->builtin_int; } | TEMPLATE name '<' type '>' diff --git a/gdb/printcmd.c b/gdb/printcmd.c index 9678a7348b1..c95b156a58d 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -2271,7 +2271,9 @@ printf_command (char *arg, int from_tty) gdb_byte *str; CORE_ADDR tem; int j; - struct type *wctype = lookup_typename ("wchar_t", NULL, 0); + struct type *wctype = lookup_typename (current_language, + current_gdbarch, + "wchar_t", NULL, 0); int wcwidth = TYPE_LENGTH (wctype); gdb_byte *buf = alloca (wcwidth); struct obstack output; @@ -2309,7 +2311,9 @@ printf_command (char *arg, int from_tty) break; case wide_char_arg: { - struct type *wctype = lookup_typename ("wchar_t", NULL, 0); + struct type *wctype = lookup_typename (current_language, + current_gdbarch, + "wchar_t", NULL, 0); struct type *valtype; struct obstack output; struct cleanup *inner_cleanup; diff --git a/gdb/python/python-type.c b/gdb/python/python-type.c index 577ebd2204f..0874a99e568 100644 --- a/gdb/python/python-type.c +++ b/gdb/python/python-type.c @@ -26,6 +26,7 @@ #include "cp-support.h" #include "demangle.h" #include "objfiles.h" +#include "language.h" typedef struct pyty_type_object { @@ -373,7 +374,8 @@ typy_lookup_typename (char *type_name) else if (!strncmp (type_name, "enum ", 5)) type = lookup_enum (type_name + 5, NULL); else - type = lookup_typename (type_name, NULL, 0); + type = lookup_typename (current_language, current_gdbarch, + type_name, NULL, 0); } if (except.reason < 0) {