| Index: gdb/language.c
|
| diff --git a/gdb/language.c b/gdb/language.c
|
| index 1e452ec0f181d5d75789a4960d0e6165f7d6b7d6..f0a8697998fcec71d8cc75df62a274e6b45ca2aa 100644
|
| --- a/gdb/language.c
|
| +++ b/gdb/language.c
|
| @@ -66,8 +66,8 @@ static void unk_lang_printchar (int c, struct type *type,
|
| 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 *,
|
| - const struct value_print_options *);
|
| +static void unk_lang_value_print (struct value *, struct ui_file *,
|
| + const struct value_print_options *);
|
|
|
| static CORE_ADDR unk_lang_trampoline (struct frame_info *, CORE_ADDR pc);
|
|
|
| @@ -470,243 +470,6 @@ language_info (int quietly)
|
| }
|
| }
|
|
|
| -/* Return the result of a binary operation. */
|
| -
|
| -#if 0 /* Currently unused */
|
| -
|
| -struct type *
|
| -binop_result_type (struct value *v1, struct value *v2)
|
| -{
|
| - int size, uns;
|
| - struct type *t1 = check_typedef (VALUE_TYPE (v1));
|
| - struct type *t2 = check_typedef (VALUE_TYPE (v2));
|
| -
|
| - int l1 = TYPE_LENGTH (t1);
|
| - int l2 = TYPE_LENGTH (t2);
|
| -
|
| - switch (current_language->la_language)
|
| - {
|
| - 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 ?
|
| - VALUE_TYPE (v2) : VALUE_TYPE (v1);
|
| - else if (TYPE_CODE (t2) == TYPE_CODE_FLT)
|
| - return TYPE_CODE (t1) == TYPE_CODE_FLT && l1 > l2 ?
|
| - VALUE_TYPE (v1) : VALUE_TYPE (v2);
|
| - else if (TYPE_UNSIGNED (t1) && l1 > l2)
|
| - return VALUE_TYPE (v1);
|
| - else if (TYPE_UNSIGNED (t2) && l2 > l1)
|
| - return VALUE_TYPE (v2);
|
| - else /* Both are signed. Result is the
|
| - longer type. */
|
| - return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
|
| - break;
|
| - case language_m2:
|
| - /* If we are doing type-checking, l1 should equal l2, so this is
|
| - not needed. */
|
| - return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
|
| - break;
|
| - }
|
| - internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
|
| - return (struct type *) 0; /* For lint */
|
| -}
|
| -
|
| -#endif /* 0 */
|
| -#if 0
|
| -/* This page contains functions that are used in type/range checking.
|
| - They all return zero if the type/range check fails.
|
| -
|
| - It is hoped that these will make extending GDB to parse different
|
| - languages a little easier. These are primarily used in eval.c when
|
| - evaluating expressions and making sure that their types are correct.
|
| - Instead of having a mess of conjucted/disjuncted expressions in an "if",
|
| - the ideas of type can be wrapped up in the following functions.
|
| -
|
| - Note that some of them are not currently dependent upon which language
|
| - is currently being parsed. For example, floats are the same in
|
| - C and Modula-2 (ie. the only floating point type has TYPE_CODE of
|
| - TYPE_CODE_FLT), while booleans are different. */
|
| -
|
| -/* Returns non-zero if its argument is a simple type. This is the same for
|
| - both Modula-2 and for C. In the C case, TYPE_CODE_CHAR will never occur,
|
| - and thus will never cause the failure of the test. */
|
| -int
|
| -simple_type (struct type *type)
|
| -{
|
| - CHECK_TYPEDEF (type);
|
| - switch (TYPE_CODE (type))
|
| - {
|
| - case TYPE_CODE_INT:
|
| - case TYPE_CODE_CHAR:
|
| - case TYPE_CODE_ENUM:
|
| - case TYPE_CODE_FLT:
|
| - case TYPE_CODE_RANGE:
|
| - case TYPE_CODE_BOOL:
|
| - return 1;
|
| -
|
| - default:
|
| - return 0;
|
| - }
|
| -}
|
| -
|
| -/* Returns non-zero if its argument is of an ordered type.
|
| - An ordered type is one in which the elements can be tested for the
|
| - properties of "greater than", "less than", etc, or for which the
|
| - operations "increment" or "decrement" make sense. */
|
| -int
|
| -ordered_type (struct type *type)
|
| -{
|
| - CHECK_TYPEDEF (type);
|
| - switch (TYPE_CODE (type))
|
| - {
|
| - case TYPE_CODE_INT:
|
| - case TYPE_CODE_CHAR:
|
| - case TYPE_CODE_ENUM:
|
| - case TYPE_CODE_FLT:
|
| - case TYPE_CODE_RANGE:
|
| - return 1;
|
| -
|
| - default:
|
| - return 0;
|
| - }
|
| -}
|
| -
|
| -/* Returns non-zero if the two types are the same. */
|
| -int
|
| -same_type (struct type *arg1, struct type *arg2)
|
| -{
|
| - CHECK_TYPEDEF (type);
|
| - if (structured_type (arg1)
|
| - ? !structured_type (arg2) : structured_type (arg2))
|
| - /* One is structured and one isn't. */
|
| - return 0;
|
| - else if (structured_type (arg1) && structured_type (arg2))
|
| - return arg1 == arg2;
|
| - else if (numeric_type (arg1) && numeric_type (arg2))
|
| - return (TYPE_CODE (arg2) == TYPE_CODE (arg1)) &&
|
| - (TYPE_UNSIGNED (arg1) == TYPE_UNSIGNED (arg2))
|
| - ? 1 : 0;
|
| - else
|
| - return arg1 == arg2;
|
| -}
|
| -
|
| -/* Returns non-zero if the type is integral. */
|
| -int
|
| -integral_type (struct type *type)
|
| -{
|
| - CHECK_TYPEDEF (type);
|
| - switch (current_language->la_language)
|
| - {
|
| - 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_m2:
|
| - case language_pascal:
|
| - return TYPE_CODE (type) != TYPE_CODE_INT ? 0 : 1;
|
| - default:
|
| - error (_("Language not supported."));
|
| - }
|
| -}
|
| -
|
| -/* Returns non-zero if the value is numeric. */
|
| -int
|
| -numeric_type (struct type *type)
|
| -{
|
| - CHECK_TYPEDEF (type);
|
| - switch (TYPE_CODE (type))
|
| - {
|
| - case TYPE_CODE_INT:
|
| - case TYPE_CODE_FLT:
|
| - return 1;
|
| -
|
| - default:
|
| - return 0;
|
| - }
|
| -}
|
| -
|
| -/* Returns non-zero if the value is a character type. */
|
| -int
|
| -character_type (struct type *type)
|
| -{
|
| - CHECK_TYPEDEF (type);
|
| - switch (current_language->la_language)
|
| - {
|
| - case language_m2:
|
| - case language_pascal:
|
| - return TYPE_CODE (type) != TYPE_CODE_CHAR ? 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)
|
| - ? 1 : 0;
|
| - default:
|
| - return (0);
|
| - }
|
| -}
|
| -
|
| -/* Returns non-zero if the value is a string type. */
|
| -int
|
| -string_type (struct type *type)
|
| -{
|
| - CHECK_TYPEDEF (type);
|
| - switch (current_language->la_language)
|
| - {
|
| - case language_m2:
|
| - case language_pascal:
|
| - return TYPE_CODE (type) != TYPE_CODE_STRING ? 0 : 1;
|
| -
|
| - case language_c:
|
| - case language_cplus:
|
| - case language_d:
|
| - case language_objc:
|
| - /* C does not have distinct string type. */
|
| - return (0);
|
| - default:
|
| - return (0);
|
| - }
|
| -}
|
| -
|
| -/* Returns non-zero if the value is a boolean type. */
|
| -int
|
| -boolean_type (struct type *type)
|
| -{
|
| - CHECK_TYPEDEF (type);
|
| - if (TYPE_CODE (type) == TYPE_CODE_BOOL)
|
| - return 1;
|
| - switch (current_language->la_language)
|
| - {
|
| - 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
|
| - languages, or a TYPE_CODE_INT_OR_BOOL for C. */
|
| - if (TYPE_CODE (type) == TYPE_CODE_INT)
|
| - return 1;
|
| - default:
|
| - break;
|
| - }
|
| - return 0;
|
| -}
|
| -
|
| -/* Returns non-zero if the value is a floating-point type. */
|
| -int
|
| -float_type (struct type *type)
|
| -{
|
| - CHECK_TYPEDEF (type);
|
| - return TYPE_CODE (type) == TYPE_CODE_FLT;
|
| -}
|
| -#endif
|
|
|
| /* Returns non-zero if the value is a pointer type. */
|
| int
|
| @@ -716,35 +479,6 @@ pointer_type (struct type *type)
|
| TYPE_CODE (type) == TYPE_CODE_REF;
|
| }
|
|
|
| -#if 0
|
| -/* Returns non-zero if the value is a structured type. */
|
| -int
|
| -structured_type (struct type *type)
|
| -{
|
| - CHECK_TYPEDEF (type);
|
| - switch (current_language->la_language)
|
| - {
|
| - 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_CODE (type) == TYPE_CODE_ARRAY);
|
| - case language_pascal:
|
| - return (TYPE_CODE(type) == TYPE_CODE_STRUCT) ||
|
| - (TYPE_CODE(type) == TYPE_CODE_UNION) ||
|
| - (TYPE_CODE(type) == TYPE_CODE_SET) ||
|
| - (TYPE_CODE(type) == TYPE_CODE_ARRAY);
|
| - case language_m2:
|
| - return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
|
| - (TYPE_CODE (type) == TYPE_CODE_SET) ||
|
| - (TYPE_CODE (type) == TYPE_CODE_ARRAY);
|
| - default:
|
| - return (0);
|
| - }
|
| -}
|
| -#endif
|
|
|
| /* This page contains functions that return info about
|
| (struct value) values used in GDB. */
|
| @@ -1113,7 +847,7 @@ unk_lang_print_type (struct type *type, const char *varstring,
|
| "function unk_lang_print_type called."));
|
| }
|
|
|
| -static int
|
| +static void
|
| unk_lang_val_print (struct type *type, const gdb_byte *valaddr,
|
| int embedded_offset, CORE_ADDR address,
|
| struct ui_file *stream, int recurse,
|
| @@ -1124,7 +858,7 @@ unk_lang_val_print (struct type *type, const gdb_byte *valaddr,
|
| "function unk_lang_val_print called."));
|
| }
|
|
|
| -static int
|
| +static void
|
| unk_lang_value_print (struct value *val, struct ui_file *stream,
|
| const struct value_print_options *options)
|
| {
|
| @@ -1183,6 +917,7 @@ const struct language_defn unknown_language_defn =
|
| default_print_typedef, /* Print a typedef using appropriate syntax */
|
| unk_lang_val_print, /* Print a value using appropriate syntax */
|
| unk_lang_value_print, /* Print a top-level value */
|
| + default_read_var_value, /* la_read_var_value */
|
| unk_lang_trampoline, /* Language specific skip_trampoline */
|
| "this", /* name_of_this */
|
| basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
|
| @@ -1199,7 +934,7 @@ const struct language_defn unknown_language_defn =
|
| default_print_array_index,
|
| default_pass_by_reference,
|
| default_get_string,
|
| - strcmp_iw_ordered,
|
| + NULL, /* la_get_symbol_name_cmp */
|
| iterate_over_symbols,
|
| LANG_MAGIC
|
| };
|
| @@ -1226,6 +961,7 @@ const struct language_defn auto_language_defn =
|
| default_print_typedef, /* Print a typedef using appropriate syntax */
|
| unk_lang_val_print, /* Print a value using appropriate syntax */
|
| unk_lang_value_print, /* Print a top-level value */
|
| + default_read_var_value, /* la_read_var_value */
|
| unk_lang_trampoline, /* Language specific skip_trampoline */
|
| "this", /* name_of_this */
|
| basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
|
| @@ -1242,7 +978,7 @@ const struct language_defn auto_language_defn =
|
| default_print_array_index,
|
| default_pass_by_reference,
|
| default_get_string,
|
| - strcmp_iw_ordered,
|
| + NULL, /* la_get_symbol_name_cmp */
|
| iterate_over_symbols,
|
| LANG_MAGIC
|
| };
|
| @@ -1267,6 +1003,7 @@ const struct language_defn local_language_defn =
|
| default_print_typedef, /* Print a typedef using appropriate syntax */
|
| unk_lang_val_print, /* Print a value using appropriate syntax */
|
| unk_lang_value_print, /* Print a top-level value */
|
| + default_read_var_value, /* la_read_var_value */
|
| unk_lang_trampoline, /* Language specific skip_trampoline */
|
| "this", /* name_of_this */
|
| basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
|
| @@ -1283,7 +1020,7 @@ const struct language_defn local_language_defn =
|
| default_print_array_index,
|
| default_pass_by_reference,
|
| default_get_string,
|
| - strcmp_iw_ordered,
|
| + NULL, /* la_get_symbol_name_cmp */
|
| iterate_over_symbols,
|
| LANG_MAGIC
|
| };
|
| @@ -1375,10 +1112,10 @@ language_lookup_primitive_type_by_name (const struct language_defn *la,
|
| void
|
| _initialize_language (void)
|
| {
|
| - static const char *type_or_range_names[]
|
| + static const char *const type_or_range_names[]
|
| = { "on", "off", "warn", "auto", NULL };
|
|
|
| - static const char *case_sensitive_names[]
|
| + static const char *const case_sensitive_names[]
|
| = { "on", "off", "auto", NULL };
|
|
|
| language_gdbarch_data
|
|
|