pretty-print.h revision 117395
1117395Skan/* Various declarations for language-independent pretty-print subroutines. 2117395Skan Copyright (C) 2002 Free Software Foundation, Inc. 3117395Skan Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net> 4117395Skan 5117395SkanThis file is part of GCC. 6117395Skan 7117395SkanGCC is free software; you can redistribute it and/or modify it under 8117395Skanthe terms of the GNU General Public License as published by the Free 9117395SkanSoftware Foundation; either version 2, or (at your option) any later 10117395Skanversion. 11117395Skan 12117395SkanGCC is distributed in the hope that it will be useful, but WITHOUT ANY 13117395SkanWARRANTY; without even the implied warranty of MERCHANTABILITY or 14117395SkanFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15117395Skanfor more details. 16117395Skan 17117395SkanYou should have received a copy of the GNU General Public License 18117395Skanalong with GCC; see the file COPYING. If not, write to the Free 19117395SkanSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA 20117395Skan02111-1307, USA. */ 21117395Skan 22117395Skan#ifndef GCC_PRETTY_PRINT_H 23117395Skan#define GCC_PRETTY_PRINT_H 24117395Skan 25117395Skan#include "diagnostic.h" 26117395Skan 27117395Skan/* The type of pretty-printer flags passed to clients. */ 28117395Skantypedef unsigned int pp_flags; 29117395Skan 30117395Skantypedef enum 31117395Skan{ 32117395Skan pp_none, pp_before, pp_after 33117395Skan} pp_padding; 34117395Skan 35117395Skanstruct pretty_print_info 36117395Skan{ 37117395Skan /* Where we print external representation of ENTITY. */ 38117395Skan output_buffer *buffer; 39117395Skan pp_flags flags; 40117395Skan /* Where to put whitespace around the entity being formatted. */ 41117395Skan pp_padding padding; 42117395Skan}; 43117395Skan 44117395Skan#define pp_left_paren(PPI) output_add_character (pp_buffer (PPI), '(') 45117395Skan#define pp_right_paren(PPI) output_add_character (pp_buffer (PPI), ')') 46117395Skan#define pp_left_bracket(PPI) output_add_character (pp_buffer (PPI), '[') 47117395Skan#define pp_right_bracket(PPI) output_add_character (pp_buffer (PPI), ']') 48117395Skan#define pp_left_brace(PPI) output_add_character (pp_buffer (PPI), '{') 49117395Skan#define pp_right_brace(PPI) output_add_character (pp_buffer (PPI), '}') 50117395Skan#define pp_semicolon(PPI) output_add_character (pp_buffer (PPI), ';') 51117395Skan#define pp_comma(PPI) output_add_string (pp_buffer (PPI), ", ") 52117395Skan#define pp_dot(PPI) output_add_character (pp_buffer (PPI), '.') 53117395Skan#define pp_colon(PPI) output_add_character (pp_buffer (PPI), ':') 54117395Skan#define pp_colon_colon(PPI) output_add_string (pp_buffer (PPI), "::") 55117395Skan#define pp_arrow(PPI) output_add_string (pp_buffer (PPI), "->") 56117395Skan#define pp_equal(PPI) output_add_character (pp_buffer (PPI), '=') 57117395Skan#define pp_question(PPI) output_add_character (pp_buffer (PPI), '?') 58117395Skan#define pp_bar(PPI) output_add_character (pp_buffer (PPI), '|') 59117395Skan#define pp_carret(PPI) output_add_character (pp_buffer (PPI), '^') 60117395Skan#define pp_ampersand(PPI) output_add_character (pp_buffer (PPI), '&') 61117395Skan#define pp_less(PPI) output_add_character (pp_buffer (PPI), '<') 62117395Skan#define pp_greater(PPI) output_add_character (pp_buffer (PPI), '>') 63117395Skan#define pp_plus(PPI) output_add_character (pp_buffer (PPI), '+') 64117395Skan#define pp_minus(PPI) output_add_character (pp_buffer (PPI), '-') 65117395Skan#define pp_star(PPI) output_add_character (pp_buffer (PPI), '*') 66117395Skan#define pp_slash(PPI) output_add_character (pp_buffer (PPI), '/') 67117395Skan#define pp_modulo(PPI) output_add_character (pp_buffer (PPI), '%') 68117395Skan#define pp_exclamation(PPI) output_add_character (pp_buffer (PPI), '!') 69117395Skan#define pp_complement(PPI) output_add_character (pp_buffer (PPI), '~') 70117395Skan#define pp_quote(PPI) output_add_character (pp_buffer (PPI), '\'') 71117395Skan#define pp_backquote(PPI) output_add_character (pp_buffer (PPI), '`') 72117395Skan#define pp_doublequote(PPI) output_add_character (pp_buffer (PPI), '"') 73117395Skan#define pp_newline(PPI) output_add_newline (pp_buffer (PPI)) 74117395Skan#define pp_character(PPI, C) output_add_character (pp_buffer (PPI), C) 75117395Skan#define pp_whitespace(PPI) output_add_space (pp_buffer (PPI)) 76117395Skan#define pp_indentation(PPI) output_indentation (pp_buffer (PPI)) 77117395Skan#define pp_newline_and_indent(PPI, N) \ 78117395Skan do { \ 79117395Skan pp_indentation (PPI) += N; \ 80117395Skan pp_newline (PPI); \ 81117395Skan } while (0) 82117395Skan#define pp_separate_with(PPI, C) \ 83117395Skan do { \ 84117395Skan pp_character (PPI, C); \ 85117395Skan pp_whitespace (PPI); \ 86117395Skan } while (0) 87117395Skan#define pp_format_scalar(PPI, F, S) \ 88117395Skan output_formatted_scalar (pp_buffer (PPI), F, S) 89117395Skan#define pp_wide_integer(PPI, I) \ 90117395Skan pp_format_scalar (PPI, HOST_WIDE_INT_PRINT_DEC, (HOST_WIDE_INT) I) 91117395Skan#define pp_pointer(PPI, P) pp_format_scalar (PPI, "%p", p) 92117395Skan 93117395Skan#define pp_identifier(PPI, ID) output_add_string (pp_buffer (PPI), ID) 94117395Skan#define pp_tree_identifier(PPI, T) pp_identifier(PPI, IDENTIFIER_POINTER (T)) 95117395Skan 96117395Skan#define pp_unsupported_tree(PPI, T) \ 97117395Skan output_verbatim (pp_buffer(PPI), "#`%s' not supported by %s#",\ 98117395Skan tree_code_name[(int) TREE_CODE (T)], __FUNCTION__) 99117395Skan 100117395Skan#endif /* GCC_PRETTY_PRINT_H */ 101