00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef GCC_C_PRETTY_PRINTER
00023 #define GCC_C_PRETTY_PRINTER
00024
00025 #include "tree.h"
00026 #include "c-common.h"
00027 #include "pretty-print.h"
00028
00029
00030
00031
00032 typedef struct c_pretty_print_info *c_pretty_printer;
00033
00034
00035 typedef void (*c_pretty_print_fn) PARAMS ((c_pretty_printer, tree));
00036
00037 struct c_pretty_print_info
00038 {
00039 struct pretty_print_info base;
00040
00041
00042 int *offset_list;
00043
00044
00045
00046 c_pretty_print_fn declaration;
00047 c_pretty_print_fn declaration_specifiers;
00048 c_pretty_print_fn type_specifier;
00049 c_pretty_print_fn declarator;
00050 c_pretty_print_fn direct_declarator;
00051 c_pretty_print_fn parameter_declaration;
00052 c_pretty_print_fn type_id;
00053
00054 c_pretty_print_fn statement;
00055
00056 c_pretty_print_fn primary_expression;
00057 c_pretty_print_fn postfix_expression;
00058 c_pretty_print_fn unary_expression;
00059 c_pretty_print_fn initializer;
00060 c_pretty_print_fn multiplicative_expression;
00061 c_pretty_print_fn conditional_expression;
00062 c_pretty_print_fn assignment_expression;
00063 };
00064
00065 #define pp_c_left_paren(PPI) \
00066 do { \
00067 pp_left_paren (PPI); \
00068 pp_c_base (PPI)->base.padding = pp_none; \
00069 } while (0)
00070 #define pp_c_right_paren(PPI) \
00071 do { \
00072 pp_right_paren (PPI); \
00073 pp_c_base (PPI)->base.padding = pp_none; \
00074 } while (0)
00075 #define pp_c_left_bracket(PPI) \
00076 do { \
00077 pp_left_bracket (PPI); \
00078 pp_c_base (PPI)->base.padding = pp_none; \
00079 } while (0)
00080 #define pp_c_right_bracket(PPI) \
00081 do { \
00082 pp_right_bracket (PPI); \
00083 pp_c_base (PPI)->base.padding = pp_none; \
00084 } while (0)
00085 #define pp_c_whitespace(PPI) \
00086 do { \
00087 pp_whitespace (PPI); \
00088 pp_c_base (PPI)->base.padding = pp_none; \
00089 } while (0)
00090 #define pp_c_maybe_whitespace(PPI) \
00091 do { \
00092 if (pp_c_base (PPI)->base.padding != pp_none) \
00093 pp_c_whitespace (PPI); \
00094 } while (0)
00095 #define pp_c_identifier(PPI, ID) \
00096 do { \
00097 pp_c_maybe_whitespace (PPI); \
00098 pp_identifier (PPI, ID); \
00099 pp_c_base (PPI)->base.padding = pp_before; \
00100 } while (0)
00101
00102 #define pp_c_tree_identifier(PPI, ID) \
00103 pp_c_identifier (PPI, IDENTIFIER_POINTER (ID))
00104
00105
00106
00107 #define pp_buffer(PPI) pp_c_base (PPI)->base.buffer
00108
00109 #define pp_declaration(PPI, T) \
00110 (*pp_c_base (PPI)->declaration) (pp_c_base (PPI), T)
00111 #define pp_declaration_specifiers(PPI, D) \
00112 (*pp_c_base (PPI)->declaration_specifiers) (pp_c_base (PPI), D)
00113 #define pp_type_specifier(PPI, D) \
00114 (*pp_c_base (PPI)->type_specifier) (pp_c_base (PPI), D)
00115 #define pp_declarator(PPI, D) \
00116 (*pp_c_base (PPI)->declarator) (pp_c_base (PPI), D)
00117 #define pp_direct_declarator(PPI, D) \
00118 (*pp_c_base (PPI)->direct_declarator) (pp_c_base (PPI), D)
00119 #define pp_parameter_declaration(PPI, T) \
00120 (*pp_c_base (PPI)->parameter_declaration) (pp_c_base (PPI), T)
00121 #define pp_type_id(PPI, D) \
00122 (*pp_c_base (PPI)->type_id) (pp_c_base (PPI), D)
00123
00124 #define pp_statement(PPI, S) \
00125 (*pp_c_base (PPI)->statement) (pp_c_base (PPI), S)
00126
00127 #define pp_primary_expression(PPI, E) \
00128 (*pp_c_base (PPI)->primary_expression) (pp_c_base (PPI), E)
00129 #define pp_postfix_expression(PPI, E) \
00130 (*pp_c_base (PPI)->postfix_expression) (pp_c_base (PPI), E)
00131 #define pp_unary_expression(PPI, E) \
00132 (*pp_c_base (PPI)->unary_expression) (pp_c_base (PPI), E)
00133 #define pp_initializer(PPI, E) \
00134 (*pp_c_base (PPI)->initializer) (pp_c_base (PPI), E)
00135 #define pp_multiplicative_expression(PPI, E) \
00136 (*pp_c_base (PPI)->multiplicative_expression) (pp_c_base (PPI), E)
00137 #define pp_conditional_expression(PPI, E) \
00138 (*pp_c_base (PPI)->conditional_expression) (pp_c_base (PPI), E)
00139 #define pp_assignment_expression(PPI, E) \
00140 (*pp_c_base (PPI)->assignment_expression) (pp_c_base (PPI), E)
00141
00142
00143
00144
00145 #define pp_c_base(PP) (PP)
00146
00147 extern void pp_c_pretty_printer_init PARAMS ((c_pretty_printer));
00148
00149
00150 void pp_c_attributes PARAMS ((c_pretty_printer, tree));
00151 void pp_c_cv_qualifier PARAMS ((c_pretty_printer, int));
00152 void pp_c_parameter_declaration_clause PARAMS ((c_pretty_printer, tree));
00153 void pp_c_declaration PARAMS ((c_pretty_printer, tree));
00154
00155 void pp_c_statement PARAMS ((c_pretty_printer, tree));
00156
00157 void pp_c_expression PARAMS ((c_pretty_printer, tree));
00158 void pp_c_logical_or_expression PARAMS ((c_pretty_printer, tree));
00159 void pp_c_expression_list PARAMS ((c_pretty_printer, tree));
00160 void pp_c_cast_expression PARAMS ((c_pretty_printer, tree));
00161 void pp_c_postfix_expression PARAMS ((c_pretty_printer, tree));
00162 void pp_c_initializer PARAMS ((c_pretty_printer, tree));
00163 void pp_c_literal PARAMS ((c_pretty_printer, tree));
00164
00165 #endif