X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fc-lang.c;h=53137e89b85168d4f65ba775f65230471ed3c60a;hb=9e790a80160676e7fd3fb8be6cf3c1c77d9ded81;hp=bfd45f433c6303fdc470fb11060a7c7929538fe9;hpb=4009ee92c4ec3ee63f455c5abd761e26a819ef4a;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/c-lang.c b/gdb/c-lang.c index bfd45f433c..53137e89b8 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -37,6 +37,8 @@ #include "gdbcore.h" #include "gdbarch.h" +class compile_instance; + /* Given a C string type, STR_TYPE, return the corresponding target character set name. */ @@ -255,11 +257,11 @@ c_get_string (struct value *value, gdb::unique_xmalloc_ptr *buffer, /* If we know the size of the array, we can use it as a limit on the number of characters to be fetched. */ if (type->num_fields () == 1 - && TYPE_FIELD_TYPE (type, 0)->code () == TYPE_CODE_RANGE) + && type->field (0).type ()->code () == TYPE_CODE_RANGE) { LONGEST low_bound, high_bound; - get_discrete_bounds (TYPE_FIELD_TYPE (type, 0), + get_discrete_bounds (type->field (0).type (), &low_bound, &high_bound); fetchlimit = high_bound - low_bound + 1; } @@ -696,7 +698,7 @@ evaluate_subexp_c (struct type *expect_type, struct expression *exp, LONGEST low_bound, high_bound; int element_size = TYPE_LENGTH (type); - if (get_discrete_bounds (TYPE_INDEX_TYPE (expect_type), + if (get_discrete_bounds (expect_type->index_type (), &low_bound, &high_bound) < 0) { low_bound = 0; @@ -903,16 +905,12 @@ extern const struct language_data c_language_data = c_printchar, /* Print a character constant */ c_printstr, /* Function to print string constant */ c_emit_char, /* Print a single char */ - c_print_type, /* Print a type using appropriate syntax */ c_print_typedef, /* Print a typedef using appropriate syntax */ c_value_print_inner, /* la_value_print_inner */ c_value_print, /* Print a top-level value */ - NULL, /* Language specific skip_trampoline */ NULL, /* name_of_this */ true, /* la_store_sym_names_in_linkage_form_p */ basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - NULL, /* Language specific symbol demangler */ - NULL, NULL, /* Language specific class_name_from_physname */ c_op_print_tab, /* expression operators for printing */ @@ -922,9 +920,7 @@ extern const struct language_data c_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - default_search_name_hash, &c_varobj_ops, - c_get_compile_context, c_compute_program, c_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ @@ -945,6 +941,21 @@ public: { c_language_arch_info (gdbarch, lai); } + + /* See language.h. */ + compile_instance *get_compile_instance () const override + { + return c_get_compile_context (); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + c_print_type (type, varstring, stream, show, level, flags); + } }; /* Single instance of the C language class. */ @@ -1002,16 +1013,12 @@ extern const struct language_data cplus_language_data = c_printchar, /* Print a character constant */ c_printstr, /* Function to print string constant */ c_emit_char, /* Print a single char */ - c_print_type, /* Print a type using appropriate syntax */ c_print_typedef, /* Print a typedef using appropriate syntax */ c_value_print_inner, /* la_value_print_inner */ c_value_print, /* Print a top-level value */ - cplus_skip_trampoline, /* Language specific skip_trampoline */ "this", /* name_of_this */ false, /* la_store_sym_names_in_linkage_form_p */ cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - gdb_demangle, /* Language specific symbol demangler */ - gdb_sniff_from_mangled_name, cp_class_name_from_physname, /* Language specific class_name_from_physname */ c_op_print_tab, /* expression operators for printing */ @@ -1021,9 +1028,7 @@ extern const struct language_data cplus_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, cp_get_symbol_name_matcher, - cp_search_name_hash, &cplus_varobj_ops, - cplus_get_compile_context, cplus_compute_program, c_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ @@ -1114,6 +1119,50 @@ public: { return cp_lookup_transparent_type (name); } + + /* See language.h. */ + compile_instance *get_compile_instance () const override + { + return cplus_get_compile_context (); + } + + /* See language.h. */ + unsigned int search_name_hash (const char *name) const override + { + return cp_search_name_hash (name); + } + + /* See language.h. */ + bool sniff_from_mangled_name (const char *mangled, + char **demangled) const override + { + *demangled = gdb_demangle (mangled, DMGL_PARAMS | DMGL_ANSI); + return *demangled != NULL; + } + + /* See language.h. */ + + char *demangle (const char *mangled, int options) const override + { + return gdb_demangle (mangled, options); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + c_print_type (type, varstring, stream, show, level, flags); + } + + /* See language.h. */ + + CORE_ADDR skip_trampoline (struct frame_info *fi, + CORE_ADDR pc) const override + { + return cplus_skip_trampoline (fi, pc); + } }; /* The single instance of the C++ language class. */ @@ -1143,16 +1192,12 @@ extern const struct language_data asm_language_data = c_printchar, /* Print a character constant */ c_printstr, /* Function to print string constant */ c_emit_char, /* Print a single char */ - c_print_type, /* Print a type using appropriate syntax */ c_print_typedef, /* Print a typedef using appropriate syntax */ c_value_print_inner, /* la_value_print_inner */ c_value_print, /* Print a top-level value */ - NULL, /* Language specific skip_trampoline */ NULL, /* name_of_this */ true, /* la_store_sym_names_in_linkage_form_p */ basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - NULL, /* Language specific symbol demangler */ - NULL, NULL, /* Language specific class_name_from_physname */ c_op_print_tab, /* expression operators for printing */ @@ -1162,10 +1207,8 @@ extern const struct language_data asm_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - default_search_name_hash, &default_varobj_ops, NULL, - NULL, c_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; @@ -1187,6 +1230,15 @@ public: { c_language_arch_info (gdbarch, lai); } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + c_print_type (type, varstring, stream, show, level, flags); + } }; /* The single instance of the ASM language class. */ @@ -1213,16 +1265,12 @@ extern const struct language_data minimal_language_data = c_printchar, /* Print a character constant */ c_printstr, /* Function to print string constant */ c_emit_char, /* Print a single char */ - c_print_type, /* Print a type using appropriate syntax */ c_print_typedef, /* Print a typedef using appropriate syntax */ c_value_print_inner, /* la_value_print_inner */ c_value_print, /* Print a top-level value */ - NULL, /* Language specific skip_trampoline */ NULL, /* name_of_this */ true, /* la_store_sym_names_in_linkage_form_p */ basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - NULL, /* Language specific symbol demangler */ - NULL, NULL, /* Language specific class_name_from_physname */ c_op_print_tab, /* expression operators for printing */ @@ -1232,10 +1280,8 @@ extern const struct language_data minimal_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - default_search_name_hash, &default_varobj_ops, NULL, - NULL, c_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; @@ -1255,6 +1301,15 @@ public: { c_language_arch_info (gdbarch, lai); } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + c_print_type (type, varstring, stream, show, level, flags); + } }; /* The single instance of the minimal language class. */