OSDN Git Service

2009-04-09 Paolo Bonzini <bonzini@gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / java / jcf.h
index 962db12..40bbd72 100644 (file)
@@ -1,12 +1,12 @@
 /* Utility macros to read Java(TM) .class files and byte codes.
-   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-   Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+   2006, 2007, 2008 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
 GCC 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)
+the Free Software Foundation; either version 3, or (at your option)
 any later version.
 
 GCC is distributed in the hope that it will be useful,
@@ -15,9 +15,8 @@ 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 GCC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  
 
 Java and all Java-based marks are trademarks or registered trademarks
 of Sun Microsystems, Inc. in the United States and other countries.
@@ -46,23 +45,6 @@ The Free Software Foundation is independent of Sun Microsystems, Inc.  */
 #define JCF_word JCF_u4
 #endif
 
-/* If we have both "scandir" and "alphasort", we can cache directory
-   listings to reduce the time taken to search the classpath.  */
-#if defined(HAVE_SCANDIR) && defined(HAVE_ALPHASORT)
-#define JCF_USE_SCANDIR 1
-#else
-#define JCF_USE_SCANDIR 0
-#endif 
-
-/* On case-insensitive file systems, file name components must be 
-   compared using "strcasecmp", if available, instead of "strcmp".
-   Assumes "config.h" has already been included.  */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP)
-#define COMPARE_FILENAMES(X, Y) strcasecmp ((X), (Y))
-#else
-#define COMPARE_FILENAMES(X, Y) strcmp ((X), (Y))
-#endif
-
 /* On case-insensitive file systems, we need to ensure that a request
    to open a .java or .class file is honored only if the file to be
    opened is of the exact case we are asking for. In other words, we
@@ -71,8 +53,8 @@ The Free Software Foundation is independent of Sun Microsystems, Inc.  */
    open() call.
 
    If you want to add another host, add your define to the list below
-   (i.e. defined(WIN32) || defined(YOUR_HOST)) and add an host-specific
-   .c file to Make-lang.in similar to win32-host.c  */
+   (i.e. defined(WIN32) || defined(YOUR_HOST)) and add a host-specific
+   .c file to Make-lang.in similar to win32-host.c.  */
 #if defined(WIN32)
 extern int
 jcf_open_exact_case (const char* filename, int oflag);
@@ -82,7 +64,7 @@ jcf_open_exact_case (const char* filename, int oflag);
 #endif /* WIN32 */
 
 struct JCF;
-typedef int (*jcf_filbuf_t) PARAMS ((struct JCF*, int needed));
+typedef int (*jcf_filbuf_t) (struct JCF*, int needed);
 
 union cpool_entry GTY(()) {
   jword GTY ((tag ("0"))) w;
@@ -111,19 +93,18 @@ struct ZipDirectory;
 /* JCF encapsulates the state of reading a Java Class File. */
 
 typedef struct JCF GTY(()) {
-  unsigned char * GTY ((skip (""))) buffer;
-  unsigned char * GTY ((skip (""))) buffer_end;
-  unsigned char * GTY ((skip (""))) read_ptr;
-  unsigned char * GTY ((skip (""))) read_end;
-  int java_source : 1;
-  int right_zip : 1;
-  int finished : 1;
+  unsigned char * GTY ((skip)) buffer;
+  unsigned char * GTY ((skip)) buffer_end;
+  unsigned char * GTY ((skip)) read_ptr;
+  unsigned char * GTY ((skip)) read_end;
+  unsigned int right_zip : 1;
+  unsigned int finished : 1;
   jcf_filbuf_t filbuf;
-  PTR GTY ((skip (""))) read_state;
+  PTR GTY ((skip)) read_state;
   const char *filename;
   const char *classname;
   /* Directory entry where it was found.  */
-  struct ZipDirectory * GTY ((skip (""))) zipd;
+  struct ZipDirectory * GTY ((skip)) zipd;
   JCF_u2 access_flags;
   JCF_u2 this_class;
   JCF_u2 super_class;
@@ -174,9 +155,9 @@ typedef struct JCF GTY(()) {
 
 #define JCF_FINISH(JCF) { \
   CPOOL_FINISH(&(JCF)->cpool); \
-  if ((JCF)->buffer) FREE ((JCF)->buffer); \
-  if ((JCF)->filename) FREE ((char *) (JCF)->filename); \
-  if ((JCF)->classname) FREE ((char *) (JCF)->classname); \
+  if ((JCF)->buffer) free ((JCF)->buffer); \
+  if ((JCF)->filename) free (CONST_CAST (char *, (JCF)->filename)); \
+  if ((JCF)->classname) free (CONST_CAST (char *, (JCF)->classname)); \
   (JCF)->finished = 1; }
   
 #define CPOOL_INIT(CPOOL) \
@@ -187,7 +168,7 @@ typedef struct JCF GTY(()) {
 #define JCF_ZERO(JCF)  \
   ((JCF)->buffer = (JCF)->buffer_end = (JCF)->read_ptr = (JCF)->read_end = 0,\
    (JCF)->read_state = 0, (JCF)->filename = (JCF)->classname = 0, \
-   CPOOL_INIT(&(JCF)->cpool), (JCF)->java_source = 0, (JCF)->zipd = 0, \
+   CPOOL_INIT(&(JCF)->cpool), (JCF)->zipd = 0, \
    (JCF)->finished = 0)
 
 /* Given that PTR points to a 2-byte unsigned integer in network
@@ -233,31 +214,43 @@ typedef struct JCF GTY(()) {
 #define ACC_FINAL 0x0010
 #define ACC_SYNCHRONIZED 0x0020
 #define ACC_SUPER 0x0020
+#define ACC_BRIDGE 0x0040
 #define ACC_VOLATILE 0x0040
 #define ACC_TRANSIENT 0x0080
+#define ACC_VARARGS 0x0080
 #define ACC_NATIVE 0x0100
 #define ACC_INTERFACE 0x0200
 #define ACC_ABSTRACT 0x0400
 #define ACC_STRICT 0x0800
+#define ACC_SYNTHETIC 0x01000
+#define ACC_ANNOTATION 0x02000
+#define ACC_ENUM 0x04000
+/* "Invisible" refers to Miranda methods inserted into an abstract
+   class.  It is also used in the runtime.  */
+#define ACC_INVISIBLE 0x8000
 
 #define ACC_VISIBILITY (ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED)
 
-#define CONSTANT_Class 7
-#define CONSTANT_Fieldref 9
-#define CONSTANT_Methodref 10
-#define CONSTANT_InterfaceMethodref 11
-#define CONSTANT_String 8
-#define CONSTANT_Integer 3
-#define CONSTANT_Float 4
-#define CONSTANT_Long 5
-#define CONSTANT_Double 6
-#define CONSTANT_NameAndType 12
-#define CONSTANT_Utf8 1
-#define CONSTANT_Unicode 2
+enum cpool_tag
+{
+  CONSTANT_Class = 7,
+  CONSTANT_Fieldref = 9,
+  CONSTANT_Methodref = 10,
+  CONSTANT_InterfaceMethodref = 11,
+  CONSTANT_String = 8,
+  CONSTANT_Integer = 3,
+  CONSTANT_Float = 4,
+  CONSTANT_Long = 5,
+  CONSTANT_Double = 6,
+  CONSTANT_NameAndType = 12,
+  CONSTANT_Utf8 = 1,
+  CONSTANT_Unicode = 2,
+  CONSTANT_None = 0
+};
 
 #define DEFAULT_CLASS_PATH "."
 
-extern const char *find_class (const char *, int, JCF*, int);
+extern const char *find_class (const char *, int, JCF *);
 extern const char *find_classfile (char *, JCF*, const char *);
 extern int jcf_filbuf_from_stdio (JCF *jcf, int count);
 extern int jcf_unexpected_eof (JCF*, int) ATTRIBUTE_NORETURN;
@@ -310,6 +303,7 @@ extern void jcf_path_seal (int);
 extern void *jcf_path_start (void);
 extern void *jcf_path_next (void *);
 extern char *jcf_path_name (void *);
+extern char *jcf_path_compute (const char *);
 extern int jcf_path_is_zipfile (void *);
 extern int jcf_path_is_system (void *);
 extern int jcf_path_max_len (void);