aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog24
-rw-r--r--gdb/c-exp.y8
-rw-r--r--gdb/c-lang.c9
-rw-r--r--gdb/gdbtypes.c20
-rw-r--r--gdb/gdbtypes.h11
-rw-r--r--gdb/m2-exp.y6
-rw-r--r--gdb/objc-exp.y8
-rw-r--r--gdb/printcmd.c8
-rw-r--r--gdb/python/python-type.c4
9 files changed, 74 insertions, 24 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 230c564..2c277d7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,29 @@
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>
+
* sparc64-nat.c (sparc64_gregset_supplies_p): Add GDBARCH parameter.
Use it instead of current_gdbarch. Pass architecture to
sparc32_gregset_supplies_p.
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index d8b3975..75851d0 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 0d3b50a..109d4a1 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 63f2e35..17df58e 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 522d26f..f23aede 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 0c3c657..6c387ac 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 746b745..1a31f5e 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 9678a73..c95b156 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 577ebd2..0874a99 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)
{