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 |