OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / pretty-print.h
index 585b1d5..3ba5035 100644 (file)
@@ -1,5 +1,5 @@
 /* Various declarations for language-independent pretty-print subroutines.
-   Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
    Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
 
 This file is part of GCC.
@@ -35,6 +35,7 @@ typedef struct
   va_list *args_ptr;
   int err_no;  /* for %m */
   location_t *locus;
+  tree *abstract_origin;
 } text_info;
 
 /* How often diagnostics are prefixed by their locations:
@@ -70,9 +71,9 @@ struct chunk_info
 
 /* The output buffer datatype.  This is best seen as an abstract datatype
    whose fields should not be accessed directly by clients.  */
-typedef struct 
+typedef struct
 {
-  /* Obstack where the text is built up.  */  
+  /* Obstack where the text is built up.  */
   struct obstack formatted_obstack;
 
   /* Obstack containing a chunked representation of the format
@@ -89,7 +90,7 @@ typedef struct
   /* Where to output formatted text.  */
   FILE *stream;
 
-  /* The amount of characters output so far.  */  
+  /* The amount of characters output so far.  */
   int line_length;
 
   /* This must be large enough to hold any printed integer or
@@ -113,7 +114,7 @@ typedef struct
   diagnostic_prefixing_rule_t rule;
 
   /* The ideal upper bound of number of characters per line, as suggested
-     by front-end.  */  
+     by front-end.  */
   int line_cutoff;
 } pp_wrapping_mode_t;
 
@@ -139,14 +140,18 @@ typedef bool (*printer_fn) (pretty_printer *, text_info *, const char *,
 
 /* TRUE if a newline character needs to be added before further
    formatting.  */
-#define pp_needs_newline(PP)  pp_base (PP)->need_newline 
+#define pp_needs_newline(PP)  pp_base (PP)->need_newline
 
-/* True if PRETTY-PTINTER is in line-wrapping mode.  */
+/* True if PRETTY-PRINTER is in line-wrapping mode.  */
 #define pp_is_wrapping_line(PP) (pp_line_cutoff (PP) > 0)
 
 /* The amount of whitespace to be emitted when starting a new line.  */
 #define pp_indentation(PP) pp_base (PP)->indent_skip
 
+/* True if identifiers are translated to the locale character set on
+   output.  */
+#define pp_translate_identifiers(PP) pp_base (PP)->translate_identifiers
+
 /* The data structure that contains the bare minimum required to do
    proper pretty-printing.  Clients may derived from this structure
    and add additional fields they need.  */
@@ -157,12 +162,12 @@ struct pretty_print_info
 
   /* The prefix for each new line.  */
   const char *prefix;
-  
+
   /* Where to put whitespace around the entity being formatted.  */
   pp_padding padding;
-  
+
   /* The real upper bound of number of characters per line, taking into
-     account the case of a very very looong prefix.  */  
+     account the case of a very very looong prefix.  */
   int maximum_length;
 
   /* Indentation count.  */
@@ -186,6 +191,10 @@ struct pretty_print_info
 
   /* Nonzero means one should emit a newline before outputting anything.  */
   bool need_newline;
+
+  /* Nonzero means identifiers are translated to the locale character
+     set on output.  */
+  bool translate_identifiers;
 };
 
 #define pp_set_line_maximum_length(PP, L) \
@@ -272,10 +281,11 @@ struct pretty_print_info
    pp_scalar (PP, HOST_WIDEST_INT_PRINT_DEC, (HOST_WIDEST_INT) I)
 #define pp_pointer(PP, P)      pp_scalar (PP, "%p", P)
 
-#define pp_identifier(PP, ID)  pp_string (PP, ID)
+#define pp_identifier(PP, ID)  pp_string (PP, (pp_translate_identifiers (PP) \
+                                         ? identifier_to_locale (ID)   \
+                                         : (ID)))
 #define pp_tree_identifier(PP, T)                      \
-  pp_append_text(PP, IDENTIFIER_POINTER (T), \
-                 IDENTIFIER_POINTER (T) + IDENTIFIER_LENGTH (T))
+  pp_base_tree_identifier (pp_base (PP), T)
 
 #define pp_unsupported_tree(PP, T)                         \
   pp_verbatim (pp_base (PP), "#%qs not supported by %s#", \
@@ -321,6 +331,7 @@ extern void pp_base_character (pretty_printer *, int);
 extern void pp_base_string (pretty_printer *, const char *);
 extern void pp_write_text_to_stream (pretty_printer *pp);
 extern void pp_base_maybe_space (pretty_printer *);
+extern void pp_base_tree_identifier (pretty_printer *, tree);
 
 /* Switch into verbatim mode and return the old mode.  */
 static inline pp_wrapping_mode_t
@@ -333,4 +344,6 @@ pp_set_verbatim_wrapping_ (pretty_printer *pp)
 }
 #define pp_set_verbatim_wrapping(PP) pp_set_verbatim_wrapping_ (pp_base (PP))
 
+extern const char *identifier_to_locale (const char *);
+
 #endif /* GCC_PRETTY_PRINT_H */