c-lang.c: #include diagnostic.h
authorGabriel Dos Reis <gdr@codesourcery.com>
Sun, 20 Aug 2000 14:57:16 +0000 (14:57 +0000)
committerGabriel Dos Reis <gdr@gcc.gnu.org>
Sun, 20 Aug 2000 14:57:16 +0000 (14:57 +0000)
* c-lang.c: #include diagnostic.h
(c_tree_printer): New function.
(lang_init): Initialize lang_printer.

* Makefile.in (c-lang.o): Depends on diagnostic.h

From-SVN: r35818

gcc/ChangeLog
gcc/Makefile.in
gcc/c-lang.c

index 45db7463449af84ed5f920a8276b45effbd82eb0..3a3bc0aa1413b6b86f59d83f0fdf863268f631c9 100644 (file)
@@ -1,3 +1,11 @@
+2000-08-20  Gabriel Dos Reis  <gdr@codesourcery.com>
+
+       * c-lang.c: #include diagnostic.h
+       (c_tree_printer): New function.
+       (lang_init): Initialize lang_printer.
+
+       * Makefile.in (c-lang.o): Depends on diagnostic.h
+
 2000-08-20  Gabriel Dos Reis  <gdr@codesourcery.com>
 
        * c-errors.c (pedwarn_c99): Adjust call to report_diagnostic.
index ef7d01a86b7165c9b6147070b2cd28b68a2366dc..a4ed78b3a717c81305feb24aee042e56c9539001 100644 (file)
@@ -1102,7 +1102,7 @@ c-decl.o : c-decl.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) c-tree.h \
 c-typeck.o : c-typeck.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h \
     flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h
 c-lang.o : c-lang.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h \
-    $(GGC_H)  c-lex.h toplev.h output.h function.h
+    $(GGC_H)  c-lex.h toplev.h diagnostic.h output.h function.h
 c-lex.o : c-lex.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) c-lex.h c-tree.h \
     c-common.h $(srcdir)/c-parse.h $(srcdir)/c-gperf.h c-pragma.h input.h \
     intl.h flags.h toplev.h output.h mbchar.h $(GGC_H)
index 504f342c70f536233cd2f69160d66d0694928c7a..ab28b0d44cedfdbfe160b2a68f1eaf1688eee4c7 100644 (file)
@@ -28,10 +28,13 @@ Boston, MA 02111-1307, USA.  */
 #include "c-tree.h"
 #include "c-lex.h"
 #include "toplev.h"
+#include "diagnostic.h"
 #include "output.h"
 #include "flags.h"
 #include "ggc.h"
 
+static int c_tree_printer PARAMS ((output_buffer *));
+
 #if USE_CPPLIB
 #include "cpplib.h"
 extern char *yy_cur;
@@ -92,6 +95,8 @@ lang_init ()
   restore_lang_status = &pop_c_function_context;
   mark_lang_status = &mark_c_function_context;
 
+  lang_printer = c_tree_printer;
+
   c_parse_init ();
 }
 
@@ -240,3 +245,38 @@ finish_file ()
     }
 #endif
 }
+
+/* Called during diagnostic message formatting process to print a
+   source-level entity onto BUFFER.  The meaning of the format specifiers
+   is as follows:
+   %D: a general decl,
+   %F: a function declaration,
+   %T: a type.
+
+   These format specifiers form a subset of the format specifiers set used
+   by the C++ front-end.
+   Please notice when called, the `%' part was already skipped by the
+   diagnostic machinery.  */
+static int
+c_tree_printer (buffer)
+     output_buffer *buffer;
+{
+  tree t = va_arg (output_buffer_format_args (buffer), tree);
+
+  switch (*output_buffer_text_cursor (buffer))
+    {
+    case 'D':
+    case 'F':
+    case 'T':
+      {
+        const char *n = DECL_NAME (t)
+          ? (*decl_printable_name) (t, 2)
+          : "({anonymous})";
+        output_add_string (buffer, n);
+      }
+      return 1;
+
+    default:
+      return 0;
+    }
+}