/* 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,
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.
#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, 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
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);
#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;
/* 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;
#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) \
#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
#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;
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);