X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fada-lang.c;h=3d85a5a014d4692973b0f7b09d8d10651109e0c8;hb=bb789949e90d4580ce0ce9034c632d3e7f39a0ac;hp=bb6d011e13eea6e8be048ba65219688c5b94807a;hpb=1bf9c36374d9c758bc49dc18dca7acf0719e290d;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index bb6d011e13..3d85a5a014 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -725,7 +725,7 @@ ada_discrete_type_high_bound (struct type *type) switch (type->code ()) { case TYPE_CODE_RANGE: - return TYPE_HIGH_BOUND (type); + return type->bounds ()->high.const_val (); case TYPE_CODE_ENUM: return TYPE_FIELD_ENUMVAL (type, type->num_fields () - 1); case TYPE_CODE_BOOL: @@ -746,7 +746,7 @@ ada_discrete_type_low_bound (struct type *type) switch (type->code ()) { case TYPE_CODE_RANGE: - return TYPE_LOW_BOUND (type); + return type->bounds ()->low.const_val (); case TYPE_CODE_ENUM: return TYPE_FIELD_ENUMVAL (type, 0); case TYPE_CODE_BOOL: @@ -2250,7 +2250,7 @@ has_negatives (struct type *type) case TYPE_CODE_INT: return !TYPE_UNSIGNED (type); case TYPE_CODE_RANGE: - return TYPE_LOW_BOUND (type) - TYPE_RANGE_DATA (type)->bias < 0; + return type->bounds ()->low.const_val () - type->bounds ()->bias < 0; } } @@ -8283,13 +8283,13 @@ ada_is_redundant_range_encoding (struct type *range_type, n = 8; /* Skip "___XDLU_". */ if (!ada_scan_number (bounds_str, n, &lo, &n)) return 0; - if (TYPE_LOW_BOUND (range_type) != lo) + if (range_type->bounds ()->low.const_val () != lo) return 0; n += 2; /* Skip the "__" separator between the two bounds. */ if (!ada_scan_number (bounds_str, n, &hi, &n)) return 0; - if (TYPE_HIGH_BOUND (range_type) != hi) + if (range_type->bounds ()->high.const_val () != hi) return 0; return 1; @@ -9492,8 +9492,8 @@ assign_aggregate (struct value *container, { lhs = ada_coerce_to_simple_array (lhs); lhs_type = check_typedef (value_type (lhs)); - low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type); - high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type); + low_index = lhs_type->index_type ()->bounds ()->low.const_val (); + high_index = lhs_type->index_type ()->bounds ()->high.const_val (); } else if (lhs_type->code () == TYPE_CODE_STRUCT) { @@ -10604,8 +10604,10 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp, return value_from_longest (type, (LONGEST) 1); case TYPE_CODE_RANGE: - arg2 = value_from_longest (type, TYPE_LOW_BOUND (type)); - arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type)); + arg2 = value_from_longest (type, + type->bounds ()->low.const_val ()); + arg3 = value_from_longest (type, + type->bounds ()->high.const_val ()); binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2); binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3); type = language_bool_type (exp->language_defn, exp->gdbarch); @@ -11422,7 +11424,7 @@ ada_is_modular_type (struct type *type) ULONGEST ada_modulus (struct type *type) { - return (ULONGEST) TYPE_HIGH_BOUND (type) + 1; + return (ULONGEST) type->bounds ()->high.const_val () + 1; } @@ -11894,7 +11896,12 @@ ada_exception_message_1 (void) if (e_msg_len <= 0) return NULL; - return target_read_string (value_address (e_msg_val), INT_MAX); + gdb::unique_xmalloc_ptr e_msg ((char *) xmalloc (e_msg_len + 1)); + read_memory (value_address (e_msg_val), (gdb_byte *) e_msg.get (), + e_msg_len); + e_msg.get ()[e_msg_len] = '\0'; + + return e_msg; } /* Same as ada_exception_message_1, except that all exceptions are @@ -13504,14 +13511,6 @@ enum ada_primitive_types { /* Language vector */ -/* Not really used, but needed in the ada_language_defn. */ - -static void -emit_char (int c, struct type *type, struct ui_file *stream, int quoter) -{ - ada_emit_char (c, type, stream, quoter, 1); -} - static const struct exp_descriptor ada_exp_descriptor = { ada_print_subexp, ada_operator_length, @@ -13561,10 +13560,10 @@ ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name) { if (user_name.back () == '>') m_encoded_name - = user_name.substr (1, user_name.size () - 2).to_string (); + = gdb::to_string (user_name.substr (1, user_name.size () - 2)); else m_encoded_name - = user_name.substr (1, user_name.size () - 1).to_string (); + = gdb::to_string (user_name.substr (1, user_name.size () - 1)); m_encoded_p = true; m_verbatim_p = true; m_wild_match_p = false; @@ -13583,10 +13582,10 @@ ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name) if (encoded != NULL) m_encoded_name = encoded; else - m_encoded_name = user_name.to_string (); + m_encoded_name = gdb::to_string (user_name); } else - m_encoded_name = user_name.to_string (); + m_encoded_name = gdb::to_string (user_name); /* Handle the 'package Standard' special case. See description of m_standard_p. */ @@ -13689,17 +13688,12 @@ extern const struct language_data ada_language_data = macro_expansion_no, ada_extensions, &ada_exp_descriptor, - ada_printchar, /* Print a character constant */ - ada_printstr, /* Function to print string constant */ - emit_char, /* Function to print single char (not used) */ - ada_print_typedef, /* Print a typedef using appropriate syntax */ NULL, /* name_of_this */ true, /* la_store_sym_names_in_linkage_form_p */ ada_op_print_tab, /* expression operators for printing */ 0, /* c-style arrays */ 1, /* String lower bound */ &ada_varobj_ops, - ada_is_string_type, "(...)" /* la_struct_too_deep_ellipsis */ }; @@ -14116,6 +14110,49 @@ public: resolve_subexp (expp, &pc, 1, context_type, completing, tracker); } + /* See language.h. */ + + void emitchar (int ch, struct type *chtype, + struct ui_file *stream, int quoter) const override + { + ada_emit_char (ch, chtype, stream, quoter, 1); + } + + /* See language.h. */ + + void printchar (int ch, struct type *chtype, + struct ui_file *stream) const override + { + ada_printchar (ch, chtype, stream); + } + + /* See language.h. */ + + void printstr (struct ui_file *stream, struct type *elttype, + const gdb_byte *string, unsigned int length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) const override + { + ada_printstr (stream, elttype, string, length, encoding, + force_ellipses, options); + } + + /* See language.h. */ + + void print_typedef (struct type *type, struct symbol *new_symbol, + struct ui_file *stream) const override + { + ada_print_typedef (type, new_symbol, stream); + } + + /* See language.h. */ + + bool is_string_type_p (struct type *type) const override + { + return ada_is_string_type (type); + } + + protected: /* See language.h. */