/* Multiple source language support for GDB.
Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
+ Free Software Foundation, Inc.
Contributed by the Department of Computer Science at the State University
of New York at Buffalo.
static void unk_lang_printchar (int c, struct type *type,
struct ui_file *stream);
-static void unk_lang_print_type (struct type *, char *, struct ui_file *,
+static void unk_lang_print_type (struct type *, const char *, struct ui_file *,
int, int);
static int unk_lang_value_print (struct value *, struct ui_file *,
{
case language_c:
case language_cplus:
+ case language_d:
case language_objc:
if (TYPE_CODE (t1) == TYPE_CODE_FLT)
return TYPE_CODE (t2) == TYPE_CODE_FLT && l2 > l1 ?
{
case language_c:
case language_cplus:
+ case language_d:
case language_objc:
return (TYPE_CODE (type) != TYPE_CODE_INT) &&
(TYPE_CODE (type) != TYPE_CODE_ENUM) ? 0 : 1;
case language_c:
case language_cplus:
+ case language_d:
case language_objc:
return (TYPE_CODE (type) == TYPE_CODE_INT) &&
TYPE_LENGTH (type) == sizeof (char)
case language_c:
case language_cplus:
+ case language_d:
case language_objc:
/* C does not have distinct string type. */
return (0);
{
case language_c:
case language_cplus:
+ case language_d:
case language_objc:
/* Might be more cleanly handled by having a
TYPE_CODE_INT_NOT_BOOL for (the deleted) CHILL and such
CHECK_TYPEDEF (type);
return TYPE_CODE (type) == TYPE_CODE_FLT;
}
+#endif
/* Returns non-zero if the value is a pointer type */
int
TYPE_CODE (type) == TYPE_CODE_REF;
}
+#if 0
/* Returns non-zero if the value is a structured type */
int
structured_type (struct type *type)
{
case language_c:
case language_cplus:
+ case language_d:
case language_objc:
return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
(TYPE_CODE (type) == TYPE_CODE_UNION) ||
type_error (const char *string,...)
{
va_list args;
- va_start (args, string);
+ va_start (args, string);
switch (type_check)
{
case type_check_warn:
range_error (const char *string,...)
{
va_list args;
- va_start (args, string);
+ va_start (args, string);
switch (range_check)
{
case range_check_warn:
if (languages[i]->skip_trampoline)
{
CORE_ADDR real_pc = (languages[i]->skip_trampoline) (frame, pc);
+
if (real_pc)
return real_pc;
}
void
default_get_string (struct value *value, gdb_byte **buffer, int *length,
- const char **charset)
+ struct type **char_type, const char **charset)
{
error (_("Getting a string is unsupported in this language."));
}
static void
unk_lang_printstr (struct ui_file *stream, struct type *type,
const gdb_byte *string, unsigned int length,
- int force_ellipses,
+ const char *encoding, int force_ellipses,
const struct value_print_options *options)
{
error (_("internal error - unimplemented function unk_lang_printstr called."));
}
static void
-unk_lang_print_type (struct type *type, char *varstring, struct ui_file *stream,
- int show, int level)
+unk_lang_print_type (struct type *type, const char *varstring,
+ struct ui_file *stream, int show, int level)
{
error (_("internal error - unimplemented function unk_lang_print_type called."));
}
unk_lang_val_print (struct type *type, const gdb_byte *valaddr,
int embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
+ const struct value *val,
const struct value_print_options *options)
{
error (_("internal error - unimplemented function unk_lang_val_print called."));
{
struct language_gdbarch *ld = gdbarch_data (gdbarch,
language_gdbarch_data);
+
return ld->arch_info[la->la_language].string_char_type;
}
if (ld->arch_info[la->la_language].bool_type_symbol)
{
struct symbol *sym;
+
sym = lookup_symbol (ld->arch_info[la->la_language].bool_type_symbol,
NULL, VAR_DOMAIN, NULL);
if (sym)
{
struct type *type = SYMBOL_TYPE (sym);
+
if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
return type;
}
struct language_gdbarch *ld = gdbarch_data (gdbarch,
language_gdbarch_data);
struct type *const *p;
+
for (p = ld->arch_info[la->la_language].primitive_type_vector;
(*p) != NULL;
p++)