GCC Middle and Back End API Reference
dump_pretty_printer Class Reference

#include <dump-context.h>

Inheritance diagram for dump_pretty_printer:
Collaboration diagram for dump_pretty_printer:

Data Structures

struct  custom_token_printer

Public Member Functions

 dump_pretty_printer (dump_context *context, dump_flags_t dump_kind)
void set_optinfo (optinfo *info)
virtual std::unique_ptr< pretty_printerclone () const
void set_output_stream (FILE *outfile)
void set_token_printer (token_printer *tp)
void set_prefix (char *prefix)
void emit_prefix ()
void format (text_info &text)
void maybe_space ()
bool supports_urls_p () const
diagnostic_url_format get_url_format () const
void set_url_format (diagnostic_url_format url_format)
void begin_url (const char *url)
void end_url ()
pp_wrapping_mode_t set_verbatim_wrapping ()
void set_padding (pp_padding padding)
pp_padding get_padding () const
void clear_state ()
void set_real_maximum_length ()
int remaining_character_count_for_line ()
void set_format_postprocessor (std::unique_ptr< format_postprocessor > p)
void dump (FILE *out, int indent) const
void DEBUG_FUNCTION dump () const

Private Member Functions

bool decode_format (text_info *text, const char *spec, pp_token_list &formatted_tok_list)
void stash_item (pp_token_list &formatted_tok_list, std::unique_ptr< optinfo_item > item)
void emit_item (std::unique_ptr< optinfo_item > item, optinfo *dest)

Static Private Member Functions

static bool format_decoder_cb (pretty_printer *pp, text_info *text, const char *spec, int, bool, bool, bool, bool @endverbatim *, pp_token_list &formatted_tok_list)

Private Attributes

dump_contextm_context
dump_flags_t m_dump_kind
custom_token_printer m_token_printer
output_bufferm_buffer
char * m_prefix
pp_padding m_padding
int m_maximum_length
int m_indent_skip
pp_wrapping_mode_t m_wrapping
printer_fn m_format_decoder
std::unique_ptr< format_postprocessorm_format_postprocessor
bool m_emitted_prefix
bool m_need_newline
bool m_translate_identifiers
bool m_show_color
bool m_show_highlight_colors
diagnostic_url_format m_url_format
bool m_skipping_null_url

Detailed Description

A subclass of pretty_printer for implementing dump_context::dump_printf_va. In particular, the formatted chunks are captured as optinfo_item instances as pp_token_custom_data, thus retaining metadata about the entities being dumped (e.g. source locations), rather than just as plain text. These custom items are retained through to the end of stage 3 of formatted printing; the printer uses a custom token_printer subclass to emit them to the active optinfo (if any).

Constructor & Destructor Documentation

◆ dump_pretty_printer()

Member Function Documentation

◆ begin_url()

void pretty_printer::begin_url ( const char * url)
inherited
Support for encoding URLs. See egmontkob/Hyperlinks_in_Terminal_Emulators.md ( https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda ). > A hyperlink is opened upon encountering an OSC 8 escape sequence with > the target URI. The syntax is > > OSC 8 ; params ; URI ST > > A hyperlink is closed with the same escape sequence, omitting the > parameters and the URI but keeping the separators: > > OSC 8 ; ; ST > > OSC (operating system command) is typically ESC ]. Use BEL instead of ST, as that is currently rendered better in some terminal emulators that don't support OSC 8, like konsole.
If URL-printing is enabled, write an "open URL" escape sequence to PP for the given URL.

References gcc_unreachable, m_skipping_null_url, m_url_format, pp_string(), URL_FORMAT_BEL, URL_FORMAT_NONE, and URL_FORMAT_ST.

◆ clear_state()

void pretty_printer::clear_state ( )
inlineinherited
Clear this pretty_printer's output state.

References m_emitted_prefix, and pp_indentation.

Referenced by format(), pp_flush(), and pp_really_flush().

◆ clone()

std::unique_ptr< pretty_printer > pretty_printer::clone ( ) const
virtualinherited
Base class implementation of pretty_printer::clone vfunc.

Referenced by diagnostic_event::get_desc(), and sarif_builder::make_location_object().

◆ decode_format()

bool dump_pretty_printer::decode_format ( text_info * text,
const char * spec,
pp_token_list & formatted_tok_list )
private
Format decoder for dump_pretty_printer, and thus for dump_printf and dump_printf_loc. Supported format codes (in addition to the standard pretty_printer ones) are: %C: cgraph_node *: Equivalent to: dump_symtab_node (MSG_*, node) %E: gimple *: Equivalent to: dump_gimple_expr (MSG_*, TDF_SLIM, stmt, 0) %G: gimple *: Equivalent to: dump_gimple_stmt (MSG_*, TDF_SLIM, stmt, 0) %T: tree: Equivalent to: dump_generic_expr (MSG_*, arg, TDF_SLIM). TODO: add a format code that can handle (symtab_node*) *and* both subclasses (presumably means teaching -Wformat about non-virtual subclasses). These format codes build optinfo_item instances, thus capturing metadata about the arguments being dumped, as well as the textual output.

References make_item_for_dump_generic_expr(), make_item_for_dump_gimple_expr(), make_item_for_dump_gimple_stmt(), make_item_for_dump_symtab_node(), stash_item(), TDF_SLIM, and text.

Referenced by format_decoder_cb().

◆ dump() [1/2]

void DEBUG_FUNCTION pretty_printer::dump ( ) const
inlineinherited

References DEBUG_FUNCTION, and dump().

Referenced by dump().

◆ dump() [2/2]

void pretty_printer::dump ( FILE * out,
int indent ) const
inherited
Dump state of this pretty_printer to OUT, for debugging.

References gcc_unreachable, m_buffer, m_show_color, m_url_format, URL_FORMAT_BEL, URL_FORMAT_NONE, and URL_FORMAT_ST.

◆ emit_item()

void dump_pretty_printer::emit_item ( std::unique_ptr< optinfo_item > item,
optinfo * dest )
private
Emit ITEM and take ownership of it. If DEST is non-NULL, add ITEM to DEST; otherwise delete ITEM.

References optinfo::add_item(), m_context, and m_dump_kind.

Referenced by dump_context::begin_scope(), dump_context::dump_dec(), dump_context::dump_symtab_node(), and dump_pretty_printer::custom_token_printer::emit_any_pending_textual_chunks().

◆ emit_prefix()

void pretty_printer::emit_prefix ( )
inherited

◆ end_url()

void pretty_printer::end_url ( )
inherited
If URL-printing is enabled, write a "close URL" escape sequence to PP.

References get_end_url_string(), m_skipping_null_url, m_url_format, pp_string(), and URL_FORMAT_NONE.

◆ format()

◆ format_decoder_cb()

bool dump_pretty_printer::format_decoder_cb ( pretty_printer * pp,
text_info * text,
const char * spec,
int ,
bool ,
bool ,
bool ,
bool @endverbatim * ,
pp_token_list & formatted_tok_list )
staticprivate
pp_format_decoder callback for dump_pretty_printer, and thus for dump_printf and dump_printf_loc. A wrapper around decode_format, for type-safety.

References decode_format(), dump_pretty_printer(), pretty_printer::pretty_printer(), and text.

Referenced by dump_pretty_printer().

◆ get_padding()

pp_padding pretty_printer::get_padding ( ) const
inlineinherited

References m_padding.

◆ get_url_format()

diagnostic_url_format pretty_printer::get_url_format ( ) const
inlineinherited

◆ maybe_space()

void pretty_printer::maybe_space ( )
inherited
Maybe print out a whitespace if needed.

References m_padding, pp_none, and pp_space.

◆ remaining_character_count_for_line()

int pretty_printer::remaining_character_count_for_line ( )
inherited
Return the amount of characters PRETTY-PRINTER can accept to make a full line. Meaningful only in line-wrapping mode.

References output_buffer::m_line_length, m_maximum_length, and pp_buffer.

Referenced by pp_character(), and pp_wrap_text().

◆ set_format_postprocessor()

void pretty_printer::set_format_postprocessor ( std::unique_ptr< format_postprocessor > p)
inlineinherited

◆ set_optinfo()

void dump_pretty_printer::set_optinfo ( optinfo * info)
inline

◆ set_output_stream()

◆ set_padding()

void pretty_printer::set_padding ( pp_padding padding)
inlineinherited

References m_padding.

◆ set_prefix()

void pretty_printer::set_prefix ( char * prefix)
inherited
Set PREFIX for PRETTY-PRINTER, taking ownership of PREFIX, which will eventually be free-ed.

References free(), m_emitted_prefix, m_prefix, pp_indentation, and set_real_maximum_length().

Referenced by lhd_print_error_function().

◆ set_real_maximum_length()

void pretty_printer::set_real_maximum_length ( )
inherited
Subroutine of pp_set_maximum_length. Set up PRETTY-PRINTER's internal maximum characters per line.

References DIAGNOSTICS_SHOW_PREFIX_NEVER, DIAGNOSTICS_SHOW_PREFIX_ONCE, m_maximum_length, m_prefix, pp_is_wrapping_line, pp_line_cutoff, and pp_prefixing_rule.

Referenced by pp_set_line_maximum_length(), and set_prefix().

◆ set_token_printer()

void pretty_printer::set_token_printer ( token_printer * tp)
inlineinherited

◆ set_url_format()

void pretty_printer::set_url_format ( diagnostic_url_format url_format)
inlineinherited

References m_url_format.

◆ set_verbatim_wrapping()

pp_wrapping_mode_t pretty_printer::set_verbatim_wrapping ( )
inlineinherited

◆ stash_item()

void dump_pretty_printer::stash_item ( pp_token_list & formatted_tok_list,
std::unique_ptr< optinfo_item > item )
private
Append a custom pp_token for ITEM (generated in phase 2 of formatting) into FORMATTTED_TOK_LIST, so that it can be emitted in phase 2.

References gcc_assert, and pp_token_list::push_back().

Referenced by decode_format().

◆ supports_urls_p()

Field Documentation

◆ m_buffer

output_buffer* pretty_printer::m_buffer
privateinherited

◆ m_context

dump_context* dump_pretty_printer::m_context
private

Referenced by dump_pretty_printer(), and emit_item().

◆ m_dump_kind

dump_flags_t dump_pretty_printer::m_dump_kind
private

Referenced by dump_pretty_printer(), and emit_item().

◆ m_emitted_prefix

bool pretty_printer::m_emitted_prefix
privateinherited

◆ m_format_decoder

printer_fn pretty_printer::m_format_decoder
privateinherited

◆ m_format_postprocessor

std::unique_ptr<format_postprocessor> pretty_printer::m_format_postprocessor
privateinherited

◆ m_indent_skip

int pretty_printer::m_indent_skip
privateinherited

◆ m_maximum_length

int pretty_printer::m_maximum_length
privateinherited

◆ m_need_newline

bool pretty_printer::m_need_newline
privateinherited

◆ m_padding

pp_padding pretty_printer::m_padding
privateinherited

◆ m_prefix

◆ m_show_color

bool pretty_printer::m_show_color
privateinherited

◆ m_show_highlight_colors

bool pretty_printer::m_show_highlight_colors
privateinherited

◆ m_skipping_null_url

bool pretty_printer::m_skipping_null_url
privateinherited

◆ m_token_printer

custom_token_printer dump_pretty_printer::m_token_printer
private

Referenced by dump_pretty_printer(), and set_optinfo().

◆ m_translate_identifiers

bool pretty_printer::m_translate_identifiers
privateinherited

◆ m_url_format

◆ m_wrapping

pp_wrapping_mode_t pretty_printer::m_wrapping
privateinherited

The documentation for this class was generated from the following files: