diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index cbd0633a6ffa..5d6b34550247 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,14 @@ +1999-03-22 Alexandre Petit-Bianco + + * 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 * 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 5e50dfe5b040..f7373d6c8d7b 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 b9501ad8b662..068eff277c84 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 f86640e921ce..85b2bfe11dd4 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 000000000000..12768066d7ae --- /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 +#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 000000000000..6d851a2a7a4b --- /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= */ + void (*expand) PROTO ((FILE *, tree)); /* Function to write xrefs out */ + FILE *fp; /* fp to use during the call. */ +} xref_flag_table;