Skip to content
This repository was archived by the owner on Aug 17, 2022. It is now read-only.

Commit d7e7473

Browse files
committed
Eliminate make_cleanup_ui_file_delete / make ui_file a class hierarchy
This patch starts from the desire to eliminate make_cleanup_ui_file_delete, but then goes beyond. It makes ui_file & friends a real C++ class hierarchy, and switches temporary ui_file-like objects to stack-based allocation. - mem_fileopen -> string_file mem_fileopen is replaced with a new string_file class that is treated as a value class created on the stack. This alone eliminates most make_cleanup_ui_file_delete calls, and, simplifies code a whole lot (diffstat shows around 1k loc dropped.) string_file's internal buffer is a std::string, thus the "string" in the name. This simplifies the implementation much, compared to mem_fileopen, which managed growing its internal buffer manually. - ui_file_as_string, ui_file_strdup, ui_file_obsavestring all gone The new string_file class has a string() method that provides direct writable access to the internal std::string buffer. This replaced ui_file_as_string, which forced a copy of the same data the stream had inside. With direct access via a writable reference, we can instead move the string out of the string_stream, avoiding deep string copying. Related, ui_file_xstrdup calls are replaced with xstrdup'ping the stream's string, and ui_file_obsavestring is replaced by obstack_copy0. With all those out of the way, getting rid of the weird ui_file_put mechanism was possible. - New ui_file::printf, ui_file::puts, etc. methods These simplify / clarify client code. I considered splitting client-code changes, like these, e.g.: - stb = mem_fileopen (); - fprintf_unfiltered (stb, "%s%s%s", - _("The valid values are:\n"), - regdesc, - _("The default is \"std\".")); + string_file stb; + stb.printf ("%s%s%s", + _("The valid values are:\n"), + regdesc, + _("The default is \"std\".")); In two steps, with the first step leaving fprintf_unfiltered (etc.) calls in place, and only afterwards do a pass to change all those to call stb.printf etc.. I didn't do that split, because (when I tried), it turned out to be pointless make-work: the first pass would have to touch the fprintf_unfiltered line anyway, to replace "stb" with "&stb". - gdb_fopen replaced with stack-based objects This avoids the need for cleanups or unique_ptr's. I.e., this: struct ui_file *file = gdb_fopen (filename, "w"); if (filename == NULL) perror_with_name (filename); cleanups = make_cleanup_ui_file_delete (file); // use file. do_cleanups (cleanups); is replaced with this: stdio_file file; if (!file.open (filename, "w")) perror_with_name (filename); // use file. - odd contorsions in null_file_write / null_file_fputs around when to call to_fputs / to_write eliminated. - Global null_stream object A few places that were allocating a ui_file in order to print to "nowhere" are adjusted to instead refer to a new 'null_stream' global stream. - TUI's tui_sfileopen eliminated. TUI's ui_file much simplified The TUI's ui_file was serving a dual purpose. It supported being used as string buffer, and supported being backed by a stdio FILE. The string buffer part is gone, replaced by using of string_file. The 'FILE *' support is now much simplified, by making the TUI's ui_file inherit from stdio_file. gdb/ChangeLog: 2017-02-02 Pedro Alves <[email protected]> * ada-lang.c (type_as_string): Use string_file. * ada-valprint.c (ada_print_floating): Use string_file. * ada-varobj.c (ada_varobj_scalar_image) (ada_varobj_get_value_image): Use string_file. * aix-thread.c (aix_thread_extra_thread_info): Use string_file. * arm-tdep.c (_initialize_arm_tdep): Use string_printf. * breakpoint.c (update_inserted_breakpoint_locations) (insert_breakpoint_locations, reattach_breakpoints) (print_breakpoint_location, print_one_detail_ranged_breakpoint) (print_it_watchpoint): Use string_file. (save_breakpoints): Use stdio_file. * c-exp.y (oper): Use string_file. * cli/cli-logging.c (set_logging_redirect): Use ui_file_up and tee_file. (pop_output_files): Use delete. (handle_redirections): Use stdio_file and tee_file. * cli/cli-setshow.c (do_show_command): Use string_file. * compile/compile-c-support.c (c_compute_program): Use string_file. * compile/compile-c-symbols.c (generate_vla_size): Take a 'string_file &' instead of a 'ui_file *'. (generate_c_for_for_one_variable): Take a 'string_file &' instead of a 'ui_file *'. Use string_file. (generate_c_for_variable_locations): Take a 'string_file &' instead of a 'ui_file *'. * compile/compile-internal.h (generate_c_for_for_one_variable): Take a 'string_file &' instead of a 'ui_file *'. * compile/compile-loc2c.c (push, pushf, unary, binary) (print_label, pushf_register_address, pushf_register) (do_compile_dwarf_expr_to_c): Take a 'string_file &' instead of a 'ui_file *'. Adjust. * compile/compile.c (compile_to_object): Use string_file. * compile/compile.h (compile_dwarf_expr_to_c) (compile_dwarf_bounds_to_c): Take a 'string_file &' instead of a 'ui_file *'. * cp-support.c (inspect_type): Use string_file and obstack_copy0. (replace_typedefs_qualified_name): Use string_file and obstack_copy0. * disasm.c (gdb_pretty_print_insn): Use string_file. (gdb_disassembly): Adjust reference the null_stream global. (do_ui_file_delete): Delete. (gdb_insn_length): Use null_stream. * dummy-frame.c (maintenance_print_dummy_frames): Use stdio_file. * dwarf2loc.c (dwarf2_compile_property_to_c) (locexpr_generate_c_location, loclist_generate_c_location): Take a 'string_file &' instead of a 'ui_file *'. * dwarf2loc.h (dwarf2_compile_property_to_c): Likewise. * dwarf2read.c (do_ui_file_peek_last): Delete. (dwarf2_compute_name): Use string_file. * event-top.c (gdb_setup_readline): Use stdio_file. * gdbarch.sh (verify_gdbarch): Use string_file. * gdbtypes.c (safe_parse_type): Use null_stream. * guile/scm-breakpoint.c (gdbscm_breakpoint_commands): Use string_file. * guile/scm-disasm.c (gdbscm_print_insn_from_port): Take a 'string_file *' instead of a 'ui_file *'. (gdbscm_arch_disassemble): Use string_file. * guile/scm-frame.c (frscm_print_frame_smob): Use string_file. * guile/scm-ports.c (class ioscm_file_port): Now a class that inherits from ui_file. (ioscm_file_port_delete, ioscm_file_port_rewind) (ioscm_file_port_put): Delete. (ioscm_file_port_write): Rename to ... (ioscm_file_port::write): ... this. Remove file_port_magic checks. (ioscm_file_port_new): Delete. (ioscm_with_output_to_port_worker): Use ioscm_file_port and ui_file_up. * guile/scm-type.c (tyscm_type_name): Use string_file. * guile/scm-value.c (vlscm_print_value_smob, gdbscm_value_print): Use string_file. * infcmd.c (print_return_value_1): Use string_file. * infrun.c (print_target_wait_results): Use string_file. * language.c (add_language): Use string_file. * location.c (explicit_to_string_internal): Use string_file. * main.c (captured_main_1): Use null_file. * maint.c (maintenance_print_architecture): Use stdio_file. * mi/mi-cmd-stack.c (list_arg_or_local): Use string_file. * mi/mi-common.h (struct mi_interp) <out, err, log, targ, event_channel>: Change type to mi_console_file pointer. * mi/mi-console.c (mi_console_file_fputs, mi_console_file_flush) (mi_console_file_delete): Delete. (struct mi_console_file): Delete. (mi_console_file_magic): Delete. (mi_console_file_new): Delete. (mi_console_file::mi_console_file): New. (mi_console_file_delete): Delete. (mi_console_file_fputs): Delete. (mi_console_file::write): New. (mi_console_raw_packet): Delete. (mi_console_file::flush): New. (mi_console_file_flush): Delete. (mi_console_set_raw): Rename to ... (mi_console_file::set_raw): ... this. * mi/mi-console.h (class mi_console_file): New class. (mi_console_file_new, mi_console_set_raw): Delete. * mi/mi-interp.c (mi_interpreter_init): Use mi_console_file. (mi_set_logging): Use delete and tee_file. Adjust. * mi/mi-main.c (output_register): Use string_file. (mi_cmd_data_evaluate_expression): Use string_file. (mi_cmd_data_read_memory): Use string_file. (mi_cmd_execute, print_variable_or_computed): Use string_file. * mi/mi-out.c (mi_ui_out::main_stream): New. (mi_ui_out::rewind): Use main_stream and string_file. (mi_ui_out::put): Use main_stream and string_file. (mi_ui_out::mi_ui_out): Remove 'stream' parameter. Allocate a 'string_file' instead. (mi_out_new): Don't allocate a mem_fileopen stream here. * mi/mi-out.h (mi_ui_out::mi_ui_out): Remove 'stream' parameter. (mi_ui_out::main_stream): Declare method. * printcmd.c (eval_command): Use string_file. * psymtab.c (maintenance_print_psymbols): Use stdio_file. * python/py-arch.c (archpy_disassemble): Use string_file. * python/py-breakpoint.c (bppy_get_commands): Use string_file. * python/py-frame.c (frapy_str): Use string_file. * python/py-framefilter.c (py_print_type, py_print_single_arg): Use string_file. * python/py-type.c (typy_str): Use string_file. * python/py-unwind.c (unwind_infopy_str): Use string_file. * python/py-value.c (valpy_str): Use string_file. * record-btrace.c (btrace_insn_history): Use string_file. * regcache.c (regcache_print): Use stdio_file. * reggroups.c (maintenance_print_reggroups): Use stdio_file. * remote.c (escape_buffer): Use string_file. * rust-lang.c (rust_get_disr_info): Use string_file. * serial.c (serial_open_ops_1): Use stdio_file. (do_serial_close): Use delete. * stack.c (print_frame_arg): Use string_file. (print_frame_args): Remove local mem_fileopen stream, not used. (print_frame): Use string_file. * symmisc.c (maintenance_print_symbols): Use stdio_file. * symtab.h (struct symbol_computed_ops) <generate_c_location>: Take a 'string_file *' instead of a 'ui_file *'. * top.c (new_ui): Use stdio_file and stderr_file. (free_ui): Use delete. (execute_command_to_string): Use string_file. (quit_confirm): Use string_file. * tracepoint.c (collection_list::append_exp): Use string_file. * tui/tui-disasm.c (tui_disassemble): Use string_file. * tui/tui-file.c: Don't include "ui-file.h". (enum streamtype, struct tui_stream): Delete. (tui_file_new, tui_file_delete, tui_fileopen, tui_sfileopen) (tui_file_isatty, tui_file_rewind, tui_file_put): Delete. (tui_file::tui_file): New method. (tui_file_fputs): Delete. (tui_file_get_strbuf): Delete. (tui_file::puts): New method. (tui_file_adjust_strbuf): Delete. (tui_file_flush): Delete. (tui_file::flush): New method. * tui/tui-file.h: Tweak intro comment. Include ui-file.h. (tui_fileopen, tui_sfileopen, tui_file_get_strbuf) (tui_file_adjust_strbuf): Delete declarations. (class tui_file): New class. * tui/tui-io.c (tui_initialize_io): Use tui_file. * tui/tui-regs.c (tui_restore_gdbout): Use delete. (tui_register_format): Use string_stream. * tui/tui-stack.c (tui_make_status_line): Use string_file. (tui_get_function_from_frame): Use string_file. * typeprint.c (type_to_string): Use string_file. * ui-file.c (struct ui_file, ui_file_magic, ui_file_new): Delete. (null_stream): New global. (ui_file_delete): Delete. (ui_file::ui_file): New. (null_file_isatty): Delete. (ui_file::~ui_file): New. (null_file_rewind): Delete. (ui_file::printf): New. (null_file_put): Delete. (null_file_flush): Delete. (ui_file::putstr): New. (null_file_write): Delete. (ui_file::putstrn): New. (null_file_read): Delete. (ui_file::putc): New. (null_file_fputs): Delete. (null_file_write_async_safe): Delete. (ui_file::vprintf): New. (null_file_delete): Delete. (null_file::write): New. (null_file_fseek): Delete. (null_file::puts): New. (ui_file_data): Delete. (null_file::write_async_safe): New. (gdb_flush, ui_file_isatty): Adjust. (ui_file_put, ui_file_rewind): Delete. (ui_file_write): Adjust. (ui_file_write_for_put): Delete. (ui_file_write_async_safe, ui_file_read): Adjust. (ui_file_fseek): Delete. (fputs_unfiltered): Adjust. (set_ui_file_flush, set_ui_file_isatty, set_ui_file_rewind) (set_ui_file_put, set_ui_file_write, set_ui_file_write_async_safe) (set_ui_file_read, set_ui_file_fputs, set_ui_file_fseek) (set_ui_file_data): Delete. (string_file::~string_file, string_file::write) (struct accumulated_ui_file, do_ui_file_xstrdup, ui_file_xstrdup) (do_ui_file_as_string, ui_file_as_string): Delete. (do_ui_file_obsavestring, ui_file_obsavestring): Delete. (struct mem_file): Delete. (mem_file_new): Delete. (stdio_file::stdio_file): New. (mem_file_delete): Delete. (stdio_file::stdio_file): New. (mem_fileopen): Delete. (stdio_file::~stdio_file): New. (mem_file_rewind): Delete. (stdio_file::set_stream): New. (mem_file_put): Delete. (stdio_file::open): New. (mem_file_write): Delete. (stdio_file_magic, struct stdio_file): Delete. (stdio_file_new, stdio_file_delete, stdio_file_flush): Delete. (stdio_file::flush): New. (stdio_file_read): Rename to ... (stdio_file::read): ... this. Adjust. (stdio_file_write): Rename to ... (stdio_file::write): ... this. Adjust. (stdio_file_write_async_safe): Rename to ... (stdio_file::write_async_safe) ... this. Adjust. (stdio_file_fputs): Rename to ... (stdio_file::puts) ... this. Adjust. (stdio_file_isatty): Delete. (stdio_file_fseek): Delete. (stdio_file::isatty): New. (stderr_file_write): Rename to ... (stderr_file::write) ... this. Adjust. (stderr_file_fputs): Rename to ... (stderr_file::puts) ... this. Adjust. (stderr_fileopen, stdio_fileopen, gdb_fopen): Delete. (stderr_file::stderr_file): New. (tee_file_magic): Delete. (struct tee_file): Delete. (tee_file::tee_file): New. (tee_file_new): Delete. (tee_file::~tee_file): New. (tee_file_delete): Delete. (tee_file_flush): Rename to ... (tee_file::flush): ... this. Adjust. (tee_file_write): Rename to ... (tee_file::write): ... this. Adjust. (tee_file::write_async_safe): New. (tee_file_fputs): Rename to ... (tee_file::puts): ... this. Adjust. (tee_file_isatty): Rename to ... (tee_file::isatty): ... this. Adjust. * ui-file.h (struct obstack, struct ui_file): Don't forward-declare. (ui_file_new, ui_file_flush_ftype, set_ui_file_flush) (ui_file_write_ftype) (set_ui_file_write, ui_file_fputs_ftype, set_ui_file_fputs) (ui_file_write_async_safe_ftype, set_ui_file_write_async_safe) (ui_file_read_ftype, set_ui_file_read, ui_file_isatty_ftype) (set_ui_file_isatty, ui_file_rewind_ftype, set_ui_file_rewind) (ui_file_put_method_ftype, ui_file_put_ftype, set_ui_file_put) (ui_file_delete_ftype, set_ui_file_data, ui_file_fseek_ftype) (set_ui_file_fseek): Delete. (ui_file_data, ui_file_delete, ui_file_rewind) (struct ui_file): New. (ui_file_up): New. (class null_file): New. (null_stream): Declare. (ui_file_write_for_put, ui_file_put): Delete. (ui_file_xstrdup, ui_file_as_string, ui_file_obsavestring): Delete. (ui_file_fseek, mem_fileopen, stdio_fileopen, stderr_fileopen) (gdb_fopen, tee_file_new): Delete. (struct string_file): New. (struct stdio_file): New. (stdio_file_up): New. (struct stderr_file): New. (class tee_file): New. * ui-out.c (ui_out::field_stream): Take a 'string_file &' instead of a 'ui_file *'. Adjust. * ui-out.h (class ui_out) <field_stream>: Likewise. * utils.c (do_ui_file_delete, make_cleanup_ui_file_delete) (null_stream): Delete. (error_stream): Take a 'string_file &' instead of a 'ui_file *'. Adjust. * utils.h (struct ui_file): Delete forward declaration.. (make_cleanup_ui_file_delete, null_stream): Delete declarations. (error_stream): Take a 'string_file &' instead of a 'ui_file *'. * varobj.c (varobj_value_get_print_value): Use string_file. * xtensa-tdep.c (xtensa_verify_config): Use string_file. * gdbarch.c: Regenerate.
1 parent 187808b commit d7e7473

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+1350
-2108
lines changed

gdb/ChangeLog

+291
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,294 @@
1+
2017-02-02 Pedro Alves <[email protected]>
2+
3+
* ada-lang.c (type_as_string): Use string_file.
4+
* ada-valprint.c (ada_print_floating): Use string_file.
5+
* ada-varobj.c (ada_varobj_scalar_image)
6+
(ada_varobj_get_value_image): Use string_file.
7+
* aix-thread.c (aix_thread_extra_thread_info): Use string_file.
8+
* arm-tdep.c (_initialize_arm_tdep): Use string_printf.
9+
* breakpoint.c (update_inserted_breakpoint_locations)
10+
(insert_breakpoint_locations, reattach_breakpoints)
11+
(print_breakpoint_location, print_one_detail_ranged_breakpoint)
12+
(print_it_watchpoint): Use string_file.
13+
(save_breakpoints): Use stdio_file.
14+
* c-exp.y (oper): Use string_file.
15+
* cli/cli-logging.c (set_logging_redirect): Use ui_file_up and
16+
tee_file.
17+
(pop_output_files): Use delete.
18+
(handle_redirections): Use stdio_file and tee_file.
19+
* cli/cli-setshow.c (do_show_command): Use string_file.
20+
* compile/compile-c-support.c (c_compute_program): Use
21+
string_file.
22+
* compile/compile-c-symbols.c (generate_vla_size): Take a
23+
'string_file &' instead of a 'ui_file *'.
24+
(generate_c_for_for_one_variable): Take a 'string_file &' instead
25+
of a 'ui_file *'. Use string_file.
26+
(generate_c_for_variable_locations): Take a 'string_file &'
27+
instead of a 'ui_file *'.
28+
* compile/compile-internal.h (generate_c_for_for_one_variable):
29+
Take a 'string_file &' instead of a 'ui_file *'.
30+
* compile/compile-loc2c.c (push, pushf, unary, binary)
31+
(print_label, pushf_register_address, pushf_register)
32+
(do_compile_dwarf_expr_to_c): Take a 'string_file &' instead of a
33+
'ui_file *'. Adjust.
34+
* compile/compile.c (compile_to_object): Use string_file.
35+
* compile/compile.h (compile_dwarf_expr_to_c)
36+
(compile_dwarf_bounds_to_c): Take a 'string_file &' instead of a
37+
'ui_file *'.
38+
* cp-support.c (inspect_type): Use string_file and obstack_copy0.
39+
(replace_typedefs_qualified_name): Use string_file and
40+
obstack_copy0.
41+
* disasm.c (gdb_pretty_print_insn): Use string_file.
42+
(gdb_disassembly): Adjust reference the null_stream global.
43+
(do_ui_file_delete): Delete.
44+
(gdb_insn_length): Use null_stream.
45+
* dummy-frame.c (maintenance_print_dummy_frames): Use stdio_file.
46+
* dwarf2loc.c (dwarf2_compile_property_to_c)
47+
(locexpr_generate_c_location, loclist_generate_c_location): Take a
48+
'string_file &' instead of a 'ui_file *'.
49+
* dwarf2loc.h (dwarf2_compile_property_to_c): Likewise.
50+
* dwarf2read.c (do_ui_file_peek_last): Delete.
51+
(dwarf2_compute_name): Use string_file.
52+
* event-top.c (gdb_setup_readline): Use stdio_file.
53+
* gdbarch.sh (verify_gdbarch): Use string_file.
54+
* gdbtypes.c (safe_parse_type): Use null_stream.
55+
* guile/scm-breakpoint.c (gdbscm_breakpoint_commands): Use
56+
string_file.
57+
* guile/scm-disasm.c (gdbscm_print_insn_from_port): Take a
58+
'string_file *' instead of a 'ui_file *'.
59+
(gdbscm_arch_disassemble): Use string_file.
60+
* guile/scm-frame.c (frscm_print_frame_smob): Use string_file.
61+
* guile/scm-ports.c (class ioscm_file_port): Now a class that
62+
inherits from ui_file.
63+
(ioscm_file_port_delete, ioscm_file_port_rewind)
64+
(ioscm_file_port_put): Delete.
65+
(ioscm_file_port_write): Rename to ...
66+
(ioscm_file_port::write): ... this. Remove file_port_magic
67+
checks.
68+
(ioscm_file_port_new): Delete.
69+
(ioscm_with_output_to_port_worker): Use ioscm_file_port and
70+
ui_file_up.
71+
* guile/scm-type.c (tyscm_type_name): Use string_file.
72+
* guile/scm-value.c (vlscm_print_value_smob, gdbscm_value_print):
73+
Use string_file.
74+
* infcmd.c (print_return_value_1): Use string_file.
75+
* infrun.c (print_target_wait_results): Use string_file.
76+
* language.c (add_language): Use string_file.
77+
* location.c (explicit_to_string_internal): Use string_file.
78+
* main.c (captured_main_1): Use null_file.
79+
* maint.c (maintenance_print_architecture): Use stdio_file.
80+
* mi/mi-cmd-stack.c (list_arg_or_local): Use string_file.
81+
* mi/mi-common.h (struct mi_interp) <out, err, log, targ,
82+
event_channel>: Change type to mi_console_file pointer.
83+
* mi/mi-console.c (mi_console_file_fputs, mi_console_file_flush)
84+
(mi_console_file_delete): Delete.
85+
(struct mi_console_file): Delete.
86+
(mi_console_file_magic): Delete.
87+
(mi_console_file_new): Delete.
88+
(mi_console_file::mi_console_file): New.
89+
(mi_console_file_delete): Delete.
90+
(mi_console_file_fputs): Delete.
91+
(mi_console_file::write): New.
92+
(mi_console_raw_packet): Delete.
93+
(mi_console_file::flush): New.
94+
(mi_console_file_flush): Delete.
95+
(mi_console_set_raw): Rename to ...
96+
(mi_console_file::set_raw): ... this.
97+
* mi/mi-console.h (class mi_console_file): New class.
98+
(mi_console_file_new, mi_console_set_raw): Delete.
99+
* mi/mi-interp.c (mi_interpreter_init): Use mi_console_file.
100+
(mi_set_logging): Use delete and tee_file. Adjust.
101+
* mi/mi-main.c (output_register): Use string_file.
102+
(mi_cmd_data_evaluate_expression): Use string_file.
103+
(mi_cmd_data_read_memory): Use string_file.
104+
(mi_cmd_execute, print_variable_or_computed): Use string_file.
105+
* mi/mi-out.c (mi_ui_out::main_stream): New.
106+
(mi_ui_out::rewind): Use main_stream and
107+
string_file.
108+
(mi_ui_out::put): Use main_stream and string_file.
109+
(mi_ui_out::mi_ui_out): Remove 'stream' parameter.
110+
Allocate a 'string_file' instead.
111+
(mi_out_new): Don't allocate a mem_fileopen stream here.
112+
* mi/mi-out.h (mi_ui_out::mi_ui_out): Remove 'stream' parameter.
113+
(mi_ui_out::main_stream): Declare method.
114+
* printcmd.c (eval_command): Use string_file.
115+
* psymtab.c (maintenance_print_psymbols): Use stdio_file.
116+
* python/py-arch.c (archpy_disassemble): Use string_file.
117+
* python/py-breakpoint.c (bppy_get_commands): Use string_file.
118+
* python/py-frame.c (frapy_str): Use string_file.
119+
* python/py-framefilter.c (py_print_type, py_print_single_arg):
120+
Use string_file.
121+
* python/py-type.c (typy_str): Use string_file.
122+
* python/py-unwind.c (unwind_infopy_str): Use string_file.
123+
* python/py-value.c (valpy_str): Use string_file.
124+
* record-btrace.c (btrace_insn_history): Use string_file.
125+
* regcache.c (regcache_print): Use stdio_file.
126+
* reggroups.c (maintenance_print_reggroups): Use stdio_file.
127+
* remote.c (escape_buffer): Use string_file.
128+
* rust-lang.c (rust_get_disr_info): Use string_file.
129+
* serial.c (serial_open_ops_1): Use stdio_file.
130+
(do_serial_close): Use delete.
131+
* stack.c (print_frame_arg): Use string_file.
132+
(print_frame_args): Remove local mem_fileopen stream, not used.
133+
(print_frame): Use string_file.
134+
* symmisc.c (maintenance_print_symbols): Use stdio_file.
135+
* symtab.h (struct symbol_computed_ops) <generate_c_location>:
136+
Take a 'string_file *' instead of a 'ui_file *'.
137+
* top.c (new_ui): Use stdio_file and stderr_file.
138+
(free_ui): Use delete.
139+
(execute_command_to_string): Use string_file.
140+
(quit_confirm): Use string_file.
141+
* tracepoint.c (collection_list::append_exp): Use string_file.
142+
* tui/tui-disasm.c (tui_disassemble): Use string_file.
143+
* tui/tui-file.c: Don't include "ui-file.h".
144+
(enum streamtype, struct tui_stream): Delete.
145+
(tui_file_new, tui_file_delete, tui_fileopen, tui_sfileopen)
146+
(tui_file_isatty, tui_file_rewind, tui_file_put): Delete.
147+
(tui_file::tui_file): New method.
148+
(tui_file_fputs): Delete.
149+
(tui_file_get_strbuf): Delete.
150+
(tui_file::puts): New method.
151+
(tui_file_adjust_strbuf): Delete.
152+
(tui_file_flush): Delete.
153+
(tui_file::flush): New method.
154+
* tui/tui-file.h: Tweak intro comment.
155+
Include ui-file.h.
156+
(tui_fileopen, tui_sfileopen, tui_file_get_strbuf)
157+
(tui_file_adjust_strbuf): Delete declarations.
158+
(class tui_file): New class.
159+
* tui/tui-io.c (tui_initialize_io): Use tui_file.
160+
* tui/tui-regs.c (tui_restore_gdbout): Use delete.
161+
(tui_register_format): Use string_stream.
162+
* tui/tui-stack.c (tui_make_status_line): Use string_file.
163+
(tui_get_function_from_frame): Use string_file.
164+
* typeprint.c (type_to_string): Use string_file.
165+
* ui-file.c (struct ui_file, ui_file_magic, ui_file_new): Delete.
166+
(null_stream): New global.
167+
(ui_file_delete): Delete.
168+
(ui_file::ui_file): New.
169+
(null_file_isatty): Delete.
170+
(ui_file::~ui_file): New.
171+
(null_file_rewind): Delete.
172+
(ui_file::printf): New.
173+
(null_file_put): Delete.
174+
(null_file_flush): Delete.
175+
(ui_file::putstr): New.
176+
(null_file_write): Delete.
177+
(ui_file::putstrn): New.
178+
(null_file_read): Delete.
179+
(ui_file::putc): New.
180+
(null_file_fputs): Delete.
181+
(null_file_write_async_safe): Delete.
182+
(ui_file::vprintf): New.
183+
(null_file_delete): Delete.
184+
(null_file::write): New.
185+
(null_file_fseek): Delete.
186+
(null_file::puts): New.
187+
(ui_file_data): Delete.
188+
(null_file::write_async_safe): New.
189+
(gdb_flush, ui_file_isatty): Adjust.
190+
(ui_file_put, ui_file_rewind): Delete.
191+
(ui_file_write): Adjust.
192+
(ui_file_write_for_put): Delete.
193+
(ui_file_write_async_safe, ui_file_read): Adjust.
194+
(ui_file_fseek): Delete.
195+
(fputs_unfiltered): Adjust.
196+
(set_ui_file_flush, set_ui_file_isatty, set_ui_file_rewind)
197+
(set_ui_file_put, set_ui_file_write, set_ui_file_write_async_safe)
198+
(set_ui_file_read, set_ui_file_fputs, set_ui_file_fseek)
199+
(set_ui_file_data): Delete.
200+
(string_file::~string_file, string_file::write)
201+
(struct accumulated_ui_file, do_ui_file_xstrdup, ui_file_xstrdup)
202+
(do_ui_file_as_string, ui_file_as_string): Delete.
203+
(do_ui_file_obsavestring, ui_file_obsavestring): Delete.
204+
(struct mem_file): Delete.
205+
(mem_file_new): Delete.
206+
(stdio_file::stdio_file): New.
207+
(mem_file_delete): Delete.
208+
(stdio_file::stdio_file): New.
209+
(mem_fileopen): Delete.
210+
(stdio_file::~stdio_file): New.
211+
(mem_file_rewind): Delete.
212+
(stdio_file::set_stream): New.
213+
(mem_file_put): Delete.
214+
(stdio_file::open): New.
215+
(mem_file_write): Delete.
216+
(stdio_file_magic, struct stdio_file): Delete.
217+
(stdio_file_new, stdio_file_delete, stdio_file_flush): Delete.
218+
(stdio_file::flush): New.
219+
(stdio_file_read): Rename to ...
220+
(stdio_file::read): ... this. Adjust.
221+
(stdio_file_write): Rename to ...
222+
(stdio_file::write): ... this. Adjust.
223+
(stdio_file_write_async_safe): Rename to ...
224+
(stdio_file::write_async_safe) ... this. Adjust.
225+
(stdio_file_fputs): Rename to ...
226+
(stdio_file::puts) ... this. Adjust.
227+
(stdio_file_isatty): Delete.
228+
(stdio_file_fseek): Delete.
229+
(stdio_file::isatty): New.
230+
(stderr_file_write): Rename to ...
231+
(stderr_file::write) ... this. Adjust.
232+
(stderr_file_fputs): Rename to ...
233+
(stderr_file::puts) ... this. Adjust.
234+
(stderr_fileopen, stdio_fileopen, gdb_fopen): Delete.
235+
(stderr_file::stderr_file): New.
236+
(tee_file_magic): Delete.
237+
(struct tee_file): Delete.
238+
(tee_file::tee_file): New.
239+
(tee_file_new): Delete.
240+
(tee_file::~tee_file): New.
241+
(tee_file_delete): Delete.
242+
(tee_file_flush): Rename to ...
243+
(tee_file::flush): ... this. Adjust.
244+
(tee_file_write): Rename to ...
245+
(tee_file::write): ... this. Adjust.
246+
(tee_file::write_async_safe): New.
247+
(tee_file_fputs): Rename to ...
248+
(tee_file::puts): ... this. Adjust.
249+
(tee_file_isatty): Rename to ...
250+
(tee_file::isatty): ... this. Adjust.
251+
* ui-file.h (struct obstack, struct ui_file): Don't
252+
forward-declare.
253+
(ui_file_new, ui_file_flush_ftype, set_ui_file_flush)
254+
(ui_file_write_ftype)
255+
(set_ui_file_write, ui_file_fputs_ftype, set_ui_file_fputs)
256+
(ui_file_write_async_safe_ftype, set_ui_file_write_async_safe)
257+
(ui_file_read_ftype, set_ui_file_read, ui_file_isatty_ftype)
258+
(set_ui_file_isatty, ui_file_rewind_ftype, set_ui_file_rewind)
259+
(ui_file_put_method_ftype, ui_file_put_ftype, set_ui_file_put)
260+
(ui_file_delete_ftype, set_ui_file_data, ui_file_fseek_ftype)
261+
(set_ui_file_fseek): Delete.
262+
(ui_file_data, ui_file_delete, ui_file_rewind)
263+
(struct ui_file): New.
264+
(ui_file_up): New.
265+
(class null_file): New.
266+
(null_stream): Declare.
267+
(ui_file_write_for_put, ui_file_put): Delete.
268+
(ui_file_xstrdup, ui_file_as_string, ui_file_obsavestring):
269+
Delete.
270+
(ui_file_fseek, mem_fileopen, stdio_fileopen, stderr_fileopen)
271+
(gdb_fopen, tee_file_new): Delete.
272+
(struct string_file): New.
273+
(struct stdio_file): New.
274+
(stdio_file_up): New.
275+
(struct stderr_file): New.
276+
(class tee_file): New.
277+
* ui-out.c (ui_out::field_stream): Take a 'string_file &' instead
278+
of a 'ui_file *'. Adjust.
279+
* ui-out.h (class ui_out) <field_stream>: Likewise.
280+
* utils.c (do_ui_file_delete, make_cleanup_ui_file_delete)
281+
(null_stream): Delete.
282+
(error_stream): Take a 'string_file &' instead of a 'ui_file *'.
283+
Adjust.
284+
* utils.h (struct ui_file): Delete forward declaration..
285+
(make_cleanup_ui_file_delete, null_stream): Delete declarations.
286+
(error_stream): Take a 'string_file &' instead of a
287+
'ui_file *'.
288+
* varobj.c (varobj_value_get_print_value): Use string_file.
289+
* xtensa-tdep.c (xtensa_verify_config): Use string_file.
290+
* gdbarch.c: Regenerate.
291+
1292
2017-02-02 Pedro Alves <[email protected]>
2293

3294
* disasm.c (gdb_disassembler::pretty_print_insn): Rename to...

gdb/ada-lang.c

+3-9
Original file line numberDiff line numberDiff line change
@@ -7602,17 +7602,11 @@ ada_value_struct_elt (struct value *arg, char *name, int no_err)
76027602
static std::string
76037603
type_as_string (struct type *type)
76047604
{
7605-
struct ui_file *tmp_stream = mem_fileopen ();
7606-
struct cleanup *old_chain;
7607-
7608-
tmp_stream = mem_fileopen ();
7609-
old_chain = make_cleanup_ui_file_delete (tmp_stream);
7605+
string_file tmp_stream;
76107606

7611-
type_print (type, "", tmp_stream, -1);
7612-
std::string str = ui_file_as_string (tmp_stream);
7607+
type_print (type, "", &tmp_stream, -1);
76137608

7614-
do_cleanups (old_chain);
7615-
return str;
7609+
return std::move (tmp_stream.string ());
76167610
}
76177611

76187612
/* Given a type TYPE, look up the type of the component of type named NAME.

gdb/ada-valprint.c

+3-6
Original file line numberDiff line numberDiff line change
@@ -298,12 +298,11 @@ static void
298298
ada_print_floating (const gdb_byte *valaddr, struct type *type,
299299
struct ui_file *stream)
300300
{
301-
struct ui_file *tmp_stream = mem_fileopen ();
302-
struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_stream);
301+
string_file tmp_stream;
303302

304-
print_floating (valaddr, type, tmp_stream);
303+
print_floating (valaddr, type, &tmp_stream);
305304

306-
std::string s = ui_file_as_string (tmp_stream);
305+
std::string &s = tmp_stream.string ();
307306
size_t skip_count = 0;
308307

309308
/* Modify for Ada rules. */
@@ -342,8 +341,6 @@ ada_print_floating (const gdb_byte *valaddr, struct type *type,
342341
}
343342
else
344343
fprintf_filtered (stream, "%s", &s[skip_count]);
345-
346-
do_cleanups (cleanups);
347344
}
348345

349346
void

gdb/ada-varobj.c

+6-17
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,10 @@ ada_varobj_decode_var (struct value **value_ptr, struct type **type_ptr)
7979
static std::string
8080
ada_varobj_scalar_image (struct type *type, LONGEST val)
8181
{
82-
struct ui_file *buf = mem_fileopen ();
83-
struct cleanup *cleanups = make_cleanup_ui_file_delete (buf);
82+
string_file buf;
8483

85-
ada_print_scalar (type, val, buf);
86-
std::string result = ui_file_as_string (buf);
87-
do_cleanups (cleanups);
88-
89-
return result;
84+
ada_print_scalar (type, val, &buf);
85+
return std::move (buf.string ());
9086
}
9187

9288
/* Assuming that the (PARENT_VALUE, PARENT_TYPE) pair designates
@@ -808,17 +804,10 @@ static std::string
808804
ada_varobj_get_value_image (struct value *value,
809805
struct value_print_options *opts)
810806
{
811-
struct ui_file *buffer;
812-
struct cleanup *old_chain;
813-
814-
buffer = mem_fileopen ();
815-
old_chain = make_cleanup_ui_file_delete (buffer);
816-
817-
common_val_print (value, buffer, 0, opts, current_language);
818-
std::string result = ui_file_as_string (buffer);
807+
string_file buffer;
819808

820-
do_cleanups (old_chain);
821-
return result;
809+
common_val_print (value, &buffer, 0, opts, current_language);
810+
return std::move (buffer.string ());
822811
}
823812

824813
/* Assuming that the (VALUE, TYPE) pair designates an array varobj,

0 commit comments

Comments
 (0)