* 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:
parent
ec22ec346b
commit
e6c014f28f
9 changed files with 74 additions and 24 deletions
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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 *);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 '>'
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue