c-pretty-print.h revision 117395
1/* Various declarations for the C and C++ pretty-printers. 2 Copyright (C) 2002 Free Software Foundation, Inc. 3 Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net> 4 5This file is part of GCC. 6 7GCC is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free 9Software Foundation; either version 2, or (at your option) any later 10version. 11 12GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13WARRANTY; without even the implied warranty of MERCHANTABILITY or 14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15for more details. 16 17You should have received a copy of the GNU General Public License 18along with GCC; see the file COPYING. If not, write to the Free 19Software Foundation, 59 Temple Place - Suite 330, Boston, MA 2002111-1307, USA. */ 21 22#ifndef GCC_C_PRETTY_PRINTER 23#define GCC_C_PRETTY_PRINTER 24 25#include "tree.h" 26#include "c-common.h" 27#include "pretty-print.h" 28 29 30/* The data type used to bundle information necessary for pretty-printing 31 a C or C++ entity. */ 32typedef struct c_pretty_print_info *c_pretty_printer; 33 34/* The type of a C pretty-printer 'member' function. */ 35typedef void (*c_pretty_print_fn) PARAMS ((c_pretty_printer, tree)); 36 37struct c_pretty_print_info 38{ 39 struct pretty_print_info base; 40 /* Points to the first element of an array of offset-list. 41 Not used yet. */ 42 int *offset_list; 43 44 /* These must be overriden by each of the C and C++ front-end to 45 reflect their understanding of syntatic productions when they differ. */ 46 c_pretty_print_fn declaration; 47 c_pretty_print_fn declaration_specifiers; 48 c_pretty_print_fn type_specifier; 49 c_pretty_print_fn declarator; 50 c_pretty_print_fn direct_declarator; 51 c_pretty_print_fn parameter_declaration; 52 c_pretty_print_fn type_id; 53 54 c_pretty_print_fn statement; 55 56 c_pretty_print_fn primary_expression; 57 c_pretty_print_fn postfix_expression; 58 c_pretty_print_fn unary_expression; 59 c_pretty_print_fn initializer; 60 c_pretty_print_fn multiplicative_expression; 61 c_pretty_print_fn conditional_expression; 62 c_pretty_print_fn assignment_expression; 63}; 64 65#define pp_c_left_paren(PPI) \ 66 do { \ 67 pp_left_paren (PPI); \ 68 pp_c_base (PPI)->base.padding = pp_none; \ 69 } while (0) 70#define pp_c_right_paren(PPI) \ 71 do { \ 72 pp_right_paren (PPI); \ 73 pp_c_base (PPI)->base.padding = pp_none; \ 74 } while (0) 75#define pp_c_left_bracket(PPI) \ 76 do { \ 77 pp_left_bracket (PPI); \ 78 pp_c_base (PPI)->base.padding = pp_none; \ 79 } while (0) 80#define pp_c_right_bracket(PPI) \ 81 do { \ 82 pp_right_bracket (PPI); \ 83 pp_c_base (PPI)->base.padding = pp_none; \ 84 } while (0) 85#define pp_c_whitespace(PPI) \ 86 do { \ 87 pp_whitespace (PPI); \ 88 pp_c_base (PPI)->base.padding = pp_none; \ 89 } while (0) 90#define pp_c_maybe_whitespace(PPI) \ 91 do { \ 92 if (pp_c_base (PPI)->base.padding != pp_none) \ 93 pp_c_whitespace (PPI); \ 94 } while (0) 95#define pp_c_identifier(PPI, ID) \ 96 do { \ 97 pp_c_maybe_whitespace (PPI); \ 98 pp_identifier (PPI, ID); \ 99 pp_c_base (PPI)->base.padding = pp_before; \ 100 } while (0) 101 102#define pp_c_tree_identifier(PPI, ID) \ 103 pp_c_identifier (PPI, IDENTIFIER_POINTER (ID)) 104 105/* Returns the 'output_buffer *' associated with a PRETTY-PRINTER, the latter 106 being something digestible by pp_c_base. */ 107#define pp_buffer(PPI) pp_c_base (PPI)->base.buffer 108 109#define pp_declaration(PPI, T) \ 110 (*pp_c_base (PPI)->declaration) (pp_c_base (PPI), T) 111#define pp_declaration_specifiers(PPI, D) \ 112 (*pp_c_base (PPI)->declaration_specifiers) (pp_c_base (PPI), D) 113#define pp_type_specifier(PPI, D) \ 114 (*pp_c_base (PPI)->type_specifier) (pp_c_base (PPI), D) 115#define pp_declarator(PPI, D) \ 116 (*pp_c_base (PPI)->declarator) (pp_c_base (PPI), D) 117#define pp_direct_declarator(PPI, D) \ 118 (*pp_c_base (PPI)->direct_declarator) (pp_c_base (PPI), D) 119#define pp_parameter_declaration(PPI, T) \ 120 (*pp_c_base (PPI)->parameter_declaration) (pp_c_base (PPI), T) 121#define pp_type_id(PPI, D) \ 122 (*pp_c_base (PPI)->type_id) (pp_c_base (PPI), D) 123 124#define pp_statement(PPI, S) \ 125 (*pp_c_base (PPI)->statement) (pp_c_base (PPI), S) 126 127#define pp_primary_expression(PPI, E) \ 128 (*pp_c_base (PPI)->primary_expression) (pp_c_base (PPI), E) 129#define pp_postfix_expression(PPI, E) \ 130 (*pp_c_base (PPI)->postfix_expression) (pp_c_base (PPI), E) 131#define pp_unary_expression(PPI, E) \ 132 (*pp_c_base (PPI)->unary_expression) (pp_c_base (PPI), E) 133#define pp_initializer(PPI, E) \ 134 (*pp_c_base (PPI)->initializer) (pp_c_base (PPI), E) 135#define pp_multiplicative_expression(PPI, E) \ 136 (*pp_c_base (PPI)->multiplicative_expression) (pp_c_base (PPI), E) 137#define pp_conditional_expression(PPI, E) \ 138 (*pp_c_base (PPI)->conditional_expression) (pp_c_base (PPI), E) 139#define pp_assignment_expression(PPI, E) \ 140 (*pp_c_base (PPI)->assignment_expression) (pp_c_base (PPI), E) 141 142 143/* Returns the c_pretty_printer base object of PRETTY-PRINTER. This 144 macro must be overriden by any subclass of c_pretty_print_info. */ 145#define pp_c_base(PP) (PP) 146 147extern void pp_c_pretty_printer_init PARAMS ((c_pretty_printer)); 148 149/* Declarations. */ 150void pp_c_attributes PARAMS ((c_pretty_printer, tree)); 151void pp_c_cv_qualifier PARAMS ((c_pretty_printer, int)); 152void pp_c_parameter_declaration_clause PARAMS ((c_pretty_printer, tree)); 153void pp_c_declaration PARAMS ((c_pretty_printer, tree)); 154/* Statements. */ 155void pp_c_statement PARAMS ((c_pretty_printer, tree)); 156/* Expressions. */ 157void pp_c_expression PARAMS ((c_pretty_printer, tree)); 158void pp_c_logical_or_expression PARAMS ((c_pretty_printer, tree)); 159void pp_c_expression_list PARAMS ((c_pretty_printer, tree)); 160void pp_c_cast_expression PARAMS ((c_pretty_printer, tree)); 161void pp_c_postfix_expression PARAMS ((c_pretty_printer, tree)); 162void pp_c_initializer PARAMS ((c_pretty_printer, tree)); 163void pp_c_literal PARAMS ((c_pretty_printer, tree)); 164 165#endif /* GCC_C_PRETTY_PRINTER */ 166