aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@cygnus.com>1999-03-22 19:57:37 +0000
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>1999-03-22 11:57:37 -0800
commit235acd35186b64c7552439eec898b02a4dcec9ed (patch)
tree89ab59a2a0422857efa034b3749897399c9c59c4
parenta127db7565df9c75cdb7a302c63d2139b73d61d6 (diff)
downloadgcc-235acd35186b64c7552439eec898b02a4dcec9ed.zip
gcc-235acd35186b64c7552439eec898b02a4dcec9ed.tar.gz
gcc-235acd35186b64c7552439eec898b02a4dcec9ed.tar.bz2
Makefile.in: (JAVA_OBJS) Added entry xref.o.
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
-rw-r--r--gcc/java/ChangeLog11
-rw-r--r--gcc/java/Makefile.in4
-rw-r--r--gcc/java/java-tree.h5
-rw-r--r--gcc/java/lang.c16
-rw-r--r--gcc/java/xref.c72
-rw-r--r--gcc/java/xref.h42
6 files changed, 149 insertions, 1 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index cbd0633..5d6b345 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -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
diff --git a/gcc/java/Makefile.in b/gcc/java/Makefile.in
index 5e50dfe..f7373d6 100644
--- a/gcc/java/Makefile.in
+++ b/gcc/java/Makefile.in
@@ -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
diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h
index b9501ad..068eff2 100644
--- a/gcc/java/java-tree.h
+++ b/gcc/java/java-tree.h
@@ -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;
diff --git a/gcc/java/lang.c b/gcc/java/lang.c
index f86640e..85b2bfe 100644
--- a/gcc/java/lang.c
+++ b/gcc/java/lang.c
@@ -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
index 0000000..1276806
--- /dev/null
+++ b/gcc/java/xref.c
@@ -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
index 0000000..6d851a2
--- /dev/null
+++ b/gcc/java/xref.h
@@ -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;