GCC Middle and Back End API Reference
pretty-print.cc File Reference
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "intl.h"
#include "pretty-print.h"
#include "pretty-print-urlifier.h"
#include "diagnostic-color.h"
#include "diagnostic-event-id.h"
#include "selftest.h"
Include dependency graph for pretty-print.cc:

Data Structures

class  quoting_info
 
struct  quoting_info::location
 
struct  quoting_info::run
 
struct  auto_obstack
 

Macros

#define INCLUDE_VECTOR
 
#define PTRDIFF_MAX   INTTYPE_MAXIMUM (ptrdiff_t)
 
#define pp_integer_with_precision(PP, ARG, PREC, T, F)
 

Functions

static int decode_utf8_char (const unsigned char *, size_t len, unsigned int *)
 
static void pp_quoted_string (pretty_printer *, const char *, size_t=-1)
 
static void pp_set_real_maximum_length (pretty_printer *pp)
 
static void pp_clear_state (pretty_printer *pp)
 
template<unsigned int N, typename T >
void pp_wide_integer (pretty_printer *pp, const poly_int< N, T > &x)
 
template void pp_wide_integer (pretty_printer *, const poly_uint16 &)
 
template void pp_wide_integer (pretty_printer *, const poly_int64 &)
 
template void pp_wide_integer (pretty_printer *, const poly_uint64 &)
 
void pp_write_text_to_stream (pretty_printer *pp)
 
void pp_write_text_as_dot_label_to_stream (pretty_printer *pp, bool for_record)
 
void pp_write_text_as_html_like_dot_to_stream (pretty_printer *pp)
 
static void pp_wrap_text (pretty_printer *pp, const char *start, const char *end)
 
static void pp_maybe_wrap_text (pretty_printer *pp, const char *start, const char *end)
 
static void pp_append_r (pretty_printer *pp, const char *start, int length)
 
void pp_indent (pretty_printer *pp)
 
static const charget_end_url_string (pretty_printer *)
 
static void obstack_append_string (obstack *ostack, const char *str)
 
static void obstack_append_string (obstack *ostack, const char *str, size_t len)
 
static size_t urlify_quoted_string (pretty_printer *pp, obstack *obstack, const urlifier *urlifier, size_t quoted_text_start_idx, size_t quoted_text_end_idx)
 
static void on_begin_quote (const output_buffer &buf, unsigned chunk_idx, const urlifier *urlifier)
 
static void on_end_quote (pretty_printer *pp, output_buffer &buf, unsigned chunk_idx, const urlifier *urlifier)
 
void pp_format (pretty_printer *pp, text_info *text, const urlifier *urlifier)
 
void pp_output_formatted_text (pretty_printer *pp, const urlifier *urlifier)
 
void pp_format_verbatim (pretty_printer *pp, text_info *text)
 
void pp_flush (pretty_printer *pp)
 
void pp_really_flush (pretty_printer *pp)
 
void pp_set_line_maximum_length (pretty_printer *pp, int length)
 
void pp_clear_output_area (pretty_printer *pp)
 
void pp_set_prefix (pretty_printer *pp, char *prefix)
 
charpp_take_prefix (pretty_printer *pp)
 
void pp_destroy_prefix (pretty_printer *pp)
 
void pp_emit_prefix (pretty_printer *pp)
 
void pp_append_text (pretty_printer *pp, const char *start, const char *end)
 
const charpp_formatted_text (pretty_printer *pp)
 
const charpp_last_position_in_text (const pretty_printer *pp)
 
int pp_remaining_character_count_for_line (pretty_printer *pp)
 
void pp_printf (pretty_printer *pp, const char *msg,...)
 
void pp_verbatim (pretty_printer *pp, const char *msg,...)
 
void pp_newline (pretty_printer *pp)
 
void pp_character (pretty_printer *pp, int c)
 
void pp_string (pretty_printer *pp, const char *str)
 
void pp_unicode_character (pretty_printer *pp, unsigned c)
 
void pp_maybe_space (pretty_printer *pp)
 
void pp_newline_and_flush (pretty_printer *pp)
 
void pp_newline_and_indent (pretty_printer *pp, int n)
 
void pp_separate_with (pretty_printer *pp, char c)
 
void pp_begin_quote (pretty_printer *pp, bool show_color)
 
void pp_end_quote (pretty_printer *pp, bool show_color)
 
const charidentifier_to_locale (const char *ident)
 
void pp_begin_url (pretty_printer *pp, const char *url)
 
void pp_end_url (pretty_printer *pp)
 

Variables

void *(* identifier_to_locale_alloc )(size_t) = xmalloc
 
void(* identifier_to_locale_free )(void *) = free
 

Macro Definition Documentation

◆ INCLUDE_VECTOR

#define INCLUDE_VECTOR
Various declarations for language-independent pretty-print subroutines.
   Copyright (C) 2003-2024 Free Software Foundation, Inc.
   Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.   

◆ pp_integer_with_precision

#define pp_integer_with_precision ( PP,
ARG,
PREC,
T,
F )
Format an integer given by va_arg (ARG, type-specifier T) where
type-specifier is a precision modifier as indicated by PREC.  F is
a string used to construct the appropriate format-specifier.   

Referenced by pp_format().

◆ PTRDIFF_MAX

#define PTRDIFF_MAX   INTTYPE_MAXIMUM (ptrdiff_t)

Function Documentation

◆ decode_utf8_char()

static int decode_utf8_char ( const unsigned char * p,
size_t len,
unsigned int * value )
static
The string starting at P has LEN (at least 1) bytes left; if they
start with a valid UTF-8 sequence, return the length of that
sequence and set *VALUE to the value of that sequence, and
otherwise return 0 and set *VALUE to (unsigned int) -1.   

References abort, ggc_alloc(), and i.

Referenced by identifier_to_locale(), and pp_quoted_string().

◆ get_end_url_string()

static const char * get_end_url_string ( pretty_printer * pp)
static
Helper function for pp_end_url and pp_format, return the "close URL" escape
sequence string.   

References gcc_unreachable, pretty_printer::url_format, URL_FORMAT_BEL, URL_FORMAT_NONE, and URL_FORMAT_ST.

Referenced by pp_end_url(), pp_format(), and urlify_quoted_string().

◆ identifier_to_locale()

const char * identifier_to_locale ( const char * ident)
Given IDENT, an identifier in the internal encoding, return a
version of IDENT suitable for diagnostics in the locale character
set: either IDENT itself, or a string, allocated using
identifier_to_locale_alloc, converted to the locale character set
and using escape sequences if not representable in the locale
character set or containing control characters or invalid byte
sequences.  Existing backslashes in IDENT are not doubled, so the
result may not uniquely specify the contents of an arbitrary byte
sequence identifier.   

References cd, CONST_CAST, decode_utf8_char(), errno, ggc_alloc(), i, identifier_to_locale_alloc, identifier_to_locale_free, locale_encoding, locale_utf8, and NULL.

Referenced by announce_function(), default_tree_make_json_for_path(), default_tree_printer(), dump_fancy_name(), expand_expr_real_1(), compiler_logical_location::get_name_with_scope_for_tree(), compiler_logical_location::get_short_name_for_tree(), lhd_print_error_function(), pp_tree_identifier(), resolve_operand_name_1(), symtab_node::verify_base(), and cgraph_node::verify_node().

◆ obstack_append_string() [1/2]

static void obstack_append_string ( obstack * ostack,
const char * str )
static
Append STR to OSTACK, without a null-terminator.   

References ggc_alloc().

Referenced by urlify_quoted_string().

◆ obstack_append_string() [2/2]

static void obstack_append_string ( obstack * ostack,
const char * str,
size_t len )
static
Append STR to OSTACK, without a null-terminator.   

References ggc_alloc().

◆ on_begin_quote()

static void on_begin_quote ( const output_buffer & buf,
unsigned chunk_idx,
const urlifier * urlifier )
static

◆ on_end_quote()

static void on_end_quote ( pretty_printer * pp,
output_buffer & buf,
unsigned chunk_idx,
const urlifier * urlifier )
static

◆ pp_append_r()

static void pp_append_r ( pretty_printer * pp,
const char * start,
int length )
inlinestatic
Append to the output area of PRETTY-PRINTER a string specified by its
STARTing character and LENGTH.   

References output_buffer_append_r(), and pp_buffer.

Referenced by pp_append_text(), pp_emit_prefix(), and pp_unicode_character().

◆ pp_append_text()

void pp_append_text ( pretty_printer * pp,
const char * start,
const char * end )
Append a string delimited by START and END to the output area of
PRETTY-PRINTER.  No line wrapping is done.  However, if beginning a
new line then emit PRETTY-PRINTER's prefix and skip any leading
whitespace if appropriate.  The caller must ensure that it is
safe to do so.   

References end(), pp_append_r(), pp_buffer, pp_emit_prefix(), and pp_is_wrapping_line.

Referenced by dump_fancy_name(), pp_format(), pp_maybe_wrap_text(), pp_tree_identifier(), and pp_wrap_text().

◆ pp_begin_quote()

void pp_begin_quote ( pretty_printer * pp,
bool show_color )
Add a localized open quote, and if SHOW_COLOR is true, begin colorizing
using the "quote" color.   

References colorize_start(), open_quote, and pp_string().

Referenced by decls_mismatched_attributes(), and pp_format().

◆ pp_begin_url()

void pp_begin_url ( pretty_printer * pp,
const char * url )
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, ggc_alloc(), pretty_printer::m_skipping_null_url, pp_string(), pretty_printer::url_format, URL_FORMAT_BEL, URL_FORMAT_NONE, and URL_FORMAT_ST.

Referenced by pp_format(), diagnostic_context::print_any_cwe(), diagnostic_context::print_any_rules(), print_lto_docs_link(), and diagnostic_context::print_option_information().

◆ pp_character()

◆ pp_clear_output_area()

◆ pp_clear_state()

static void pp_clear_state ( pretty_printer * pp)
inlinestatic
Clear PRETTY-PRINTER's output state.   

References pretty_printer::emitted_prefix, and pp_indentation.

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

◆ pp_destroy_prefix()

void pp_destroy_prefix ( pretty_printer * pp)
Free PRETTY-PRINTER's prefix, a previously malloc()'d string.   

References free(), NULL, and pretty_printer::prefix.

Referenced by diagnostic_append_note().

◆ pp_emit_prefix()

◆ pp_end_quote()

void pp_end_quote ( pretty_printer * pp,
bool show_color )
If SHOW_COLOR is true, stop colorizing.
Add a localized close quote.   

References close_quote, colorize_stop(), and pp_string().

Referenced by decls_mismatched_attributes(), and pp_format().

◆ pp_end_url()

◆ pp_flush()

◆ pp_format()

void pp_format ( pretty_printer * pp,
text_info * text,
const urlifier * urlifier )
The following format specifiers are recognized as being client independent:
%d, %i: (signed) integer in base ten.
%u: unsigned integer in base ten.
%o: unsigned integer in base eight.
%x: unsigned integer in base sixteen.
%ld, %li, %lo, %lu, %lx: long versions of the above.
%lld, %lli, %llo, %llu, %llx: long long versions.
%wd, %wi, %wo, %wu, %wx: HOST_WIDE_INT versions.
%zd, %zi, %zo, %zu, %zx: size_t versions.
%td, %ti, %to, %tu, %tx: ptrdiff_t versions.
%f: double
%c: character.
%s: string.
%p: pointer (printed in a host-dependent manner).
%r: if pp_show_color(pp), switch to color identified by const char *.
%R: if pp_show_color(pp), reset color.
%m: strerror(text->err_no) - does not consume a value from args_ptr.
%%: '%'.
%<: opening quote.
%>: closing quote.
%{: URL start.  Consumes a const char * argument for the URL.
%}: URL end.    Does not consume any arguments.
%': apostrophe (should only be used in untranslated messages;
    translations should use appropriate punctuation directly).
%@: diagnostic_event_id_ptr, for which event_id->known_p () must be true.
%.*s: a substring the length of which is specified by an argument
      integer.
%Ns: likewise, but length specified as constant in the format string.
Flag 'q': quote formatted text (must come immediately after '%').
%Z: Requires two arguments - array of int, and len. Prints elements
of the array.

Arguments can be used sequentially, or through %N$ resp. *N$
notation Nth argument after the format string.  If %N$ / *N$
notation is used, it must be used for all arguments, except %m, %%,
%<, %>, %} and %', which may not have a number, as they do not consume
an argument.  When %M$.*N$s is used, M must be N + 1.  (This may
also be written %M$.*s, provided N is not otherwise used.)  The
format string must have conversion specifiers with argument numbers
1 up to highest argument; each argument may only be used once.
A format string can have at most 30 arguments.   
Formatting phases 1 and 2: render TEXT->format_spec plus
text->m_args_ptr into a series of chunks in pp_buffer (PP)->args[].
Phase 3 is in pp_output_formatted_text.

If URLIFIER is non-NULL, then use it to add URLs for quoted
strings, so that e.g.
  "before %<quoted%> after"
with a URLIFIER that has a URL for "quoted" might be emitted as:
  "before `BEGIN_URL(http://example.com)quotedEND_URL' after"
This is handled here for message fragments that are:
- quoted entirely in phase 1 (e.g. "%<this is quoted%>"), or
- quoted entirely in phase 2 (e.g. "%qs"),
Quoted fragments that use a mixture of both phases
(e.g. "%<this is a mixture: %s %>")
are stashed into the output_buffer's m_quotes for use in phase 3.   

References chunk_info::args, output_buffer::chunk_obstack, close_quote, colorize_start(), colorize_stop(), output_buffer::cur_chunk_array, end(), output_buffer::formatted_obstack, gcc_assert, gcc_unreachable, get_end_url_string(), ggc_alloc(), format_postprocessor::handle(), HOST_WIDE_INT_PRINT, HOST_WIDE_INT_PRINT_HEX, HOST_WIDE_INT_PRINT_UNSIGNED, i, output_buffer::line_length, pretty_printer::m_format_postprocessor, output_buffer::obstack, on_begin_quote(), on_end_quote(), open_quote, pp_append_text(), pp_begin_quote(), pp_begin_url(), pp_buffer, pp_character(), pp_clear_state(), pp_comma, pp_decimal_int, pp_double, pp_end_quote(), pp_format_decoder, pp_integer_with_precision, PP_NL_ARGMAX, pp_pointer, pp_quoted_string(), pp_scalar, pp_set_verbatim_wrapping, pp_show_color, pp_space, pp_string(), pp_wide_integer(), and pp_wrapping_mode.

Referenced by simple_diagnostic_path::add_event(), simple_diagnostic_path::add_thread_event(), diagnostic_append_note(), dump_context::dump_printf_va(), opt_problem::opt_problem(), pp_format_verbatim(), pp_printf(), graphviz_out::print(), graphviz_out::println(), and diagnostic_context::report_diagnostic().

◆ pp_format_verbatim()

void pp_format_verbatim ( pretty_printer * pp,
text_info * text )
Helper subroutine of output_verbatim and verbatim. Do the appropriate
settings needed by BUFFER for a verbatim formatting.   

References ggc_alloc(), pp_format(), pp_output_formatted_text(), pp_set_verbatim_wrapping, and pp_wrapping_mode.

Referenced by pp_verbatim(), and verbatim().

◆ pp_formatted_text()

◆ pp_indent()

void pp_indent ( pretty_printer * pp)
Insert enough spaces into the output area of PRETTY-PRINTER to bring
the column position to the current indentation level, assuming that a
newline has just been written to the buffer.   

References i, pp_indentation, and pp_space.

Referenced by pp_emit_prefix(), pp_newline_and_indent(), json::object::print(), and json::array::print().

◆ pp_last_position_in_text()

const char * pp_last_position_in_text ( const pretty_printer * pp)
Return a pointer to the last character emitted in PRETTY-PRINTER's
output area.  A NULL pointer means no character available.   

References output_buffer_last_position_in_text(), and pp_buffer.

◆ pp_maybe_space()

void pp_maybe_space ( pretty_printer * pp)
Maybe print out a whitespace if needed.   

References pretty_printer::padding, pp_none, and pp_space.

◆ pp_maybe_wrap_text()

static void pp_maybe_wrap_text ( pretty_printer * pp,
const char * start,
const char * end )
inlinestatic
Same as pp_wrap_text but wrap text only when in line-wrapping mode.   

References end(), pp_append_text(), pp_is_wrapping_line, and pp_wrap_text().

Referenced by quoting_info::handle_phase_3(), pp_quoted_string(), and pp_string().

◆ pp_newline()

void pp_newline ( pretty_printer * pp)

◆ pp_newline_and_flush()

◆ pp_newline_and_indent()

void pp_newline_and_indent ( pretty_printer * pp,
int n )

◆ pp_output_formatted_text()

◆ pp_printf()

◆ pp_quoted_string()

static void pp_quoted_string ( pretty_printer * pp,
const char * str,
size_t n )
static
Append the leading N characters of STRING to the output area of
PRETTY-PRINTER, quoting in hexadecimal non-printable characters.
Setting N = -1 is as if N were set to strlen (STRING).  The STRING
may be line-wrapped if in appropriate mode.   

References decode_utf8_char(), gcc_checking_assert, ggc_alloc(), last, and pp_maybe_wrap_text().

Referenced by pp_format().

◆ pp_really_flush()

void pp_really_flush ( pretty_printer * pp)
Flush the content of BUFFER onto the attached stream independently
of the value of pp->output_buffer->flush_p.   

References ggc_alloc(), pp_buffer, pp_clear_state(), and pp_write_text_to_stream().

◆ pp_remaining_character_count_for_line()

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

References pretty_printer::maximum_length, and pp_buffer.

Referenced by pp_character(), and pp_wrap_text().

◆ pp_separate_with()

void pp_separate_with ( pretty_printer * pp,
char c )

References pp_character(), and pp_space.

◆ pp_set_line_maximum_length()

void pp_set_line_maximum_length ( pretty_printer * pp,
int length )
Sets the number of maximum characters per line PRETTY-PRINTER can
output in line-wrapping mode.  A LENGTH value 0 suppresses
line-wrapping.   

References pp_line_cutoff, and pp_set_real_maximum_length().

Referenced by common_handle_option().

◆ pp_set_prefix()

◆ pp_set_real_maximum_length()

static void pp_set_real_maximum_length ( pretty_printer * pp)
static
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, ggc_alloc(), pretty_printer::maximum_length, pp_is_wrapping_line, pp_line_cutoff, pp_prefixing_rule, and pretty_printer::prefix.

Referenced by pp_set_line_maximum_length(), and pp_set_prefix().

◆ pp_string()

void pp_string ( pretty_printer * pp,
const char * str )
Append a STRING to the output area of PRETTY-PRINTER; the STRING may
be line-wrapped if in appropriate mode.   

References gcc_checking_assert, ggc_alloc(), and pp_maybe_wrap_text().

Referenced by gcc_rich_location::add_fixit_insert_formatted(), asan_add_global(), asan_dynamic_init_call(), asan_emit_stack_protection(), graphviz_out::begin_td(), graphviz_out::begin_tr(), graphviz_out::begin_trtd(), decls_mismatched_attributes(), default_diagnostic_start_span_fn(), default_tree_printer(), do_niy(), draw_cfg_node(), irange_bitmask::dump(), dump_array_domain(), dump_binary_rhs(), dump_block_node(), dump_decl_name(), digraph< GraphTraits >::dump_dot_to_pp(), dump_function_declaration(), dump_function_name(), dump_generic_node(), dump_gimple_asm(), dump_gimple_assign(), dump_gimple_assume(), dump_gimple_call(), dump_gimple_call_args(), dump_gimple_cond(), dump_gimple_fmt(), dump_gimple_label(), dump_gimple_mem_ops(), dump_gimple_omp_atomic_load(), dump_gimple_omp_atomic_store(), dump_gimple_omp_block(), dump_gimple_omp_continue(), dump_gimple_omp_critical(), dump_gimple_omp_for(), dump_gimple_omp_masked(), dump_gimple_omp_ordered(), dump_gimple_omp_parallel(), dump_gimple_omp_return(), dump_gimple_omp_scan(), dump_gimple_omp_scope(), dump_gimple_omp_sections(), dump_gimple_omp_single(), dump_gimple_omp_target(), dump_gimple_omp_task(), dump_gimple_omp_taskgroup(), dump_gimple_omp_teams(), dump_gimple_phi(), dump_gimple_return(), dump_gimple_switch(), dump_gimple_transaction(), dump_gimple_try(), dump_implicit_edges(), dump_location(), dump_mem_ref(), dump_omp_atomic_memory_order(), dump_omp_clause(), dump_omp_context_selector(), dump_omp_iterators(), dump_omp_loop_non_rect_expr(), dump_ssaname_info(), dump_ternary_rhs(), ana::record_layout::item::dump_to_pp(), ana::one_way_id_map< T >::dump_to_pp(), diagnostic_event::meaning::dump_to_pp(), dump_unary_rhs(), dump_context::emit_item(), dump_pretty_printer::emit_items(), graphviz_out::end_td(), graphviz_out::end_tdtr(), graphviz_out::end_tr(), gimple_dump_bb_for_graph(), pp_begin_quote(), pp_begin_url(), pp_cfg_jump(), pp_double_int(), pp_end_quote(), pp_end_url(), pp_format(), pp_gimple_stmt_1(), pp_output_formatted_text(), pp_points_to_solution(), pp_wide_int_large(), pretty_print_string(), ana::dynamic_call_info_t::print(), ana::rewind_info_t::print(), json::object::print(), json::array::print(), json::float_number::print(), json::integer_number::print(), json::literal::print(), diagnostic_context::print_any_cwe(), diagnostic_context::print_any_rules(), print_call_name(), edited_line::print_content(), print_declaration(), edited_file::print_diff(), edited_file::print_diff_hunk(), print_escaped_json_string(), print_escaped_string(), print_exp(), vrange_printer::print_frange_nan(), print_insn(), print_insn_with_notes(), print_int_bound(), print_irange_bitmasks(), print_lto_docs_link(), diagnostic_context::print_option_information(), print_parseable_fixits(), print_pattern(), vrange_printer::print_real_value(), edited_file::print_run_of_changed_lines(), print_struct_decl(), print_value(), simd_clone_mangle(), start_graph_dump(), ubsan_type_descriptor(), vrange_printer::visit(), vrange_printer::visit(), vrange_printer::visit(), and vrange_printer::visit().

◆ pp_take_prefix()

char * pp_take_prefix ( pretty_printer * pp)

◆ pp_unicode_character()

void pp_unicode_character ( pretty_printer * pp,
unsigned c )
Append code point C to the output area of PRETTY-PRINTER, encoding it
as UTF-8.   

References ggc_alloc(), limits, and pp_append_r().

◆ pp_verbatim()

void pp_verbatim ( pretty_printer * pp,
const char * msg,
... )

◆ pp_wide_integer() [1/4]

template void pp_wide_integer ( pretty_printer * ,
const poly_int64 &  )

◆ pp_wide_integer() [2/4]

template void pp_wide_integer ( pretty_printer * ,
const poly_uint16 &  )

◆ pp_wide_integer() [3/4]

template void pp_wide_integer ( pretty_printer * ,
const poly_uint64 &  )

◆ pp_wide_integer() [4/4]

◆ pp_wrap_text()

static void pp_wrap_text ( pretty_printer * pp,
const char * start,
const char * end )
static
Wrap a text delimited by START and END into PRETTY-PRINTER.   

References end(), ggc_alloc(), pp_append_text(), pp_is_wrapping_line, pp_newline(), pp_remaining_character_count_for_line(), and pp_space.

Referenced by pp_maybe_wrap_text().

◆ pp_write_text_as_dot_label_to_stream()

void pp_write_text_as_dot_label_to_stream ( pretty_printer * pp,
bool for_record )
As pp_write_text_to_stream, but for GraphViz label output.

Flush the formatted text of pretty-printer PP onto the attached stream.
Replace characters in PPF that have special meaning in a GraphViz .dot
file.

This routine is not very fast, but it doesn't have to be as this is only
be used by routines dumping intermediate representations in graph form.   

References fputc(), gcc_assert, ggc_alloc(), pp_buffer, pp_clear_output_area(), and pp_formatted_text().

Referenced by gimple_dump_bb_for_graph(), rtl_dump_bb_for_graph(), and start_graph_dump().

◆ pp_write_text_as_html_like_dot_to_stream()

void pp_write_text_as_html_like_dot_to_stream ( pretty_printer * pp)
As pp_write_text_to_stream, but for GraphViz HTML-like strings.

Flush the formatted text of pretty-printer PP onto the attached stream,
escaping these characters
  " & < >
using XML escape sequences.

http://www.graphviz.org/doc/info/lang.html#html states:
   special XML escape sequences for ", &, <, and > may be necessary in
   order to embed these characters in attribute values or raw text
This doesn't list "'" (which would normally be escaped in XML
as "&apos;" or in HTML as "&#39;");.

Experiments show that escaping "'" doesn't seem to be necessary.   

References fputc(), ggc_alloc(), pp_buffer, pp_clear_output_area(), and pp_formatted_text().

◆ pp_write_text_to_stream()

◆ urlify_quoted_string()

static size_t urlify_quoted_string ( pretty_printer * pp,
obstack * obstack,
const urlifier * urlifier,
size_t quoted_text_start_idx,
size_t quoted_text_end_idx )
static
Given quoted text within the buffer OBSTACK
at the half-open interval [QUOTED_TEXT_START_IDX, QUOTED_TEXT_END_IDX),
potentially use URLIFIER (if non-null) to see if there's a URL for the
quoted text.

If so, replace the quoted part of the text in the buffer with a URLified
version of the text, using PP's settings.

For example, given this is the buffer:
  "this is a test `hello worldTRAILING-CONTENT"
  .................^~~~~~~~~~~
with the quoted text starting at the 'h' of "hello world", the buffer
becomes:
  "this is a test `BEGIN_URL(URL)hello worldEND(URL)TRAILING-CONTENT"
  .................^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  .................-----------replacement-----------

Return the new offset into the buffer of the quoted text endpoint i.e.
the offset of "TRAILING-CONTENT" in the above.   

References free(), gcc_unreachable, get_end_url_string(), urlifier::get_url_for_quoted_text(), ggc_alloc(), obstack, obstack_append_string(), pretty_printer::url_format, URL_FORMAT_BEL, URL_FORMAT_NONE, and URL_FORMAT_ST.

Referenced by quoting_info::handle_phase_3(), and quoting_info::on_end_quote().

Variable Documentation

◆ identifier_to_locale_alloc

void *(* identifier_to_locale_alloc) (size_t) ( size_t ) = xmalloc
Allocator for identifier_to_locale and corresponding function to
free memory.   

Referenced by general_init(), and identifier_to_locale().

◆ identifier_to_locale_free

void(* identifier_to_locale_free) (void *) ( void * ) = free