* 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".
This commit is contained in:
Ulrich Weigand 2009-06-17 18:46:26 +00:00
parent ec22ec346b
commit e6c014f28f
9 changed files with 74 additions and 24 deletions

View file

@ -1,3 +1,27 @@
2009-06-17 Ulrich Weigand <uweigand@de.ibm.com>
* 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 <uweigand@de.ibm.com> 2009-06-17 Ulrich Weigand <uweigand@de.ibm.com>
* sparc64-nat.c (sparc64_gregset_supplies_p): Add GDBARCH parameter. * sparc64-nat.c (sparc64_gregset_supplies_p): Add GDBARCH parameter.

View file

@ -969,11 +969,15 @@ typebase /* Implements (approximately): (type-qualifier)* type-specifier */
{ $$ = lookup_enum (copy_name ($2), { $$ = lookup_enum (copy_name ($2),
expression_context_block); } expression_context_block); }
| UNSIGNED typename | UNSIGNED typename
{ $$ = lookup_unsigned_typename (TYPE_NAME($2.type)); } { $$ = lookup_unsigned_typename (parse_language,
parse_gdbarch,
TYPE_NAME($2.type)); }
| UNSIGNED | UNSIGNED
{ $$ = parse_type->builtin_unsigned_int; } { $$ = parse_type->builtin_unsigned_int; }
| SIGNED_KEYWORD typename | SIGNED_KEYWORD typename
{ $$ = lookup_signed_typename (TYPE_NAME($2.type)); } { $$ = lookup_signed_typename (parse_language,
parse_gdbarch,
TYPE_NAME($2.type)); }
| SIGNED_KEYWORD | SIGNED_KEYWORD
{ $$ = parse_type->builtin_int; } { $$ = parse_type->builtin_int; }
/* It appears that this rule for templates is never /* It appears that this rule for templates is never

View file

@ -908,13 +908,16 @@ evaluate_subexp_c (struct type *expect_type, struct expression *exp,
exp->gdbarch); exp->gdbarch);
break; break;
case C_WIDE_STRING: case C_WIDE_STRING:
type = lookup_typename ("wchar_t", NULL, 0); type = lookup_typename (exp->language_defn, exp->gdbarch,
"wchar_t", NULL, 0);
break; break;
case C_STRING_16: case C_STRING_16:
type = lookup_typename ("char16_t", NULL, 0); type = lookup_typename (exp->language_defn, exp->gdbarch,
"char16_t", NULL, 0);
break; break;
case C_STRING_32: case C_STRING_32:
type = lookup_typename ("char32_t", NULL, 0); type = lookup_typename (exp->language_defn, exp->gdbarch,
"char32_t", NULL, 0);
break; break;
default: default:
internal_error (__FILE__, __LINE__, "unhandled c_string_type"); internal_error (__FILE__, __LINE__, "unhandled c_string_type");

View file

@ -1036,7 +1036,9 @@ type_name_no_tag (const struct type *type)
suitably defined. */ suitably defined. */
struct type * 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 symbol *sym;
struct type *tmp; struct type *tmp;
@ -1044,9 +1046,7 @@ lookup_typename (char *name, struct block *block, int noerr)
sym = lookup_symbol (name, block, VAR_DOMAIN, 0); sym = lookup_symbol (name, block, VAR_DOMAIN, 0);
if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF) if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
{ {
tmp = language_lookup_primitive_type_by_name (current_language, tmp = language_lookup_primitive_type_by_name (language, gdbarch, name);
current_gdbarch,
name);
if (tmp) if (tmp)
{ {
return tmp; return tmp;
@ -1064,28 +1064,30 @@ lookup_typename (char *name, struct block *block, int noerr)
} }
struct type * 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); char *uns = alloca (strlen (name) + 10);
strcpy (uns, "unsigned "); strcpy (uns, "unsigned ");
strcpy (uns + 9, name); strcpy (uns + 9, name);
return (lookup_typename (uns, (struct block *) NULL, 0)); return lookup_typename (language, gdbarch, uns, (struct block *) NULL, 0);
} }
struct type * struct type *
lookup_signed_typename (char *name) lookup_signed_typename (const struct language_defn *language,
struct gdbarch *gdbarch, char *name)
{ {
struct type *t; struct type *t;
char *uns = alloca (strlen (name) + 8); char *uns = alloca (strlen (name) + 8);
strcpy (uns, "signed "); strcpy (uns, "signed ");
strcpy (uns + 7, name); 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 we don't find "signed FOO" just try again with plain "FOO". */
if (t != NULL) if (t != NULL)
return t; 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", /* Lookup a structure type named "struct NAME",

View file

@ -29,6 +29,7 @@
struct field; struct field;
struct block; struct block;
struct value_print_options; struct value_print_options;
struct language_defn;
/* Some macros for char-based bitfields. */ /* 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 *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 *); 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 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 *, extern struct type *lookup_template_type (char *, struct type *,
struct block *); struct block *);

View file

@ -643,7 +643,8 @@ variable: NAME
type type
: TYPENAME : TYPENAME
{ $$ = lookup_typename (copy_name ($1), { $$ = lookup_typename (parse_language, parse_gdbarch,
copy_name ($1),
expression_context_block, 0); } expression_context_block, 0); }
; ;
@ -1026,7 +1027,8 @@ yylex ()
sym = lookup_symbol (tmp, expression_context_block, VAR_DOMAIN, 0); sym = lookup_symbol (tmp, expression_context_block, VAR_DOMAIN, 0);
if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK) if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
return BLOCKNAME; 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; return TYPENAME;
if(sym) if(sym)

View file

@ -898,11 +898,15 @@ typebase /* Implements (approximately): (type-qualifier)* type-specifier. */
{ $$ = lookup_enum (copy_name ($2), { $$ = lookup_enum (copy_name ($2),
expression_context_block); } expression_context_block); }
| UNSIGNED typename | UNSIGNED typename
{ $$ = lookup_unsigned_typename (TYPE_NAME($2.type)); } { $$ = lookup_unsigned_typename (parse_language,
parse_gdbarch,
TYPE_NAME($2.type)); }
| UNSIGNED | UNSIGNED
{ $$ = parse_type->builtin_unsigned_int; } { $$ = parse_type->builtin_unsigned_int; }
| SIGNED_KEYWORD typename | SIGNED_KEYWORD typename
{ $$ = lookup_signed_typename (TYPE_NAME($2.type)); } { $$ = lookup_signed_typename (parse_language,
parse_gdbarch,
TYPE_NAME($2.type)); }
| SIGNED_KEYWORD | SIGNED_KEYWORD
{ $$ = parse_type->builtin_int; } { $$ = parse_type->builtin_int; }
| TEMPLATE name '<' type '>' | TEMPLATE name '<' type '>'

View file

@ -2271,7 +2271,9 @@ printf_command (char *arg, int from_tty)
gdb_byte *str; gdb_byte *str;
CORE_ADDR tem; CORE_ADDR tem;
int j; 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); int wcwidth = TYPE_LENGTH (wctype);
gdb_byte *buf = alloca (wcwidth); gdb_byte *buf = alloca (wcwidth);
struct obstack output; struct obstack output;
@ -2309,7 +2311,9 @@ printf_command (char *arg, int from_tty)
break; break;
case wide_char_arg: 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 type *valtype;
struct obstack output; struct obstack output;
struct cleanup *inner_cleanup; struct cleanup *inner_cleanup;

View file

@ -26,6 +26,7 @@
#include "cp-support.h" #include "cp-support.h"
#include "demangle.h" #include "demangle.h"
#include "objfiles.h" #include "objfiles.h"
#include "language.h"
typedef struct pyty_type_object typedef struct pyty_type_object
{ {
@ -373,7 +374,8 @@ typy_lookup_typename (char *type_name)
else if (!strncmp (type_name, "enum ", 5)) else if (!strncmp (type_name, "enum ", 5))
type = lookup_enum (type_name + 5, NULL); type = lookup_enum (type_name + 5, NULL);
else else
type = lookup_typename (type_name, NULL, 0); type = lookup_typename (current_language, current_gdbarch,
type_name, NULL, 0);
} }
if (except.reason < 0) if (except.reason < 0)
{ {