Makefile.in: (JAVA_OBJS) Added entry xref.o.
authorAlexandre Petit-Bianco <apbianco@cygnus.com>
Mon, 22 Mar 1999 19:57:37 +0000 (19:57 +0000)
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>
Mon, 22 Mar 1999 19:57:37 +0000 (11:57 -0800)
1999-03-22  Alexandre Petit-Bianco  <apbianco@cygnus.com>
* Makefile.in: (JAVA_OBJS) Added entry xref.o.
(xref.o): New rule.
* java-tree.h (flag_emit_xref): Declared extern.
* lang.c: (xref.h): Included.
(flag_emit_xref): New global variable.
(lang_decode_option): Added support for -fxref.
* xref.c: Created.
* xref.h: Likewise.

From-SVN: r25907

gcc/java/ChangeLog
gcc/java/Makefile.in
gcc/java/java-tree.h
gcc/java/lang.c
gcc/java/xref.c [new file with mode: 0644]
gcc/java/xref.h [new file with mode: 0644]

index cbd0633..5d6b345 100644 (file)
@@ -1,3 +1,14 @@
+1999-03-22  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+
+       * Makefile.in: (JAVA_OBJS) Added entry xref.o.
+       (xref.o): New rule.
+       * java-tree.h (flag_emit_xref): Declared extern.
+       * lang.c: (xref.h): Included.
+       (flag_emit_xref): New global variable.
+       (lang_decode_option): Added support for -fxref.
+       * xref.c: Created.
+       * xref.h: Likewise.
+
 1999-03-21  Manfred Hollstein  <manfred@s-direktnet.de>
 
        * Make-lang.in ($(GCJ)$(exeext)): Add intl.o to list of files to be
index 5e50dfe..f7373d6 100644 (file)
@@ -175,7 +175,7 @@ INCLUDES = -I. -I.. -I$(srcdir) -I$(srcdir)/.. -I$(srcdir)/../config -I$(srcdir)
 #
 JAVA_OBJS = parse.o class.o decl.o expr.o constants.o lang.o typeck.o \
   except.o verify.o zextract.o jcf-io.o jcf-parse.o mangle.o jcf-write.o \
-  buffer.o check-init.o jcf-depend.o jcf-path.o
+  buffer.o check-init.o jcf-depend.o jcf-path.o xref.o
 
 JAVA_OBJS_LITE = parse-scan.o jv-scan.o
 
@@ -315,5 +315,7 @@ typeck.o : typeck.c $(CONFIG_H) $(JAVA_TREE_H) jcf.h convert.h \
   $(srcdir)/../toplev.h $(srcdir)/../system.h
 verify.o : verify.c $(CONFIG_H) $(JAVA_TREE_H) jcf.h javaop.h java-opcodes.h \
   java-except.h $(srcdir)/../toplev.h $(srcdir)/../system.h
+xref.o : xref.h $(CONFIG_H) $(JAVA_TREE_H) $(srcdir)/../toplev.h \
+  $(srcdir)/../system.h
 zextract.o : zextract.c $(CONFIG_H) $(srcdir)/../system.h zipfile.h
 
index b9501ad..068eff2 100644 (file)
@@ -127,6 +127,11 @@ extern int flag_assume_compiled;
 
 extern int flag_emit_class_files;
 
+/* When non zero, we emit xref strings. Values of the flag for xref
+   backends are defined in xref.h.  */
+
+extern int flag_emit_xref;
+
 /* Turned to 1 if -Wall was encountered. See lang.c for their meanings.  */
 extern int flag_wall;
 extern int flag_redundant;
index f86640e..85b2bfe 100644 (file)
@@ -32,6 +32,7 @@ The Free Software Foundation is independent of Sun Microsystems, Inc.  */
 #include "jcf.h"
 #include "toplev.h"
 #include "flags.h"
+#include "xref.h"
 
 #ifndef OBJECT_SUFFIX
 # define OBJECT_SUFFIX ".o"
@@ -87,6 +88,11 @@ int flag_assume_compiled = 1;
 
 int flag_emit_class_files = 0;
 
+/* When non zero, we emit xref strings. Values of the flag for xref
+   backends are defined in xref_flag_table, xref.c.  */
+
+int flag_emit_xref = 0;
+
 /* When non zero, -Wall was turned on.  */
 int flag_wall = 0;
 
@@ -168,6 +174,16 @@ lang_decode_option (argc, argv)
     }
 #undef ARG
 
+#define XARG "-fxref="
+  if (strncmp (p, XARG, sizeof (XARG) - 1) == 0)
+    {
+      if (!(flag_emit_xref = xref_flag_value (p + sizeof (XARG) - 1)))
+       {
+         error ("Unkown xref back end `%s'", p + sizeof (XARG) - 1);
+       }
+    }
+#undef XARG
+
   if (p[0] == '-' && p[1] == 'f')
     {
       /* Some kind of -f option.
diff --git a/gcc/java/xref.c b/gcc/java/xref.c
new file mode 100644 (file)
index 0000000..1276806
--- /dev/null
@@ -0,0 +1,72 @@
+/* Write cross reference information extracted from Java(TM)
+   source and bytecode files, in one of formats documented below.
+   Copyright (C) 1999 Free Software Foundation, Inc.
+   Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+
+Java and all Java-based marks are trademarks or registered trademarks
+of Sun Microsystems, Inc. in the United States and other countries.
+The Free Software Foundation is independent of Sun Microsystems, Inc.  */
+
+#include <stdio.h>
+#include "config.h"
+#include "tree.h"
+#include "java-tree.h"
+#include "xref.h"
+
+
+static xref_flag_table xref_table [] = {
+  {NULL, NULL, NULL},
+};
+
+/* Decode an xref flag value. Return 0 if the flag wasn't found. */
+
+int xref_flag_value (flag)
+     char *flag;
+{
+  int i;
+  for (i = 0; xref_table [i].key; i++)
+    if (!strcmp (flag, xref_table [i].key))
+      return i+1;
+  return 0;
+}
+
+/* Branch to the right xref "back-end".  */
+
+void
+expand_xref (node)
+     tree node;
+{
+  /* Maintain these two cached. */
+  static FILE *fp = NULL;
+  static void (*current_expand) PROTO ((FILE *, tree)) = NULL;
+
+  if ( !flag_emit_xref )
+    return;
+
+  if (!fp)
+    fp = xref_table [flag_emit_xref-1].fp;
+  if (!current_expand)
+    current_expand = xref_table [flag_emit_xref-1].expand;
+
+  (*current_expand) (fp, node);
+}
+
+/* Implementation of the xref back-ends. */
+
diff --git a/gcc/java/xref.h b/gcc/java/xref.h
new file mode 100644 (file)
index 0000000..6d851a2
--- /dev/null
@@ -0,0 +1,42 @@
+/* Definitions for the cross reference backend xref.c
+   Copyright (C) 1999 Free Software Foundation, Inc.
+   Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+
+Java and all Java-based marks are trademarks or registered trademarks
+of Sun Microsystems, Inc. in the United States and other countries.
+The Free Software Foundation is independent of Sun Microsystems, Inc.  */
+
+/* Exported functions. */
+int xref_flag_value PROTO ((char *));
+void xref_generate PROTO ((tree));
+
+/* flag_emit_xref range of possible values. */
+
+enum {
+  XREF_NONE = 0,
+};
+
+/* Lookup table to be used with the value of flag_emit_xref */
+
+typedef struct {
+  char *key;                            /* Activator in -fxref=<key>  */
+  void (*expand) PROTO ((FILE *, tree)); /* Function to write xrefs out */
+  FILE *fp;                             /* fp to use during the call.  */
+} xref_flag_table;