PATCH: Java: Framework for cross-referencer support.
Alexandre Petit-Bianco
apbianco@cygnus.com
Mon Mar 22 20:13:00 GMT 1999
This patch add the minimal support necessary so that one can write a
cross-reference "backend" to jc1. New xref backends can be added by
editing the xref.h file, augmenting the xref_flag_table[] in xref.c
and defining a cross reference generator in xref.c. A cross referencer
is activated by specifying `-fxref=<name>' on the jc1 command line.
This patch has been already checked in the egcs java repository.
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.
Index: Makefile.in
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/java/Makefile.in,v
retrieving revision 1.30
diff -u -p -r1.30 Makefile.in
--- Makefile.in 1999/03/21 06:09:01 1.30
+++ Makefile.in 1999/03/22 22:04:54
@@ -175,7 +175,7 @@ INCLUDES = -I. -I.. -I$(srcdir) -I$(srcd
#
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_T
$(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: java-tree.h
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/java/java-tree.h,v
retrieving revision 1.33
diff -u -p -r1.33 java-tree.h
--- java-tree.h 1999/03/21 06:09:10 1.33
+++ java-tree.h 1999/03/22 22:04:54
@@ -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: lang.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/java/lang.c,v
retrieving revision 1.17
diff -u -p -r1.17 lang.c
--- lang.c 1999/03/21 06:09:19 1.17
+++ lang.c 1999/03/22 22:04:54
@@ -32,6 +32,7 @@ The Free Software Foundation is independ
#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;
@@ -167,6 +173,16 @@ lang_decode_option (argc, argv)
return 1;
}
#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 format `%s'", p + sizeof (XARG) - 1);
+ }
+ }
+#undef XARG
if (p[0] == '-' && p[1] == 'f')
{
Index: xref.c
===================================================================
RCS file: New file
/* 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. */
Index: xref.h
===================================================================
RCS file: New file
/* 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;
.--- Alex (www.cygnus.com/~apbianco, apbianco@cygnus.com)
| Alexandre Petit-Bianco, Cygnus Solutions Java Team.
More information about the Gcc-patches
mailing list