Linux3.1 Java Bootstrap Failure

Jeffrey Oldham oldham@codesourcery.com
Sun Sep 16 10:57:00 GMT 2001


For i686-pc-linux-gnu 3.1, bootstrap fails:

/home/oldham/gcc/gcc2/objdir/gcc/cc1plus -fpreprocessed jni.ii -quiet -o jni.s
/home/oldham/gcc/gcc2/libjava/jni.cc: In function `void 
   array_from_valist(jvalue*, JArray<java::lang::Class*>*, void*)':
/home/oldham/gcc/gcc2/libjava/jni.cc:659: `jbyte' is promoted to `int' when 
   passed through `...'
/home/oldham/gcc/gcc2/libjava/jni.cc:659: (so you should pass `int' not `jbyte' 
   to `va_arg')
/home/oldham/gcc/gcc2/libjava/jni.cc:661: `jshort' is promoted to `int' when 
   passed through `...'
/home/oldham/gcc/gcc2/libjava/jni.cc:671: `jboolean' is promoted to `int' when 
   passed through `...'
/home/oldham/gcc/gcc2/libjava/jni.cc:673: `jchar' is promoted to `int' when 
   passed through `...'

The failure started sometime 15Sep or 16Sep.

Thanks,
Jeffrey D. Oldham
oldham@codesourcery.com
# 1 "/home/oldham/gcc/gcc2/libjava/jni.cc"
# 1 "<builtin>"
# 1 "<command line>"
# 1 "/home/oldham/gcc/gcc2/libjava/jni.cc"
# 11 "/home/oldham/gcc/gcc2/libjava/jni.cc"
# 1 "include/config.h" 1
# 12 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2

# 1 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 1 3
# 147 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 3
typedef int ptrdiff_t;
# 201 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 3
typedef unsigned int size_t;
# 14 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "/usr/include/string.h" 1 3
# 26 "/usr/include/string.h" 3
# 1 "/usr/include/features.h" 1 3
# 250 "/usr/include/features.h" 3
# 1 "/usr/include/sys/cdefs.h" 1 3
# 251 "/usr/include/features.h" 2 3
# 278 "/usr/include/features.h" 3
# 1 "/usr/include/gnu/stubs.h" 1 3
# 279 "/usr/include/features.h" 2 3
# 27 "/usr/include/string.h" 2 3

extern "C" {




# 1 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 1 3
# 34 "/usr/include/string.h" 2 3



extern void * memcpy (void * __restrict __dest, __const void * __restrict __src, size_t __n) throw ();



extern void * memmove (void * __dest, __const void * __src, size_t __n) throw ();






extern void * memccpy (void * __dest, __const void * __src, int __c, size_t __n) throw ();





extern void * memset (void * __s, int __c, size_t __n) throw ();


extern int memcmp (__const void * __s1, __const void * __s2, size_t __n) throw ();



extern void * memchr (__const void * __s, int __c, size_t __n) throw ();




extern void * rawmemchr (__const void * __s, int __c) throw ();




extern char *strcpy (char *__restrict __dest, __const char *__restrict __src) throw ();


extern char *strncpy (char *__restrict __dest, __const char *__restrict __src, size_t __n) throw ();



extern char *strcat (char *__restrict __dest, __const char *__restrict __src) throw ();


extern char *strncat (char *__restrict __dest, __const char *__restrict __src, size_t __n) throw ();



extern int strcmp (__const char *__s1, __const char *__s2) throw ();

extern int strncmp (__const char *__s1, __const char *__s2, size_t __n) throw ();


extern int strcoll (__const char *__s1, __const char *__s2) throw ();

extern size_t strxfrm (char *__restrict __dest, __const char *__restrict __src, size_t __n) throw ();






# 1 "/usr/include/xlocale.h" 1 3
# 28 "/usr/include/xlocale.h" 3
typedef struct __locale_struct
{
  struct locale_data *__locales[6];


  const unsigned short int *__ctype_b;
  const int *__ctype_tolower;
  const int *__ctype_toupper;
} *__locale_t;
# 100 "/usr/include/string.h" 2 3


extern int __strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l) throw ();


extern size_t __strxfrm_l (char *__dest, __const char *__src, size_t __n, __locale_t __l) throw ();





extern char *__strdup (__const char *__s) throw ();
extern char *strdup (__const char *__s) throw ();






extern char *strndup (__const char *__string, size_t __n) throw ();
# 146 "/usr/include/string.h" 3
extern char *strchr (__const char *__s, int __c) throw ();

extern char *strrchr (__const char *__s, int __c) throw ();




extern char *strchrnul (__const char *__s, int __c) throw ();




extern size_t strcspn (__const char *__s, __const char *__reject) throw ();


extern size_t strspn (__const char *__s, __const char *__accept) throw ();

extern char *strpbrk (__const char *__s, __const char *__accept) throw ();

extern char *strstr (__const char *__haystack, __const char *__needle) throw ();



extern char *__strcasestr (__const char *__haystack, __const char *__needle) throw ();

extern char *strcasestr (__const char *__haystack, __const char *__needle) throw ();




extern char *strtok (char *__restrict __s, __const char *__restrict __delim) throw ();




extern char *__strtok_r (char *__restrict __s, __const char *__restrict __delim, char **__restrict __save_ptr) throw ();



extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim, char **__restrict __save_ptr) throw ();
# 194 "/usr/include/string.h" 3
extern void * memmem (__const void * __haystack, size_t __haystacklen, __const void * __needle, size_t __needlelen) throw ();




extern void * __mempcpy (void * __restrict __dest, __const void * __restrict __src, size_t __n) throw ();

extern void * mempcpy (void * __restrict __dest, __const void * __restrict __src, size_t __n) throw ();





extern size_t strlen (__const char *__s) throw ();




extern size_t strnlen (__const char *__string, size_t __maxlen) throw ();




extern char *strerror (int __errnum) throw ();



extern char *__strerror_r (int __errnum, char *__buf, size_t __buflen) throw ();
extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) throw ();




extern void __bzero (void * __s, size_t __n) throw ();



extern void bcopy (__const void * __src, void * __dest, size_t __n) throw ();


extern void bzero (void * __s, size_t __n) throw ();


extern int bcmp (__const void * __s1, __const void * __s2, size_t __n) throw ();


extern char *index (__const char *__s, int __c) throw ();


extern char *rindex (__const char *__s, int __c) throw ();



extern int __ffs (int __i) throw () __attribute__ ((const));
extern int ffs (int __i) throw () __attribute__ ((const));




extern int ffsl (long int __l) throw () __attribute__ ((const));

__extension__ extern int ffsll (long long int __ll) throw ()
     __attribute__ ((const));




extern int __strcasecmp (__const char *__s1, __const char *__s2) throw ();
extern int strcasecmp (__const char *__s1, __const char *__s2) throw ();


extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n) throw ();






extern int __strcasecmp_l (__const char *__s1, __const char *__s2, __locale_t __loc) throw ();


extern int __strncasecmp_l (__const char *__s1, __const char *__s2, size_t __n, __locale_t __loc) throw ();






extern char *strsep (char **__restrict __stringp, __const char *__restrict __delim) throw ();





extern int strverscmp (__const char *__s1, __const char *__s2) throw ();


extern char *strsignal (int __sig) throw ();


extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src) throw ();

extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src) throw ();




extern char *__stpncpy (char *__restrict __dest, __const char *__restrict __src, size_t __n) throw ();

extern char *stpncpy (char *__restrict __dest, __const char *__restrict __src, size_t __n) throw ();



extern char *strfry (char *__string) throw ();


extern void * memfrob (void * __s, size_t __n) throw ();






extern char *basename (__const char *__filename) throw ();
# 350 "/usr/include/string.h" 3
}
# 15 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2




# 1 "/home/oldham/gcc/gcc2/libjava/gcj/cni.h" 1
# 16 "/home/oldham/gcc/gcc2/libjava/gcj/cni.h"
# 1 "/home/oldham/gcc/gcc2/libjava/java/lang/Object.h" 1
# 14 "/home/oldham/gcc/gcc2/libjava/java/lang/Object.h"
#pragma interface

# 1 "/home/oldham/gcc/gcc2/libjava/gcj/javaprims.h" 1
# 15 "/home/oldham/gcc/gcc2/libjava/gcj/javaprims.h"
#pragma GCC java_exceptions

# 1 "gcj/libgcj-config.h" 1
# 18 "/home/oldham/gcc/gcc2/libjava/gcj/javaprims.h" 2
# 29 "/home/oldham/gcc/gcc2/libjava/gcj/javaprims.h"
extern "Java"
{
  typedef __java_byte jbyte;
  typedef __java_short jshort;
  typedef __java_int jint;
  typedef __java_long jlong;
  typedef __java_float jfloat;
  typedef __java_double jdouble;
  typedef __java_char jchar;
  typedef __java_boolean jboolean;
  typedef jint jsize;



  namespace java
  {
    namespace io
    {
      class BufferedInputStream;
      class BufferedOutputStream;
      class BufferedReader;
      class BufferedWriter;
      class ByteArrayInputStream;
      class ByteArrayOutputStream;
      class CharArrayReader;
      class CharArrayWriter;
      class CharConversionException;
      class DataInput;
      class DataInputStream;
      class DataOutput;
      class DataOutputStream;
      class EOFException;
      class Externalizable;
      class File;
      class FileDescriptor;
      class FileFilter;
      class FileInputStream;
      class FileNotFoundException;
      class FileOutputStream;
      class FilePermission;
      class FileReader;
      class FileWriter;
      class FilenameFilter;
      class FilterInputStream;
      class FilterOutputStream;
      class FilterReader;
      class FilterWriter;
      class IOException;
      class InputStream;
      class InputStreamReader;
      class InterfaceComparator;
      class InterruptedIOException;
      class InvalidClassException;
      class InvalidObjectException;
      class LineNumberInputStream;
      class LineNumberReader;
      class MemberComparator;
      class NotActiveException;
      class NotSerializableException;
      class ObjectInput;
      class ObjectInputStream;
      class ObjectInputStream$GetField;
      class ObjectInputValidation;
      class ObjectOutput;
      class ObjectOutputStream;
      class ObjectOutputStream$PutField;
      class ObjectStreamClass;
      class ObjectStreamConstants;
      class ObjectStreamException;
      class ObjectStreamField;
      class OptionalDataException;
      class OutputStream;
      class OutputStreamWriter;
      class PipedInputStream;
      class PipedOutputStream;
      class PipedReader;
      class PipedWriter;
      class PrintStream;
      class PrintWriter;
      class PushbackInputStream;
      class PushbackReader;
      class RandomAccessFile;
      class Reader;
      class SequenceInputStream;
      class Serializable;
      class SerializablePermission;
      class StreamCorruptedException;
      class StreamTokenizer;
      class StringBufferInputStream;
      class StringReader;
      class StringWriter;
      class SyncFailedException;
      class UTFDataFormatException;
      class UnsupportedEncodingException;
      class ValidatorAndPriority;
      class WriteAbortedException;
      class Writer;
    };

    namespace lang
    {
      class AbstractMethodError;
      class ArithmeticException;
      class ArrayIndexOutOfBoundsException;
      class ArrayStoreException;
      class Boolean;
      class Byte;
      class CPlusPlusDemangler;
      class Character;
      class Character$Subset;
      class Character$UnicodeBlock;
      class Class;
      class ClassCastException;
      class ClassCircularityError;
      class ClassFormatError;
      class ClassLoader;
      class ClassNotFoundException;
      class CloneNotSupportedException;
      class Cloneable;
      class Comparable;
      class Compiler;
      class ConcreteProcess;
      class Double;
      class Error;
      class Exception;
      class ExceptionInInitializerError;
      class Float;
      class IllegalAccessError;
      class IllegalAccessException;
      class IllegalArgumentException;
      class IllegalMonitorStateException;
      class IllegalStateException;
      class IllegalThreadStateException;
      class IncompatibleClassChangeError;
      class IndexOutOfBoundsException;
      class InstantiationError;
      class InstantiationException;
      class Integer;
      class InternalError;
      class InterruptedException;
      class LinkageError;
      class Long;
      class Math;
      class NegativeArraySizeException;
      class NoClassDefFoundError;
      class NoSuchFieldError;
      class NoSuchFieldException;
      class NoSuchMethodError;
      class NoSuchMethodException;
      class NullPointerException;
      class Number;
      class NumberFormatException;
      class Object;
      class OutOfMemoryError;
      class Package;
      class Process;
      class Runnable;
      class Runtime;
      class RuntimeException;
      class RuntimePermission;
      class SecurityContext;
      class SecurityException;
      class SecurityManager;
      class Short;
      class StackOverflowError;
      class String;
      class StringBuffer;
      class StringIndexOutOfBoundsException;
      class System;
      class Thread;
      class ThreadDeath;
      class ThreadGroup;
      class ThreadLocal;
      class ThreadLocal$Value;
      class Throwable;
      class UnknownError;
      class UnsatisfiedLinkError;
      class UnsupportedClassVersionError;
      class UnsupportedOperationException;
      class VMClassLoader;
      class VMSecurityManager;
      class VerifyError;
      class VirtualMachineError;
      class Void;
      namespace ref
      {
        class PhantomReference;
        class Reference;
        class ReferenceQueue;
        class SoftReference;
        class WeakReference;
      };

      namespace reflect
      {
        class AccessibleObject;
        class Array;
        class Constructor;
        class Field;
        class InvocationTargetException;
        class Member;
        class Method;
        class Modifier;
        class ReflectPermission;
      };
    };

    namespace util
    {
      class AbstractCollection;
      class AbstractList;
      class AbstractList$AbstractListItr;
      class AbstractMap;
      class AbstractSequentialList;
      class AbstractSet;
      class ArrayList;
      class Arrays;
      class Arrays$ListImpl;
      class BasicMapEntry;
      class BitSet;
      class Calendar;
      class Collection;
      class Collections;
      class Collections$ReverseComparator;
      class Collections$SynchronizedCollection;
      class Collections$SynchronizedIterator;
      class Collections$SynchronizedList;
      class Collections$SynchronizedListIterator;
      class Collections$SynchronizedMap;
      class Collections$SynchronizedSet;
      class Collections$SynchronizedSortedMap;
      class Collections$SynchronizedSortedSet;
      class Collections$UnmodifiableCollection;
      class Collections$UnmodifiableIterator;
      class Collections$UnmodifiableList;
      class Collections$UnmodifiableListIterator;
      class Collections$UnmodifiableMap;
      class Collections$UnmodifiableSet;
      class Collections$UnmodifiableSortedMap;
      class Collections$UnmodifiableSortedSet;
      class Comparator;
      class ConcurrentModificationException;
      class Date;
      class Dictionary;
      class EmptyStackException;
      class Enumeration;
      class EventListener;
      class EventObject;
      class GregorianCalendar;
      class HashMap;
      class HashMap$Entry;
      class HashMap$HashIterator;
      class HashSet;
      class Hashtable;
      class Hashtable$Entry;
      class Hashtable$Enumerator;
      class Hashtable$HashIterator;
      class IdentityHashMap;
      class IdentityHashMap$IdentityIterator;
      class Iterator;
      class LinkedList;
      class LinkedList$Entry;
      class LinkedList$LinkedListItr;
      class List;
      class ListIterator;
      class ListResourceBundle;
      class Locale;
      class Map;
      class Map$Entry;
      class MissingResourceException;
      class NoSuchElementException;
      class Observable;
      class Observer;
      class Properties;
      class PropertyPermission;
      class PropertyResourceBundle;
      class Random;
      class ResourceBundle;
      class Set;
      class SimpleTimeZone;
      class SortedMap;
      class SortedSet;
      class Stack;
      class StringTokenizer;
      class SubList;
      class TimeZone;
      class Timer;
      class Timer$Scheduler;
      class Timer$TaskQueue;
      class TimerTask;
      class TooManyListenersException;
      class TreeMap;
      class TreeMap$Node;
      class TreeMap$SubMap;
      class TreeMap$TreeIterator;
      class TreeMap$VerifyResult;
      class TreeSet;
      class Vector;
      class WeakHashMap;
      class WeakHashMap$Entry;
      class WeakHashMap$WeakBucket;
      class WeakHashMap$WeakEntrySet;
      namespace jar
      {
        class Attributes;
        class Attributes$Name;
        class JarEntry;
        class JarException;
        class JarFile;
        class JarFile$JarEnumeration;
        class JarInputStream;
        class JarOutputStream;
        class Manifest;
      };

      namespace zip
      {
        class Adler32;
        class CRC32;
        class CheckedInputStream;
        class CheckedOutputStream;
        class Checksum;
        class DataFormatException;
        class Deflater;
        class DeflaterOutputStream;
        class GZIPInputStream;
        class GZIPOutputStream;
        class Inflater;
        class InflaterInputStream;
        class ZipConstants;
        class ZipEntry;
        class ZipEnumeration;
        class ZipException;
        class ZipFile;
        class ZipInputStream;
        class ZipOutputStream;
      };
    };
  };
};

typedef struct java::lang::Object* jobject;
typedef class java::lang::Class* jclass;
typedef class java::lang::Throwable* jthrowable;
typedef class java::lang::String* jstring;
struct _Jv_JNIEnv;

typedef struct _Jv_Field *jfieldID;
typedef struct _Jv_Method *jmethodID;

extern "C" jobject _Jv_AllocObject (jclass, jint) __attribute__((__malloc__));





  static inline jobject _Jv_AllocPtrFreeObject (jclass klass, jint sz)
  {
    return _Jv_AllocObject(klass, sz);
  }

extern "C" jboolean _Jv_IsInstanceOf(jobject, jclass);
extern "C" jstring _Jv_AllocString(jsize) __attribute__((__malloc__));
extern "C" jstring _Jv_NewString (const jchar*, jsize)
  __attribute__((__malloc__));
extern jint _Jv_FormatInt (jchar* bufend, jint num);
extern "C" jchar* _Jv_GetStringChars (jstring str);
extern "C" void _Jv_MonitorEnter (jobject);
extern "C" void _Jv_MonitorExit (jobject);
extern "C" jstring _Jv_NewStringLatin1(const char*, jsize)
  __attribute__((__malloc__));
extern "C" jsize _Jv_GetStringUTFLength (jstring);
extern "C" jsize _Jv_GetStringUTFRegion (jstring, jsize, jsize, char *);

extern jint _Jv_CreateJavaVM (void* );

void
_Jv_ThreadRun (java::lang::Thread* thread);
jint
_Jv_AttachCurrentThread(java::lang::Thread* thread);
extern "C" java::lang::Thread*
_Jv_AttachCurrentThread(jstring name, java::lang::ThreadGroup* group);
extern "C" jint _Jv_DetachCurrentThread (void);

extern "C" void _Jv_Throw (jthrowable) __attribute__ ((__noreturn__));
extern "C" void* _Jv_Malloc (jsize) __attribute__((__malloc__));
extern "C" void* _Jv_Realloc (void *, jsize);
extern "C" void _Jv_Free (void*);
extern void (*_Jv_RegisterClassHook) (jclass cl);
extern "C" void _Jv_RegisterClassHookDefault (jclass);

typedef unsigned short _Jv_ushort __attribute__((__mode__(__HI__)));
typedef unsigned int _Jv_uint __attribute__((__mode__(__SI__)));

struct _Jv_Utf8Const
{
  _Jv_ushort hash;
  _Jv_ushort length;
  char data[1];
};
# 17 "/home/oldham/gcc/gcc2/libjava/java/lang/Object.h" 2



struct _JvObjectPrefix
{
protected:

  virtual void nacd_1 (void) {};
  virtual void nacd_2 (void) {};
};

class java::lang::Object : public _JvObjectPrefix
{
protected:
  virtual void finalize (void);
public:

  jclass getClass (void);
  virtual jint hashCode (void);
  void notify (void);
  void notifyAll (void);
  void wait (jlong timeout, jint nanos);
  virtual jboolean equals (jobject obj);
  Object (void);
  virtual jstring toString (void);
  void wait (void);
  void wait (jlong timeout);

  friend void _Jv_MonitorEnter (jobject obj);
  friend void _Jv_MonitorExit (jobject obj);
  friend void _Jv_InitializeSyncMutex (void);
  friend void _Jv_FinalizeObject (jobject obj);
# 57 "/home/oldham/gcc/gcc2/libjava/java/lang/Object.h"
  static java::lang::Class class$;

protected:
  virtual jobject clone (void);

private:




    jobject sync_info;



    void sync_init (void);
};
# 17 "/home/oldham/gcc/gcc2/libjava/gcj/cni.h" 2
# 1 "/home/oldham/gcc/gcc2/libjava/java/lang/Class.h" 1
# 15 "/home/oldham/gcc/gcc2/libjava/java/lang/Class.h"
#pragma interface

# 1 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 1 3
# 18 "/home/oldham/gcc/gcc2/libjava/java/lang/Class.h" 2

# 1 "java/lang/String.h" 1





#pragma interface


# 1 "/home/oldham/gcc/gcc2/libjava/gcj/array.h" 1
# 16 "/home/oldham/gcc/gcc2/libjava/gcj/array.h"
extern "Java" {

class __JArray : public java::lang::Object
{
protected:



  __JArray () : length (0)
  {
  }
public:
  const jsize length;
  friend jsize JvGetArrayLength (__JArray*);
};

template<class T>
class JArray : public __JArray
{
  T data[0];
public:
  friend T* elements<>(JArray<T>& x);
  friend T* elements<>(JArray<T>* x);


};

template<class T>
inline T* elements(JArray<T>& x) { return x.data; }
template<class T>
inline T* elements(JArray<T>* x) { return x->data; }

};


typedef __JArray *jarray;
typedef JArray<jobject> *jobjectArray;
typedef JArray<jboolean> *jbooleanArray;
typedef JArray<jbyte> *jbyteArray;
typedef JArray<jchar> *jcharArray;
typedef JArray<jshort> *jshortArray;
typedef JArray<jint> *jintArray;
typedef JArray<jlong> *jlongArray;
typedef JArray<jfloat> *jfloatArray;
typedef JArray<jdouble> *jdoubleArray;
typedef JArray<jstring> *jstringArray;

extern java::lang::Class _Jv_byteClass, _Jv_shortClass, _Jv_intClass,
  _Jv_longClass, _Jv_booleanClass, _Jv_charClass, _Jv_floatClass,
  _Jv_doubleClass, _Jv_voidClass;


extern "C" jobjectArray _Jv_NewObjectArray(jsize length, jclass, jobject init);
extern "C" jobject _Jv_NewPrimArray (jclass eltype, jint count);

extern inline jobjectArray
JvNewObjectArray (jsize length, jclass cls, jobject init)
{
  return _Jv_NewObjectArray (length, cls, init);
}

extern inline jcharArray
JvNewCharArray (jint length)
{
  return (jcharArray) _Jv_NewPrimArray ((& _Jv_charClass), length);
}

extern inline jbooleanArray
JvNewBooleanArray (jint length)
{
  return (jbooleanArray) _Jv_NewPrimArray ((& _Jv_booleanClass), length);
}

extern inline jbyteArray
JvNewByteArray (jint length)
{
  return (jbyteArray) _Jv_NewPrimArray ((& _Jv_byteClass), length);
}

extern inline jshortArray
JvNewShortArray (jint length)
{
  return (jshortArray) _Jv_NewPrimArray ((& _Jv_shortClass), length);
}

extern inline jintArray
JvNewIntArray (jint length)
{
  return (jintArray) _Jv_NewPrimArray ((& _Jv_intClass), length);
}

extern inline jlongArray
JvNewLongArray (jint length)
{
  return (jlongArray) _Jv_NewPrimArray ((& _Jv_longClass), length);
}

extern inline jfloatArray
JvNewFloatArray (jint length)
{
  return (jfloatArray) _Jv_NewPrimArray ((& _Jv_floatClass), length);
}

extern inline jdoubleArray
JvNewDoubleArray (jint length)
{
  return (jdoubleArray) _Jv_NewPrimArray ((& _Jv_doubleClass), length);
}


extern "C" jstringArray JvConvertArgv(int argc, const char **argv);

inline jsize JvGetArrayLength (jarray array) { return array->length; }
# 10 "java/lang/String.h" 2

class ::java::lang::String : public ::java::lang::Object
{
public:
  String ();
  String (::java::lang::String *);
  String (::java::lang::StringBuffer *);
  String (jcharArray);
  String (jcharArray, jint, jint);
  String (jbyteArray);
  String (jbyteArray, jint, jint);
  String (jbyteArray, ::java::lang::String *);
  String (jbyteArray, jint, jint, ::java::lang::String *);
  static ::java::lang::String *copyValueOf (jcharArray);
  static ::java::lang::String *copyValueOf (jcharArray, jint, jint);
  String (jbyteArray, jint);
  String (jbyteArray, jint, jint, jint);
  ::java::lang::String *toString () { return this; }
  jboolean equals (::java::lang::Object *);
  jint hashCode ();
  jint length () { return count; }
  jchar charAt (jint);
  void getChars (jint, jint, jcharArray, jint);
  jbyteArray getBytes ();
  jbyteArray getBytes (::java::lang::String *);
  void getBytes (jint, jint, jbyteArray, jint);
  jcharArray toCharArray ();
  jboolean equalsIgnoreCase (::java::lang::String *);
  jint compareTo (::java::lang::String *);
  jint compareTo (::java::lang::Object *);
  jint compareToIgnoreCase (::java::lang::String *);
  jboolean regionMatches (jint, ::java::lang::String *, jint, jint);
  jboolean regionMatches (jboolean, jint, ::java::lang::String *, jint, jint);
  jboolean startsWith (::java::lang::String *);
  jboolean startsWith (::java::lang::String *, jint);
  jboolean endsWith (::java::lang::String *);
  jint indexOf (jint);
  jint indexOf (jint, jint);
  jint indexOf (::java::lang::String *);
  jint indexOf (::java::lang::String *, jint);
  jint lastIndexOf (jint);
  jint lastIndexOf (jint, jint);
  jint lastIndexOf (::java::lang::String *);
  jint lastIndexOf (::java::lang::String *, jint);
  ::java::lang::String *substring (jint);
  ::java::lang::String *substring (jint, jint);
  ::java::lang::String *concat (::java::lang::String *);
  ::java::lang::String *replace (jchar, jchar);
  ::java::lang::String *toLowerCase (::java::util::Locale *);
  ::java::lang::String *toUpperCase (::java::util::Locale *);
  ::java::lang::String *toLowerCase ();
  ::java::lang::String *toUpperCase ();
  ::java::lang::String *trim ();
  static ::java::lang::String *valueOf (::java::lang::Object *);
  static ::java::lang::String *valueOf (jcharArray);
  static ::java::lang::String *valueOf (jcharArray, jint, jint);
  static ::java::lang::String *valueOf (jboolean);
  static ::java::lang::String *valueOf (jchar);
  static ::java::lang::String *valueOf (jint);
  static ::java::lang::String *valueOf (jlong);
  static ::java::lang::String *valueOf (jfloat);
  static ::java::lang::String *valueOf (jdouble);
  ::java::lang::String *intern ();
private:
  void init ();
  void init (jcharArray, jint, jint, jboolean);
  void init (jbyteArray, jint, jint, jint);
  void init (jbyteArray, jint, jint, ::java::lang::String *);
  static void rehash ();
  ::java::lang::Object *data;
  jint boffset;
  jint count;
  static const jlong serialVersionUID = -6849794470754667710LL;
public:
  static ::java::util::Comparator *CASE_INSENSITIVE_ORDER;
  friend jchar* _Jv_GetStringChars (jstring str);
  friend jstring* _Jv_StringFindSlot (jchar*, jint, jint);
  friend jstring* _Jv_StringGetSlot (jstring);
  friend jstring _Jv_NewStringUtf8Const (_Jv_Utf8Const* str);
  friend jstring _Jv_NewStringLatin1 (const char*, jsize);
  friend jstring _Jv_AllocString (jsize);

  static ::java::lang::Class class$;
};
# 20 "/home/oldham/gcc/gcc2/libjava/java/lang/Class.h" 2
# 1 "java/net/URL.h" 1





#pragma interface



extern "Java"
{
  namespace java
  {
    namespace net
    {
      class URLConnection;
      class URL;
      class URLStreamHandlerFactory;
      class URLStreamHandler;
    }
  }
};

class ::java::net::URL : public ::java::lang::Object
{
public:
  URL (::java::lang::String *, ::java::lang::String *, jint, ::java::lang::String *);
  URL (::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
  URL (::java::lang::String *, ::java::lang::String *, jint, ::java::lang::String *, ::java::net::URLStreamHandler *);
  URL (::java::lang::String *);
  URL (::java::net::URL *, ::java::lang::String *);
  URL (::java::net::URL *, ::java::lang::String *, ::java::net::URLStreamHandler *);
  jboolean equals (::java::lang::Object *);
  ::java::lang::Object *getContent ();
  ::java::lang::String *getFile () { return file; }
  ::java::lang::String *getHost () { return host; }
  jint getPort () { return port; }
  ::java::lang::String *getProtocol () { return protocol; }
  ::java::lang::String *getRef () { return ref; }
  jint hashCode ();
  ::java::net::URLConnection *openConnection ();
  ::java::io::InputStream *openStream ();
  jboolean sameFile (::java::net::URL *);
public:
  void set (::java::lang::String *, ::java::lang::String *, jint, ::java::lang::String *, ::java::lang::String *);
public:
  static void setURLStreamHandlerFactory (::java::net::URLStreamHandlerFactory *);
  ::java::lang::String *toExternalForm ();
  ::java::lang::String *toString ();
private:
  ::java::net::URLStreamHandler *setURLStreamHandler (::java::lang::String *);
  void readObject (::java::io::ObjectInputStream *);
  void writeObject (::java::io::ObjectOutputStream *);
  ::java::lang::String *protocol;
  ::java::lang::String *host;
  jint port;
  ::java::lang::String *file;
  ::java::lang::String *ref;
  jint hashCode__;
  ::java::net::URLStreamHandler *handler;
  static ::java::util::Hashtable *handlers;
  static ::java::net::URLStreamHandlerFactory *factory;
  static const jlong serialVersionUID = -7627629688361524110LL;
public:

  static ::java::lang::Class class$;
};
# 21 "/home/oldham/gcc/gcc2/libjava/java/lang/Class.h" 2
# 1 "java/lang/reflect/Modifier.h" 1





#pragma interface



class ::java::lang::reflect::Modifier : public ::java::lang::Object
{
public:
  static jboolean isAbstract (jint);
  static jboolean isFinal (jint);
  static jboolean isInterface (jint);
  static jboolean isNative (jint);
  static jboolean isPrivate (jint);
  static jboolean isProtected (jint);
  static jboolean isPublic (jint);
  static jboolean isStatic (jint);
  static jboolean isStrict (jint);
  static jboolean isSynchronized (jint);
  static jboolean isTransient (jint);
  static jboolean isVolatile (jint);
  static ::java::lang::String *toString (jint);
public:
  static void toString (jint, ::java::lang::StringBuffer *);
public:
  Modifier ();
  static const jint PUBLIC = 1L;
  static const jint PRIVATE = 2L;
  static const jint PROTECTED = 4L;
  static const jint STATIC = 8L;
  static const jint FINAL = 16L;
  static const jint SYNCHRONIZED = 32L;
  static const jint VOLATILE = 64L;
  static const jint TRANSIENT = 128L;
  static const jint NATIVE = 256L;
  static const jint INTERFACE = 512L;
  static const jint ABSTRACT = 1024L;
  static const jint STRICT = 2048L;
public:
  static const jint ALL_FLAGS = 4095L;
public:

  static ::java::lang::Class class$;
};
# 22 "/home/oldham/gcc/gcc2/libjava/java/lang/Class.h" 2
# 1 "java/security/ProtectionDomain.h" 1





#pragma interface



extern "Java"
{
  namespace java
  {
    namespace security
    {
      class ProtectionDomain;
      class Permission;
      class PermissionCollection;
      class CodeSource;
    }
  }
};

class ::java::security::ProtectionDomain : public ::java::lang::Object
{
public:
  ProtectionDomain (::java::security::CodeSource *, ::java::security::PermissionCollection *);
  ::java::security::CodeSource *getCodeSource () { return code_source; }
  ::java::security::PermissionCollection *getPermissions () { return perms; }
  virtual jboolean implies (::java::security::Permission *);
  virtual ::java::lang::String *toString ();
private:
  static ::java::lang::String *linesep;
  ::java::security::CodeSource *code_source;
  ::java::security::PermissionCollection *perms;
public:

  static ::java::lang::Class class$;
};
# 23 "/home/oldham/gcc/gcc2/libjava/java/lang/Class.h" 2


extern "C" void _Jv_InitClass (jclass klass);
extern "C" void _Jv_RegisterClasses (jclass *classes);


extern "C" void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface,
                                               int meth_idx);




enum
{
  JV_STATE_NOTHING = 0,

  JV_STATE_PRELOADING = 1,
  JV_STATE_LOADING = 3,
  JV_STATE_LOADED = 5,

  JV_STATE_COMPILED = 6,

  JV_STATE_PREPARED = 7,
  JV_STATE_LINKED = 9,

  JV_STATE_IN_PROGRESS = 10,
  JV_STATE_DONE = 12,

  JV_STATE_ERROR = 14
};

struct _Jv_Field;
struct _Jv_VTable;
union _Jv_word;

struct _Jv_Constants
{
  jint size;
  jbyte *tags;
  _Jv_word *data;
};

struct _Jv_Method
{

  _Jv_Utf8Const *name;

  _Jv_Utf8Const *signature;

  _Jv_ushort accflags;

  void *ncode;


  _Jv_Utf8Const **throws;

  _Jv_Method *getNextMethod ()
  { return this + 1; }
};


union _Jv_IDispatchTable
{
  struct
  {

    jshort iindex;
    jshort itable_length;

    void **itable;
  } cls;

  struct
  {

    jshort *ioffsets;
  } iface;
};


struct _Jv_ifaces
{
  jclass *list;
  jshort len;
  jshort count;
};


union _Jv_Self
{
  char *vtable_ptr;
  jclass self;
};





class java::lang::Class : public java::lang::Object
{
public:
  static jclass forName (jstring className, jboolean initialize,
                         java::lang::ClassLoader *loader);
  static jclass forName (jstring className);
  JArray<jclass> *getClasses (void);

  java::lang::ClassLoader *getClassLoader (void)
    {
      return loader;
    }

  java::lang::reflect::Constructor *getConstructor (JArray<jclass> *);
  JArray<java::lang::reflect::Constructor *> *getConstructors (void);
  java::lang::reflect::Constructor *getDeclaredConstructor (JArray<jclass> *);
  JArray<java::lang::reflect::Constructor *> *getDeclaredConstructors (void);
  java::lang::reflect::Field *getDeclaredField (jstring);
  JArray<java::lang::reflect::Field *> *getDeclaredFields (void);
  java::lang::reflect::Method *getDeclaredMethod (jstring, JArray<jclass> *);
  JArray<java::lang::reflect::Method *> *getDeclaredMethods (void);

  JArray<jclass> *getDeclaredClasses (void);
  jclass getDeclaringClass (void);

  java::lang::reflect::Field *getField (jstring);
private:
  jint _getFields (JArray<java::lang::reflect::Field *> *result, jint offset);
  JArray<java::lang::reflect::Constructor *> *_getConstructors (jboolean);
  java::lang::reflect::Field *getField (jstring, jint);
  jint _getMethods (JArray<java::lang::reflect::Method *> *result,
                    jint offset);
  java::lang::reflect::Field *getPrivateField (jstring);
  java::lang::reflect::Method *getPrivateMethod (jstring, JArray<jclass> *);
  java::security::ProtectionDomain *getProtectionDomain0 ();

public:
  JArray<java::lang::reflect::Field *> *getFields (void);

  JArray<jclass> *getInterfaces (void);

  void getSignature (java::lang::StringBuffer *buffer);
  static jstring getSignature (JArray<jclass> *, jboolean is_constructor);
  java::lang::reflect::Method *getMethod (jstring, JArray<jclass> *);
  JArray<java::lang::reflect::Method *> *getMethods (void);

  inline jint getModifiers (void)
    {
      return accflags;
    }

  jstring getName (void);

  java::net::URL *getResource (jstring resourceName);
  java::io::InputStream *getResourceAsStream (jstring resourceName);
  JArray<jobject> *getSigners (void);

  inline jclass getSuperclass (void)
    {
      return superclass;
    }

  inline jboolean isArray (void)
    {
      return name->data[0] == '[';
    }

  inline jclass getComponentType (void)
    {
      return isArray () ? (* (jclass *) &methods) : 0;
    }

  jboolean isAssignableFrom (jclass cls);
  jboolean isInstance (jobject obj);

  inline jboolean isInterface (void)
  {
    return (accflags & java::lang::reflect::Modifier::INTERFACE) != 0;
  }

  inline jboolean isPrimitive (void)
    {
      return vtable == ((_Jv_VTable *) -1);
    }

  jobject newInstance (void);
  jstring toString (void);


  jint size (void)
    {
      return size_in_bytes;
    }


  void finalize ();



  Class (jobject cname, jbyte sig, jint len, jobject array_vtable)
  {
    using namespace java::lang::reflect;
    _Jv_Utf8Const *_Jv_makeUtf8Const (char *s, int len);



    ((_Jv_Self *)this)->vtable_ptr -= 2 * sizeof (void *);




    name = _Jv_makeUtf8Const ((char *) cname, -1);
    accflags = Modifier::PUBLIC | Modifier::FINAL | Modifier::ABSTRACT;
    method_count = sig;
    size_in_bytes = len;
    vtable = ((_Jv_VTable *) -1);
    state = JV_STATE_DONE;
    depth = -1;
    if (method_count != 'V')
      _Jv_NewArrayClass (this, __null, (_Jv_VTable *) array_vtable);
  }

  static java::lang::Class class$;

private:

  Class ();

  void checkMemberAccess (jint flags);

  void initializeClass (void);


  friend _Jv_Method *_Jv_GetMethodLocal (jclass klass, _Jv_Utf8Const *name,
                                         _Jv_Utf8Const *signature);
  friend jboolean _Jv_IsAssignableFrom(jclass, jclass);
  friend jboolean _Jv_InterfaceAssignableFrom (jclass, jclass);
  friend void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface,
                                             int method_idx);

  inline friend void
  _Jv_InitClass (jclass klass)
  {
    if (__builtin_expect (klass->state == JV_STATE_DONE, true))
      return;
    klass->initializeClass ();
  }

  friend _Jv_Method* _Jv_LookupDeclaredMethod (jclass, _Jv_Utf8Const *,
                                               _Jv_Utf8Const*);
  friend jfieldID JvGetFirstInstanceField (jclass);
  friend jint JvNumInstanceFields (jclass);
  friend jfieldID JvGetFirstStaticField (jclass);
  friend jint JvNumStaticFields (jclass);

  friend jobject _Jv_AllocObject (jclass, jint);
  friend void *_Jv_AllocObj (jint, jclass);
  friend void *_Jv_AllocPtrFreeObj (jint, jclass);
  friend void *_Jv_AllocArray (jint, jclass);

  friend jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv *, jclass, jfieldID,
                                           jboolean);
  friend jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID,
                                            jboolean);
  friend jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);

  friend jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);
  friend jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);
  friend jint JvNumMethods (jclass);
  friend jmethodID JvGetFirstMethod (jclass);


  friend class java::lang::ClassLoader;

  friend class java::io::ObjectOutputStream;
  friend class java::io::ObjectInputStream;
  friend class java::io::ObjectStreamClass;

  friend void _Jv_WaitForState (jclass, int);
  friend void _Jv_RegisterClasses (jclass *classes);
  friend void _Jv_RegisterClassHookDefault (jclass klass);
  friend void _Jv_RegisterInitiatingLoader (jclass,java::lang::ClassLoader*);
  friend void _Jv_UnregisterClass (jclass);
  friend jclass _Jv_FindClass (_Jv_Utf8Const *name,
                               java::lang::ClassLoader *loader);
  friend jclass _Jv_FindClassInCache (_Jv_Utf8Const *name,
                                      java::lang::ClassLoader *loader);
  friend void _Jv_NewArrayClass (jclass element,
                                 java::lang::ClassLoader *loader,
                                 _Jv_VTable *array_vtable = 0);
  friend jclass _Jv_NewClass (_Jv_Utf8Const *name, jclass superclass,
                              java::lang::ClassLoader *loader);

  friend void _Jv_PrepareCompiledClass (jclass);
  friend void _Jv_PrepareConstantTimeTables (jclass);
  friend jshort _Jv_GetInterfaces (jclass, _Jv_ifaces *);
  friend void _Jv_GenerateITable (jclass, _Jv_ifaces *, jshort *);
  friend jstring _Jv_GetMethodString(jclass, _Jv_Utf8Const *);
  friend jshort _Jv_AppendPartialITable (jclass, jclass, void **, jshort);
  friend jshort _Jv_FindIIndex (jclass *, jshort *, jshort);



  inline friend jclass
  _Jv_GetArrayClass (jclass klass, java::lang::ClassLoader *loader)
  {
    if (__builtin_expect (!klass->arrayclass, false))
      _Jv_NewArrayClass (klass, loader);
    return klass->arrayclass;
  }


  friend jboolean _Jv_IsInterpretedClass (jclass);
  friend void _Jv_InitField (jobject, jclass, _Jv_Field*);
  friend int _Jv_DetermineVTableIndex (jclass, _Jv_Utf8Const *,
                                       _Jv_Utf8Const*);
  friend void _Jv_InitField (jobject, jclass, int);
  friend _Jv_word _Jv_ResolvePoolEntry (jclass, int);
  friend _Jv_Method *_Jv_SearchMethodInClass (jclass cls, jclass klass,
                                              _Jv_Utf8Const *method_name,
                                              _Jv_Utf8Const *method_signature);

  friend void _Jv_PrepareClass (jclass);

  friend class _Jv_ClassReader;
  friend class _Jv_InterpClass;
  friend class _Jv_InterpMethod;
  friend class _Jv_InterpMethodInvocation;







  jclass next;

  _Jv_Utf8Const *name;

  _Jv_ushort accflags;

  jclass superclass;

  _Jv_Constants constants;


  _Jv_Method *methods;


  jshort method_count;

  jshort vtable_method_count;

  _Jv_Field *fields;

  jint size_in_bytes;

  jshort field_count;

  jshort static_field_count;

  _Jv_VTable *vtable;

  jclass *interfaces;

  java::lang::ClassLoader *loader;

  jshort interface_count;

  jbyte state;


  java::lang::Thread *thread;

  jshort depth;

  jclass *ancestors;

  _Jv_IDispatchTable *idt;

  jclass arrayclass;

  java::security::ProtectionDomain *protectionDomain;
};
# 18 "/home/oldham/gcc/gcc2/libjava/gcj/cni.h" 2





extern inline jobject
JvAllocObject (jclass cls)
{
  return _Jv_AllocObject (cls, cls->size());
}

extern inline jobject
JvAllocObject (jclass cls, jsize sz)
{
  return _Jv_AllocObject (cls, sz);
}

extern "C" jstring _Jv_NewStringUTF (const char *bytes);
extern "C" void _Jv_InitClass (jclass);

extern inline void
JvInitClass (jclass cls)
{
  return _Jv_InitClass (cls);
}

extern inline jstring
JvAllocString (jsize sz)
{
  return _Jv_AllocString (sz);
}

extern inline jstring
JvNewString (const jchar *chars, jsize len)
{
  return _Jv_NewString (chars, len);
}

extern inline jstring
JvNewStringLatin1 (const char *bytes, jsize len)
{
  return _Jv_NewStringLatin1 (bytes, len);
}

extern inline jstring
JvNewStringLatin1 (const char *bytes)
{
  return _Jv_NewStringLatin1 (bytes, strlen (bytes));
}

extern inline jchar *
_Jv_GetStringChars (jstring str)
{
  return (jchar*)((char*) str->data + str->boffset);
}

extern inline jchar*
JvGetStringChars (jstring str)
{
  return _Jv_GetStringChars (str);
}

extern inline jsize
JvGetStringUTFLength (jstring string)
{
  return _Jv_GetStringUTFLength (string);
}

extern inline jsize
JvGetStringUTFRegion (jstring str, jsize start, jsize len, char *buf)
{
  return _Jv_GetStringUTFRegion (str, start, len, buf);
}

extern inline jstring
JvNewStringUTF (const char *bytes)
{
  return _Jv_NewStringUTF (bytes);
}

class JvSynchronize
{
private:
  jobject obj;
public:
  JvSynchronize (const jobject &o) : obj (o)
    { _Jv_MonitorEnter (obj); }
  ~JvSynchronize ()
    { _Jv_MonitorExit (obj); }
};


extern inline void *
JvMalloc (jsize size)
{
  return _Jv_Malloc (size);
}

extern inline void
JvFree (void *ptr)
{
  return _Jv_Free (ptr);
}

extern inline jint
JvCreateJavaVM (void* vm_args)
{
  return _Jv_CreateJavaVM (vm_args);
}

extern inline java::lang::Thread*
JvAttachCurrentThread (jstring name, java::lang::ThreadGroup* group)
{
  return _Jv_AttachCurrentThread (name, group);
}

extern inline jint
JvDetachCurrentThread (void)
{
  return _Jv_DetachCurrentThread ();
}
# 20 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "/home/oldham/gcc/gcc2/libjava/include/jvm.h" 1
# 16 "/home/oldham/gcc/gcc2/libjava/include/jvm.h"
# 1 "/home/oldham/gcc/gcc2/libjava/include/java-assert.h" 1
# 16 "/home/oldham/gcc/gcc2/libjava/include/java-assert.h"
void _Jv_Abort (const char *, const char *, int, const char *)
  __attribute__ ((__noreturn__));
# 17 "/home/oldham/gcc/gcc2/libjava/include/jvm.h" 2
# 1 "include/java-threads.h" 1
# 15 "include/java-threads.h"
# 1 "include/config.h" 1
# 16 "include/java-threads.h" 2

# 1 "/usr/include/stdlib.h" 1 3
# 33 "/usr/include/stdlib.h" 3
# 1 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 1 3
# 34 "/usr/include/stdlib.h" 2 3

extern "C" {





typedef struct
  {
    int quot;
    int rem;
  } div_t;



typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;





__extension__ typedef struct
  {
    long long int quot;
    long long int rem;
  } lldiv_t;
# 80 "/usr/include/stdlib.h" 3
extern size_t __ctype_get_mb_cur_max (void) throw ();



extern double atof (__const char *__nptr) throw ();

extern int atoi (__const char *__nptr) throw ();

extern long int atol (__const char *__nptr) throw ();



__extension__ extern long long int atoll (__const char *__nptr) throw ();



extern double strtod (__const char *__restrict __nptr, char **__restrict __endptr) throw ();




extern float strtof (__const char *__restrict __nptr, char **__restrict __endptr) throw ();


extern long double strtold (__const char *__restrict __nptr, char **__restrict __endptr) throw ();




extern long int strtol (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ();


extern unsigned long int strtoul (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ();





__extension__
extern long long int strtoq (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ();


__extension__
extern unsigned long long int strtouq (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ();
# 132 "/usr/include/stdlib.h" 3
__extension__
extern long long int strtoll (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ();


__extension__
extern unsigned long long int strtoull (__const char *__restrict __nptr, char **__restrict __endptr, int __base) throw ();
# 161 "/usr/include/stdlib.h" 3
extern long int __strtol_l (__const char *__restrict __nptr, char **__restrict __endptr, int __base, __locale_t __loc) throw ();



extern unsigned long int __strtoul_l (__const char *__restrict __nptr, char **__restrict __endptr, int __base, __locale_t __loc) throw ();



__extension__
extern long long int __strtoll_l (__const char *__restrict __nptr, char **__restrict __endptr, int __base, __locale_t __loc) throw ();



__extension__
extern unsigned long long int __strtoull_l (__const char *__restrict __nptr, char **__restrict __endptr, int __base, __locale_t __loc) throw ();





extern double __strtod_l (__const char *__restrict __nptr, char **__restrict __endptr, __locale_t __loc) throw ();


extern float __strtof_l (__const char *__restrict __nptr, char **__restrict __endptr, __locale_t __loc) throw ();


extern long double __strtold_l (__const char *__restrict __nptr, char **__restrict __endptr, __locale_t __loc) throw ();
# 196 "/usr/include/stdlib.h" 3
extern double __strtod_internal (__const char *__restrict __nptr, char **__restrict __endptr, int __group) throw ();


extern float __strtof_internal (__const char *__restrict __nptr, char **__restrict __endptr, int __group) throw ();

extern long double __strtold_internal (__const char * __restrict __nptr, char **__restrict __endptr, int __group) throw ();




extern long int __strtol_internal (__const char *__restrict __nptr, char **__restrict __endptr, int __base, int __group) throw ();





extern unsigned long int __strtoul_internal (__const char * __restrict __nptr, char **__restrict __endptr, int __base, int __group) throw ();







__extension__
extern long long int __strtoll_internal (__const char *__restrict __nptr, char **__restrict __endptr, int __base, int __group) throw ();





__extension__
extern unsigned long long int __strtoull_internal (__const char * __restrict __nptr, char ** __restrict __endptr, int __base, int __group) throw ();
# 242 "/usr/include/stdlib.h" 3
extern __inline double
strtod (__const char *__restrict __nptr, char **__restrict __endptr) throw ()
{
  return __strtod_internal (__nptr, __endptr, 0);
}
extern __inline long int
strtol (__const char *__restrict __nptr, char **__restrict __endptr,
        int __base) throw ()
{
  return __strtol_internal (__nptr, __endptr, __base, 0);
}
extern __inline unsigned long int
strtoul (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base) throw ()
{
  return __strtoul_internal (__nptr, __endptr, __base, 0);
}


extern __inline float
strtof (__const char *__restrict __nptr, char **__restrict __endptr) throw ()
{
  return __strtof_internal (__nptr, __endptr, 0);
}
extern __inline long double
strtold (__const char *__restrict __nptr, char **__restrict __endptr) throw ()
{
  return __strtold_internal (__nptr, __endptr, 0);
}



__extension__ extern __inline long long int
strtoq (__const char *__restrict __nptr, char **__restrict __endptr,
        int __base) throw ()
{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
strtouq (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base) throw ()
{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}



__extension__ extern __inline long long int
strtoll (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base) throw ()
{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
strtoull (__const char * __restrict __nptr, char **__restrict __endptr,
          int __base) throw ()
{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}


extern __inline double
atof (__const char *__nptr) throw ()
{
  return strtod (__nptr, (char **) __null);
}
extern __inline int
atoi (__const char *__nptr) throw ()
{
  return (int) strtol (__nptr, (char **) __null, 10);
}
extern __inline long int
atol (__const char *__nptr) throw ()
{
  return strtol (__nptr, (char **) __null, 10);
}


__extension__ extern __inline long long int
atoll (__const char *__nptr) throw ()
{
  return strtoll (__nptr, (char **) __null, 10);
}
# 333 "/usr/include/stdlib.h" 3
extern char *l64a (long int __n) throw ();


extern long int a64l (__const char *__s) throw ();


# 1 "/usr/include/sys/types.h" 1 3
# 28 "/usr/include/sys/types.h" 3
extern "C" {

# 1 "/usr/include/bits/types.h" 1 3
# 29 "/usr/include/bits/types.h" 3
# 1 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 1 3
# 30 "/usr/include/bits/types.h" 2 3


typedef unsigned char __u_char;
typedef unsigned short __u_short;
typedef unsigned int __u_int;
typedef unsigned long __u_long;

__extension__ typedef unsigned long long int __u_quad_t;
__extension__ typedef long long int __quad_t;
# 49 "/usr/include/bits/types.h" 3
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;

__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;

typedef __quad_t *__qaddr_t;

typedef __u_quad_t __dev_t;
typedef __u_int __uid_t;
typedef __u_int __gid_t;
typedef __u_long __ino_t;
typedef __u_int __mode_t;
typedef __u_int __nlink_t;
typedef long int __off_t;
typedef __quad_t __loff_t;
typedef int __pid_t;
typedef int __ssize_t;
typedef long int __rlim_t;
typedef __quad_t __rlim64_t;
typedef __u_int __id_t;

typedef struct
  {
    int __val[2];
  } __fsid_t;


typedef int __daddr_t;
typedef char *__caddr_t;
typedef long int __time_t;
typedef long int __swblk_t;

typedef long int __clock_t;


typedef unsigned long int __fd_mask;
# 100 "/usr/include/bits/types.h" 3
typedef struct
  {



    __fd_mask fds_bits[1024 / (8 * sizeof (__fd_mask))];





  } __fd_set;


typedef int __key_t;


typedef unsigned short int __ipc_pid_t;





typedef long int __blkcnt_t;
typedef __quad_t __blkcnt64_t;


typedef __u_long __fsblkcnt_t;
typedef __u_quad_t __fsblkcnt64_t;


typedef __u_long __fsfilcnt_t;
typedef __u_quad_t __fsfilcnt64_t;


typedef __u_long __ino64_t;


typedef __loff_t __off64_t;


typedef long int __t_scalar_t;
typedef unsigned long int __t_uscalar_t;


typedef int __intptr_t;




# 1 "/usr/include/bits/pthreadtypes.h" 1 3
# 23 "/usr/include/bits/pthreadtypes.h" 3
# 1 "/usr/include/bits/sched.h" 1 3
# 68 "/usr/include/bits/sched.h" 3
struct __sched_param
  {
    int sched_priority;
  };
# 24 "/usr/include/bits/pthreadtypes.h" 2 3


struct _pthread_fastlock
{
  long int __status;
  int __spinlock;
};



typedef struct _pthread_descr_struct *_pthread_descr;





typedef struct
{
  int __detachstate;
  int __schedpolicy;
  struct __sched_param __schedparam;
  int __inheritsched;
  int __scope;
  size_t __guardsize;
  int __stackaddr_set;
  void *__stackaddr;
  size_t __stacksize;
} pthread_attr_t;



typedef struct
{
  struct _pthread_fastlock __c_lock;
  _pthread_descr __c_waiting;
} pthread_cond_t;



typedef struct
{
  int __dummy;
} pthread_condattr_t;


typedef unsigned int pthread_key_t;





typedef struct
{
  int __m_reserved;
  int __m_count;
  _pthread_descr __m_owner;
  int __m_kind;
  struct _pthread_fastlock __m_lock;
} pthread_mutex_t;



typedef struct
{
  int __mutexkind;
} pthread_mutexattr_t;



typedef int pthread_once_t;




typedef struct _pthread_rwlock_t
{
  struct _pthread_fastlock __rw_lock;
  int __rw_readers;
  _pthread_descr __rw_writer;
  _pthread_descr __rw_read_waiting;
  _pthread_descr __rw_write_waiting;
  int __rw_kind;
  int __rw_pshared;
} pthread_rwlock_t;



typedef struct
{
  int __lockkind;
  int __pshared;
} pthread_rwlockattr_t;




typedef unsigned long int pthread_t;
# 151 "/usr/include/bits/types.h" 2 3
# 31 "/usr/include/sys/types.h" 2 3


typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;


typedef __loff_t loff_t;



typedef __ino_t ino_t;






typedef __ino64_t ino64_t;




typedef __dev_t dev_t;




typedef __gid_t gid_t;




typedef __mode_t mode_t;




typedef __nlink_t nlink_t;




typedef __uid_t uid_t;





typedef __off_t off_t;






typedef __off64_t off64_t;




typedef __pid_t pid_t;




typedef __id_t id_t;



typedef __ssize_t ssize_t;




typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;



typedef __key_t key_t;






# 1 "/usr/include/time.h" 1 3
# 60 "/usr/include/time.h" 3
typedef __clock_t clock_t;
# 71 "/usr/include/time.h" 3
typedef __time_t time_t;
# 123 "/usr/include/sys/types.h" 2 3


# 1 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 1 3
# 126 "/usr/include/sys/types.h" 2 3



typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
# 169 "/usr/include/sys/types.h" 3
typedef int int8_t __attribute__ ((__mode__ (__QI__)));
typedef int int16_t __attribute__ ((__mode__ (__HI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
typedef int int64_t __attribute__ ((__mode__ (__DI__)));


typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));

typedef int register_t __attribute__ ((__mode__ (__word__)));
# 191 "/usr/include/sys/types.h" 3
# 1 "/usr/include/endian.h" 1 3
# 35 "/usr/include/endian.h" 3
# 1 "/usr/include/bits/endian.h" 1 3
# 36 "/usr/include/endian.h" 2 3
# 192 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/select.h" 1 3
# 31 "/usr/include/sys/select.h" 3
# 1 "/usr/include/bits/select.h" 1 3
# 32 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/sigset.h" 1 3
# 23 "/usr/include/bits/sigset.h" 3
typedef int __sig_atomic_t;




typedef struct
  {
    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
  } __sigset_t;
# 35 "/usr/include/sys/select.h" 2 3



# 1 "/usr/include/time.h" 1 3
# 83 "/usr/include/time.h" 3
struct timespec
  {
    long int tv_sec;
    long int tv_nsec;
  };
# 39 "/usr/include/sys/select.h" 2 3

extern "C" {





struct timeval;

typedef __fd_mask fd_mask;


typedef __fd_set fd_set;
# 74 "/usr/include/sys/select.h" 3
extern int __select (int __nfds, __fd_set *__readfds, __fd_set *__writefds, __fd_set *__exceptfds, struct timeval *__timeout) throw ();


extern int select (int __nfds, __fd_set *__readfds, __fd_set *__writefds, __fd_set *__exceptfds, struct timeval *__timeout) throw ();
# 87 "/usr/include/sys/select.h" 3
extern int pselect (int __nfds, __fd_set *__readfds, __fd_set *__writefds, __fd_set *__exceptfds, const struct timespec *__timeout, const __sigset_t *__sigmask) throw ();





}
# 195 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/sysmacros.h" 1 3
# 198 "/usr/include/sys/types.h" 2 3





typedef __blkcnt_t blkcnt_t;
typedef __fsblkcnt_t fsblkcnt_t;
typedef __fsfilcnt_t fsfilcnt_t;







typedef __blkcnt64_t blkcnt64_t;
typedef __fsblkcnt64_t fsblkcnt64_t;
typedef __fsfilcnt64_t fsfilcnt64_t;


}
# 340 "/usr/include/stdlib.h" 2 3






extern int32_t random (void) throw ();


extern void srandom (unsigned int __seed) throw ();





extern void * initstate (unsigned int __seed, void * __statebuf, size_t __statelen) throw ();




extern void * setstate (void * __statebuf) throw ();







struct random_data
  {
    int32_t *fptr;
    int32_t *rptr;
    int32_t *state;
    int rand_type;
    int rand_deg;
    int rand_sep;
    int32_t *end_ptr;
  };

extern int random_r (struct random_data *__restrict __buf, int32_t *__restrict __result) throw ();


extern int srandom_r (unsigned int __seed, struct random_data *__buf) throw ();

extern int initstate_r (unsigned int __seed, void * __restrict __statebuf, size_t __statelen, struct random_data *__restrict __buf) throw ();




extern int setstate_r (void * __restrict __statebuf, struct random_data *__restrict __buf) throw ();






extern int rand (void) throw ();

extern void srand (unsigned int __seed) throw ();



extern int rand_r (unsigned int *__seed) throw ();







extern double drand48 (void) throw ();
extern double erand48 (unsigned short int __xsubi[3]) throw ();


extern long int lrand48 (void) throw ();
extern long int nrand48 (unsigned short int __xsubi[3]) throw ();


extern long int mrand48 (void) throw ();
extern long int jrand48 (unsigned short int __xsubi[3]) throw ();


extern void srand48 (long int __seedval) throw ();
extern unsigned short int *seed48 (unsigned short int __seed16v[3]) throw ();
extern void lcong48 (unsigned short int __param[7]) throw ();


struct drand48_data
  {
    unsigned short int x[3];
    unsigned short int a[3];
    unsigned short int c;
    unsigned short int old_x[3];
    int init;
  };



extern int drand48_r (struct drand48_data *__restrict __buffer, double *__restrict __result) throw ();

extern int erand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, double *__restrict __result) throw ();




extern int lrand48_r (struct drand48_data *__restrict __buffer, long int *__restrict __result) throw ();

extern int nrand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, long int *__restrict __result) throw ();




extern int mrand48_r (struct drand48_data *__restrict __buffer, long int *__restrict __result) throw ();

extern int jrand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, long int *__restrict __result) throw ();




extern int srand48_r (long int __seedval, struct drand48_data *__buffer) throw ();

extern int seed48_r (unsigned short int __seed16v[3], struct drand48_data *__buffer) throw ();


extern int lcong48_r (unsigned short int __param[7], struct drand48_data *__buffer) throw ();
# 474 "/usr/include/stdlib.h" 3
extern void * malloc (size_t __size) throw ();

extern void * calloc (size_t __nmemb, size_t __size) throw ();





extern void * realloc (void * __ptr, size_t __size) throw ();

extern void free (void * __ptr) throw ();



extern void cfree (void * __ptr) throw ();



# 1 "/usr/include/alloca.h" 1 3
# 25 "/usr/include/alloca.h" 3
# 1 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 1 3
# 26 "/usr/include/alloca.h" 2 3

extern "C" {





extern void * alloca (size_t __size) throw ();





}
# 493 "/usr/include/stdlib.h" 2 3




extern void * valloc (size_t __size) throw ();




extern void abort (void) throw () __attribute__ ((__noreturn__));



extern int atexit (void (*__func) (void)) throw ();




extern int __on_exit (void (*__func) (int __status, void * __arg), void * __arg) throw ();

extern int on_exit (void (*__func) (int __status, void * __arg), void * __arg) throw ();






extern void exit (int __status) throw () __attribute__ ((__noreturn__));




extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));




extern char *getenv (__const char *__name) throw ();



extern char *__secure_getenv (__const char *__name) throw ();





extern int putenv (char *__string) throw ();





extern int setenv (__const char *__name, __const char *__value, int __replace) throw ();



extern void unsetenv (__const char *__name) throw ();






extern int clearenv (void) throw ();
# 566 "/usr/include/stdlib.h" 3
extern char *mktemp (char *__template) throw ();






extern int mkstemp (char *__template) throw ();




extern int system (__const char *__command) throw ();






extern char *canonicalize_file_name (__const char *__name) throw ();
# 595 "/usr/include/stdlib.h" 3
extern char *realpath (__const char *__restrict __name, char *__restrict __resolved) throw ();







typedef int (*__compar_fn_t) (__const void *, __const void *);


typedef __compar_fn_t comparison_fn_t;





extern void * bsearch (__const void * __key, __const void * __base, size_t __nmemb, size_t __size, __compar_fn_t __compar);





extern void qsort (void * __base, size_t __nmemb, size_t __size, __compar_fn_t __compar);




extern int abs (int __x) throw () __attribute__ ((__const__));
extern long int labs (long int __x) throw () __attribute__ ((__const__));

__extension__ extern long long int llabs (long long int __x) throw ()
     __attribute__ ((__const__));






extern div_t div (int __numer, int __denom) throw () __attribute__ ((__const__));
extern ldiv_t ldiv (long int __numer, long int __denom) throw ()
     __attribute__ ((__const__));

__extension__ extern lldiv_t lldiv (long long int __numer, long long int __denom) throw ()

     __attribute__ ((__const__));
# 651 "/usr/include/stdlib.h" 3
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) throw ();





extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) throw ();





extern char *gcvt (double __value, int __ndigit, char *__buf) throw ();


extern char *qecvt (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) throw ();

extern char *qfcvt (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) throw ();

extern char *qgcvt (long double __value, int __ndigit, char *__buf) throw ();





extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) throw ();


extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) throw ();



extern int qecvt_r (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) throw ();


extern int qfcvt_r (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) throw ();
# 695 "/usr/include/stdlib.h" 3
extern int mblen (__const char *__s, size_t __n) throw ();


extern int mbtowc (wchar_t *__restrict __pwc, __const char *__restrict __s, size_t __n) throw ();



extern int wctomb (char *__s, wchar_t __wchar) throw ();



extern size_t mbstowcs (wchar_t *__restrict __pwcs, __const char *__restrict __s, size_t __n) throw ();


extern size_t wcstombs (char *__restrict __s, __const wchar_t *__restrict __pwcs, size_t __n) throw ();
# 718 "/usr/include/stdlib.h" 3
extern int rpmatch (__const char *__response) throw ();
# 729 "/usr/include/stdlib.h" 3
extern int getsubopt (char **__restrict __optionp, __const char *__const *__restrict __tokens, char **__restrict __valuep) throw ();
# 738 "/usr/include/stdlib.h" 3
extern void setkey (__const char *__key) throw ();







extern int grantpt (int __fd) throw ();



extern int unlockpt (int __fd) throw ();




extern char *ptsname (int __fd) throw ();






extern int ptsname_r (int __fd, char *__buf, size_t __buflen) throw ();


extern int getpt (void) throw ();





}
# 18 "include/java-threads.h" 2

# 1 "/usr/include/unistd.h" 1 3
# 28 "/usr/include/unistd.h" 3
extern "C" {
# 175 "/usr/include/unistd.h" 3
# 1 "/usr/include/bits/posix_opt.h" 1 3
# 176 "/usr/include/unistd.h" 2 3



# 1 "/usr/include/bits/environments.h" 1 3
# 23 "/usr/include/bits/environments.h" 3
# 1 "/usr/include/bits/wordsize.h" 1 3
# 24 "/usr/include/bits/environments.h" 2 3
# 180 "/usr/include/unistd.h" 2 3
# 199 "/usr/include/unistd.h" 3
# 1 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 1 3
# 200 "/usr/include/unistd.h" 2 3
# 235 "/usr/include/unistd.h" 3
typedef __intptr_t intptr_t;
# 248 "/usr/include/unistd.h" 3
extern int access (__const char *__name, int __type) throw ();




extern int euidaccess (__const char *__name, int __type) throw ();
# 277 "/usr/include/unistd.h" 3
extern __off_t __lseek (int __fd, __off_t __offset, int __whence) throw ();

extern __off_t lseek (int __fd, __off_t __offset, int __whence) throw ();
# 291 "/usr/include/unistd.h" 3
extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) throw ();



extern int __close (int __fd) throw ();
extern int close (int __fd) throw ();



extern ssize_t __read (int __fd, void * __buf, size_t __nbytes) throw ();
extern ssize_t read (int __fd, void * __buf, size_t __nbytes) throw ();


extern ssize_t __write (int __fd, __const void * __buf, size_t __n) throw ();
extern ssize_t write (int __fd, __const void * __buf, size_t __n) throw ();





extern ssize_t __pread64 (int __fd, void * __buf, size_t __nbytes, __off64_t __offset) throw ();



extern ssize_t __pwrite64 (int __fd, __const void * __buf, size_t __n, __off64_t __offset) throw ();



extern ssize_t pread (int __fd, void * __buf, size_t __nbytes, __off_t __offset) throw ();

extern ssize_t pwrite (int __fd, __const void * __buf, size_t __n, __off_t __offset) throw ();
# 338 "/usr/include/unistd.h" 3
extern ssize_t pread64 (int __fd, void * __buf, size_t __nbytes, __off64_t __offset) throw ();

extern ssize_t pwrite64 (int __fd, __const void * __buf, size_t __n, __off64_t __offset) throw ();
# 349 "/usr/include/unistd.h" 3
extern int pipe (int __pipedes[2]) throw ();
# 358 "/usr/include/unistd.h" 3
extern unsigned int alarm (unsigned int __seconds) throw ();
# 367 "/usr/include/unistd.h" 3
extern unsigned int sleep (unsigned int __seconds) throw ();






extern unsigned int ualarm (unsigned int __value, unsigned int __interval) throw ();




extern void usleep (unsigned int __useconds) throw ();





extern int pause (void) throw ();



extern int chown (__const char *__file, __uid_t __owner, __gid_t __group) throw ();




extern int fchown (int __fd, __uid_t __owner, __gid_t __group) throw ();




extern int lchown (__const char *__file, __uid_t __owner, __gid_t __group) throw ();





extern int chdir (__const char *__path) throw ();



extern int fchdir (int __fd) throw ();
# 419 "/usr/include/unistd.h" 3
extern char *getcwd (char *__buf, size_t __size) throw ();





extern char *get_current_dir_name (void) throw ();






extern char *getwd (char *__buf) throw ();




extern int dup (int __fd) throw ();


extern int dup2 (int __fd, int __fd2) throw ();


extern char **__environ;

extern char **environ;





extern int execve (__const char *__path, char *__const __argv[], char *__const __envp[]) throw ();





extern int fexecve (int __fd, char *__const __argv[], char *__const __envp[]) throw ();






extern int execv (__const char *__path, char *__const __argv[]) throw ();



extern int execle (__const char *__path, __const char *__arg, ...) throw ();



extern int execl (__const char *__path, __const char *__arg, ...) throw ();



extern int execvp (__const char *__file, char *__const __argv[]) throw ();




extern int execlp (__const char *__file, __const char *__arg, ...) throw ();




extern int nice (int __inc) throw ();




extern void _exit (int __status) __attribute__ ((__noreturn__));





# 1 "/usr/include/bits/confname.h" 1 3
# 25 "/usr/include/bits/confname.h" 3
enum
  {
    _PC_LINK_MAX,

    _PC_MAX_CANON,

    _PC_MAX_INPUT,

    _PC_NAME_MAX,

    _PC_PATH_MAX,

    _PC_PIPE_BUF,

    _PC_CHOWN_RESTRICTED,

    _PC_NO_TRUNC,

    _PC_VDISABLE,

    _PC_SYNC_IO,

    _PC_ASYNC_IO,

    _PC_PRIO_IO,

    _PC_SOCK_MAXBUF,

    _PC_FILESIZEBITS

  };


enum
  {
    _SC_ARG_MAX,

    _SC_CHILD_MAX,

    _SC_CLK_TCK,

    _SC_NGROUPS_MAX,

    _SC_OPEN_MAX,

    _SC_STREAM_MAX,

    _SC_TZNAME_MAX,

    _SC_JOB_CONTROL,

    _SC_SAVED_IDS,

    _SC_REALTIME_SIGNALS,

    _SC_PRIORITY_SCHEDULING,

    _SC_TIMERS,

    _SC_ASYNCHRONOUS_IO,

    _SC_PRIORITIZED_IO,

    _SC_SYNCHRONIZED_IO,

    _SC_FSYNC,

    _SC_MAPPED_FILES,

    _SC_MEMLOCK,

    _SC_MEMLOCK_RANGE,

    _SC_MEMORY_PROTECTION,

    _SC_MESSAGE_PASSING,

    _SC_SEMAPHORES,

    _SC_SHARED_MEMORY_OBJECTS,

    _SC_AIO_LISTIO_MAX,

    _SC_AIO_MAX,

    _SC_AIO_PRIO_DELTA_MAX,

    _SC_DELAYTIMER_MAX,

    _SC_MQ_OPEN_MAX,

    _SC_MQ_PRIO_MAX,

    _SC_VERSION,

    _SC_PAGESIZE,


    _SC_RTSIG_MAX,

    _SC_SEM_NSEMS_MAX,

    _SC_SEM_VALUE_MAX,

    _SC_SIGQUEUE_MAX,

    _SC_TIMER_MAX,




    _SC_BC_BASE_MAX,

    _SC_BC_DIM_MAX,

    _SC_BC_SCALE_MAX,

    _SC_BC_STRING_MAX,

    _SC_COLL_WEIGHTS_MAX,

    _SC_EQUIV_CLASS_MAX,

    _SC_EXPR_NEST_MAX,

    _SC_LINE_MAX,

    _SC_RE_DUP_MAX,

    _SC_CHARCLASS_NAME_MAX,


    _SC_2_VERSION,

    _SC_2_C_BIND,

    _SC_2_C_DEV,

    _SC_2_FORT_DEV,

    _SC_2_FORT_RUN,

    _SC_2_SW_DEV,

    _SC_2_LOCALEDEF,


    _SC_PII,

    _SC_PII_XTI,

    _SC_PII_SOCKET,

    _SC_PII_INTERNET,

    _SC_PII_OSI,

    _SC_POLL,

    _SC_SELECT,

    _SC_UIO_MAXIOV,

    _SC_PII_INTERNET_STREAM,

    _SC_PII_INTERNET_DGRAM,

    _SC_PII_OSI_COTS,

    _SC_PII_OSI_CLTS,

    _SC_PII_OSI_M,

    _SC_T_IOV_MAX,



    _SC_THREADS,

    _SC_THREAD_SAFE_FUNCTIONS,

    _SC_GETGR_R_SIZE_MAX,

    _SC_GETPW_R_SIZE_MAX,

    _SC_LOGIN_NAME_MAX,

    _SC_TTY_NAME_MAX,

    _SC_THREAD_DESTRUCTOR_ITERATIONS,

    _SC_THREAD_KEYS_MAX,

    _SC_THREAD_STACK_MIN,

    _SC_THREAD_THREADS_MAX,

    _SC_THREAD_ATTR_STACKADDR,

    _SC_THREAD_ATTR_STACKSIZE,

    _SC_THREAD_PRIORITY_SCHEDULING,

    _SC_THREAD_PRIO_INHERIT,

    _SC_THREAD_PRIO_PROTECT,

    _SC_THREAD_PROCESS_SHARED,


    _SC_NPROCESSORS_CONF,

    _SC_NPROCESSORS_ONLN,

    _SC_PHYS_PAGES,

    _SC_AVPHYS_PAGES,

    _SC_ATEXIT_MAX,

    _SC_PASS_MAX,


    _SC_XOPEN_VERSION,

    _SC_XOPEN_XCU_VERSION,

    _SC_XOPEN_UNIX,

    _SC_XOPEN_CRYPT,

    _SC_XOPEN_ENH_I18N,

    _SC_XOPEN_SHM,


    _SC_2_CHAR_TERM,

    _SC_2_C_VERSION,

    _SC_2_UPE,


    _SC_XOPEN_XPG2,

    _SC_XOPEN_XPG3,

    _SC_XOPEN_XPG4,


    _SC_CHAR_BIT,

    _SC_CHAR_MAX,

    _SC_CHAR_MIN,

    _SC_INT_MAX,

    _SC_INT_MIN,

    _SC_LONG_BIT,

    _SC_WORD_BIT,

    _SC_MB_LEN_MAX,

    _SC_NZERO,

    _SC_SSIZE_MAX,

    _SC_SCHAR_MAX,

    _SC_SCHAR_MIN,

    _SC_SHRT_MAX,

    _SC_SHRT_MIN,

    _SC_UCHAR_MAX,

    _SC_UINT_MAX,

    _SC_ULONG_MAX,

    _SC_USHRT_MAX,


    _SC_NL_ARGMAX,

    _SC_NL_LANGMAX,

    _SC_NL_MSGMAX,

    _SC_NL_NMAX,

    _SC_NL_SETMAX,

    _SC_NL_TEXTMAX,


    _SC_XBS5_ILP32_OFF32,

    _SC_XBS5_ILP32_OFFBIG,

    _SC_XBS5_LP64_OFF64,

    _SC_XBS5_LPBIG_OFFBIG,


    _SC_XOPEN_LEGACY,

    _SC_XOPEN_REALTIME,

    _SC_XOPEN_REALTIME_THREADS

  };





enum
  {
    _CS_PATH




    ,
    _CS_LFS_CFLAGS = 1000,

    _CS_LFS_LDFLAGS,

    _CS_LFS_LIBS,

    _CS_LFS_LINTFLAGS,

    _CS_LFS64_CFLAGS,

    _CS_LFS64_LDFLAGS,

    _CS_LFS64_LIBS,

    _CS_LFS64_LINTFLAGS




    ,
    _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,

    _CS_XBS5_ILP32_OFF32_LDFLAGS,

    _CS_XBS5_ILP32_OFF32_LIBS,

    _CS_XBS5_ILP32_OFF32_LINTFLAGS,

    _CS_XBS5_ILP32_OFFBIG_CFLAGS,

    _CS_XBS5_ILP32_OFFBIG_LDFLAGS,

    _CS_XBS5_ILP32_OFFBIG_LIBS,

    _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,

    _CS_XBS5_LP64_OFF64_CFLAGS,

    _CS_XBS5_LP64_OFF64_LDFLAGS,

    _CS_XBS5_LP64_OFF64_LIBS,

    _CS_XBS5_LP64_OFF64_LINTFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_CFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_LIBS,

    _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS


  };
# 498 "/usr/include/unistd.h" 2 3


extern long int pathconf (__const char *__path, int __name) throw ();


extern long int fpathconf (int __fd, int __name) throw ();


extern long int sysconf (int __name) throw ();



extern size_t confstr (int __name, char *__buf, size_t __len) throw ();




extern __pid_t __getpid (void) throw ();
extern __pid_t getpid (void) throw ();


extern __pid_t getppid (void) throw ();




extern __pid_t getpgrp (void) throw ();
# 534 "/usr/include/unistd.h" 3
extern __pid_t __getpgid (__pid_t __pid) throw ();

extern __pid_t getpgid (__pid_t __pid) throw ();






extern int __setpgid (__pid_t __pid, __pid_t __pgid) throw ();
extern int setpgid (__pid_t __pid, __pid_t __pgid) throw ();
# 561 "/usr/include/unistd.h" 3
extern int setpgrp (void) throw ();
# 579 "/usr/include/unistd.h" 3
extern __pid_t setsid (void) throw ();



extern __pid_t getsid (__pid_t __pid) throw ();



extern __uid_t getuid (void) throw ();


extern __uid_t geteuid (void) throw ();


extern __gid_t getgid (void) throw ();


extern __gid_t getegid (void) throw ();




extern int getgroups (int __size, __gid_t __list[]) throw ();



extern int group_member (__gid_t __gid) throw ();






extern int setuid (__uid_t __uid) throw ();




extern int setreuid (__uid_t __ruid, __uid_t __euid) throw ();




extern int seteuid (__uid_t __uid) throw ();






extern int setgid (__gid_t __gid) throw ();




extern int setregid (__gid_t __rgid, __gid_t __egid) throw ();




extern int setegid (__gid_t __gid) throw ();






extern __pid_t __fork (void) throw ();
extern __pid_t fork (void) throw ();






extern __pid_t vfork (void) throw ();





extern char *ttyname (int __fd) throw ();



extern int ttyname_r (int __fd, char *__buf, size_t __buflen) throw ();



extern int isatty (int __fd) throw ();




extern int ttyslot (void) throw ();




extern int link (__const char *__from, __const char *__to) throw ();



extern int symlink (__const char *__from, __const char *__to) throw ();




extern int readlink (__const char *__path, char *__buf, size_t __len) throw ();



extern int unlink (__const char *__name) throw ();


extern int rmdir (__const char *__path) throw ();



extern __pid_t tcgetpgrp (int __fd) throw ();


extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) throw ();



extern char *getlogin (void) throw ();
# 715 "/usr/include/unistd.h" 3
extern int setlogin (__const char *__name) throw ();
# 724 "/usr/include/unistd.h" 3
# 1 "/usr/include/getopt.h" 1 3
# 27 "/usr/include/getopt.h" 3
extern "C" {
# 36 "/usr/include/getopt.h" 3
extern char *optarg;
# 50 "/usr/include/getopt.h" 3
extern int optind;




extern int opterr;



extern int optopt;
# 134 "/usr/include/getopt.h" 3
extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
# 163 "/usr/include/getopt.h" 3
}
# 725 "/usr/include/unistd.h" 2 3
# 733 "/usr/include/unistd.h" 3
extern int gethostname (char *__name, size_t __len) throw ();



extern int sethostname (__const char *__name, size_t __len) throw ();



extern int sethostid (long int __id) throw ();





extern int getdomainname (char *__name, size_t __len) throw ();
extern int setdomainname (__const char *__name, size_t __len) throw ();



extern int fsync (int __fd) throw ();





extern int vhangup (void) throw ();


extern int revoke (__const char *__file) throw ();







extern int profil (unsigned short int *__sample_buffer, size_t __size, size_t __offset, unsigned int __scale) throw ();






extern int acct (__const char *__name) throw ();



extern int chroot (__const char *__path) throw ();



extern char *getusershell (void) throw ();
extern void endusershell (void) throw ();
extern void setusershell (void) throw ();




extern char *getpass (__const char *__prompt) throw ();




extern int daemon (int __nochdir, int __noclose) throw ();







extern long int gethostid (void) throw ();


extern int sync (void) throw ();




extern int __getpagesize (void) throw () __attribute__ ((__const__));
extern int getpagesize (void) throw () __attribute__ ((__const__));




extern int truncate (__const char *__file, __off_t __length) throw ();
# 829 "/usr/include/unistd.h" 3
extern int truncate64 (__const char *__file, __off64_t __length) throw ();



extern int __ftruncate (int __fd, __off_t __length) throw ();

extern int ftruncate (int __fd, __off_t __length) throw ();
# 845 "/usr/include/unistd.h" 3
extern int ftruncate64 (int __fd, __off64_t __length) throw ();





extern int getdtablesize (void) throw ();
# 860 "/usr/include/unistd.h" 3
extern int brk (void * __addr) throw ();


# 1 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 1 3
# 864 "/usr/include/unistd.h" 2 3





extern void * __sbrk (ptrdiff_t __delta) throw ();
extern void * sbrk (ptrdiff_t __delta) throw ();
# 885 "/usr/include/unistd.h" 3
extern long int syscall (long int __sysno, ...) throw ();
# 905 "/usr/include/unistd.h" 3
extern int lockf (int __fd, int __cmd, __off_t __len) throw ();
# 915 "/usr/include/unistd.h" 3
extern int lockf64 (int __fd, int __cmd, __off64_t __len) throw ();
# 938 "/usr/include/unistd.h" 3
extern int __libc_enable_secure;






extern int fdatasync (int __fildes) throw ();







extern char *crypt (__const char *__key, __const char *__salt) throw ();


extern void setkey (__const char *__key) throw ();



extern void encrypt (char *__block, int __edflag) throw ();






extern void swab (__const void * __from, void * __to, ssize_t __n) throw ();







extern char *ctermid (char *__s) throw ();



extern char *cuserid (char *__s) throw ();


extern int rename (__const char *__old, __const char *__new) throw ();
# 999 "/usr/include/unistd.h" 3
extern int pthread_atfork (void (*__prepare) (void), void (*__parent) (void), void (*__child) (void)) throw ();




}
# 20 "include/java-threads.h" 2






typedef int _Jv_ConditionVariable_t;
typedef int _Jv_Mutex_t;
typedef int _Jv_Thread_t;
typedef void _Jv_ThreadStartFunc (java::lang::Thread *);






inline void
_Jv_CondInit (_Jv_ConditionVariable_t *)
{
}



inline int
_Jv_CondWait (_Jv_ConditionVariable_t *, _Jv_Mutex_t *,
              jlong millis, jint nanos)
{
  if (millis == 0 && nanos == 0)
    _Jv_Abort (0, 0, 0, "_Jv_CondWait without timeout");


  int seconds = millis / 1000;
  if (seconds > 0)
    sleep (seconds);


  return 0;
}

inline int
_Jv_CondNotify (_Jv_ConditionVariable_t *, _Jv_Mutex_t *)
{

  return 0;
}

inline int
_Jv_CondNotifyAll (_Jv_ConditionVariable_t *, _Jv_Mutex_t *)
{

  return 0;
}






inline void
_Jv_MutexInit (_Jv_Mutex_t *)
{
}

inline int
_Jv_MutexLock (_Jv_Mutex_t *)
{
  return 0;
}

inline int
_Jv_MutexUnlock (_Jv_Mutex_t *)
{
  return 0;
}






inline void
_Jv_InitThreads (void)
{
}

_Jv_Thread_t *
_Jv_ThreadInitData (java::lang::Thread *);

inline void
_Jv_ThreadDestroyData (_Jv_Thread_t *data)
{
}

inline java::lang::Thread *
_Jv_ThreadCurrent (void)
{
  extern java::lang::Thread *_Jv_OnlyThread;
  return _Jv_OnlyThread;
}

inline void
_Jv_ThreadYield (void)
{
}

inline void
_Jv_ThreadSetPriority (_Jv_Thread_t *, jint)
{
}

inline void
_Jv_ThreadRegister (_Jv_Thread_t *data)
{
}

inline void
_Jv_ThreadUnRegister (void)
{
}

void _Jv_ThreadStart (java::lang::Thread *, _Jv_Thread_t *,
                      _Jv_ThreadStartFunc *meth);

inline void
_Jv_ThreadWait (void)
{
}

inline void
_Jv_ThreadInterrupt (_Jv_Thread_t *)
{
}
# 18 "/home/oldham/gcc/gcc2/libjava/include/jvm.h" 2

# 1 "include/java-gc.h" 1
# 18 "include/java-gc.h"
extern "C"
{
  void *_Jv_MarkObj (void *, void *, void *, void *);
  void *_Jv_MarkArray (void *, void *, void *, void *);
};






extern "C" void * GC_gcj_malloc(size_t, void *);
extern "C" void * GC_malloc_atomic(size_t);

inline void *
_Jv_AllocObj (jsize size, jclass klass)
{


  return GC_gcj_malloc (size, klass->vtable);
}

inline void *
_Jv_AllocPtrFreeObj (jsize size, jclass klass)
{




  void * obj = GC_gcj_malloc(size, klass->vtable);

  return obj;
}
# 20 "/home/oldham/gcc/gcc2/libjava/include/jvm.h" 2





# 1 "/home/oldham/gcc/gcc2/libjava/gcj/field.h" 1
# 15 "/home/oldham/gcc/gcc2/libjava/gcj/field.h"
# 1 "java/lang/reflect/Field.h" 1





#pragma interface

# 1 "java/lang/reflect/AccessibleObject.h" 1





#pragma interface




class ::java::lang::reflect::AccessibleObject : public ::java::lang::Object
{
public:
  AccessibleObject ();
public:
  virtual jboolean isAccessible () { return flag; }
  static void setAccessible (JArray< ::java::lang::reflect::AccessibleObject *> *, jboolean);
  virtual void setAccessible (jboolean);
private:
  static void checkPermission ();
  jboolean flag;
public:

  static ::java::lang::Class class$;
};
# 9 "java/lang/reflect/Field.h" 2

class ::java::lang::reflect::Field : public ::java::lang::reflect::AccessibleObject
{
public:
  jboolean equals (::java::lang::Object *);
  ::java::lang::Class *getDeclaringClass () { return declaringClass; }
  ::java::lang::String *getName ();
  ::java::lang::Class *getType ();
  jint getModifiers ();
  jint hashCode ();
  jboolean getBoolean (::java::lang::Object *);
  jchar getChar (::java::lang::Object *);
  jbyte getByte (::java::lang::Object *);
  jshort getShort (::java::lang::Object *);
  jint getInt (::java::lang::Object *);
  jlong getLong (::java::lang::Object *);
  jfloat getFloat (::java::lang::Object *);
  jdouble getDouble (::java::lang::Object *);
  ::java::lang::Object *get (::java::lang::Object *);
private:
  jboolean getBoolean (::java::lang::Class *, ::java::lang::Object *);
  jchar getChar (::java::lang::Class *, ::java::lang::Object *);
  jbyte getByte (::java::lang::Class *, ::java::lang::Object *);
  jshort getShort (::java::lang::Class *, ::java::lang::Object *);
  jint getInt (::java::lang::Class *, ::java::lang::Object *);
  jlong getLong (::java::lang::Class *, ::java::lang::Object *);
  jfloat getFloat (::java::lang::Class *, ::java::lang::Object *);
  jdouble getDouble (::java::lang::Class *, ::java::lang::Object *);
public:
  ::java::lang::Object *get (::java::lang::Class *, ::java::lang::Object *);
  void setByte (::java::lang::Object *, jbyte);
  void setShort (::java::lang::Object *, jshort);
  void setInt (::java::lang::Object *, jint);
  void setLong (::java::lang::Object *, jlong);
  void setFloat (::java::lang::Object *, jfloat);
  void setDouble (::java::lang::Object *, jdouble);
  void setChar (::java::lang::Object *, jchar);
  void setBoolean (::java::lang::Object *, jboolean);
  void setByte (::java::lang::Class *, ::java::lang::Object *, jbyte);
  void setShort (::java::lang::Class *, ::java::lang::Object *, jshort);
  void setInt (::java::lang::Class *, ::java::lang::Object *, jint);
  void setLong (::java::lang::Class *, ::java::lang::Object *, jlong);
  void setFloat (::java::lang::Class *, ::java::lang::Object *, jfloat);
  void setDouble (::java::lang::Class *, ::java::lang::Object *, jdouble);
  void setChar (::java::lang::Class *, ::java::lang::Object *, jchar);
  void setBoolean (::java::lang::Class *, ::java::lang::Object *, jboolean);
private:
  void set (::java::lang::Class *, ::java::lang::Object *, ::java::lang::Object *, ::java::lang::Class *);
public:
  void set (::java::lang::Object *, ::java::lang::Object *);
  void set (::java::lang::Class *, ::java::lang::Object *, ::java::lang::Object *);
  ::java::lang::String *toString ();
  Field ();
private:
  ::java::lang::Class *declaringClass;
  ::java::lang::String *name;
  jint offset;
  friend jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);
  friend jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv*, jclass, jfieldID, jboolean);
  friend class java::lang::Class;
public:

  static ::java::lang::Class class$;
};
# 16 "/home/oldham/gcc/gcc2/libjava/gcj/field.h" 2

# 1 "gnu/gcj/RawData.h" 1





#pragma interface



extern "Java"
{
  namespace gnu
  {
    namespace gcj
    {
      class RawData;
    }
  }
};

class ::gnu::gcj::RawData : public ::java::lang::Object
{
private:
  RawData ();
public:

  static ::java::lang::Class class$;
};
# 18 "/home/oldham/gcc/gcc2/libjava/gcj/field.h" 2




struct _Jv_Field
{

  struct _Jv_Utf8Const* name;




  jclass type;

  _Jv_ushort flags;




  _Jv_ushort bsize;


  union {
    jint boffset;
    void* addr;
  } u;


  jboolean isResolved ()
  { return ! (flags & 0x8000); }

  public:

  int getOffset () { return u.boffset; }

  jobject getObjectField (jobject obj)
  { return *(jobject *)((char *)obj + getOffset ()); }

  jfieldID getNextField () { return this + 1; }

  jboolean isRef ()
    {
      if (!isResolved ())
        {
          char first = ((_Jv_Utf8Const*)type)->data[0];
          return first == '[' || first == 'L';
        }
      else
        {
          return ! type->isPrimitive ();
        }
    }

  jclass getClass ()
  {



    return type;
  }


  int getModifiers()
  {
    return flags & java::lang::reflect::Modifier::ALL_FLAGS;
  }





  _Jv_Utf8Const * getNameUtf8Const (jclass) { return name; }


};



inline jbyte
_Jv_GetStaticByteField (jclass, _Jv_Field* field)
{
  return * (jbyte *) field->u.addr;
}

inline jshort
_Jv_GetStaticShortField (jclass, _Jv_Field* field)
{
  return * (jshort *) field->u.addr;
}

inline jint
_Jv_GetStaticIntField (jclass, _Jv_Field* field)
{
  return * (jint *) field->u.addr;
}

inline jlong
_Jv_GetStaticLongField (jclass, _Jv_Field* field)
{
  return * (jlong *) field->u.addr;
}

inline jobject
_Jv_GetObjectField (jobject obj, _Jv_Field* field)
{
  return field->getObjectField (obj);
}

inline jbyte
_Jv_GetByteField (jobject obj, _Jv_Field* field)
{
  return * (jbyte *) ((char*) obj + field->getOffset ());
}

inline jshort
_Jv_GetShortField (jobject obj, _Jv_Field* field)
{
  return * (jshort *) ((char*) obj + field->getOffset ());
}
inline jint
_Jv_GetIntField (jobject obj, _Jv_Field* field)
{
  return * (jint *) ((char*) obj + field->getOffset ());
}
inline jlong
_Jv_GetLongField (jobject obj, _Jv_Field* field)
{
  return * (jlong *) ((char*) obj + field->getOffset ());
}

extern inline jfieldID
_Jv_FromReflectedField (java::lang::reflect::Field *field)
{
  return (jfieldID) ((char *) field->declaringClass->fields + field->offset);
}



extern inline jfieldID
JvGetFirstInstanceField (jclass klass)
{
  return &(klass->fields[klass->static_field_count]);
}

extern inline jint
JvNumInstanceFields (jclass klass)
{
  return klass->field_count - klass->static_field_count;
}

extern inline jfieldID
JvGetFirstStaticField (jclass klass)
{
  return &(klass->fields[0]);
}

extern inline jint
JvNumStaticFields (jclass klass)
{
  return klass->static_field_count;
}

extern inline jboolean
JvFieldIsRef (jfieldID field)
{
  return field->isRef () && field->type != &gnu::gcj::RawData::class$;
}

extern inline jobject
JvGetObjectField (jobject obj, _Jv_Field* field)
{
  return _Jv_GetObjectField (obj, field);
}
# 26 "/home/oldham/gcc/gcc2/libjava/include/jvm.h" 2


struct _Jv_VTable
{
  jclass clas;
  void *gc_descr;
  void *method[1];
  void *get_finalizer() { return method[0]; }
};






struct _Jv_ArrayVTable
{
  jclass clas;
  void *gc_descr;
  void *method[5];
  void *get_finalizer() { return method[0]; }
};

union _Jv_word
{
  jobject o;
  jint i;
  jfloat f;
  jint ia[1];
  void* p;
# 64 "/home/oldham/gcc/gcc2/libjava/include/jvm.h"
  jclass clazz;
  jstring string;
  struct _Jv_Field *field;
  struct _Jv_Utf8Const *utf8;
  struct _Jv_ResolvedMethod *rmethod;
};

union _Jv_word2
{
  jint ia[2];
  jlong l;
  jdouble d;
};
# 93 "/home/oldham/gcc/gcc2/libjava/include/jvm.h"
extern int _Jv_strLengthUtf8(char* str, int len);

typedef struct _Jv_Utf8Const Utf8Const;
_Jv_Utf8Const *_Jv_makeUtf8Const (char *s, int len);
_Jv_Utf8Const *_Jv_makeUtf8Const (jstring string);
extern jboolean _Jv_equalUtf8Consts (_Jv_Utf8Const *, _Jv_Utf8Const *);
extern jboolean _Jv_equal (_Jv_Utf8Const *, jstring, jint);
extern jboolean _Jv_equaln (_Jv_Utf8Const *, jstring, jint);





typedef void _Jv_FinalizerFunc (jobject);


void *_Jv_AllocObj (jsize size, jclass cl) __attribute__((__malloc__));


void *_Jv_AllocPtrFreeObj (jsize size, jclass cl) __attribute__((__malloc__));

void *_Jv_AllocArray (jsize size, jclass cl) __attribute__((__malloc__));

void *_Jv_AllocBytes (jsize size) __attribute__((__malloc__));


void *_Jv_AllocRawObj (jsize size) __attribute__((__malloc__));

void _Jv_ThrowNoMemory() __attribute__((__noreturn__));


void *_Jv_AllocTraceOne (jsize size );

void _Jv_InitGC (void);

void _Jv_RegisterFinalizer (void *object, _Jv_FinalizerFunc *method);


void * _Jv_BuildGCDescr(jclass);




void *_Jv_MallocUnchecked (jsize size) __attribute__((__malloc__));


void _Jv_RunFinalizers (void);

void _Jv_RunAllFinalizers (void);

void _Jv_RunGC (void);

void _Jv_DisableGC (void);
void _Jv_EnableGC (void);


long _Jv_GCTotalMemory (void);

long _Jv_GCFreeMemory (void);



void _Jv_GCSetInitialHeapSize (size_t size);



void _Jv_GCSetMaximumHeapSize (size_t size);




void _Jv_SetInitialHeapSize (const char *arg);




void _Jv_SetMaximumHeapSize (const char *arg);

extern "C" void JvRunMain (jclass klass, int argc, const char **argv);
void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv,
                  bool is_jar);


inline jint
_Jv_HashCode (jobject obj)
{



  return (jint) ((unsigned long) obj % 0x7fffffff);
}






inline char *
_Jv_GetArrayElementFromElementType (jobject array,
                                    jclass element_type)
{
  char *elts;
  if (element_type == (& _Jv_byteClass))
    elts = (char *) elements ((jbyteArray) array);
  else if (element_type == (& _Jv_shortClass))
    elts = (char *) elements ((jshortArray) array);
  else if (element_type == (& _Jv_intClass))
    elts = (char *) elements ((jintArray) array);
  else if (element_type == (& _Jv_longClass))
    elts = (char *) elements ((jlongArray) array);
  else if (element_type == (& _Jv_booleanClass))
    elts = (char *) elements ((jbooleanArray) array);
  else if (element_type == (& _Jv_charClass))
    elts = (char *) elements ((jcharArray) array);
  else if (element_type == (& _Jv_floatClass))
    elts = (char *) elements ((jfloatArray) array);
  else if (element_type == (& _Jv_doubleClass))
    elts = (char *) elements ((jdoubleArray) array);
  else
    elts = (char *) elements ((jobjectArray) array);
  return elts;
}

extern "C" void _Jv_ThrowBadArrayIndex (jint bad_index);
extern "C" void _Jv_ThrowNullPointerException (void);
extern "C" jobject _Jv_NewArray (jint type, jint size)
  __attribute__((__malloc__));
extern "C" jobject _Jv_NewMultiArray (jclass klass, jint dims, ...)
  __attribute__((__malloc__));
extern "C" void *_Jv_CheckCast (jclass klass, jobject obj);
extern "C" void *_Jv_LookupInterfaceMethod (jclass klass, Utf8Const *name,
                                           Utf8Const *signature);
extern "C" void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface,
                                               int meth_idx);
extern "C" void _Jv_CheckArrayStore (jobject array, jobject obj);
extern "C" void _Jv_RegisterClass (jclass klass);
extern "C" void _Jv_RegisterClasses (jclass *classes);
extern "C" void _Jv_RegisterResource (void *vptr);
extern void _Jv_UnregisterClass (_Jv_Utf8Const*, java::lang::ClassLoader*);
extern void _Jv_ResolveField (_Jv_Field *, java::lang::ClassLoader*);

extern jclass _Jv_FindClass (_Jv_Utf8Const *name,
                             java::lang::ClassLoader *loader);
extern jclass _Jv_FindClassFromSignature (char *,
                                          java::lang::ClassLoader *loader);
extern void _Jv_GetTypesFromSignature (jmethodID method,
                                       jclass declaringClass,
                                       JArray<jclass> **arg_types_out,
                                       jclass *return_type_out);

extern jobject _Jv_CallAnyMethodA (jobject obj, jclass return_type,
                                   jmethodID meth, jboolean is_constructor,
                                   JArray<jclass> *parameter_types,
                                   jobjectArray args);

union jvalue;
extern jthrowable _Jv_CallAnyMethodA (jobject obj,
                                      jclass return_type,
                                      jmethodID meth,
                                      jboolean is_constructor,
                                      JArray<jclass> *parameter_types,
                                      jvalue *args,
                                      jvalue *result);

extern jobject _Jv_NewMultiArray (jclass, jint ndims, jint* dims)
  __attribute__((__malloc__));


extern "C"
{
  jint _Jv_divI (jint, jint);
  jint _Jv_remI (jint, jint);
  jlong _Jv_divJ (jlong, jlong);
  jlong _Jv_remJ (jlong, jlong);
}


extern char *_Jv_ThisExecutable (void);
extern void _Jv_ThisExecutable (const char *);


void *_Jv_FindSymbolInExecutable (const char *);


extern void _Jv_JNI_Init (void);


_Jv_JNIEnv *_Jv_GetCurrentJNIEnv ();
void _Jv_SetCurrentJNIEnv (_Jv_JNIEnv *);

struct _Jv_JavaVM;
_Jv_JavaVM *_Jv_GetJavaVM ();


# 1 "/home/oldham/gcc/gcc2/libjava/include/jvmpi.h" 1
# 17 "/home/oldham/gcc/gcc2/libjava/include/jvmpi.h"
# 1 "/home/oldham/gcc/gcc2/libjava/include/jni.h" 1
# 17 "/home/oldham/gcc/gcc2/libjava/include/jni.h"
# 1 "/home/oldham/gcc/gcc2/objdir/gcc/include/stdarg.h" 1 3
# 43 "/home/oldham/gcc/gcc2/objdir/gcc/include/stdarg.h" 3
typedef __builtin_va_list __gnuc_va_list;
# 110 "/home/oldham/gcc/gcc2/objdir/gcc/include/stdarg.h" 3
typedef __gnuc_va_list va_list;
# 18 "/home/oldham/gcc/gcc2/libjava/include/jni.h" 2
# 26 "/home/oldham/gcc/gcc2/libjava/include/jni.h"
typedef struct _Jv_JNIEnv JNIEnv;
typedef struct _Jv_JavaVM JavaVM;
# 72 "/home/oldham/gcc/gcc2/libjava/include/jni.h"
typedef jobject jweak;
# 89 "/home/oldham/gcc/gcc2/libjava/include/jni.h"
extern "C"
{




extern jint JNI_OnLoad (JavaVM *, void *);
extern void JNI_OnUnload (JavaVM *, void *);



extern jint JNI_GetDefaultJavaVMInitArgs (void *);
extern jint JNI_CreateJavaVM (JavaVM **, void **, void *);
extern jint JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);


};


typedef union jvalue
{
  jboolean z;
  jbyte b;
  jchar c;
  jshort s;
  jint i;
  jlong j;
  jfloat f;
  jdouble d;
  jobject l;
} jvalue;


typedef void * (*_Jv_func) (...);





typedef struct
{
  char *name;
  char *signature;
  void *fnPtr;
} JNINativeMethod;

struct JNINativeInterface
{
  _Jv_func reserved0;
  _Jv_func reserved1;
  _Jv_func reserved2;
  _Jv_func reserved3;

  jint (*GetVersion) (JNIEnv *);
  jclass (*DefineClass) (JNIEnv *, jobject,
                                            const jbyte *, jsize);
  jclass (*FindClass) (JNIEnv *, const char *);

  jmethodID (*FromReflectedMethod) (JNIEnv *, jobject);
  jfieldID (*FromReflectedField) (JNIEnv *, jobject);
  jobject (*ToReflectedMethod) (JNIEnv *, jclass, jmethodID,
                                            jboolean);

  jclass (*GetSuperclass) (JNIEnv *, jclass);
  jboolean (*IsAssignableFrom) (JNIEnv *, jclass, jclass);

  jobject (*ToReflectedField) (JNIEnv *, jclass, jfieldID,
                                            jboolean);

  jint (*Throw) (JNIEnv *, jthrowable);
  jint (*ThrowNew) (JNIEnv *, jclass, const char *);
  jthrowable (*ExceptionOccurred) (JNIEnv *);
  void (*ExceptionDescribe) (JNIEnv *);
  void (*ExceptionClear) (JNIEnv *);
  void (*FatalError) (JNIEnv *, const char *);

  jint (*PushLocalFrame) (JNIEnv *, jint);
  jobject (*PopLocalFrame) (JNIEnv *, jobject);

  jobject (*NewGlobalRef) (JNIEnv *, jobject);
  void (*DeleteGlobalRef) (JNIEnv *, jobject);
  void (*DeleteLocalRef) (JNIEnv *, jobject);;
  jboolean (*IsSameObject) (JNIEnv *, jobject, jobject);

  jobject (*NewLocalRef) (JNIEnv *, jobject);
  jint (*EnsureLocalCapacity) (JNIEnv *, jint);

  jobject (*AllocObject) (JNIEnv *, jclass);
  jobject (*NewObject) (JNIEnv *, jclass, jmethodID, ...);
  jobject (*NewObjectV) (JNIEnv *, jclass, jmethodID,
                                            va_list);
  jobject (*NewObjectA) (JNIEnv *, jclass, jmethodID,
                                            jvalue *);

  jclass (*GetObjectClass) (JNIEnv *, jobject);
  jboolean (*IsInstanceOf) (JNIEnv *, jobject, jclass);
  jmethodID (*GetMethodID) (JNIEnv *, jclass, const char *,
                                            const char *);

  jobject (*CallObjectMethod) (JNIEnv *, jobject, jmethodID,
                                            ...);
  jobject (*CallObjectMethodV) (JNIEnv *, jobject, jmethodID,
                                            va_list);
  jobject (*CallObjectMethodA) (JNIEnv *, jobject, jmethodID,
                                            jvalue *);
  jboolean (*CallBooleanMethod) (JNIEnv *, jobject, jmethodID,
                                            ...);
  jboolean (*CallBooleanMethodV) (JNIEnv *, jobject, jmethodID,
                                            va_list);
  jboolean (*CallBooleanMethodA) (JNIEnv *, jobject, jmethodID,
                                            jvalue *);
  jbyte (*CallByteMethod) (JNIEnv *, jobject, jmethodID,
                                            ...);
  jbyte (*CallByteMethodV) (JNIEnv *, jobject, jmethodID,
                                            va_list);
  jbyte (*CallByteMethodA) (JNIEnv *, jobject, jmethodID,
                                            jvalue *);
  jchar (*CallCharMethod) (JNIEnv *, jobject, jmethodID,
                                            ...);
  jchar (*CallCharMethodV) (JNIEnv *, jobject, jmethodID,
                                            va_list);
  jchar (*CallCharMethodA) (JNIEnv *, jobject, jmethodID,
                                            jvalue *);
  jshort (*CallShortMethod) (JNIEnv *, jobject, jmethodID,
                                            ...);
  jshort (*CallShortMethodV) (JNIEnv *, jobject, jmethodID,
                                            va_list);
  jshort (*CallShortMethodA) (JNIEnv *, jobject, jmethodID,
                                            jvalue *);
  jint (*CallIntMethod) (JNIEnv *, jobject, jmethodID,
                                            ...);
  jint (*CallIntMethodV) (JNIEnv *, jobject, jmethodID,
                                            va_list);
  jint (*CallIntMethodA) (JNIEnv *, jobject, jmethodID,
                                            jvalue *);
  jlong (*CallLongMethod) (JNIEnv *, jobject, jmethodID,
                                            ...);
  jlong (*CallLongMethodV) (JNIEnv *, jobject, jmethodID,
                                            va_list);
  jlong (*CallLongMethodA) (JNIEnv *, jobject, jmethodID,
                                            jvalue *);
  jfloat (*CallFloatMethod) (JNIEnv *, jobject, jmethodID,
                                            ...);
  jfloat (*CallFloatMethodV) (JNIEnv *, jobject, jmethodID,
                                            va_list);
  jfloat (*CallFloatMethodA) (JNIEnv *, jobject, jmethodID,
                                            jvalue *);
  jdouble (*CallDoubleMethod) (JNIEnv *, jobject, jmethodID,
                                            ...);
  jdouble (*CallDoubleMethodV) (JNIEnv *, jobject, jmethodID,
                                            va_list);
  jdouble (*CallDoubleMethodA) (JNIEnv *, jobject, jmethodID,
                                            jvalue *);
  void (*CallVoidMethod) (JNIEnv *, jobject, jmethodID,
                                            ...);
  void (*CallVoidMethodV) (JNIEnv *, jobject, jmethodID,
                                            va_list);
  void (*CallVoidMethodA) (JNIEnv *, jobject, jmethodID,
                                            jvalue *);

  jobject (*CallNonvirtualObjectMethod) (JNIEnv *, jobject, jclass,
                                            jmethodID, ...);
  jobject (*CallNonvirtualObjectMethodV) (JNIEnv *, jobject, jclass,
                                            jmethodID, va_list);
  jobject (*CallNonvirtualObjectMethodA) (JNIEnv *, jobject, jclass,
                                            jmethodID, jvalue *);
  jboolean (*CallNonvirtualBooleanMethod) (JNIEnv *, jobject, jclass,
                                            jmethodID, ...);
  jboolean (*CallNonvirtualBooleanMethodV) (JNIEnv *, jobject, jclass,
                                             jmethodID, va_list);
  jboolean (*CallNonvirtualBooleanMethodA) (JNIEnv *, jobject, jclass,
                                             jmethodID, jvalue *);
  jbyte (*CallNonvirtualByteMethod) (JNIEnv *, jobject, jclass,
                                            jmethodID, ...);
  jbyte (*CallNonvirtualByteMethodV) (JNIEnv *, jobject, jclass,
                                            jmethodID, va_list);
  jbyte (*CallNonvirtualByteMethodA) (JNIEnv *, jobject, jclass,
                                            jmethodID, jvalue *);
  jchar (*CallNonvirtualCharMethod) (JNIEnv *, jobject, jclass,
                                            jmethodID, ...);
  jchar (*CallNonvirtualCharMethodV) (JNIEnv *, jobject, jclass,
                                            jmethodID, va_list);
  jchar (*CallNonvirtualCharMethodA) (JNIEnv *, jobject, jclass,
                                            jmethodID, jvalue *);
  jshort (*CallNonvirtualShortMethod) (JNIEnv *, jobject, jclass,
                                            jmethodID, ...);
  jshort (*CallNonvirtualShortMethodV) (JNIEnv *, jobject, jclass,
                                            jmethodID, va_list);
  jshort (*CallNonvirtualShortMethodA) (JNIEnv *, jobject, jclass,
                                            jmethodID, jvalue *);
  jint (*CallNonvirtualIntMethod) (JNIEnv *, jobject, jclass,
                                            jmethodID, ...);
  jint (*CallNonvirtualIntMethodV) (JNIEnv *, jobject, jclass,
                                            jmethodID, va_list);
  jint (*CallNonvirtualIntMethodA) (JNIEnv *, jobject, jclass,
                                            jmethodID, jvalue *);
  jlong (*CallNonvirtualLongMethod) (JNIEnv *, jobject, jclass,
                                            jmethodID, ...);
  jlong (*CallNonvirtualLongMethodV) (JNIEnv *, jobject, jclass,
                                            jmethodID, va_list);
  jlong (*CallNonvirtualLongMethodA) (JNIEnv *, jobject, jclass,
                                            jmethodID, jvalue *);
  jfloat (*CallNonvirtualFloatMethod) (JNIEnv *, jobject, jclass,
                                            jmethodID, ...);
  jfloat (*CallNonvirtualFloatMethodV) (JNIEnv *, jobject, jclass,
                                            jmethodID, va_list);
  jfloat (*CallNonvirtualFloatMethodA) (JNIEnv *, jobject, jclass,
                                            jmethodID, jvalue *);
  jdouble (*CallNonvirtualDoubleMethod) (JNIEnv *, jobject, jclass,
                                            jmethodID, ...);
  jdouble (*CallNonvirtualDoubleMethodV) (JNIEnv *, jobject, jclass,
                                            jmethodID, va_list);
  jdouble (*CallNonvirtualDoubleMethodA) (JNIEnv *, jobject, jclass,
                                            jmethodID, jvalue *);
  void (*CallNonvirtualVoidMethod) (JNIEnv *, jobject, jclass,
                                            jmethodID, ...);
  void (*CallNonvirtualVoidMethodV) (JNIEnv *, jobject, jclass,
                                            jmethodID, va_list);
  void (*CallNonvirtualVoidMethodA) (JNIEnv *, jobject, jclass,
                                            jmethodID, jvalue *);

  jfieldID (*GetFieldID) (JNIEnv *, jclass, const char *,
                                            const char *);

  jobject (*GetObjectField) (JNIEnv *, jobject, jfieldID);
  jboolean (*GetBooleanField) (JNIEnv *, jobject, jfieldID);
  jbyte (*GetByteField) (JNIEnv *, jobject, jfieldID);
  jchar (*GetCharField) (JNIEnv *, jobject, jfieldID);
  jshort (*GetShortField) (JNIEnv *, jobject, jfieldID);
  jint (*GetIntField) (JNIEnv *, jobject, jfieldID);
  jlong (*GetLongField) (JNIEnv *, jobject, jfieldID);
  jfloat (*GetFloatField) (JNIEnv *, jobject, jfieldID);
  jdouble (*GetDoubleField) (JNIEnv *, jobject, jfieldID);

  void (*SetObjectField) (JNIEnv *, jobject,
                                            jfieldID, jobject);
  void (*SetBooleanField) (JNIEnv *, jobject,
                                            jfieldID, jboolean);
  void (*SetByteField) (JNIEnv *, jobject,
                                            jfieldID, jbyte);
  void (*SetCharField) (JNIEnv *, jobject,
                                            jfieldID, jchar);
  void (*SetShortField) (JNIEnv *, jobject,
                                            jfieldID, jshort);
  void (*SetIntField) (JNIEnv *, jobject,
                                            jfieldID, jint);
  void (*SetLongField) (JNIEnv *, jobject,
                                            jfieldID, jlong);
  void (*SetFloatField) (JNIEnv *, jobject,
                                            jfieldID, jfloat);
  void (*SetDoubleField) (JNIEnv *, jobject,
                                            jfieldID, jdouble);

  jmethodID (*GetStaticMethodID) (JNIEnv *, jclass, const char *,
                                            const char *);

  jobject (*CallStaticObjectMethod) (JNIEnv *, jclass, jmethodID,
                                            ...);
  jobject (*CallStaticObjectMethodV) (JNIEnv *, jclass, jmethodID,
                                            va_list);
  jobject (*CallStaticObjectMethodA) (JNIEnv *, jclass, jmethodID,
                                            jvalue *);
  jboolean (*CallStaticBooleanMethod) (JNIEnv *, jclass, jmethodID,
                                            ...);
  jboolean (*CallStaticBooleanMethodV) (JNIEnv *, jclass, jmethodID,
                                             va_list);
  jboolean (*CallStaticBooleanMethodA) (JNIEnv *, jclass, jmethodID,
                                             jvalue *);
  jbyte (*CallStaticByteMethod) (JNIEnv *, jclass, jmethodID,
                                            ...);
  jbyte (*CallStaticByteMethodV) (JNIEnv *, jclass, jmethodID,
                                            va_list);
  jbyte (*CallStaticByteMethodA) (JNIEnv *, jclass, jmethodID,
                                            jvalue *);
  jchar (*CallStaticCharMethod) (JNIEnv *, jclass, jmethodID,
                                            ...);
  jchar (*CallStaticCharMethodV) (JNIEnv *, jclass, jmethodID,
                                            va_list);
  jchar (*CallStaticCharMethodA) (JNIEnv *, jclass, jmethodID,
                                            jvalue *);
  jshort (*CallStaticShortMethod) (JNIEnv *, jclass, jmethodID,
                                            ...);
  jshort (*CallStaticShortMethodV) (JNIEnv *, jclass, jmethodID,
                                            va_list);
  jshort (*CallStaticShortMethodA) (JNIEnv *, jclass, jmethodID,
                                            jvalue *);
  jint (*CallStaticIntMethod) (JNIEnv *, jclass, jmethodID,
                                            ...);
  jint (*CallStaticIntMethodV) (JNIEnv *, jclass, jmethodID,
                                            va_list);
  jint (*CallStaticIntMethodA) (JNIEnv *, jclass, jmethodID,
                                            jvalue *);
  jlong (*CallStaticLongMethod) (JNIEnv *, jclass, jmethodID,
                                            ...);
  jlong (*CallStaticLongMethodV) (JNIEnv *, jclass, jmethodID,
                                            va_list);
  jlong (*CallStaticLongMethodA) (JNIEnv *, jclass, jmethodID,
                                            jvalue *);
  jfloat (*CallStaticFloatMethod) (JNIEnv *, jclass, jmethodID,
                                            ...);
  jfloat (*CallStaticFloatMethodV) (JNIEnv *, jclass, jmethodID,
                                            va_list);
  jfloat (*CallStaticFloatMethodA) (JNIEnv *, jclass, jmethodID,
                                            jvalue *);
  jdouble (*CallStaticDoubleMethod) (JNIEnv *, jclass, jmethodID,
                                            ...);
  jdouble (*CallStaticDoubleMethodV) (JNIEnv *, jclass, jmethodID,
                                            va_list);
  jdouble (*CallStaticDoubleMethodA) (JNIEnv *, jclass, jmethodID,
                                            jvalue *);
  void (*CallStaticVoidMethod) (JNIEnv *, jclass, jmethodID,
                                            ...);
  void (*CallStaticVoidMethodV) (JNIEnv *, jclass, jmethodID,
                                            va_list);
  void (*CallStaticVoidMethodA) (JNIEnv *, jclass, jmethodID,
                                            jvalue *);

  jfieldID (*GetStaticFieldID) (JNIEnv *, jclass, const char *,
                                            const char *);

  jobject (*GetStaticObjectField) (JNIEnv *, jclass, jfieldID);
  jboolean (*GetStaticBooleanField) (JNIEnv *, jclass, jfieldID);
  jbyte (*GetStaticByteField) (JNIEnv *, jclass, jfieldID);
  jchar (*GetStaticCharField) (JNIEnv *, jclass, jfieldID);
  jshort (*GetStaticShortField) (JNIEnv *, jclass, jfieldID);
  jint (*GetStaticIntField) (JNIEnv *, jclass, jfieldID);
  jlong (*GetStaticLongField) (JNIEnv *, jclass, jfieldID);
  jfloat (*GetStaticFloatField) (JNIEnv *, jclass, jfieldID);
  jdouble (*GetStaticDoubleField) (JNIEnv *, jclass, jfieldID);

  void (*SetStaticObjectField) (JNIEnv *, jclass,
                                            jfieldID, jobject);
  void (*SetStaticBooleanField) (JNIEnv *, jclass,
                                            jfieldID, jboolean);
  void (*SetStaticByteField) (JNIEnv *, jclass,
                                            jfieldID, jbyte);
  void (*SetStaticCharField) (JNIEnv *, jclass,
                                            jfieldID, jchar);
  void (*SetStaticShortField) (JNIEnv *, jclass,
                                            jfieldID, jshort);
  void (*SetStaticIntField) (JNIEnv *, jclass,
                                            jfieldID, jint);
  void (*SetStaticLongField) (JNIEnv *, jclass,
                                            jfieldID, jlong);
  void (*SetStaticFloatField) (JNIEnv *, jclass,
                                            jfieldID, jfloat);
  void (*SetStaticDoubleField) (JNIEnv *, jclass,
                                            jfieldID, jdouble);

  jstring (*NewString) (JNIEnv *, const jchar *, jsize);
  jint (*GetStringLength) (JNIEnv *, jstring);
  const jchar * (*GetStringChars) (JNIEnv *, jstring, jboolean *);
  void (*ReleaseStringChars) (JNIEnv *, jstring, const jchar *);
  jstring (*NewStringUTF) (JNIEnv *, const char *);
  jsize (*GetStringUTFLength) (JNIEnv *, jstring);
  const char * (*GetStringUTFChars) (JNIEnv *, jstring, jboolean *);
  void (*ReleaseStringUTFChars) (JNIEnv *, jstring, const char *);
  jsize (*GetArrayLength) (JNIEnv *, jarray);
  jarray (*NewObjectArray) (JNIEnv *, jsize, jclass, jobject);
  jobject (*GetObjectArrayElement) (JNIEnv *, jobjectArray, jsize);
  void (*SetObjectArrayElement) (JNIEnv *, jobjectArray, jsize,
                                            jobject);

  jbooleanArray (*NewBooleanArray) (JNIEnv *, jsize);
  jbyteArray (*NewByteArray) (JNIEnv *, jsize);
  jcharArray (*NewCharArray) (JNIEnv *, jsize);
  jshortArray (*NewShortArray) (JNIEnv *, jsize);
  jintArray (*NewIntArray) (JNIEnv *, jsize);
  jlongArray (*NewLongArray) (JNIEnv *, jsize);
  jfloatArray (*NewFloatArray) (JNIEnv *, jsize);
  jdoubleArray (*NewDoubleArray) (JNIEnv *, jsize);

  jboolean * (*GetBooleanArrayElements) (JNIEnv *, jbooleanArray,
                                            jboolean *);
  jbyte * (*GetByteArrayElements) (JNIEnv *, jbyteArray,
                                            jboolean *);
  jchar * (*GetCharArrayElements) (JNIEnv *, jcharArray,
                                            jboolean *);
  jshort * (*GetShortArrayElements) (JNIEnv *, jshortArray,
                                            jboolean *);
  jint * (*GetIntArrayElements) (JNIEnv *, jintArray,
                                            jboolean *);
  jlong * (*GetLongArrayElements) (JNIEnv *, jlongArray,
                                            jboolean *);
  jfloat * (*GetFloatArrayElements) (JNIEnv *, jfloatArray,
                                            jboolean *);
  jdouble * (*GetDoubleArrayElements) (JNIEnv *, jdoubleArray,
                                            jboolean *);

  void (*ReleaseBooleanArrayElements) (JNIEnv *, jbooleanArray,
                                                jboolean *, jint);
  void (*ReleaseByteArrayElements) (JNIEnv *, jbyteArray,
                                                jbyte *, jint);
  void (*ReleaseCharArrayElements) (JNIEnv *, jcharArray,
                                                jchar *, jint);
  void (*ReleaseShortArrayElements) (JNIEnv *, jshortArray,
                                                jshort *, jint);
  void (*ReleaseIntArrayElements) (JNIEnv *, jintArray,
                                                jint *, jint);
  void (*ReleaseLongArrayElements) (JNIEnv *, jlongArray,
                                                jlong *, jint);
  void (*ReleaseFloatArrayElements) (JNIEnv *, jfloatArray,
                                                jfloat *, jint);
  void (*ReleaseDoubleArrayElements) (JNIEnv *, jdoubleArray,
                                                jdouble *, jint);

  void (*GetBooleanArrayRegion) (JNIEnv *, jbooleanArray,
                                            jsize, jsize, jboolean *);
  void (*GetByteArrayRegion) (JNIEnv *, jbyteArray,
                                            jsize, jsize, jbyte *);
  void (*GetCharArrayRegion) (JNIEnv *, jcharArray,
                                            jsize, jsize, jchar *);
  void (*GetShortArrayRegion) (JNIEnv *, jshortArray,
                                            jsize, jsize, jshort *);
  void (*GetIntArrayRegion) (JNIEnv *, jintArray,
                                            jsize, jsize, jint *);
  void (*GetLongArrayRegion) (JNIEnv *, jlongArray,
                                            jsize, jsize, jlong *);
  void (*GetFloatArrayRegion) (JNIEnv *, jfloatArray,
                                            jsize, jsize, jfloat *);
  void (*GetDoubleArrayRegion) (JNIEnv *, jdoubleArray,
                                            jsize, jsize, jdouble *);

  void (*SetBooleanArrayRegion) (JNIEnv *, jbooleanArray,
                                            jsize, jsize, jboolean *);
  void (*SetByteArrayRegion) (JNIEnv *, jbyteArray,
                                            jsize, jsize, jbyte *);
  void (*SetCharArrayRegion) (JNIEnv *, jcharArray,
                                            jsize, jsize, jchar *);
  void (*SetShortArrayRegion) (JNIEnv *, jshortArray,
                                            jsize, jsize, jshort *);
  void (*SetIntArrayRegion) (JNIEnv *, jintArray,
                                            jsize, jsize, jint *);
  void (*SetLongArrayRegion) (JNIEnv *, jlongArray,
                                            jsize, jsize, jlong *);
  void (*SetFloatArrayRegion) (JNIEnv *, jfloatArray,
                                            jsize, jsize, jfloat *);
  void (*SetDoubleArrayRegion) (JNIEnv *, jdoubleArray,
                                            jsize, jsize, jdouble *);

  jint (*RegisterNatives) (JNIEnv *, jclass,
                                            const JNINativeMethod *, jint);
  jint (*UnregisterNatives) (JNIEnv *, jclass);
  jint (*MonitorEnter) (JNIEnv *, jobject);
  jint (*MonitorExit) (JNIEnv *, jobject);
  jint (*GetJavaVM) (JNIEnv *, JavaVM **);

  void (*GetStringRegion) (JNIEnv *, jstring, jsize,
                                            jsize, jchar *);
  void (*GetStringUTFRegion) (JNIEnv *, jstring, jsize,
                                            jsize, char *);

  void * (*GetPrimitiveArrayCritical) (JNIEnv *, jarray, jboolean *);
  void (*ReleasePrimitiveArrayCritical) (JNIEnv *, jarray, void *, jint);

  const jchar * (*GetStringCritical) (JNIEnv *, jstring, jboolean *);
  void (*ReleaseStringCritical) (JNIEnv *, jstring, const jchar *);

  jweak (*NewWeakGlobalRef) (JNIEnv *, jobject);
  void (*DeleteWeakGlobalRef) (JNIEnv *, jweak);

  jboolean (*ExceptionCheck) (JNIEnv *);
};



class _Jv_JNIEnv
{
public:

  struct JNINativeInterface *p;






  jthrowable ex;


  jclass klass;


  struct _Jv_JNI_LocalFrame *locals;

public:
  jint GetVersion ()
  { return p->GetVersion (this); }

  jclass DefineClass (jobject obj0, const jbyte * val1, jsize val2)
  { return p->DefineClass (this, obj0, val1, val2); }

  jclass FindClass (const char * val0)
  { return p->FindClass (this, val0); }

  jmethodID FromReflectedMethod (jobject obj0)
  { return p->FromReflectedMethod (this, obj0); }

  jfieldID FromReflectedField (jobject obj0)
  { return p->FromReflectedField (this, obj0); }

  jobject ToReflectedMethod (jclass cl0, jmethodID meth1, jboolean val2)
  { return p->ToReflectedMethod (this, cl0, meth1, val2); }

  jclass GetSuperclass (jclass cl0)
  { return p->GetSuperclass (this, cl0); }

  jboolean IsAssignableFrom (jclass cl0, jclass cl1)
  { return p->IsAssignableFrom (this, cl0, cl1); }

  jobject ToReflectedField (jclass cl0, jfieldID fld1, jboolean val2)
  { return p->ToReflectedField (this, cl0, fld1, val2); }

  jint Throw (jthrowable val0)
  { return p->Throw (this, val0); }

  jint ThrowNew (jclass cl0, const char * val1)
  { return p->ThrowNew (this, cl0, val1); }

  jthrowable ExceptionOccurred ()
  { return p->ExceptionOccurred (this); }

  void ExceptionDescribe ()
  { p->ExceptionDescribe (this); }

  void ExceptionClear ()
  { p->ExceptionClear (this); }

  void FatalError (const char * val0)
  { p->FatalError (this, val0); }

  jint PushLocalFrame (jint val0)
  { return p->PushLocalFrame (this, val0); }

  jobject PopLocalFrame (jobject obj0)
  { return p->PopLocalFrame (this, obj0); }

  jobject NewGlobalRef (jobject obj0)
  { return p->NewGlobalRef (this, obj0); }

  void DeleteGlobalRef (jobject obj0)
  { p->DeleteGlobalRef (this, obj0); }

  void DeleteLocalRef (jobject obj0)
  { p->DeleteLocalRef (this, obj0); }

  jboolean IsSameObject (jobject obj0, jobject obj1)
  { return p->IsSameObject (this, obj0, obj1); }

  jobject NewLocalRef (jobject obj0)
  { return p->NewLocalRef (this, obj0); }

  jint EnsureLocalCapacity (jint val0)
  { return p->EnsureLocalCapacity (this, val0); }

  jobject AllocObject (jclass cl0)
  { return p->AllocObject (this, cl0); }

  jobject NewObject (jclass cl0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jobject result = p->NewObjectV (this, cl0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jobject NewObjectV (jclass cl0, jmethodID meth1, va_list val2)
  { return p->NewObjectV (this, cl0, meth1, val2); }

  jobject NewObjectA (jclass cl0, jmethodID meth1, jvalue * val2)
  { return p->NewObjectA (this, cl0, meth1, val2); }

  jclass GetObjectClass (jobject obj0)
  { return p->GetObjectClass (this, obj0); }

  jboolean IsInstanceOf (jobject obj0, jclass cl1)
  { return p->IsInstanceOf (this, obj0, cl1); }

  jmethodID GetMethodID (jclass cl0, const char * val1, const char * val2)
  { return p->GetMethodID (this, cl0, val1, val2); }

  jobject CallObjectMethod (jobject obj0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jobject result = p->CallObjectMethodV (this, obj0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jobject CallObjectMethodV (jobject obj0, jmethodID meth1, va_list val2)
  { return p->CallObjectMethodV (this, obj0, meth1, val2); }

  jobject CallObjectMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
  { return p->CallObjectMethodA (this, obj0, meth1, val2); }

  jboolean CallBooleanMethod (jobject obj0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jboolean result = p->CallBooleanMethodV (this, obj0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jboolean CallBooleanMethodV (jobject obj0, jmethodID meth1, va_list val2)
  { return p->CallBooleanMethodV (this, obj0, meth1, val2); }

  jboolean CallBooleanMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
  { return p->CallBooleanMethodA (this, obj0, meth1, val2); }

  jbyte CallByteMethod (jobject obj0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jbyte result = p->CallByteMethodV (this, obj0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jbyte CallByteMethodV (jobject obj0, jmethodID meth1, va_list val2)
  { return p->CallByteMethodV (this, obj0, meth1, val2); }

  jbyte CallByteMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
  { return p->CallByteMethodA (this, obj0, meth1, val2); }

  jchar CallCharMethod (jobject obj0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jchar result = p->CallCharMethodV (this, obj0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jchar CallCharMethodV (jobject obj0, jmethodID meth1, va_list val2)
  { return p->CallCharMethodV (this, obj0, meth1, val2); }

  jchar CallCharMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
  { return p->CallCharMethodA (this, obj0, meth1, val2); }

  jshort CallShortMethod (jobject obj0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jshort result = p->CallShortMethodV (this, obj0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jshort CallShortMethodV (jobject obj0, jmethodID meth1, va_list val2)
  { return p->CallShortMethodV (this, obj0, meth1, val2); }

  jshort CallShortMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
  { return p->CallShortMethodA (this, obj0, meth1, val2); }

  jint CallIntMethod (jobject obj0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jint result = p->CallIntMethodV (this, obj0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jint CallIntMethodV (jobject obj0, jmethodID meth1, va_list val2)
  { return p->CallIntMethodV (this, obj0, meth1, val2); }

  jint CallIntMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
  { return p->CallIntMethodA (this, obj0, meth1, val2); }

  jlong CallLongMethod (jobject obj0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jlong result = p->CallLongMethodV (this, obj0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jlong CallLongMethodV (jobject obj0, jmethodID meth1, va_list val2)
  { return p->CallLongMethodV (this, obj0, meth1, val2); }

  jlong CallLongMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
  { return p->CallLongMethodA (this, obj0, meth1, val2); }

  jfloat CallFloatMethod (jobject obj0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jfloat result = p->CallFloatMethodV (this, obj0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jfloat CallFloatMethodV (jobject obj0, jmethodID meth1, va_list val2)
  { return p->CallFloatMethodV (this, obj0, meth1, val2); }

  jfloat CallFloatMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
  { return p->CallFloatMethodA (this, obj0, meth1, val2); }

  jdouble CallDoubleMethod (jobject obj0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jdouble result = p->CallDoubleMethodV (this, obj0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jdouble CallDoubleMethodV (jobject obj0, jmethodID meth1, va_list val2)
  { return p->CallDoubleMethodV (this, obj0, meth1, val2); }

  jdouble CallDoubleMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
  { return p->CallDoubleMethodA (this, obj0, meth1, val2); }

  void CallVoidMethod (jobject obj0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    p->CallVoidMethodV (this, obj0, meth1, args);
    __builtin_va_end (args);
  }

  void CallVoidMethodV (jobject obj0, jmethodID meth1, va_list val2)
  { p->CallVoidMethodV (this, obj0, meth1, val2); }

  void CallVoidMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
  { p->CallVoidMethodA (this, obj0, meth1, val2); }

  jobject CallNonvirtualObjectMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth2);
    jobject result = p->CallNonvirtualObjectMethodV (this, obj0, cl1, meth2, args);
    __builtin_va_end (args);
    return result;
  }

  jobject CallNonvirtualObjectMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
  { return p->CallNonvirtualObjectMethodV (this, obj0, cl1, meth2, val3); }

  jobject CallNonvirtualObjectMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
  { return p->CallNonvirtualObjectMethodA (this, obj0, cl1, meth2, val3); }

  jboolean CallNonvirtualBooleanMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth2);
    jboolean result = p->CallNonvirtualBooleanMethodV (this, obj0, cl1, meth2, args);
    __builtin_va_end (args);
    return result;
  }

  jboolean CallNonvirtualBooleanMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
  { return p->CallNonvirtualBooleanMethodV (this, obj0, cl1, meth2, val3); }

  jboolean CallNonvirtualBooleanMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
  { return p->CallNonvirtualBooleanMethodA (this, obj0, cl1, meth2, val3); }

  jbyte CallNonvirtualByteMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth2);
    jbyte result = p->CallNonvirtualByteMethodV (this, obj0, cl1, meth2, args);
    __builtin_va_end (args);
    return result;
  }

  jbyte CallNonvirtualByteMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
  { return p->CallNonvirtualByteMethodV (this, obj0, cl1, meth2, val3); }

  jbyte CallNonvirtualByteMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
  { return p->CallNonvirtualByteMethodA (this, obj0, cl1, meth2, val3); }

  jchar CallNonvirtualCharMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth2);
    jchar result = p->CallNonvirtualCharMethodV (this, obj0, cl1, meth2, args);
    __builtin_va_end (args);
    return result;
  }

  jchar CallNonvirtualCharMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
  { return p->CallNonvirtualCharMethodV (this, obj0, cl1, meth2, val3); }

  jchar CallNonvirtualCharMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
  { return p->CallNonvirtualCharMethodA (this, obj0, cl1, meth2, val3); }

  jshort CallNonvirtualShortMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth2);
    jshort result = p->CallNonvirtualShortMethodV (this, obj0, cl1, meth2, args);
    __builtin_va_end (args);
    return result;
  }

  jshort CallNonvirtualShortMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
  { return p->CallNonvirtualShortMethodV (this, obj0, cl1, meth2, val3); }

  jshort CallNonvirtualShortMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
  { return p->CallNonvirtualShortMethodA (this, obj0, cl1, meth2, val3); }

  jint CallNonvirtualIntMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth2);
    jint result = p->CallNonvirtualIntMethodV (this, obj0, cl1, meth2, args);
    __builtin_va_end (args);
    return result;
  }

  jint CallNonvirtualIntMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
  { return p->CallNonvirtualIntMethodV (this, obj0, cl1, meth2, val3); }

  jint CallNonvirtualIntMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
  { return p->CallNonvirtualIntMethodA (this, obj0, cl1, meth2, val3); }

  jlong CallNonvirtualLongMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth2);
    jlong result = p->CallNonvirtualLongMethodV (this, obj0, cl1, meth2, args);
    __builtin_va_end (args);
    return result;
  }

  jlong CallNonvirtualLongMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
  { return p->CallNonvirtualLongMethodV (this, obj0, cl1, meth2, val3); }

  jlong CallNonvirtualLongMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
  { return p->CallNonvirtualLongMethodA (this, obj0, cl1, meth2, val3); }

  jfloat CallNonvirtualFloatMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth2);
    jfloat result = p->CallNonvirtualFloatMethodV (this, obj0, cl1, meth2, args);
    __builtin_va_end (args);
    return result;
  }

  jfloat CallNonvirtualFloatMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
  { return p->CallNonvirtualFloatMethodV (this, obj0, cl1, meth2, val3); }

  jfloat CallNonvirtualFloatMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
  { return p->CallNonvirtualFloatMethodA (this, obj0, cl1, meth2, val3); }

  jdouble CallNonvirtualDoubleMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth2);
    jdouble result = p->CallNonvirtualDoubleMethodV (this, obj0, cl1, meth2, args);
    __builtin_va_end (args);
    return result;
  }

  jdouble CallNonvirtualDoubleMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
  { return p->CallNonvirtualDoubleMethodV (this, obj0, cl1, meth2, val3); }

  jdouble CallNonvirtualDoubleMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
  { return p->CallNonvirtualDoubleMethodA (this, obj0, cl1, meth2, val3); }

  void CallNonvirtualVoidMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth2);
    p->CallNonvirtualVoidMethodV (this, obj0, cl1, meth2, args);
    __builtin_va_end (args);
  }

  void CallNonvirtualVoidMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
  { p->CallNonvirtualVoidMethodV (this, obj0, cl1, meth2, val3); }

  void CallNonvirtualVoidMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
  { p->CallNonvirtualVoidMethodA (this, obj0, cl1, meth2, val3); }

  jfieldID GetFieldID (jclass cl0, const char * val1, const char * val2)
  { return p->GetFieldID (this, cl0, val1, val2); }

  jobject GetObjectField (jobject obj0, jfieldID fld1)
  { return p->GetObjectField (this, obj0, fld1); }

  jboolean GetBooleanField (jobject obj0, jfieldID fld1)
  { return p->GetBooleanField (this, obj0, fld1); }

  jbyte GetByteField (jobject obj0, jfieldID fld1)
  { return p->GetByteField (this, obj0, fld1); }

  jchar GetCharField (jobject obj0, jfieldID fld1)
  { return p->GetCharField (this, obj0, fld1); }

  jshort GetShortField (jobject obj0, jfieldID fld1)
  { return p->GetShortField (this, obj0, fld1); }

  jint GetIntField (jobject obj0, jfieldID fld1)
  { return p->GetIntField (this, obj0, fld1); }

  jlong GetLongField (jobject obj0, jfieldID fld1)
  { return p->GetLongField (this, obj0, fld1); }

  jfloat GetFloatField (jobject obj0, jfieldID fld1)
  { return p->GetFloatField (this, obj0, fld1); }

  jdouble GetDoubleField (jobject obj0, jfieldID fld1)
  { return p->GetDoubleField (this, obj0, fld1); }

  void SetObjectField (jobject obj0, jfieldID fld1, jobject obj2)
  { p->SetObjectField (this, obj0, fld1, obj2); }

  void SetBooleanField (jobject obj0, jfieldID fld1, jboolean val2)
  { p->SetBooleanField (this, obj0, fld1, val2); }

  void SetByteField (jobject obj0, jfieldID fld1, jbyte val2)
  { p->SetByteField (this, obj0, fld1, val2); }

  void SetCharField (jobject obj0, jfieldID fld1, jchar val2)
  { p->SetCharField (this, obj0, fld1, val2); }

  void SetShortField (jobject obj0, jfieldID fld1, jshort val2)
  { p->SetShortField (this, obj0, fld1, val2); }

  void SetIntField (jobject obj0, jfieldID fld1, jint val2)
  { p->SetIntField (this, obj0, fld1, val2); }

  void SetLongField (jobject obj0, jfieldID fld1, jlong val2)
  { p->SetLongField (this, obj0, fld1, val2); }

  void SetFloatField (jobject obj0, jfieldID fld1, jfloat val2)
  { p->SetFloatField (this, obj0, fld1, val2); }

  void SetDoubleField (jobject obj0, jfieldID fld1, jdouble val2)
  { p->SetDoubleField (this, obj0, fld1, val2); }

  jmethodID GetStaticMethodID (jclass cl0, const char * val1, const char * val2)
  { return p->GetStaticMethodID (this, cl0, val1, val2); }

  jobject CallStaticObjectMethod (jclass cl0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jobject result = p->CallStaticObjectMethodV (this, cl0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jobject CallStaticObjectMethodV (jclass cl0, jmethodID meth1, va_list val2)
  { return p->CallStaticObjectMethodV (this, cl0, meth1, val2); }

  jobject CallStaticObjectMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
  { return p->CallStaticObjectMethodA (this, cl0, meth1, val2); }

  jboolean CallStaticBooleanMethod (jclass cl0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jboolean result = p->CallStaticBooleanMethodV (this, cl0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jboolean CallStaticBooleanMethodV (jclass cl0, jmethodID meth1, va_list val2)
  { return p->CallStaticBooleanMethodV (this, cl0, meth1, val2); }

  jboolean CallStaticBooleanMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
  { return p->CallStaticBooleanMethodA (this, cl0, meth1, val2); }

  jbyte CallStaticByteMethod (jclass cl0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jbyte result = p->CallStaticByteMethodV (this, cl0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jbyte CallStaticByteMethodV (jclass cl0, jmethodID meth1, va_list val2)
  { return p->CallStaticByteMethodV (this, cl0, meth1, val2); }

  jbyte CallStaticByteMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
  { return p->CallStaticByteMethodA (this, cl0, meth1, val2); }

  jchar CallStaticCharMethod (jclass cl0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jchar result = p->CallStaticCharMethodV (this, cl0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jchar CallStaticCharMethodV (jclass cl0, jmethodID meth1, va_list val2)
  { return p->CallStaticCharMethodV (this, cl0, meth1, val2); }

  jchar CallStaticCharMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
  { return p->CallStaticCharMethodA (this, cl0, meth1, val2); }

  jshort CallStaticShortMethod (jclass cl0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jshort result = p->CallStaticShortMethodV (this, cl0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jshort CallStaticShortMethodV (jclass cl0, jmethodID meth1, va_list val2)
  { return p->CallStaticShortMethodV (this, cl0, meth1, val2); }

  jshort CallStaticShortMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
  { return p->CallStaticShortMethodA (this, cl0, meth1, val2); }

  jint CallStaticIntMethod (jclass cl0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jint result = p->CallStaticIntMethodV (this, cl0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jint CallStaticIntMethodV (jclass cl0, jmethodID meth1, va_list val2)
  { return p->CallStaticIntMethodV (this, cl0, meth1, val2); }

  jint CallStaticIntMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
  { return p->CallStaticIntMethodA (this, cl0, meth1, val2); }

  jlong CallStaticLongMethod (jclass cl0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jlong result = p->CallStaticLongMethodV (this, cl0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jlong CallStaticLongMethodV (jclass cl0, jmethodID meth1, va_list val2)
  { return p->CallStaticLongMethodV (this, cl0, meth1, val2); }

  jlong CallStaticLongMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
  { return p->CallStaticLongMethodA (this, cl0, meth1, val2); }

  jfloat CallStaticFloatMethod (jclass cl0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jfloat result = p->CallStaticFloatMethodV (this, cl0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jfloat CallStaticFloatMethodV (jclass cl0, jmethodID meth1, va_list val2)
  { return p->CallStaticFloatMethodV (this, cl0, meth1, val2); }

  jfloat CallStaticFloatMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
  { return p->CallStaticFloatMethodA (this, cl0, meth1, val2); }

  jdouble CallStaticDoubleMethod (jclass cl0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    jdouble result = p->CallStaticDoubleMethodV (this, cl0, meth1, args);
    __builtin_va_end (args);
    return result;
  }

  jdouble CallStaticDoubleMethodV (jclass cl0, jmethodID meth1, va_list val2)
  { return p->CallStaticDoubleMethodV (this, cl0, meth1, val2); }

  jdouble CallStaticDoubleMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
  { return p->CallStaticDoubleMethodA (this, cl0, meth1, val2); }

  void CallStaticVoidMethod (jclass cl0, jmethodID meth1, ...)
  {
    va_list args;
    __builtin_stdarg_start((args),meth1);
    p->CallStaticVoidMethodV (this, cl0, meth1, args);
    __builtin_va_end (args);
  }

  void CallStaticVoidMethodV (jclass cl0, jmethodID meth1, va_list val2)
  { p->CallStaticVoidMethodV (this, cl0, meth1, val2); }

  void CallStaticVoidMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
  { p->CallStaticVoidMethodA (this, cl0, meth1, val2); }

  jfieldID GetStaticFieldID (jclass cl0, const char * val1, const char * val2)
  { return p->GetStaticFieldID (this, cl0, val1, val2); }

  jobject GetStaticObjectField (jclass cl0, jfieldID fld1)
  { return p->GetStaticObjectField (this, cl0, fld1); }

  jboolean GetStaticBooleanField (jclass cl0, jfieldID fld1)
  { return p->GetStaticBooleanField (this, cl0, fld1); }

  jbyte GetStaticByteField (jclass cl0, jfieldID fld1)
  { return p->GetStaticByteField (this, cl0, fld1); }

  jchar GetStaticCharField (jclass cl0, jfieldID fld1)
  { return p->GetStaticCharField (this, cl0, fld1); }

  jshort GetStaticShortField (jclass cl0, jfieldID fld1)
  { return p->GetStaticShortField (this, cl0, fld1); }

  jint GetStaticIntField (jclass cl0, jfieldID fld1)
  { return p->GetStaticIntField (this, cl0, fld1); }

  jlong GetStaticLongField (jclass cl0, jfieldID fld1)
  { return p->GetStaticLongField (this, cl0, fld1); }

  jfloat GetStaticFloatField (jclass cl0, jfieldID fld1)
  { return p->GetStaticFloatField (this, cl0, fld1); }

  jdouble GetStaticDoubleField (jclass cl0, jfieldID fld1)
  { return p->GetStaticDoubleField (this, cl0, fld1); }

  void SetStaticObjectField (jclass cl0, jfieldID fld1, jobject obj2)
  { p->SetStaticObjectField (this, cl0, fld1, obj2); }

  void SetStaticBooleanField (jclass cl0, jfieldID fld1, jboolean val2)
  { p->SetStaticBooleanField (this, cl0, fld1, val2); }

  void SetStaticByteField (jclass cl0, jfieldID fld1, jbyte val2)
  { p->SetStaticByteField (this, cl0, fld1, val2); }

  void SetStaticCharField (jclass cl0, jfieldID fld1, jchar val2)
  { p->SetStaticCharField (this, cl0, fld1, val2); }

  void SetStaticShortField (jclass cl0, jfieldID fld1, jshort val2)
  { p->SetStaticShortField (this, cl0, fld1, val2); }

  void SetStaticIntField (jclass cl0, jfieldID fld1, jint val2)
  { p->SetStaticIntField (this, cl0, fld1, val2); }

  void SetStaticLongField (jclass cl0, jfieldID fld1, jlong val2)
  { p->SetStaticLongField (this, cl0, fld1, val2); }

  void SetStaticFloatField (jclass cl0, jfieldID fld1, jfloat val2)
  { p->SetStaticFloatField (this, cl0, fld1, val2); }

  void SetStaticDoubleField (jclass cl0, jfieldID fld1, jdouble val2)
  { p->SetStaticDoubleField (this, cl0, fld1, val2); }

  jstring NewString (const jchar * val0, jsize val1)
  { return p->NewString (this, val0, val1); }

  jint GetStringLength (jstring val0)
  { return p->GetStringLength (this, val0); }

  const jchar * GetStringChars (jstring val0, jboolean * val1)
  { return p->GetStringChars (this, val0, val1); }

  void ReleaseStringChars (jstring val0, const jchar * val1)
  { p->ReleaseStringChars (this, val0, val1); }

  jstring NewStringUTF (const char * val0)
  { return p->NewStringUTF (this, val0); }

  jsize GetStringUTFLength (jstring val0)
  { return p->GetStringUTFLength (this, val0); }

  const char * GetStringUTFChars (jstring val0, jboolean * val1)
  { return p->GetStringUTFChars (this, val0, val1); }

  void ReleaseStringUTFChars (jstring val0, const char * val1)
  { p->ReleaseStringUTFChars (this, val0, val1); }

  jsize GetArrayLength (jarray val0)
  { return p->GetArrayLength (this, val0); }

  jarray NewObjectArray (jsize val0, jclass cl1, jobject obj2)
  { return p->NewObjectArray (this, val0, cl1, obj2); }

  jobject GetObjectArrayElement (jobjectArray val0, jsize val1)
  { return p->GetObjectArrayElement (this, val0, val1); }

  void SetObjectArrayElement (jobjectArray val0, jsize val1, jobject obj2)
  { p->SetObjectArrayElement (this, val0, val1, obj2); }

  jbooleanArray NewBooleanArray (jsize val0)
  { return p->NewBooleanArray (this, val0); }

  jbyteArray NewByteArray (jsize val0)
  { return p->NewByteArray (this, val0); }

  jcharArray NewCharArray (jsize val0)
  { return p->NewCharArray (this, val0); }

  jshortArray NewShortArray (jsize val0)
  { return p->NewShortArray (this, val0); }

  jintArray NewIntArray (jsize val0)
  { return p->NewIntArray (this, val0); }

  jlongArray NewLongArray (jsize val0)
  { return p->NewLongArray (this, val0); }

  jfloatArray NewFloatArray (jsize val0)
  { return p->NewFloatArray (this, val0); }

  jdoubleArray NewDoubleArray (jsize val0)
  { return p->NewDoubleArray (this, val0); }

  jboolean * GetBooleanArrayElements (jbooleanArray val0, jboolean * val1)
  { return p->GetBooleanArrayElements (this, val0, val1); }

  jbyte * GetByteArrayElements (jbyteArray val0, jboolean * val1)
  { return p->GetByteArrayElements (this, val0, val1); }

  jchar * GetCharArrayElements (jcharArray val0, jboolean * val1)
  { return p->GetCharArrayElements (this, val0, val1); }

  jshort * GetShortArrayElements (jshortArray val0, jboolean * val1)
  { return p->GetShortArrayElements (this, val0, val1); }

  jint * GetIntArrayElements (jintArray val0, jboolean * val1)
  { return p->GetIntArrayElements (this, val0, val1); }

  jlong * GetLongArrayElements (jlongArray val0, jboolean * val1)
  { return p->GetLongArrayElements (this, val0, val1); }

  jfloat * GetFloatArrayElements (jfloatArray val0, jboolean * val1)
  { return p->GetFloatArrayElements (this, val0, val1); }

  jdouble * GetDoubleArrayElements (jdoubleArray val0, jboolean * val1)
  { return p->GetDoubleArrayElements (this, val0, val1); }

  void ReleaseBooleanArrayElements (jbooleanArray val0, jboolean * val1, jint val2)
  { p->ReleaseBooleanArrayElements (this, val0, val1, val2); }

  void ReleaseByteArrayElements (jbyteArray val0, jbyte * val1, jint val2)
  { p->ReleaseByteArrayElements (this, val0, val1, val2); }

  void ReleaseCharArrayElements (jcharArray val0, jchar * val1, jint val2)
  { p->ReleaseCharArrayElements (this, val0, val1, val2); }

  void ReleaseShortArrayElements (jshortArray val0, jshort * val1, jint val2)
  { p->ReleaseShortArrayElements (this, val0, val1, val2); }

  void ReleaseIntArrayElements (jintArray val0, jint * val1, jint val2)
  { p->ReleaseIntArrayElements (this, val0, val1, val2); }

  void ReleaseLongArrayElements (jlongArray val0, jlong * val1, jint val2)
  { p->ReleaseLongArrayElements (this, val0, val1, val2); }

  void ReleaseFloatArrayElements (jfloatArray val0, jfloat * val1, jint val2)
  { p->ReleaseFloatArrayElements (this, val0, val1, val2); }

  void ReleaseDoubleArrayElements (jdoubleArray val0, jdouble * val1, jint val2)
  { p->ReleaseDoubleArrayElements (this, val0, val1, val2); }

  void GetBooleanArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
  { p->GetBooleanArrayRegion (this, val0, val1, val2, val3); }

  void GetByteArrayRegion (jbyteArray val0, jsize val1, jsize val2, jbyte * val3)
  { p->GetByteArrayRegion (this, val0, val1, val2, val3); }

  void GetCharArrayRegion (jcharArray val0, jsize val1, jsize val2, jchar * val3)
  { p->GetCharArrayRegion (this, val0, val1, val2, val3); }

  void GetShortArrayRegion (jshortArray val0, jsize val1, jsize val2, jshort * val3)
  { p->GetShortArrayRegion (this, val0, val1, val2, val3); }

  void GetIntArrayRegion (jintArray val0, jsize val1, jsize val2, jint * val3)
  { p->GetIntArrayRegion (this, val0, val1, val2, val3); }

  void GetLongArrayRegion (jlongArray val0, jsize val1, jsize val2, jlong * val3)
  { p->GetLongArrayRegion (this, val0, val1, val2, val3); }

  void GetFloatArrayRegion (jfloatArray val0, jsize val1, jsize val2, jfloat * val3)
  { p->GetFloatArrayRegion (this, val0, val1, val2, val3); }

  void GetDoubleArrayRegion (jdoubleArray val0, jsize val1, jsize val2, jdouble * val3)
  { p->GetDoubleArrayRegion (this, val0, val1, val2, val3); }

  void SetBooleanArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
  { p->SetBooleanArrayRegion (this, val0, val1, val2, val3); }

  void SetByteArrayRegion (jbyteArray val0, jsize val1, jsize val2, jbyte * val3)
  { p->SetByteArrayRegion (this, val0, val1, val2, val3); }

  void SetCharArrayRegion (jcharArray val0, jsize val1, jsize val2, jchar * val3)
  { p->SetCharArrayRegion (this, val0, val1, val2, val3); }

  void SetShortArrayRegion (jshortArray val0, jsize val1, jsize val2, jshort * val3)
  { p->SetShortArrayRegion (this, val0, val1, val2, val3); }

  void SetIntArrayRegion (jintArray val0, jsize val1, jsize val2, jint * val3)
  { p->SetIntArrayRegion (this, val0, val1, val2, val3); }

  void SetLongArrayRegion (jlongArray val0, jsize val1, jsize val2, jlong * val3)
  { p->SetLongArrayRegion (this, val0, val1, val2, val3); }

  void SetFloatArrayRegion (jfloatArray val0, jsize val1, jsize val2, jfloat * val3)
  { p->SetFloatArrayRegion (this, val0, val1, val2, val3); }

  void SetDoubleArrayRegion (jdoubleArray val0, jsize val1, jsize val2, jdouble * val3)
  { p->SetDoubleArrayRegion (this, val0, val1, val2, val3); }

  jint RegisterNatives (jclass cl0, const JNINativeMethod * val1, jint val2)
  { return p->RegisterNatives (this, cl0, val1, val2); }

  jint UnregisterNatives (jclass cl0)
  { return p->UnregisterNatives (this, cl0); }

  jint MonitorEnter (jobject obj0)
  { return p->MonitorEnter (this, obj0); }

  jint MonitorExit (jobject obj0)
  { return p->MonitorExit (this, obj0); }

  jint GetJavaVM (JavaVM ** val0)
  { return p->GetJavaVM (this, val0); }

  void GetStringRegion (jstring val0, jsize val1, jsize val2, jchar * val3)
  { p->GetStringRegion (this, val0, val1, val2, val3); }

  void GetStringUTFRegion (jstring val0, jsize val1, jsize val2, char * val3)
  { p->GetStringUTFRegion (this, val0, val1, val2, val3); }

  void * GetPrimitiveArrayCritical (jarray val0, jboolean * val1)
  { return p->GetPrimitiveArrayCritical (this, val0, val1); }

  void ReleasePrimitiveArrayCritical (jarray val0, void * val1, jint val2)
  { p->ReleasePrimitiveArrayCritical (this, val0, val1, val2); }

  const jchar * GetStringCritical (jstring val0, jboolean * val1)
  { return p->GetStringCritical (this, val0, val1); }

  void ReleaseStringCritical (jstring val0, const jchar * val1)
  { p->ReleaseStringCritical (this, val0, val1); }

  jweak NewWeakGlobalRef (jobject obj0)
  { return p->NewWeakGlobalRef (this, obj0); }

  void DeleteWeakGlobalRef (jweak val0)
  { p->DeleteWeakGlobalRef (this, val0); }

  jboolean ExceptionCheck ()
  { return p->ExceptionCheck (this); }
};






struct JNIInvokeInterface
{
  _Jv_func reserved0;
  _Jv_func reserved1;
  _Jv_func reserved2;

  jint (*DestroyJavaVM) (JavaVM *);
  jint (*AttachCurrentThread) (JavaVM *, void **, void *);
  jint (*DetachCurrentThread) (JavaVM *);
  jint (*GetEnv) (JavaVM *, void **, jint);
};



class _Jv_JavaVM
{
public:
  const struct JNIInvokeInterface *functions;

private:


public:
  jint DestroyJavaVM ()
  { return functions->DestroyJavaVM (this); }

  jint AttachCurrentThread (void **penv, void *args)
  { return functions->AttachCurrentThread (this, penv, args); }

  jint DetachCurrentThread ()
  { return functions->DetachCurrentThread (this); }

  jint GetEnv (void **penv, jint version)
  { return functions->GetEnv (this, penv, version); }
};


typedef struct JavaVMAttachArgs
{
  jint version;
  char *name;
  jobject group;

} JavaVMAttachArgs;

typedef struct JavaVMOption
{
  char *optionString;
  void *extraInfo;
} JavaVMOption;

typedef struct JavaVMInitArgs
{

  jint version;


  jint nOptions;


  JavaVMOption *options;


  jboolean ignoreUnrecognized;
} JavaVMInitArgs;
# 18 "/home/oldham/gcc/gcc2/libjava/include/jvmpi.h" 2
# 30 "/home/oldham/gcc/gcc2/libjava/include/jvmpi.h"
struct _jobjectID;
typedef struct _jobjectID * jobjectID;

typedef struct
{

  jint lineno;

  jmethodID method_id;
} JVMPI_CallFrame;

typedef struct
{
  JNIEnv *env_id;

  jint num_frames;

  JVMPI_CallFrame *frames;
} JVMPI_CallTrace;

typedef struct
{

  char *field_name;

  char *field_signature;
} JVMPI_Field;
# 66 "/home/oldham/gcc/gcc2/libjava/include/jvmpi.h"
typedef struct
{


  jint heap_dump_level;
} JVMPI_HeapDumpArg;

typedef struct
{

  jint offset;

  jint lineno;
} JVMPI_Lineno;

typedef struct
{

  char *method_name;

  char *method_signature;

  jint start_lineno;

  jint end_lineno;

  jmethodID method_id;
} JVMPI_Method;


struct _JVMPI_RawMonitor;
typedef struct _JVMPI_RawMonitor *JVMPI_RawMonitor;
# 140 "/home/oldham/gcc/gcc2/libjava/include/jvmpi.h"
typedef struct
{

  jint event_type;


  JNIEnv *env_id;

  union
  {
    struct
    {
      char *class_name;
      char *source_name;
      jint num_interfaces;
      jint num_methods;
      JVMPI_Method *methods;
      jint num_static_fields;
      JVMPI_Field *statics;
      jint num_instance_fields;
      JVMPI_Field *instances;
      jobjectID class_id;
    } class_load;

    struct
    {
      jobjectID class_id;
    } class_unload;

    struct
    {
      jint arena_id;
      jobjectID class_id;
      jint is_array;
      jint size;
      jobjectID obj_id;
    } obj_alloc;

    struct
    {
      char *thread_name;
      char *group_name;
      char *parent_name;
      jobjectID thread_id;
      JNIEnv *thread_env_id;
    } thread_start;

  } u;

} JVMPI_Event;

typedef struct
{

  jint version;


  void (*NotifyEvent) (JVMPI_Event *event);


  jint (*EnableEvent) (jint event_type, void *arg);
  jint (*DisableEvent) (jint event_type, void *arg);
  jint (*RequestEvent) (jint event_type, void *arg);
  void (*GetCallTrace) (JVMPI_CallTrace *trace, jint depth);
  void (*ProfilerExit) (jint);
  JVMPI_RawMonitor (*RawMonitorCreate) (char *lock_name);
  void (*RawMonitorEnter) (JVMPI_RawMonitor lock_id);
  void (*RawMonitorExit) (JVMPI_RawMonitor lock_id);
  void (*RawMonitorWait) (JVMPI_RawMonitor lock_id, jlong ms);
  void (*RawMonitorNotifyAll) (JVMPI_RawMonitor lock_id);
  void (*RawMonitorDestroy) (JVMPI_RawMonitor lock_id);
  jlong (*GetCurrentThreadCpuTime) (void);
  void (*SuspendThread) (JNIEnv *env);
  void (*ResumeThread) (JNIEnv *env);
  jint (*GetThreadStatus) (JNIEnv *env);
  jboolean (*ThreadHasRun) (JNIEnv *env);
  jint (*CreateSystemThread) (char *name, jint priority, void (*f) (void *));
  void (*SetThreadLocalStorage) (JNIEnv *env_id, void *ptr);
  void *(*GetThreadLocalStorage) (JNIEnv *env_id);
  void (*DisableGC) (void);
  void (*EnableGC) (void);
  void (*RunGC) (void);
  jobjectID (*GetThreadObject) (JNIEnv *env);
  jobjectID (*GetMethodClass) (jmethodID mid);

} JVMPI_Interface;
# 288 "/home/oldham/gcc/gcc2/libjava/include/jvm.h" 2

extern void (*_Jv_JVMPI_Notify_OBJECT_ALLOC) (JVMPI_Event *event);
extern void (*_Jv_JVMPI_Notify_THREAD_START) (JVMPI_Event *event);
extern void (*_Jv_JVMPI_Notify_THREAD_END) (JVMPI_Event *event);
# 21 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2







# 1 "java/lang/ClassLoader.h" 1





#pragma interface




extern "Java"
{
  namespace java
  {
    namespace net
    {
      class URL;
    }
    namespace security
    {
      class ProtectionDomain;
      class Permission;
    }
  }
};

class ::java::lang::ClassLoader : public ::java::lang::Object
{
public:
  ::java::lang::ClassLoader *getParent () { return parent; }
  static ::java::lang::ClassLoader *getSystemClassLoader ();
public:
  ClassLoader ();
  ClassLoader (::java::lang::ClassLoader *);
public:
  virtual ::java::lang::Class *loadClass (::java::lang::String *);
public:
  virtual ::java::lang::Class *loadClass (::java::lang::String *, jboolean);
  virtual ::java::lang::Class *findClass (::java::lang::String *);
  ::java::lang::Class *defineClass (jbyteArray, jint, jint);
  ::java::lang::Class *defineClass (::java::lang::String *, jbyteArray, jint, jint);
  ::java::lang::Class *defineClass (::java::lang::String *, jbyteArray, jint, jint, ::java::security::ProtectionDomain *);
private:
  ::java::lang::Class *defineClass0 (::java::lang::String *, jbyteArray, jint, jint, ::java::security::ProtectionDomain *);
public:
  void resolveClass (::java::lang::Class *);
public:
  static void resolveClass0 (::java::lang::Class *);
private:
  static void linkClass0 (::java::lang::Class *);
  static void markClassErrorState0 (::java::lang::Class *);
public:
  virtual ::java::lang::Package *definePackage (::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::net::URL *);
  virtual ::java::lang::Package *getPackage (::java::lang::String *);
  virtual JArray< ::java::lang::Package *> *getPackages ();
  ::java::lang::Class *findSystemClass (::java::lang::String *);
  void setSigners (::java::lang::Class *, JArray< ::java::lang::Object *> *) { }
  ::java::lang::Class *findLoadedClass (::java::lang::String *);
public:
  static ::java::io::InputStream *getSystemResourceAsStream (::java::lang::String *);
  static ::java::net::URL *getSystemResource (::java::lang::String *);
  virtual ::java::io::InputStream *getResourceAsStream (::java::lang::String *);
  virtual ::java::net::URL *getResource (::java::lang::String *);
public:
  virtual ::java::net::URL *findResource (::java::lang::String *) { return 0; }
public:
  ::java::util::Enumeration *getResources (::java::lang::String *);
public:
  virtual ::java::util::Enumeration *findResources (::java::lang::String *) { return 0; }
private:
  ::java::lang::ClassLoader *parent;
  ::java::util::HashMap *definedPackages;
public:
  static ::java::security::Permission *protectionDomainPermission;
  static ::java::security::ProtectionDomain *unknownProtectionDomain;
  static ::java::security::ProtectionDomain *defaultProtectionDomain;
  friend jclass _Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader);
  friend void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, bool is_jar);
public:

  static ::java::lang::Class class$;
};
# 29 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/Throwable.h" 1





#pragma interface




class ::java::lang::Throwable : public ::java::lang::Object
{
public:
  virtual ::java::lang::Throwable *fillInStackTrace ();
  virtual ::java::lang::String *getLocalizedMessage ();
  virtual ::java::lang::String *getMessage () { return detailMessage; }
  virtual void printStackTrace ();
  virtual void printStackTrace (::java::io::PrintStream *);
  virtual void printStackTrace (::java::io::PrintWriter *);
  Throwable ();
  Throwable (::java::lang::String *);
  virtual ::java::lang::String *toString ();
private:
  void printRawStackTrace (::java::io::PrintWriter *);
  ::java::lang::String *detailMessage;
public:
  static jboolean trace_enabled;
private:
  jbyteArray stackTrace;
  static const jlong serialVersionUID = -3042686055658047285LL;
public:

  static ::java::lang::Class class$;
};
# 30 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/ArrayIndexOutOfBoundsException.h" 1





#pragma interface

# 1 "java/lang/IndexOutOfBoundsException.h" 1





#pragma interface

# 1 "java/lang/RuntimeException.h" 1





#pragma interface

# 1 "java/lang/Exception.h" 1





#pragma interface



class ::java::lang::Exception : public ::java::lang::Throwable
{
public:
  Exception ();
  Exception (::java::lang::String *);
public:
  static const jlong serialVersionUID = -3387516993124229948LL;
public:

  static ::java::lang::Class class$;
};
# 9 "java/lang/RuntimeException.h" 2

class ::java::lang::RuntimeException : public ::java::lang::Exception
{
public:
  RuntimeException ();
  RuntimeException (::java::lang::String *);
public:
  static const jlong serialVersionUID = -7034897190745766939LL;
public:

  static ::java::lang::Class class$;
};
# 9 "java/lang/IndexOutOfBoundsException.h" 2

class ::java::lang::IndexOutOfBoundsException : public ::java::lang::RuntimeException
{
public:
  IndexOutOfBoundsException ();
  IndexOutOfBoundsException (::java::lang::String *);
public:
  static const jlong serialVersionUID = 234122996006267687LL;
public:

  static ::java::lang::Class class$;
};
# 9 "java/lang/ArrayIndexOutOfBoundsException.h" 2

class ::java::lang::ArrayIndexOutOfBoundsException : public ::java::lang::IndexOutOfBoundsException
{
public:
  ArrayIndexOutOfBoundsException ();
  ArrayIndexOutOfBoundsException (::java::lang::String *);
  ArrayIndexOutOfBoundsException (jint);
public:
  static const jlong serialVersionUID = -5116101128118950844LL;
public:

  static ::java::lang::Class class$;
};
# 31 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/StringIndexOutOfBoundsException.h" 1





#pragma interface



class ::java::lang::StringIndexOutOfBoundsException : public ::java::lang::IndexOutOfBoundsException
{
public:
  StringIndexOutOfBoundsException ();
  StringIndexOutOfBoundsException (::java::lang::String *);
  StringIndexOutOfBoundsException (jint);
public:
  static const jlong serialVersionUID = -6762910422159637258LL;
public:

  static ::java::lang::Class class$;
};
# 32 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/AbstractMethodError.h" 1





#pragma interface

# 1 "java/lang/IncompatibleClassChangeError.h" 1





#pragma interface

# 1 "java/lang/LinkageError.h" 1





#pragma interface

# 1 "java/lang/Error.h" 1





#pragma interface



class ::java::lang::Error : public ::java::lang::Throwable
{
public:
  Error ();
  Error (::java::lang::String *);
public:
  static const jlong serialVersionUID = 4980196508277280342LL;
public:

  static ::java::lang::Class class$;
};
# 9 "java/lang/LinkageError.h" 2

class ::java::lang::LinkageError : public ::java::lang::Error
{
public:
  LinkageError ();
  LinkageError (::java::lang::String *);
public:
  static const jlong serialVersionUID = 3579600108157160122LL;
public:

  static ::java::lang::Class class$;
};
# 9 "java/lang/IncompatibleClassChangeError.h" 2

class ::java::lang::IncompatibleClassChangeError : public ::java::lang::LinkageError
{
public:
  IncompatibleClassChangeError ();
  IncompatibleClassChangeError (::java::lang::String *);
public:
  static const jlong serialVersionUID = -4914975503642802119LL;
public:

  static ::java::lang::Class class$;
};
# 9 "java/lang/AbstractMethodError.h" 2

class ::java::lang::AbstractMethodError : public ::java::lang::IncompatibleClassChangeError
{
public:
  AbstractMethodError ();
  AbstractMethodError (::java::lang::String *);
public:
  static const jlong serialVersionUID = -1654391082989018462LL;
public:

  static ::java::lang::Class class$;
};
# 33 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/InstantiationException.h" 1





#pragma interface



class ::java::lang::InstantiationException : public ::java::lang::Exception
{
public:
  InstantiationException ();
  InstantiationException (::java::lang::String *);
public:
  static const jlong serialVersionUID = -8441929162975509110LL;
public:

  static ::java::lang::Class class$;
};
# 34 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/NoSuchFieldError.h" 1





#pragma interface



class ::java::lang::NoSuchFieldError : public ::java::lang::IncompatibleClassChangeError
{
public:
  NoSuchFieldError ();
  NoSuchFieldError (::java::lang::String *);
public:
  static const jlong serialVersionUID = -3456430195886129035LL;
public:

  static ::java::lang::Class class$;
};
# 35 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/NoSuchMethodError.h" 1





#pragma interface



class ::java::lang::NoSuchMethodError : public ::java::lang::IncompatibleClassChangeError
{
public:
  NoSuchMethodError ();
  NoSuchMethodError (::java::lang::String *);
public:
  static const jlong serialVersionUID = -3765521442372831335LL;
public:

  static ::java::lang::Class class$;
};
# 36 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/reflect/Constructor.h" 1





#pragma interface




class ::java::lang::reflect::Constructor : public ::java::lang::reflect::AccessibleObject
{
public:
  jboolean equals (::java::lang::Object *);
  ::java::lang::Class *getDeclaringClass () { return declaringClass; }
  JArray< ::java::lang::Class *> *getExceptionTypes ();
  jint getModifiers ();
  ::java::lang::String *getName ();
  JArray< ::java::lang::Class *> *getParameterTypes ();
  jint hashCode ();
private:
  void getType ();
public:
  ::java::lang::Object *newInstance (JArray< ::java::lang::Object *> *);
  ::java::lang::String *toString ();
private:
  Constructor ();
  ::java::lang::Class *declaringClass;
  JArray< ::java::lang::Class *> *exception_types;
  JArray< ::java::lang::Class *> *parameter_types;
  jint offset;
  friend jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);
  friend class java::lang::Class;
  friend jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);
public:

  static ::java::lang::Class class$;
};
# 37 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/reflect/Method.h" 1





#pragma interface




class ::java::lang::reflect::Method : public ::java::lang::reflect::AccessibleObject
{
public:
  jboolean equals (::java::lang::Object *);
  ::java::lang::Class *getDeclaringClass () { return declaringClass; }
  JArray< ::java::lang::Class *> *getExceptionTypes ();
  jint getModifiers ();
  ::java::lang::String *getName ();
private:
  void getType ();
public:
  JArray< ::java::lang::Class *> *getParameterTypes ();
  ::java::lang::Class *getReturnType ();
  jint hashCode ();
  ::java::lang::Object *invoke (::java::lang::Object *, JArray< ::java::lang::Object *> *);
public:
  static void appendClassName (::java::lang::StringBuffer *, ::java::lang::Class *);
public:
  ::java::lang::String *toString ();
private:
  Method ();
  ::java::lang::Class *declaringClass;
  JArray< ::java::lang::Class *> *exception_types;
  ::java::lang::String *name;
  JArray< ::java::lang::Class *> *parameter_types;
  ::java::lang::Class *return_type;
  jint offset;
  friend jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);
  friend class java::lang::Class;
  friend jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);
public:

  static ::java::lang::Class class$;
};
# 38 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2

# 1 "java/lang/OutOfMemoryError.h" 1





#pragma interface

# 1 "java/lang/VirtualMachineError.h" 1





#pragma interface



class ::java::lang::VirtualMachineError : public ::java::lang::Error
{
public:
  VirtualMachineError ();
  VirtualMachineError (::java::lang::String *);
public:
  static const jlong serialVersionUID = 4161983926571568670LL;
public:

  static ::java::lang::Class class$;
};
# 9 "java/lang/OutOfMemoryError.h" 2

class ::java::lang::OutOfMemoryError : public ::java::lang::VirtualMachineError
{
public:
  OutOfMemoryError ();
  OutOfMemoryError (::java::lang::String *);
public:
  static const jlong serialVersionUID = 8228564086184010517LL;
public:

  static ::java::lang::Class class$;
};
# 40 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/util/IdentityHashMap.h" 1





#pragma interface

# 1 "java/util/AbstractMap.h" 1





#pragma interface



class ::java::util::AbstractMap : public ::java::lang::Object
{
public:
  virtual void clear ();
public:
  virtual ::java::lang::Object *clone ();
public:
  virtual jboolean containsKey (::java::lang::Object *);
  virtual jboolean containsValue (::java::lang::Object *);
  virtual ::java::util::Set *entrySet () = 0;
  virtual jboolean equals (::java::lang::Object *);
  virtual ::java::lang::Object *get (::java::lang::Object *);
  virtual jint hashCode ();
  virtual jboolean isEmpty ();
  virtual ::java::util::Set *keySet ();
  virtual ::java::lang::Object *put (::java::lang::Object *, ::java::lang::Object *);
  virtual void putAll (::java::util::Map *);
  virtual ::java::lang::Object *remove (::java::lang::Object *);
  virtual jint size ();
  virtual ::java::lang::String *toString ();
  virtual ::java::util::Collection *values ();
  AbstractMap ();
private:
  ::java::util::Collection *valueCollection;
  ::java::util::Set *keySet__;
public:

  static ::java::lang::Class class$;
};
# 9 "java/util/IdentityHashMap.h" 2


class ::java::util::IdentityHashMap : public ::java::util::AbstractMap
{
public:
  IdentityHashMap ();
  IdentityHashMap (jint);
  IdentityHashMap (::java::util::Map *);
  virtual void clear ();
  virtual ::java::lang::Object *clone ();
  virtual jboolean containsKey (::java::lang::Object *);
  virtual jboolean containsValue (::java::lang::Object *);
  virtual ::java::util::Set *entrySet ();
  virtual ::java::lang::Object *get (::java::lang::Object *);
  virtual jboolean isEmpty ();
  virtual ::java::util::Set *keySet ();
  virtual ::java::lang::Object *put (::java::lang::Object *, ::java::lang::Object *);
  virtual ::java::lang::Object *remove (::java::lang::Object *);
  virtual jint size () { return size__; }
  virtual ::java::util::Collection *values ();
private:
  void readObject (::java::io::ObjectInputStream *);
  void writeObject (::java::io::ObjectOutputStream *);
  static const jint DEFAULT_CAPACITY = 21L;
  jint size__;
  JArray< ::java::lang::Object *> *table;
  ::java::lang::Object *tombstone;
  ::java::lang::Object *emptyslot;
public:

  static ::java::lang::Class class$;
};
# 41 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/Integer.h" 1





#pragma interface

# 1 "java/lang/Number.h" 1





#pragma interface



class ::java::lang::Number : public ::java::lang::Object
{
public:
  virtual jbyte byteValue ();
  virtual jshort shortValue ();
  virtual jint intValue () = 0;
  virtual jlong longValue () = 0;
  virtual jfloat floatValue () = 0;
  virtual jdouble doubleValue () = 0;
  Number ();
private:
  static const jlong serialVersionUID = -8742448824652078965LL;
public:

  static ::java::lang::Class class$;
};
# 9 "java/lang/Integer.h" 2

class ::java::lang::Integer : public ::java::lang::Number
{
public:
  Integer (jint);
  Integer (::java::lang::String *);
  jint hashCode () { return value; }
  jboolean equals (::java::lang::Object *);
  static ::java::lang::Integer *getInteger (::java::lang::String *);
  static ::java::lang::Integer *getInteger (::java::lang::String *, jint);
  static ::java::lang::Integer *getInteger (::java::lang::String *, ::java::lang::Integer *);
private:
  static ::java::lang::String *toUnsignedString (jint, jint);
public:
  static ::java::lang::String *toHexString (jint);
  static ::java::lang::String *toOctalString (jint);
  static ::java::lang::String *toBinaryString (jint);
  static ::java::lang::String *toString (jint);
  ::java::lang::String *toString ();
  static ::java::lang::String *toString (jint, jint);
  static ::java::lang::Integer *valueOf (::java::lang::String *);
  static ::java::lang::Integer *valueOf (::java::lang::String *, jint);
  static jint parseInt (::java::lang::String *);
  static jint parseInt (::java::lang::String *, jint);
private:
  static jint parseInt (::java::lang::String *, jint, jint, jboolean, jint);
public:
  static ::java::lang::Integer *decode (::java::lang::String *);
  jbyte byteValue ();
  jshort shortValue ();
  jint intValue () { return value; }
  jlong longValue ();
  jfloat floatValue ();
  jdouble doubleValue ();
  jint compareTo (::java::lang::Integer *);
  jint compareTo (::java::lang::Object *);
private:
  static const jlong serialVersionUID = 1360826667806852920LL;
public:
  static const jint MIN_VALUE = -2147483647L - 1;
  static const jint MAX_VALUE = 2147483647L;
  static ::java::lang::Class *TYPE;
private:
  jint value;
public:

  static ::java::lang::Class class$;
};
# 42 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/ThreadGroup.h" 1





#pragma interface




class ::java::lang::ThreadGroup : public ::java::lang::Object
{
private:
  ThreadGroup ();
public:
  ThreadGroup (::java::lang::String *);
  ThreadGroup (::java::lang::ThreadGroup *, ::java::lang::String *);
  ::java::lang::String *getName () { return name; }
  ::java::lang::ThreadGroup *getParent () { return parent; }
  void setMaxPriority (jint);
  jint getMaxPriority () { return maxpri; }
  void setDaemon (jboolean);
  jboolean isDaemon () { return daemon_flag; }
  virtual jboolean isDestroyed ();
  jboolean parentOf (::java::lang::ThreadGroup *);
  virtual jint activeCount ();
  virtual jint activeGroupCount ();
  virtual jint enumerate (JArray< ::java::lang::Thread *> *);
  virtual jint enumerate (JArray< ::java::lang::Thread *> *, jboolean);
private:
  jint enumerate (JArray< ::java::lang::Thread *> *, jint, jboolean);
public:
  virtual jint enumerate (JArray< ::java::lang::ThreadGroup *> *);
  virtual jint enumerate (JArray< ::java::lang::ThreadGroup *> *, jboolean);
private:
  jint enumerate (JArray< ::java::lang::ThreadGroup *> *, jint, jboolean);
public:
  void interrupt ();
  void stop ();
  void suspend ();
  void resume ();
private:
  void checkDestroy ();
public:
  void destroy ();
  virtual void list ();
private:
  void list (::java::lang::String *);
public:
  virtual void uncaughtException (::java::lang::Thread *, ::java::lang::Throwable *);
  virtual jboolean allowThreadSuspension (jboolean);
  virtual ::java::lang::String *toString ();
  void checkAccess ();
public:
  void addThread (::java::lang::Thread *);
  void removeThread (::java::lang::Thread *);
  void addGroup (::java::lang::ThreadGroup *);
  void removeGroup (::java::lang::ThreadGroup *);
  static ::java::lang::ThreadGroup *root;
  static jboolean had_uncaught_exception;
private:
  ::java::lang::ThreadGroup *parent;
  ::java::lang::String *name;
  ::java::util::Vector *threads;
  ::java::util::Vector *groups;
  jboolean daemon_flag;
  jint maxpri;
public:

  static ::java::lang::Class class$;
};
# 43 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2
# 1 "java/lang/Thread.h" 1





#pragma interface




class _Jv_JNIEnv;



class ::java::lang::Thread : public ::java::lang::Object
{
public:
  static jint activeCount ();
  void checkAccess ();
  virtual jint countStackFrames ();
  static ::java::lang::Thread *currentThread ();
  virtual void destroy ();
  static void dumpStack ();
  static jint enumerate (JArray< ::java::lang::Thread *> *);
  ::java::lang::String *getName () { return name; }
  jint getPriority () { return priority; }
  ::java::lang::ThreadGroup *getThreadGroup () { return group; }
  virtual void interrupt ();
  static jboolean interrupted ();
  virtual jboolean isInterrupted () { return interrupt_flag; }
  jboolean isAlive () { return alive_flag; }
  jboolean isDaemon () { return daemon_flag; }
  void join ();
  void join (jlong);
  void join (jlong, jint);
  void resume ();
private:
  void finish_ ();
  jboolean isInterrupted (jboolean);
public:
  virtual void run ();
  void setDaemon (jboolean);
  virtual ::java::lang::ClassLoader *getContextClassLoader ();
  virtual void setContextClassLoader (::java::lang::ClassLoader *);
  void setName (::java::lang::String *);
  void setPriority (jint);
  static void sleep (jlong);
  static void sleep (jlong, jint);
  virtual void start ();
  void stop ();
  void stop (::java::lang::Throwable *);
  void suspend ();
private:
  void initialize_native ();
  static ::java::lang::String *gen_name ();
public:
  Thread (::java::lang::ThreadGroup *, ::java::lang::Runnable *, ::java::lang::String *);
private:
  Thread (::java::lang::Thread *, ::java::lang::ThreadGroup *, ::java::lang::Runnable *, ::java::lang::String *);
public:
  Thread ();
  Thread (::java::lang::Runnable *);
  Thread (::java::lang::String *);
  Thread (::java::lang::ThreadGroup *, ::java::lang::Runnable *);
  Thread (::java::lang::ThreadGroup *, ::java::lang::String *);
  Thread (::java::lang::Runnable *, ::java::lang::String *);
  virtual ::java::lang::String *toString ();
  static void yield ();
  static const jint MAX_PRIORITY = 10L;
  static const jint MIN_PRIORITY = 1L;
  static const jint NORM_PRIORITY = 5L;
private:
  ::java::lang::ThreadGroup *group;
  ::java::lang::String *name;
  ::java::lang::Runnable *runnable;
  jint priority;
  jboolean daemon_flag;
public:
  jboolean interrupt_flag;
private:
  jboolean alive_flag;
  jboolean startable_flag;
  ::java::lang::ClassLoader *context_class_loader;
  ::java::lang::Object *data;
  friend _Jv_JNIEnv * _Jv_GetCurrentJNIEnv ();
  friend void _Jv_SetCurrentJNIEnv (_Jv_JNIEnv *env);
  friend void _Jv_ThreadRun (java::lang::Thread* thread);
  friend jint _Jv_AttachCurrentThread(java::lang::Thread* thread);
  friend java::lang::Thread* _Jv_AttachCurrentThread(jstring name, java::lang::ThreadGroup* group);
  friend jint _Jv_DetachCurrentThread ();
public:

  static ::java::lang::Class class$;
};
# 44 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2

# 1 "/home/oldham/gcc/gcc2/libjava/gcj/method.h" 1
# 16 "/home/oldham/gcc/gcc2/libjava/gcj/method.h"
extern inline jmethodID
_Jv_FromReflectedMethod (java::lang::reflect::Method *method)
{
  return (jmethodID)
    ((char *) method->declaringClass->methods + method->offset);
}

extern inline jmethodID
_Jv_FromReflectedConstructor (java::lang::reflect::Constructor *constructor)
{
  return (jmethodID)
    ((char *) constructor->declaringClass->methods + constructor->offset);
}

extern inline jint
JvNumMethods (jclass klass)
{
  return klass->method_count;
}

extern inline jmethodID
JvGetFirstMethod (jclass klass)
{
  return &klass->methods[0];
}
# 46 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2


# 1 "/home/oldham/gcc/gcc2/libjava/include/java-interp.h" 1
# 15 "/home/oldham/gcc/gcc2/libjava/include/java-interp.h"
# 1 "/home/oldham/gcc/gcc2/libjava/include/java-cpool.h" 1
# 34 "/home/oldham/gcc/gcc2/libjava/include/java-cpool.h"
extern inline void
_Jv_storeIndexes (_Jv_word *data,
                 _Jv_ushort index0,
                 _Jv_ushort index1)
{
  data->i = (((jint)index0) << 16) | (jint) index1;
}

extern inline void
_Jv_loadIndexes (const _Jv_word *data,
                 _Jv_ushort& index0,
                 _Jv_ushort& index1)
{
  jint udata = data->i;

  _Jv_uint uindex0 = ((udata >> 16) & 0xffff);
  _Jv_uint uindex1 = udata & 0xffff;

  index0 = uindex0;
  index1 = uindex1;
}

extern inline void
_Jv_storeFloat (_Jv_word *data, jfloat f)
{
  data->f = f;
}

extern inline jfloat
_Jv_loadFloat (_Jv_word *data)
{
  return data->f;
}

extern inline void
_Jv_storeInt (_Jv_word *data, jint i)
{
  data->i = i;
}

extern inline jint
_Jv_loadInt (_Jv_word *data)
{
  return data->i;
}

extern inline void
_Jv_storeLong (_Jv_word *data, jlong l)
{



  _Jv_word2 tmp;
  tmp.l = l;
  data[0].ia[0] = tmp.ia[0];
  data[1].ia[0] = tmp.ia[1];

}

extern inline jlong
_Jv_loadLong (_Jv_word *data)
{



  _Jv_word2 tmp;
  tmp.ia[0] = data[0].ia[0];
  tmp.ia[1] = data[1].ia[0];
  return tmp.l;

}

extern inline void
_Jv_storeDouble (_Jv_word *data, jdouble d)
{



  _Jv_word2 tmp;
  tmp.d = d;
  data[0].ia[0] = tmp.ia[0];
  data[1].ia[0] = tmp.ia[1];

}

extern inline jdouble
_Jv_loadDouble (_Jv_word *data)
{



  _Jv_word2 tmp;
  tmp.ia[0] = data[0].ia[0];
  tmp.ia[1] = data[1].ia[0];
  return tmp.d;

}
# 16 "/home/oldham/gcc/gcc2/libjava/include/java-interp.h" 2



#pragma interface




extern "C" {
# 1 "../libffi/include/ffi.h" 1
# 55 "../libffi/include/ffi.h"
extern "C" {







# 1 "../libffi/include/fficonfig.h" 1
# 64 "../libffi/include/ffi.h" 2


# 1 "/home/oldham/gcc/gcc2/objdir/gcc/include/stddef.h" 1 3
# 67 "../libffi/include/ffi.h" 2
# 175 "../libffi/include/ffi.h"
typedef enum ffi_abi {


  FFI_FIRST_ABI = 0,
# 194 "../libffi/include/ffi.h"
  FFI_SYSV,
  FFI_DEFAULT_ABI = FFI_SYSV,
# 243 "../libffi/include/ffi.h"
  FFI_LAST_ABI

} ffi_abi;

typedef struct _ffi_type
{
  size_t size;
  unsigned short alignment;
  unsigned short type;
             struct _ffi_type **elements;
} ffi_type;


extern ffi_type ffi_type_void;
extern ffi_type ffi_type_uint8;
extern ffi_type ffi_type_sint8;
extern ffi_type ffi_type_uint16;
extern ffi_type ffi_type_sint16;
extern ffi_type ffi_type_uint32;
extern ffi_type ffi_type_sint32;
extern ffi_type ffi_type_uint64;
extern ffi_type ffi_type_sint64;
extern ffi_type ffi_type_float;
extern ffi_type ffi_type_double;
extern ffi_type ffi_type_longdouble;
extern ffi_type ffi_type_pointer;





typedef enum {
  FFI_OK = 0,
  FFI_BAD_TYPEDEF,
  FFI_BAD_ABI
} ffi_status;

typedef unsigned FFI_TYPE;

typedef struct {
  ffi_abi abi;
  unsigned nargs;
                  ffi_type **arg_types;
                  ffi_type *rtype;
  unsigned bytes;
  unsigned flags;







} ffi_cif;
# 316 "../libffi/include/ffi.h"
typedef union {
  int sint;
  unsigned int uint;
  float flt;
  char data[4];
  void* ptr;
} ffi_raw;

void ffi_raw_call ( ffi_cif *cif,
                   void (*fn)(),
                             void *rvalue,
                                   ffi_raw *avalue);

void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw);
void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
size_t ffi_raw_size (ffi_cif *cif);







void ffi_java_raw_call ( ffi_cif *cif,
                        void (*fn)(),
                                  void *rvalue,
                                        ffi_raw *avalue);

void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw);
void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
size_t ffi_java_raw_size (ffi_cif *cif);
# 404 "../libffi/include/ffi.h"
typedef struct {
  char tramp[10];
  ffi_cif *cif;
  void (*fun)(ffi_cif*,void*,void**,void*);
  void *user_data;
} ffi_closure;

ffi_status
ffi_prep_closure (ffi_closure*,
                  ffi_cif *,
                  void (*fun)(ffi_cif*,void*,void**,void*),
                  void *user_data);



typedef struct {
  char tramp[10];

  ffi_cif *cif;
# 435 "../libffi/include/ffi.h"
  void (*fun)(ffi_cif*,void*,ffi_raw*,void*);
  void *user_data;

} ffi_raw_closure;

ffi_status
ffi_prep_raw_closure (ffi_raw_closure*,
                      ffi_cif *cif,
                      void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
                      void *user_data);


ffi_status
ffi_prep_java_raw_closure (ffi_raw_closure*,
                           ffi_cif *cif,
                           void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
                           void *user_data);







ffi_status ffi_prep_cif( ffi_cif *cif,
                        ffi_abi abi,
                        unsigned int nargs,
                                                                ffi_type *rtype,
                                        ffi_type **atypes);

void ffi_call( ffi_cif *cif,
              void (*fn)(),
                        void *rvalue,
                              void **avalue);
# 502 "../libffi/include/ffi.h"
}
# 26 "/home/oldham/gcc/gcc2/libjava/include/java-interp.h" 2
}

extern inline jboolean
_Jv_IsInterpretedClass (jclass c)
{
  return (c->loader != 0);
}

struct _Jv_ResolvedMethod;

bool _Jv_VerifyFieldSignature (_Jv_Utf8Const*sig);
bool _Jv_VerifyMethodSignature (_Jv_Utf8Const*sig);
bool _Jv_VerifyClassName (unsigned char* ptr, _Jv_ushort length);
bool _Jv_VerifyClassName (_Jv_Utf8Const *name);
bool _Jv_VerifyIdentifier (_Jv_Utf8Const *);
bool _Jv_ClassNameSamePackage (_Jv_Utf8Const *name1, _Jv_Utf8Const *name2);
void _Jv_DefineClass (jclass, jbyteArray, jint, jint);

void _Jv_InitField (jobject, jclass, int);
void * _Jv_AllocMethodInvocation (jsize size);







class _Jv_InterpClass;
class _Jv_InterpMethod;
class _Jv_InterpMethodInvocation;

class _Jv_InterpException {
  int start_pc;
  int end_pc;
  int handler_pc;
  int handler_type;

  friend class _Jv_ClassReader;
  friend class _Jv_InterpMethod;
};



class _Jv_MethodBase
{
protected:

  _Jv_InterpClass *defining_class;


  _Jv_Method *self;


  _Jv_ushort args_raw_size;

public:
  _Jv_Method *get_method ()
  {
    return self;
  }
};

class _Jv_InterpMethod : public _Jv_MethodBase
{
  _Jv_ushort max_stack;
  _Jv_ushort max_locals;
  int code_length;

  _Jv_ushort exc_count;

  unsigned char* bytecode ()
  {
    return
      ((unsigned char*)this)
      + (((((unsigned) ((sizeof (_Jv_InterpMethod) + exc_count*sizeof (_Jv_InterpException))))-1) | ((4)-1))+1);

  }

  _Jv_InterpException * exceptions ()
  {
    return (_Jv_InterpException*) (this+1);
  }

  static size_t size (int exc_count, int code_length)
  {
    return
      (((((unsigned) ((sizeof (_Jv_InterpMethod) + (exc_count * sizeof (_Jv_InterpException)))))-1) | ((4)-1))+1)

      + code_length;
  }


  void *ncode ();
  void continue1 (_Jv_InterpMethodInvocation *inv);

  static void run_normal (ffi_cif*, void*, ffi_raw*, void*);
  static void run_synch_object (ffi_cif*, void*, ffi_raw*, void*);
  static void run_synch_class (ffi_cif*, void*, ffi_raw*, void*);

  inline jobject run (ffi_cif*, void*, ffi_raw*,
                      _Jv_InterpMethodInvocation*);

  bool find_exception (jobject ex,
                       _Jv_InterpMethodInvocation *inv);

 public:
  static void dump_object(jobject o);

  friend class _Jv_ClassReader;
  friend class _Jv_InterpMethodInvocation;

  friend void _Jv_PrepareClass(jclass);
};

class _Jv_InterpMethodInvocation {
  _Jv_InterpMethod *running;
  _Jv_word *sp;
  unsigned char *pc;
  _Jv_word state[0];

  _Jv_word* stack_base () { return &state[0]; }
  _Jv_word* local_base () { return &state[running->max_stack]; }

  friend class _Jv_InterpMethod;
};

class _Jv_InterpClass : public java::lang::Class
{
  _Jv_MethodBase **interpreted_methods;
  _Jv_ushort *field_initializers;

  friend class _Jv_ClassReader;
  friend class _Jv_InterpMethod;
  friend void _Jv_PrepareClass(jclass);
  friend void _Jv_InitField (jobject, jclass, int);

  friend void *_Jv_MarkObj (void *, void *, void *, void *);


  friend _Jv_MethodBase ** _Jv_GetFirstMethod (_Jv_InterpClass *klass);
};

extern inline _Jv_MethodBase **
_Jv_GetFirstMethod (_Jv_InterpClass *klass)
{
  return klass->interpreted_methods;
}

struct _Jv_ResolvedMethod {
  jint stack_item_count;
  jint vtable_index;
  jclass klass;
  _Jv_Method* method;




  ffi_cif cif;
  ffi_type * arg_types[0];
};

class _Jv_JNIMethod : public _Jv_MethodBase
{


  void *function;


  ffi_cif jni_cif;


  ffi_type **jni_arg_types;


  static void call (ffi_cif *, void *, ffi_raw *, void *);

  void *ncode ();

  friend class _Jv_ClassReader;
  friend void _Jv_PrepareClass(jclass);

public:

  void set_function (void *f)
  {
    function = f;
  }
};
# 49 "/home/oldham/gcc/gcc2/libjava/jni.cc" 2




enum invocation_type
{
  normal,
  nonvirtual,
  static_type,
  constructor
};


extern struct JNINativeInterface _Jv_JNIFunctions;
extern struct JNIInvokeInterface _Jv_JNI_InvokeFunctions;
# 77 "/home/oldham/gcc/gcc2/libjava/jni.cc"
struct _Jv_JNI_LocalFrame
{


  int marker : 2;


  int size : 30;


  _Jv_JNI_LocalFrame *next;


  jobject vec[0];
};


static java::util::IdentityHashMap *local_ref_table;

static java::util::IdentityHashMap *global_ref_table;


static JavaVM *the_vm;



static JVMPI_Interface _Jv_JVMPI_Interface;

static jint
jvmpiEnableEvent (jint event_type, void *)
{
  switch (event_type)
    {
    case 27:
      _Jv_JVMPI_Notify_OBJECT_ALLOC = _Jv_JVMPI_Interface.NotifyEvent;
      break;

    case 35:
      _Jv_JVMPI_Notify_THREAD_START = _Jv_JVMPI_Interface.NotifyEvent;
      break;

    case 34:
      _Jv_JVMPI_Notify_THREAD_END = _Jv_JVMPI_Interface.NotifyEvent;
      break;

    default:
      return 2;
    }

  return 0;
}

static jint
jvmpiDisableEvent (jint event_type, void *)
{
  switch (event_type)
    {
    case 27:
      _Jv_JVMPI_Notify_OBJECT_ALLOC = __null;
      break;

    default:
      return 2;
    }

  return 0;
}




void
_Jv_JNI_Init (void)
{
  local_ref_table = new java::util::IdentityHashMap;
  global_ref_table = new java::util::IdentityHashMap;


  _Jv_JVMPI_Interface.version = 1;
  _Jv_JVMPI_Interface.EnableEvent = &jvmpiEnableEvent;
  _Jv_JVMPI_Interface.DisableEvent = &jvmpiDisableEvent;
  _Jv_JVMPI_Interface.EnableGC = &_Jv_EnableGC;
  _Jv_JVMPI_Interface.DisableGC = &_Jv_DisableGC;
  _Jv_JVMPI_Interface.RunGC = &_Jv_RunGC;

}


static void
mark_for_gc (jobject obj, java::util::IdentityHashMap *ref_table)
{
  JvSynchronize sync (ref_table);

  using namespace java::lang;
  Integer *refcount = (Integer *) ref_table->get (obj);
  jint val = (refcount == __null) ? 0 : refcount->intValue ();

  ref_table->put (obj, new Integer (val + 1));
}


static void
unmark_for_gc (jobject obj, java::util::IdentityHashMap *ref_table)
{
  JvSynchronize sync (ref_table);

  using namespace java::lang;
  Integer *refcount = (Integer *) ref_table->get (obj);
 
# 185 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                     ;
  jint val = refcount->intValue () - 1;
 
# 187 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                     ;
  if (val == 0)
    ref_table->remove (obj);
  else

    ref_table->put (obj, new Integer (val));
}



static jobject
_Jv_JNI_NewGlobalRef (JNIEnv *, jobject obj)
{
  mark_for_gc (obj, global_ref_table);
  return obj;
}

static void
_Jv_JNI_DeleteGlobalRef (JNIEnv *, jobject obj)
{
  unmark_for_gc (obj, global_ref_table);
}

static void
_Jv_JNI_DeleteLocalRef (JNIEnv *env, jobject obj)
{
  _Jv_JNI_LocalFrame *frame;

  for (frame = env->locals; frame != __null; frame = frame->next)
    {
      for (int i = 0; i < 32; ++i)
        {
          if (frame->vec[i] == obj)
            {
              frame->vec[i] = __null;
              unmark_for_gc (obj, local_ref_table);
              return;
            }
        }


     
# 228 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                           ;
    }

 
# 231 "/home/oldham/gcc/gcc2/libjava/jni.cc"
              ;
}

static jint
_Jv_JNI_EnsureLocalCapacity (JNIEnv *env, jint size)
{




  _Jv_JNI_LocalFrame *frame;
  try
    {
      frame = (_Jv_JNI_LocalFrame *) _Jv_Malloc (sizeof (_Jv_JNI_LocalFrame)
                                                 + size * sizeof (jobject));
    }
  catch (jthrowable t)
    {
      env->ex = t;
      return -1;
    }

  frame->marker = 0;
  frame->size = size;
  memset (&frame->vec[0], 0, size * sizeof (jobject));
  frame->next = env->locals;
  env->locals = frame;

  return 0;
}

static jint
_Jv_JNI_PushLocalFrame (JNIEnv *env, jint size)
{
  jint r = _Jv_JNI_EnsureLocalCapacity (env, size);
  if (r < 0)
    return r;


  env->locals->marker = 1;

  return 0;
}

static jobject
_Jv_JNI_NewLocalRef (JNIEnv *env, jobject obj)
{

  _Jv_JNI_LocalFrame *frame = env->locals;
  bool done = false, set = false;
  for (; frame != __null && ! done; frame = frame->next)
    {
      for (int i = 0; i < frame->size; ++i)
        {
          if (frame->vec[i] == __null)
            {
              set = true;
              done = true;
              frame->vec[i] = obj;
              break;
            }
        }



      if (done || frame->marker != 0)
        break;
    }

  if (! set)
    {


      _Jv_JNI_EnsureLocalCapacity (env, 16);

      env->locals->vec[0] = obj;
    }

  mark_for_gc (obj, local_ref_table);
  return obj;
}

static jobject
_Jv_JNI_PopLocalFrame (JNIEnv *env, jobject result, int stop)
{
  _Jv_JNI_LocalFrame *rf = env->locals;

  bool done = false;
  while (rf != __null && ! done)
    {
      for (int i = 0; i < rf->size; ++i)
        if (rf->vec[i] != __null)
          unmark_for_gc (rf->vec[i], local_ref_table);


      done = (rf->marker == stop);

      _Jv_JNI_LocalFrame *n = rf->next;



      if (n == __null)
        {
          memset (&rf->vec[0], 0, rf->size * sizeof (jobject));
          break;
        }

      _Jv_Free (rf);
      rf = n;
    }


  env->locals = rf;

  return result == __null ? __null : _Jv_JNI_NewLocalRef (env, result);
}

static jobject
_Jv_JNI_PopLocalFrame (JNIEnv *env, jobject result)
{
  return _Jv_JNI_PopLocalFrame (env, result, 1);
}



extern "C" void
_Jv_JNI_PopSystemFrame (JNIEnv *env)
{
  _Jv_JNI_PopLocalFrame (env, __null, 2);

  if (env->ex)
    {
      jthrowable t = env->ex;
      env->ex = __null;
      throw t;
    }
}




template<typename T>
static T
wrap_value (JNIEnv *, T value)
{
  return value;
}



template<typename T>
static T *
wrap_value (JNIEnv *env, T *value)
{
  return (value == __null
          ? value
          : (T *) _Jv_JNI_NewLocalRef (env, (jobject) value));
}



static jint
_Jv_JNI_GetVersion (JNIEnv *)
{
  return 0x00010002;
}

static jclass
_Jv_JNI_DefineClass (JNIEnv *env, jobject loader,
                     const jbyte *buf, jsize bufLen)
{
  try
    {
      jbyteArray bytes = JvNewByteArray (bufLen);

      jbyte *elts = elements (bytes);
      memcpy (elts, buf, bufLen * sizeof (jbyte));

      java::lang::ClassLoader *l
        = reinterpret_cast<java::lang::ClassLoader *> (loader);

      jclass result = l->defineClass (bytes, 0, bufLen);
      return (jclass) wrap_value (env, result);
    }
  catch (jthrowable t)
    {
      env->ex = t;
      return __null;
    }
}

static jclass
_Jv_JNI_FindClass (JNIEnv *env, const char *name)
{

  int len = strlen (name);
  char s[len + 1];
  for (int i = 0; i <= len; ++i)
    s[i] = (name[i] == '/') ? '.' : name[i];

  jclass r = __null;
  try
    {

      jstring n = JvNewStringUTF (s);

      java::lang::ClassLoader *loader = __null;
      if (env->klass != __null)
        loader = env->klass->getClassLoader ();

      if (loader == __null)
        {


          loader = java::lang::ClassLoader::getSystemClassLoader ();
        }

      r = loader->loadClass (n);
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }

  return (jclass) wrap_value (env, r);
}

static jclass
_Jv_JNI_GetSuperclass (JNIEnv *env, jclass clazz)
{
  return (jclass) wrap_value (env, clazz->getSuperclass ());
}

static jboolean
_Jv_JNI_IsAssignableFrom(JNIEnv *, jclass clazz1, jclass clazz2)
{
  return clazz1->isAssignableFrom (clazz2);
}

static jint
_Jv_JNI_Throw (JNIEnv *env, jthrowable obj)
{

 
# 474 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                                                          ;
  env->ex = obj;
  return 0;
}

static jint
_Jv_JNI_ThrowNew (JNIEnv *env, jclass clazz, const char *message)
{
  using namespace java::lang::reflect;

 
# 484 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                                                   ;

  int r = 0;
  try
    {
      JArray<jclass> *argtypes
        = (JArray<jclass> *) JvNewObjectArray (1, &java::lang::Class::class$,
                                               __null);

      jclass *elts = elements (argtypes);
      elts[0] = &java::lang::String::class$;

      Constructor *cons = clazz->getConstructor (argtypes);

      jobjectArray values = JvNewObjectArray (1, &java::lang::String::class$, __null);
      jobject *velts = elements (values);
      velts[0] = JvNewStringUTF (message);

      jobject obj = cons->newInstance (values);

      env->ex = reinterpret_cast<jthrowable> (obj);
    }
  catch (jthrowable t)
    {
      env->ex = t;
      r = -1;
    }

  return r;
}

static jthrowable
_Jv_JNI_ExceptionOccurred (JNIEnv *env)
{
  return (jthrowable) wrap_value (env, env->ex);
}

static void
_Jv_JNI_ExceptionDescribe (JNIEnv *env)
{
  if (env->ex != __null)
    env->ex->printStackTrace();
}

static void
_Jv_JNI_ExceptionClear (JNIEnv *env)
{
  env->ex = __null;
}

static jboolean
_Jv_JNI_ExceptionCheck (JNIEnv *env)
{
  return env->ex != __null;
}

static void
_Jv_JNI_FatalError (JNIEnv *, const char *message)
{
  _Jv_Abort (0, 0, 0, message);
}



static jboolean
_Jv_JNI_IsSameObject (JNIEnv *, jobject obj1, jobject obj2)
{
  return obj1 == obj2;
}

static jobject
_Jv_JNI_AllocObject (JNIEnv *env, jclass clazz)
{
  jobject obj = __null;
  using namespace java::lang::reflect;

  try
    {
     
# 562 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                             ;
      if (clazz->isInterface() || Modifier::isAbstract(clazz->getModifiers()))
        env->ex = new java::lang::InstantiationException ();
      else
        {

          obj = JvAllocObject (clazz);
        }
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }

  return wrap_value (env, obj);
}

static jclass
_Jv_JNI_GetObjectClass (JNIEnv *env, jobject obj)
{
 
# 582 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                ;
  return (jclass) wrap_value (env, obj->getClass());
}

static jboolean
_Jv_JNI_IsInstanceOf (JNIEnv *, jobject obj, jclass clazz)
{
  return clazz->isInstance(obj);
}







template<jboolean is_static>
static jmethodID
_Jv_JNI_GetAnyMethodID (JNIEnv *env, jclass clazz,
                        const char *name, const char *sig)
{
  try
    {
      _Jv_InitClass (clazz);

      _Jv_Utf8Const *name_u = _Jv_makeUtf8Const ((char *) name, -1);


      int len = strlen (sig);
      char s[len + 1];
      for (int i = 0; i <= len; ++i)
        s[i] = (sig[i] == '/') ? '.' : sig[i];
      _Jv_Utf8Const *sig_u = _Jv_makeUtf8Const ((char *) s, -1);

     
# 616 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                       ;

      using namespace java::lang::reflect;

      while (clazz != __null)
        {
          jint count = JvNumMethods (clazz);
          jmethodID meth = JvGetFirstMethod (clazz);

          for (jint i = 0; i < count; ++i)
            {
              if (((is_static && Modifier::isStatic (meth->accflags))
                   || (! is_static && ! Modifier::isStatic (meth->accflags)))
                  && _Jv_equalUtf8Consts (meth->name, name_u)
                  && _Jv_equalUtf8Consts (meth->signature, sig_u))
                return meth;

              meth = meth->getNextMethod();
            }

          clazz = clazz->getSuperclass ();
        }

      env->ex = new java::lang::NoSuchMethodError ();
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }

  return __null;
}




static void
array_from_valist (jvalue *values, JArray<jclass> *arg_types, va_list vargs)
{
  jclass *arg_elts = elements (arg_types);
  for (int i = 0; i < arg_types->length; ++i)
    {
      if (arg_elts[i] == (& _Jv_byteClass))
        values[i].b = __builtin_va_arg (vargs, jbyte);
      else if (arg_elts[i] == (& _Jv_shortClass))
        values[i].s = __builtin_va_arg (vargs, jshort);
      else if (arg_elts[i] == (& _Jv_intClass))
        values[i].i = __builtin_va_arg (vargs, jint);
      else if (arg_elts[i] == (& _Jv_longClass))
        values[i].j = __builtin_va_arg (vargs, jlong);
      else if (arg_elts[i] == (& _Jv_floatClass))
        values[i].f = __builtin_va_arg (vargs, jfloat);
      else if (arg_elts[i] == (& _Jv_doubleClass))
        values[i].d = __builtin_va_arg (vargs, jdouble);
      else if (arg_elts[i] == (& _Jv_booleanClass))
        values[i].z = __builtin_va_arg (vargs, jboolean);
      else if (arg_elts[i] == (& _Jv_charClass))
        values[i].c = __builtin_va_arg (vargs, jchar);
      else
        {

          values[i].l = __builtin_va_arg (vargs, jobject);
        }
    }
}



template<typename T, invocation_type style>
static T
_Jv_JNI_CallAnyMethodV (JNIEnv *env, jobject obj, jclass klass,
                        jmethodID id, va_list vargs)
{
  if (style == normal)
    id = _Jv_LookupDeclaredMethod (obj->getClass (), id->name, id->signature);

  jclass decl_class = klass ? klass : obj->getClass ();
 
# 693 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                               ;

  jclass return_type;
  JArray<jclass> *arg_types;

  try
    {
      _Jv_GetTypesFromSignature (id, decl_class,
                                 &arg_types, &return_type);

      jvalue args[arg_types->length];
      array_from_valist (args, arg_types, vargs);


      if (style == constructor)
        return_type = klass;

      jvalue result;
      jthrowable ex = _Jv_CallAnyMethodA (obj, return_type, id,
                                          style == constructor,
                                          arg_types, args, &result);

      if (ex != __null)
        env->ex = ex;


      return wrap_value (env, * (T *) &result);
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }

  return wrap_value (env, (T) 0);
}

template<typename T, invocation_type style>
static T
_Jv_JNI_CallAnyMethod (JNIEnv *env, jobject obj, jclass klass,
                       jmethodID method, ...)
{
  va_list args;
  T result;

  __builtin_stdarg_start((args),method);
  result = _Jv_JNI_CallAnyMethodV<T, style> (env, obj, klass, method, args);
  __builtin_va_end (args);

  return result;
}

template<typename T, invocation_type style>
static T
_Jv_JNI_CallAnyMethodA (JNIEnv *env, jobject obj, jclass klass,
                        jmethodID id, jvalue *args)
{
  if (style == normal)
    id = _Jv_LookupDeclaredMethod (obj->getClass (), id->name, id->signature);

  jclass decl_class = klass ? klass : obj->getClass ();
 
# 753 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                               ;

  jclass return_type;
  JArray<jclass> *arg_types;
  try
    {
      _Jv_GetTypesFromSignature (id, decl_class,
                                 &arg_types, &return_type);


      if (style == constructor)
        return_type = klass;

      jvalue result;
      jthrowable ex = _Jv_CallAnyMethodA (obj, return_type, id,
                                          style == constructor,
                                          arg_types, args, &result);

      if (ex != __null)
        env->ex = ex;


      return wrap_value (env, * (T *) &result);
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }

  return wrap_value (env, (T) 0);
}

template<invocation_type style>
static void
_Jv_JNI_CallAnyVoidMethodV (JNIEnv *env, jobject obj, jclass klass,
                            jmethodID id, va_list vargs)
{
  if (style == normal)
    id = _Jv_LookupDeclaredMethod (obj->getClass (), id->name, id->signature);

  jclass decl_class = klass ? klass : obj->getClass ();
 
# 794 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                               ;

  jclass return_type;
  JArray<jclass> *arg_types;
  try
    {
      _Jv_GetTypesFromSignature (id, decl_class,
                                 &arg_types, &return_type);

      jvalue args[arg_types->length];
      array_from_valist (args, arg_types, vargs);


      if (style == constructor)
        return_type = klass;

      jthrowable ex = _Jv_CallAnyMethodA (obj, return_type, id,
                                          style == constructor,
                                          arg_types, args, __null);

      if (ex != __null)
        env->ex = ex;
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }
}

template<invocation_type style>
static void
_Jv_JNI_CallAnyVoidMethod (JNIEnv *env, jobject obj, jclass klass,
                           jmethodID method, ...)
{
  va_list args;

  __builtin_stdarg_start((args),method);
  _Jv_JNI_CallAnyVoidMethodV<style> (env, obj, klass, method, args);
  __builtin_va_end (args);
}

template<invocation_type style>
static void
_Jv_JNI_CallAnyVoidMethodA (JNIEnv *env, jobject obj, jclass klass,
                            jmethodID id, jvalue *args)
{
  if (style == normal)
    id = _Jv_LookupDeclaredMethod (obj->getClass (), id->name, id->signature);

  jclass decl_class = klass ? klass : obj->getClass ();
 
# 844 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                               ;

  jclass return_type;
  JArray<jclass> *arg_types;
  try
    {
      _Jv_GetTypesFromSignature (id, decl_class,
                                 &arg_types, &return_type);

      jthrowable ex = _Jv_CallAnyMethodA (obj, return_type, id,
                                          style == constructor,
                                          arg_types, args, __null);

      if (ex != __null)
        env->ex = ex;
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }
}



template<typename T>
static T
_Jv_JNI_CallMethodV (JNIEnv *env, jobject obj, jmethodID id, va_list args)
{
  return _Jv_JNI_CallAnyMethodV<T, normal> (env, obj, __null, id, args);
}



template<typename T>
static T
_Jv_JNI_CallMethod (JNIEnv *env, jobject obj, jmethodID id, ...)
{
  va_list args;
  T result;

  __builtin_stdarg_start((args),id);
  result = _Jv_JNI_CallAnyMethodV<T, normal> (env, obj, __null, id, args);
  __builtin_va_end (args);

  return result;
}



template<typename T>
static T
_Jv_JNI_CallMethodA (JNIEnv *env, jobject obj, jmethodID id, jvalue *args)
{
  return _Jv_JNI_CallAnyMethodA<T, normal> (env, obj, __null, id, args);
}

static void
_Jv_JNI_CallVoidMethodV (JNIEnv *env, jobject obj, jmethodID id, va_list args)
{
  _Jv_JNI_CallAnyVoidMethodV<normal> (env, obj, __null, id, args);
}

static void
_Jv_JNI_CallVoidMethod (JNIEnv *env, jobject obj, jmethodID id, ...)
{
  va_list args;

  __builtin_stdarg_start((args),id);
  _Jv_JNI_CallAnyVoidMethodV<normal> (env, obj, __null, id, args);
  __builtin_va_end (args);
}

static void
_Jv_JNI_CallVoidMethodA (JNIEnv *env, jobject obj, jmethodID id, jvalue *args)
{
  _Jv_JNI_CallAnyVoidMethodA<normal> (env, obj, __null, id, args);
}



template<typename T>
static T
_Jv_JNI_CallStaticMethodV (JNIEnv *env, jclass klass,
                           jmethodID id, va_list args)
{
 
# 929 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                                                     ;
 
# 930 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                                         ;

  return _Jv_JNI_CallAnyMethodV<T, static_type> (env, __null, klass, id, args);
}



template<typename T>
static T
_Jv_JNI_CallStaticMethod (JNIEnv *env, jclass klass, jmethodID id, ...)
{
  va_list args;
  T result;

 
# 944 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                                                     ;
 
# 945 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                                         ;

  __builtin_stdarg_start((args),id);
  result = _Jv_JNI_CallAnyMethodV<T, static_type> (env, __null, klass,
                                                   id, args);
  __builtin_va_end (args);

  return result;
}



template<typename T>
static T
_Jv_JNI_CallStaticMethodA (JNIEnv *env, jclass klass, jmethodID id,
                           jvalue *args)
{
 
# 962 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                                                     ;
 
# 963 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                                         ;

  return _Jv_JNI_CallAnyMethodA<T, static_type> (env, __null, klass, id, args);
}

static void
_Jv_JNI_CallStaticVoidMethodV (JNIEnv *env, jclass klass, jmethodID id,
                               va_list args)
{
  _Jv_JNI_CallAnyVoidMethodV<static_type> (env, __null, klass, id, args);
}

static void
_Jv_JNI_CallStaticVoidMethod (JNIEnv *env, jclass klass, jmethodID id, ...)
{
  va_list args;

  __builtin_stdarg_start((args),id);
  _Jv_JNI_CallAnyVoidMethodV<static_type> (env, __null, klass, id, args);
  __builtin_va_end (args);
}

static void
_Jv_JNI_CallStaticVoidMethodA (JNIEnv *env, jclass klass, jmethodID id,
                               jvalue *args)
{
  _Jv_JNI_CallAnyVoidMethodA<static_type> (env, __null, klass, id, args);
}

static jobject
_Jv_JNI_NewObjectV (JNIEnv *env, jclass klass,
                    jmethodID id, va_list args)
{
 
# 996 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                         ;
 



                               ;

  return _Jv_JNI_CallAnyMethodV<jobject, constructor> (env, __null, klass,
                                                       id, args);
}

static jobject
_Jv_JNI_NewObject (JNIEnv *env, jclass klass, jmethodID id, ...)
{
 
# 1010 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                         ;
 



                               ;

  va_list args;
  jobject result;

  __builtin_stdarg_start((args),id);
  result = _Jv_JNI_CallAnyMethodV<jobject, constructor> (env, __null, klass,
                                                         id, args);
  __builtin_va_end (args);

  return result;
}

static jobject
_Jv_JNI_NewObjectA (JNIEnv *env, jclass klass, jmethodID id,
                    jvalue *args)
{
 
# 1032 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                         ;
 



                               ;

  return _Jv_JNI_CallAnyMethodA<jobject, constructor> (env, __null, klass,
                                                       id, args);
}



template<typename T>
static T
_Jv_JNI_GetField (JNIEnv *env, jobject obj, jfieldID field)
{
 
# 1049 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                ;
  T *ptr = (T *) ((char *) obj + field->getOffset ());
  return wrap_value (env, *ptr);
}

template<typename T>
static void
_Jv_JNI_SetField (JNIEnv *, jobject obj, jfieldID field, T value)
{
 
# 1058 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                ;
  T *ptr = (T *) ((char *) obj + field->getOffset ());
  *ptr = value;
}

template<jboolean is_static>
static jfieldID
_Jv_JNI_GetAnyFieldID (JNIEnv *env, jclass clazz,
                       const char *name, const char *sig)
{
  try
    {
      _Jv_InitClass (clazz);

      _Jv_Utf8Const *a_name = _Jv_makeUtf8Const ((char *) name, -1);


      int len = strlen (sig);
      char s[len + 1];
      for (int i = 0; i <= len; ++i)
        s[i] = (sig[i] == '/') ? '.' : sig[i];
      jclass field_class = _Jv_FindClassFromSignature ((char *) s, __null);



      java::lang::ClassLoader *loader = clazz->getClassLoader ();
      while (clazz != __null)
        {


          JvSynchronize sync (clazz);

          jint count = (is_static
                        ? JvNumStaticFields (clazz)
                        : JvNumInstanceFields (clazz));
          jfieldID field = (is_static
                            ? JvGetFirstStaticField (clazz)
                            : JvGetFirstInstanceField (clazz));
          for (jint i = 0; i < count; ++i)
            {
              _Jv_Utf8Const *f_name = field->getNameUtf8Const(clazz);



              _Jv_ResolveField (field, loader);
              if (_Jv_equalUtf8Consts (f_name, a_name)
                  && field->getClass() == field_class)
                return field;

              field = field->getNextField ();
            }

          clazz = clazz->getSuperclass ();
        }

      env->ex = new java::lang::NoSuchFieldError ();
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }
  return __null;
}

template<typename T>
static T
_Jv_JNI_GetStaticField (JNIEnv *env, jclass, jfieldID field)
{
  T *ptr = (T *) field->u.addr;
  return wrap_value (env, *ptr);
}

template<typename T>
static void
_Jv_JNI_SetStaticField (JNIEnv *, jclass, jfieldID field, T value)
{
  T *ptr = (T *) field->u.addr;
  *ptr = value;
}

static jstring
_Jv_JNI_NewString (JNIEnv *env, const jchar *unichars, jsize len)
{
  try
    {
      jstring r = _Jv_NewString (unichars, len);
      return (jstring) wrap_value (env, r);
    }
  catch (jthrowable t)
    {
      env->ex = t;
      return __null;
    }
}

static jsize
_Jv_JNI_GetStringLength (JNIEnv *, jstring string)
{
  return string->length();
}

static const jchar *
_Jv_JNI_GetStringChars (JNIEnv *, jstring string, jboolean *isCopy)
{
  jchar *result = _Jv_GetStringChars (string);
  mark_for_gc (string, global_ref_table);
  if (isCopy)
    *isCopy = false;
  return (const jchar *) result;
}

static void
_Jv_JNI_ReleaseStringChars (JNIEnv *, jstring string, const jchar *)
{
  unmark_for_gc (string, global_ref_table);
}

static jstring
_Jv_JNI_NewStringUTF (JNIEnv *env, const char *bytes)
{
  try
    {
      jstring result = JvNewStringUTF (bytes);
      return (jstring) wrap_value (env, result);
    }
  catch (jthrowable t)
    {
      env->ex = t;
      return __null;
    }
}

static jsize
_Jv_JNI_GetStringUTFLength (JNIEnv *, jstring string)
{
  return JvGetStringUTFLength (string);
}

static const char *
_Jv_JNI_GetStringUTFChars (JNIEnv *env, jstring string, jboolean *isCopy)
{
  jsize len = JvGetStringUTFLength (string);
  try
    {
      char *r = (char *) _Jv_Malloc (len + 1);
      JvGetStringUTFRegion (string, 0, len, r);
      r[len] = '\0';

      if (isCopy)
        *isCopy = true;

      return (const char *) r;
    }
  catch (jthrowable t)
    {
      env->ex = t;
      return __null;
    }
}

static void
_Jv_JNI_ReleaseStringUTFChars (JNIEnv *, jstring, const char *utf)
{
  _Jv_Free ((void *) utf);
}

static void
_Jv_JNI_GetStringRegion (JNIEnv *env, jstring string, jsize start, jsize len,
                         jchar *buf)
{
  jchar *result = _Jv_GetStringChars (string);
  if (start < 0 || start > string->length ()
      || len < 0 || start + len > string->length ())
    {
      try
        {
          env->ex = new java::lang::StringIndexOutOfBoundsException ();
        }
      catch (jthrowable t)
        {
          env->ex = t;
        }
    }
  else
    memcpy (buf, &result[start], len * sizeof (jchar));
}

static void
_Jv_JNI_GetStringUTFRegion (JNIEnv *env, jstring str, jsize start,
                            jsize len, char *buf)
{
  if (start < 0 || start > str->length ()
      || len < 0 || start + len > str->length ())
    {
      try
        {
          env->ex = new java::lang::StringIndexOutOfBoundsException ();
        }
      catch (jthrowable t)
        {
          env->ex = t;
        }
    }
  else
    _Jv_GetStringUTFRegion (str, start, len, buf);
}

static const jchar *
_Jv_JNI_GetStringCritical (JNIEnv *, jstring str, jboolean *isCopy)
{
  jchar *result = _Jv_GetStringChars (str);
  if (isCopy)
    *isCopy = false;
  return result;
}

static void
_Jv_JNI_ReleaseStringCritical (JNIEnv *, jstring, const jchar *)
{

}

static jsize
_Jv_JNI_GetArrayLength (JNIEnv *, jarray array)
{
  return array->length;
}

static jarray
_Jv_JNI_NewObjectArray (JNIEnv *env, jsize length, jclass elementClass,
                        jobject init)
{
  try
    {
      jarray result = JvNewObjectArray (length, elementClass, init);
      return (jarray) wrap_value (env, result);
    }
  catch (jthrowable t)
    {
      env->ex = t;
      return __null;
    }
}

static jobject
_Jv_JNI_GetObjectArrayElement (JNIEnv *env, jobjectArray array, jsize index)
{
  jobject *elts = elements (array);
  return wrap_value (env, elts[index]);
}

static void
_Jv_JNI_SetObjectArrayElement (JNIEnv *env, jobjectArray array, jsize index,
                               jobject value)
{
  try
    {
      _Jv_CheckArrayStore (array, value);
      jobject *elts = elements (array);
      elts[index] = value;
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }
}

template<typename T, jclass K>
static JArray<T> *
_Jv_JNI_NewPrimitiveArray (JNIEnv *env, jsize length)
{
  try
    {
      return (JArray<T> *) wrap_value (env, _Jv_NewPrimArray (K, length));
    }
  catch (jthrowable t)
    {
      env->ex = t;
      return __null;
    }
}

template<typename T>
static T *
_Jv_JNI_GetPrimitiveArrayElements (JNIEnv *, JArray<T> *array,
                                   jboolean *isCopy)
{
  T *elts = elements (array);
  if (isCopy)
    {

      *isCopy = false;
    }
  mark_for_gc (array, global_ref_table);
  return elts;
}

template<typename T>
static void
_Jv_JNI_ReleasePrimitiveArrayElements (JNIEnv *, JArray<T> *array,
                                       T *, jint )
{



  unmark_for_gc (array, global_ref_table);
}

template<typename T>
static void
_Jv_JNI_GetPrimitiveArrayRegion (JNIEnv *env, JArray<T> *array,
                                 jsize start, jsize len,
                                 T *buf)
{

  if (start < 0 || len < 0
      || (unsigned long) (start + len) > (unsigned long) array->length)
    {
      try
        {

          env->ex = new java::lang::ArrayIndexOutOfBoundsException ();
        }
      catch (jthrowable t)
        {

          env->ex = t;
        }
    }
  else
    {
      T *elts = elements (array) + start;
      memcpy (buf, elts, len * sizeof (T));
    }
}

template<typename T>
static void
_Jv_JNI_SetPrimitiveArrayRegion (JNIEnv *env, JArray<T> *array,
                                 jsize start, jsize len, T *buf)
{

  if (start < 0 || len < 0
      || (unsigned long) (start + len) > (unsigned long) array->length)
    {
      try
        {

          env->ex = new java::lang::ArrayIndexOutOfBoundsException ();
        }
      catch (jthrowable t)
        {
          env->ex = t;
        }
    }
  else
    {
      T *elts = elements (array) + start;
      memcpy (elts, buf, len * sizeof (T));
    }
}

static void *
_Jv_JNI_GetPrimitiveArrayCritical (JNIEnv *, jarray array,
                                   jboolean *isCopy)
{

  jclass klass = array->getClass()->getComponentType();
 
# 1426 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                  ;
  char *r = _Jv_GetArrayElementFromElementType (array, klass);
  if (isCopy)
    *isCopy = false;
  return r;
}

static void
_Jv_JNI_ReleasePrimitiveArrayCritical (JNIEnv *, jarray, void *, jint)
{

}

static jint
_Jv_JNI_MonitorEnter (JNIEnv *env, jobject obj)
{
  try
    {
      _Jv_MonitorEnter (obj);
      return 0;
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }
  return -1;
}

static jint
_Jv_JNI_MonitorExit (JNIEnv *env, jobject obj)
{
  try
    {
      _Jv_MonitorExit (obj);
      return 0;
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }
  return -1;
}


jobject
_Jv_JNI_ToReflectedField (JNIEnv *env, jclass cls, jfieldID fieldID,
                          jboolean)
{
  try
    {
      java::lang::reflect::Field *field = new java::lang::reflect::Field();
      field->declaringClass = cls;
      field->offset = (char*) fieldID - (char *) cls->fields;
      field->name = _Jv_NewStringUtf8Const (fieldID->getNameUtf8Const (cls));
      return wrap_value (env, field);
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }
  return __null;
}


static jfieldID
_Jv_JNI_FromReflectedField (JNIEnv *, jobject f)
{
  using namespace java::lang::reflect;

  Field *field = reinterpret_cast<Field *> (f);
  return _Jv_FromReflectedField (field);
}

jobject
_Jv_JNI_ToReflectedMethod (JNIEnv *env, jclass klass, jmethodID id,
                           jboolean)
{
  using namespace java::lang::reflect;


  static _Jv_Utf8Const *init_name = _Jv_makeUtf8Const ("<init>", 6);

  jobject result = __null;

  try
    {
      if (_Jv_equalUtf8Consts (id->name, init_name))
        {

          Constructor *cons = new Constructor ();
          cons->offset = (char *) id - (char *) &klass->methods;
          cons->declaringClass = klass;
          result = cons;
        }
      else
        {
          Method *meth = new Method ();
          meth->offset = (char *) id - (char *) &klass->methods;
          meth->declaringClass = klass;
          result = meth;
        }
    }
  catch (jthrowable t)
    {
      env->ex = t;
    }

  return wrap_value (env, result);
}

static jmethodID
_Jv_JNI_FromReflectedMethod (JNIEnv *, jobject method)
{
  using namespace java::lang::reflect;
  if (Method::class$.isInstance (method))
    return _Jv_FromReflectedMethod (reinterpret_cast<Method *> (method));
  return
    _Jv_FromReflectedConstructor (reinterpret_cast<Constructor *> (method));
}




static JNINativeMethod *nathash;

static int nathash_count = 0;

static int nathash_size = 0;




static int
hash (const JNINativeMethod *method)
{
  char *ptr;
  int hash = 0;

  ptr = method->name;
  while (*ptr)
    hash = (31 * hash) + *ptr++;

  ptr = method->signature;
  while (*ptr)
    hash = (31 * hash) + *ptr++;

  return hash;
}


static JNINativeMethod *
nathash_find_slot (const JNINativeMethod *method)
{
  jint h = hash (method);
  int step = (h ^ (h >> 16)) | 1;
  int w = h & (nathash_size - 1);
  int del = -1;

  for (;;)
    {
      JNINativeMethod *slotp = &nathash[w];
      if (slotp->name == __null)
        {
          if (del >= 0)
            return &nathash[del];
          else
            return slotp;
        }
      else if (slotp->name == ((char *) (~0)))
        del = w;
      else if (! strcmp (slotp->name, method->name)
               && ! strcmp (slotp->signature, method->signature))
        return slotp;
      w = (w + step) & (nathash_size - 1);
    }
}


static void *
nathash_find (JNINativeMethod *method)
{
  if (nathash == __null)
    return __null;
  JNINativeMethod *slot = nathash_find_slot (method);
  if (slot->name == __null || slot->name == ((char *) (~0)))
    return __null;
  return slot->fnPtr;
}

static void
natrehash ()
{
  if (nathash == __null)
    {
      nathash_size = 1024;
      nathash =
        (JNINativeMethod *) _Jv_AllocBytes (nathash_size
                                            * sizeof (JNINativeMethod));
      memset (nathash, 0, nathash_size * sizeof (JNINativeMethod));
    }
  else
    {
      int savesize = nathash_size;
      JNINativeMethod *savehash = nathash;
      nathash_size *= 2;
      nathash =
        (JNINativeMethod *) _Jv_AllocBytes (nathash_size
                                            * sizeof (JNINativeMethod));
      memset (nathash, 0, nathash_size * sizeof (JNINativeMethod));

      for (int i = 0; i < savesize; ++i)
        {
          if (savehash[i].name != __null && savehash[i].name != ((char *) (~0)))
            {
              JNINativeMethod *slot = nathash_find_slot (&savehash[i]);
              *slot = savehash[i];
            }
        }
    }
}

static void
nathash_add (const JNINativeMethod *method)
{
  if (3 * nathash_count >= 2 * nathash_size)
    natrehash ();
  JNINativeMethod *slot = nathash_find_slot (method);

  if (slot->name != __null && slot->name != ((char *) (~0)))
    return;

  slot->name = strdup (method->name);
  slot->signature = strdup (method->signature);
  slot->fnPtr = method->fnPtr;
}

static jint
_Jv_JNI_RegisterNatives (JNIEnv *env, jclass klass,
                         const JNINativeMethod *methods,
                         jint nMethods)
{



  JvSynchronize sync (global_ref_table);



  for (int j = 0; j < nMethods; ++j)
    {
      bool found = false;

      _Jv_Method *imeths = JvGetFirstMethod (klass);
      for (int i = 0; i < JvNumMethods (klass); ++i)
        {
          _Jv_Method *self = &imeths[i];

          if (! strcmp (self->name->data, methods[j].name)
              && ! strcmp (self->signature->data, methods[j].signature))
            {
              if (! (self->accflags
                     & java::lang::reflect::Modifier::NATIVE))
                break;


              found = true;
              nathash_add (&methods[j]);

              break;
            }
        }

      if (! found)
        {
          jstring m = JvNewStringUTF (methods[j].name);
          try
            {
              env->ex =new java::lang::NoSuchMethodError (m);
            }
          catch (jthrowable t)
            {
              env->ex = t;
            }
          return -1;
        }
    }

  return 0;
}

static jint
_Jv_JNI_UnregisterNatives (JNIEnv *, jclass)
{

  return -1;
}




static void
add_char (char *buf, jchar c, int *here)
{
  if (c == '_')
    {
      buf[(*here)++] = '_';
      buf[(*here)++] = '1';
    }
  else if (c == ';')
    {
      buf[(*here)++] = '_';
      buf[(*here)++] = '2';
    }
  else if (c == '[')
    {
      buf[(*here)++] = '_';
      buf[(*here)++] = '3';
    }



  else if (c == '/' || c == '.')
    buf[(*here)++] = '_';
  else if ((c >= '0' && c <= '9')
           || (c >= 'a' && c <= 'z')
           || (c >= 'A' && c <= 'Z'))
    buf[(*here)++] = (char) c;
  else
    {

      buf[(*here)++] = '_';
      buf[(*here)++] = '0';
      for (int i = 0; i < 4; ++i)
        {
          int val = c & 0x0f;
          buf[(*here) + 3 - i] = (val > 10) ? ('a' + val - 10) : ('0' + val);
          c >>= 4;
        }
      *here += 4;
    }
}





static void
mangled_name (jclass klass, _Jv_Utf8Const *func_name,
              _Jv_Utf8Const *signature, char *buf, int *long_start)
{
  strcpy (buf, "Java_");
  int here = 5;


  jchar *chars = _Jv_GetStringChars (klass->getName ());
  jint len = klass->getName ()->length ();
  for (int i = 0; i < len; ++i)
    add_char (buf, chars[i], &here);


  buf[here++] = '_';

  const unsigned char *fn = (const unsigned char *) func_name->data;
  const unsigned char *limit = fn + func_name->length;
  for (int i = 0; ; ++i)
    {
      int ch = ((fn) >= (limit) ? -1 : *(fn) < 128 ? *(fn)++ : (*(fn)&0xE0) == 0xC0 && ((fn)+=2)<=(limit) && ((fn)[-1]&0xC0) == 0x80 ? (((fn)[-2] & 0x1F) << 6) + ((fn)[-1] & 0x3F) : (*(fn) & 0xF0) == 0xE0 && ((fn) += 3) <= (limit) && ((fn)[-2] & 0xC0) == 0x80 && ((fn)[-1] & 0xC0) == 0x80 ? (((fn)[-3]&0x0F) << 12) + (((fn)[-2]&0x3F) << 6) + ((fn)[-1]&0x3F) : ((fn)++, -1));
      if (ch < 0)
        break;
      add_char (buf, ch, &here);
    }


  *long_start = here;
  buf[here++] = '_';
  buf[here++] = '_';

  const unsigned char *sig = (const unsigned char *) signature->data;
  limit = sig + signature->length;
 
# 1805 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                          ;
  ++sig;
  while (1)
    {
      int ch = ((sig) >= (limit) ? -1 : *(sig) < 128 ? *(sig)++ : (*(sig)&0xE0) == 0xC0 && ((sig)+=2)<=(limit) && ((sig)[-1]&0xC0) == 0x80 ? (((sig)[-2] & 0x1F) << 6) + ((sig)[-1] & 0x3F) : (*(sig) & 0xF0) == 0xE0 && ((sig) += 3) <= (limit) && ((sig)[-2] & 0xC0) == 0x80 && ((sig)[-1] & 0xC0) == 0x80 ? (((sig)[-3]&0x0F) << 12) + (((sig)[-2]&0x3F) << 6) + ((sig)[-1]&0x3F) : ((sig)++, -1));
      if (ch == ')' || ch < 0)
        break;
      add_char (buf, ch, &here);
    }

  buf[here] = '\0';
}




extern "C" JNIEnv *
_Jv_GetJNIEnvNewFrame (jclass klass)
{
  JNIEnv *env = _Jv_GetCurrentJNIEnv ();
  if (env == __null)
    {
      env = (JNIEnv *) _Jv_MallocUnchecked (sizeof (JNIEnv));
      env->p = &_Jv_JNIFunctions;
      env->ex = __null;
      env->klass = klass;
      env->locals = __null;

      _Jv_SetCurrentJNIEnv (env);
    }

  _Jv_JNI_LocalFrame *frame
    = (_Jv_JNI_LocalFrame *) _Jv_MallocUnchecked (sizeof (_Jv_JNI_LocalFrame)
                                                  + (32
                                                     * sizeof (jobject)));

  frame->marker = 2;
  frame->size = 32;
  frame->next = env->locals;
  env->locals = frame;

  for (int i = 0; i < frame->size; ++i)
    frame->vec[i] = __null;

  return env;
}




extern "C" void *
_Jv_LookupJNIMethod (jclass klass, _Jv_Utf8Const *name,
                     _Jv_Utf8Const *signature)
{
  char buf[10 + 6 * (name->length + signature->length)];
  int long_start;
  void *function;


  JvSynchronize sync (global_ref_table);


  strncpy (buf, name->data, name->length);
  buf[name->length] = '\0';
  strncpy (buf + name->length + 1, signature->data, signature->length);
  buf[name->length + signature->length + 1] = '\0';
  JNINativeMethod meth;
  meth.name = buf;
  meth.signature = buf + name->length + 1;
  function = nathash_find (&meth);
  if (function != __null)
    return function;


  mangled_name (klass, name, signature, buf, &long_start);
  char c = buf[long_start];
  buf[long_start] = '\0';
  function = _Jv_FindSymbolInExecutable (buf);
  if (function == __null)
    {
      buf[long_start] = c;
      function = _Jv_FindSymbolInExecutable (buf);
      if (function == __null)
        {
          jstring str = JvNewStringUTF (name->data);
          throw new java::lang::AbstractMethodError (str);
        }
    }

  return function;
}





void
_Jv_JNIMethod::call (ffi_cif *, void *ret, ffi_raw *args, void *__this)
{
  _Jv_JNIMethod* _this = (_Jv_JNIMethod *) __this;

  JNIEnv *env = _Jv_GetJNIEnvNewFrame (_this->defining_class);
# 1915 "/home/oldham/gcc/gcc2/libjava/jni.cc"
  {



    JvSynchronize sync (global_ref_table);
    if (_this->function == __null)
      _this->function = _Jv_LookupJNIMethod (_this->defining_class,
                                             _this->self->name,
                                             _this->self->signature);
  }

 
# 1926 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                                         ;
  ffi_raw real_args[2 + _this->args_raw_size / sizeof (ffi_raw)];
  int offset = 0;


  real_args[offset++].ptr = env;



  if ((_this->self->accflags & java::lang::reflect::Modifier::STATIC))
    real_args[offset++].ptr = _this->defining_class;


  memcpy (&real_args[offset], args, _this->args_raw_size);


  ffi_raw_call (&_this->jni_cif, (void (*)()) _this->function,
                ret, real_args);

  _Jv_JNI_PopSystemFrame (env);
}
# 1957 "/home/oldham/gcc/gcc2/libjava/jni.cc"
static jint
_Jv_JNI_AttachCurrentThread (JavaVM *, jstring name, void **penv, void *args)
{
  JavaVMAttachArgs *attach = reinterpret_cast<JavaVMAttachArgs *> (args);
  java::lang::ThreadGroup *group = __null;

  if (attach)
    {

      if (attach->version != 0x00010002
          && attach->version != 0x00010001)
        return -3;

     
# 1970 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                                                           ;
      group = reinterpret_cast<java::lang::ThreadGroup *> (attach->group);
    }


  if (_Jv_GetCurrentJNIEnv () != __null)
    return 0;

  JNIEnv *env = (JNIEnv *) _Jv_MallocUnchecked (sizeof (JNIEnv));
  if (env == __null)
    return -1;
  env->p = &_Jv_JNIFunctions;
  env->ex = __null;
  env->klass = __null;
  env->locals
    = (_Jv_JNI_LocalFrame *) _Jv_MallocUnchecked (sizeof (_Jv_JNI_LocalFrame)
                                                  + (32
                                                     * sizeof (jobject)));
  if (env->locals == __null)
    {
      _Jv_Free (env);
      return -1;
    }
  *penv = reinterpret_cast<void *> (env);



  if (_Jv_ThreadCurrent () == __null)
    {
      try
        {
          _Jv_AttachCurrentThread (name, group);
        }
      catch (jthrowable t)
        {
          return -1;
        }
    }
  _Jv_SetCurrentJNIEnv (env);

  return 0;
}


static jint
_Jv_JNI_AttachCurrentThread (JavaVM *vm, void **penv, void *args)
{
  return _Jv_JNI_AttachCurrentThread (vm, __null, penv, args);
}

static jint
_Jv_JNI_DestroyJavaVM (JavaVM *vm)
{
 
# 2023 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                                   ;

  JNIEnv *env;
  if (_Jv_ThreadCurrent () != __null)
    {
      jstring main_name;

      try
        {
          main_name = JvNewStringLatin1 ("main");
        }
      catch (jthrowable t)
        {
          return -1;
        }

      jint r = _Jv_JNI_AttachCurrentThread (vm,
                                            main_name,
                                            reinterpret_cast<void **> (&env),
                                            __null);
      if (r < 0)
        return r;
    }
  else
    env = _Jv_GetCurrentJNIEnv ();

  _Jv_ThreadWait ();


  return -1;
}

jint
_Jv_JNI_DetachCurrentThread (JavaVM *)
{
  jint code = _Jv_DetachCurrentThread ();
  return code ? -2 : 0;
}

static jint
_Jv_JNI_GetEnv (JavaVM *, void **penv, jint version)
{
  if (_Jv_ThreadCurrent () == __null)
    {
      *penv = __null;
      return -2;
    }



  if (version == 0x00020001)
    {
      *penv = (void *) &_Jv_JVMPI_Interface;
      return 0;
    }



  if (version != 0x00010002 && version != 0x00010001)
    {
      *penv = __null;
      return -3;
    }

  *penv = (void *) _Jv_GetCurrentJNIEnv ();
  return 0;
}

jint
JNI_GetDefaultJavaVMInitArgs (void *args)
{
  jint version = * (jint *) args;

  if (version != 0x00010002)
    return -3;

  JavaVMInitArgs *ia = reinterpret_cast<JavaVMInitArgs *> (args);
  ia->version = 0x00010002;
  ia->nOptions = 0;
  ia->options = __null;
  ia->ignoreUnrecognized = true;

  return 0;
}

jint
JNI_CreateJavaVM (JavaVM **vm, void **penv, void *args)
{
 
# 2111 "/home/oldham/gcc/gcc2/libjava/jni.cc"
                     ;

  JavaVM *nvm = (JavaVM *) _Jv_MallocUnchecked (sizeof (JavaVM));
  if (nvm == __null)
    return -1;
  nvm->functions = &_Jv_JNI_InvokeFunctions;


  if (args != __null)
    {
      jint version = * (jint *) args;

      if (version != 0x00010002)
        return -3;
      JavaVMInitArgs *ia = reinterpret_cast<JavaVMInitArgs *> (args);
      for (int i = 0; i < ia->nOptions; ++i)
        {
          if (! strcmp (ia->options[i].optionString, "vfprintf")
              || ! strcmp (ia->options[i].optionString, "exit")
              || ! strcmp (ia->options[i].optionString, "abort"))
            {


              continue;
            }
          else if (! strncmp (ia->options[i].optionString,
                              "-verbose", sizeof ("-verbose") - 1))
            {



              continue;
            }
          else if (! strncmp (ia->options[i].optionString, "-D", 2))
            {

              continue;
            }
          else if (ia->ignoreUnrecognized)
            {
              if (ia->options[i].optionString[0] == '_'
                  || ! strncmp (ia->options[i].optionString, "-X", 2))
                continue;
            }

          return -1;
        }
    }

  jint r =_Jv_JNI_AttachCurrentThread (nvm, penv, __null);
  if (r < 0)
    return r;

  the_vm = nvm;
  *vm = the_vm;

  _Jv_JNI_Init();

  return 0;
}

jint
JNI_GetCreatedJavaVMs (JavaVM **vm_buffer, jsize buf_len, jsize *n_vms)
{
  if (buf_len <= 0)
    return -1;


  if (the_vm != __null)
    {
      vm_buffer[0] = the_vm;
      *n_vms = 1;
    }
  else
    *n_vms = 0;
  return 0;
}

JavaVM *
_Jv_GetJavaVM ()
{

  if (! the_vm)
    {
      JavaVM *nvm = (JavaVM *) _Jv_MallocUnchecked (sizeof (JavaVM));
      if (nvm != __null)
        nvm->functions = &_Jv_JNI_InvokeFunctions;
      the_vm = nvm;
    }



  if (_Jv_ThreadCurrent () != __null)
    {
      void *ignore;
      _Jv_JNI_AttachCurrentThread (the_vm, &ignore, __null);
    }

  return the_vm;
}

static jint
_Jv_JNI_GetJavaVM (JNIEnv *, JavaVM **vm)
{
  *vm = _Jv_GetJavaVM ();
  return *vm == __null ? -1 : 0;
}






struct JNINativeInterface _Jv_JNIFunctions =
{
  __null,
  __null,
  __null,
  __null,
  _Jv_JNI_GetVersion,
  _Jv_JNI_DefineClass,
  _Jv_JNI_FindClass,
  _Jv_JNI_FromReflectedMethod,
  _Jv_JNI_FromReflectedField,
  _Jv_JNI_ToReflectedMethod,
  _Jv_JNI_GetSuperclass,
  _Jv_JNI_IsAssignableFrom,
  _Jv_JNI_ToReflectedField,
  _Jv_JNI_Throw,
  _Jv_JNI_ThrowNew,
  _Jv_JNI_ExceptionOccurred,
  _Jv_JNI_ExceptionDescribe,
  _Jv_JNI_ExceptionClear,
  _Jv_JNI_FatalError,

  _Jv_JNI_PushLocalFrame,
  _Jv_JNI_PopLocalFrame,
  _Jv_JNI_NewGlobalRef,
  _Jv_JNI_DeleteGlobalRef,
  _Jv_JNI_DeleteLocalRef,

  _Jv_JNI_IsSameObject,

  _Jv_JNI_NewLocalRef,
  _Jv_JNI_EnsureLocalCapacity,

  _Jv_JNI_AllocObject,
  _Jv_JNI_NewObject,
  _Jv_JNI_NewObjectV,
  _Jv_JNI_NewObjectA,
  _Jv_JNI_GetObjectClass,
  _Jv_JNI_IsInstanceOf,
  _Jv_JNI_GetAnyMethodID<false>,

  _Jv_JNI_CallMethod<jobject>,
  _Jv_JNI_CallMethodV<jobject>,
  _Jv_JNI_CallMethodA<jobject>,
  _Jv_JNI_CallMethod<jboolean>,
  _Jv_JNI_CallMethodV<jboolean>,
  _Jv_JNI_CallMethodA<jboolean>,
  _Jv_JNI_CallMethod<jbyte>,
  _Jv_JNI_CallMethodV<jbyte>,
  _Jv_JNI_CallMethodA<jbyte>,
  _Jv_JNI_CallMethod<jchar>,
  _Jv_JNI_CallMethodV<jchar>,
  _Jv_JNI_CallMethodA<jchar>,
  _Jv_JNI_CallMethod<jshort>,
  _Jv_JNI_CallMethodV<jshort>,
  _Jv_JNI_CallMethodA<jshort>,
  _Jv_JNI_CallMethod<jint>,
  _Jv_JNI_CallMethodV<jint>,
  _Jv_JNI_CallMethodA<jint>,
  _Jv_JNI_CallMethod<jlong>,
  _Jv_JNI_CallMethodV<jlong>,
  _Jv_JNI_CallMethodA<jlong>,
  _Jv_JNI_CallMethod<jfloat>,
  _Jv_JNI_CallMethodV<jfloat>,
  _Jv_JNI_CallMethodA<jfloat>,
  _Jv_JNI_CallMethod<jdouble>,
  _Jv_JNI_CallMethodV<jdouble>,
  _Jv_JNI_CallMethodA<jdouble>,
  _Jv_JNI_CallVoidMethod,
  _Jv_JNI_CallVoidMethodV,
  _Jv_JNI_CallVoidMethodA,


  _Jv_JNI_CallAnyMethod<jobject, nonvirtual>,
  _Jv_JNI_CallAnyMethodV<jobject, nonvirtual>,
  _Jv_JNI_CallAnyMethodA<jobject, nonvirtual>,
  _Jv_JNI_CallAnyMethod<jboolean, nonvirtual>,
  _Jv_JNI_CallAnyMethodV<jboolean, nonvirtual>,
  _Jv_JNI_CallAnyMethodA<jboolean, nonvirtual>,
  _Jv_JNI_CallAnyMethod<jbyte, nonvirtual>,
  _Jv_JNI_CallAnyMethodV<jbyte, nonvirtual>,
  _Jv_JNI_CallAnyMethodA<jbyte, nonvirtual>,
  _Jv_JNI_CallAnyMethod<jchar, nonvirtual>,
  _Jv_JNI_CallAnyMethodV<jchar, nonvirtual>,
  _Jv_JNI_CallAnyMethodA<jchar, nonvirtual>,
  _Jv_JNI_CallAnyMethod<jshort, nonvirtual>,
  _Jv_JNI_CallAnyMethodV<jshort, nonvirtual>,
  _Jv_JNI_CallAnyMethodA<jshort, nonvirtual>,
  _Jv_JNI_CallAnyMethod<jint, nonvirtual>,
  _Jv_JNI_CallAnyMethodV<jint, nonvirtual>,
  _Jv_JNI_CallAnyMethodA<jint, nonvirtual>,
  _Jv_JNI_CallAnyMethod<jlong, nonvirtual>,
  _Jv_JNI_CallAnyMethodV<jlong, nonvirtual>,
  _Jv_JNI_CallAnyMethodA<jlong, nonvirtual>,
  _Jv_JNI_CallAnyMethod<jfloat, nonvirtual>,
  _Jv_JNI_CallAnyMethodV<jfloat, nonvirtual>,
  _Jv_JNI_CallAnyMethodA<jfloat, nonvirtual>,
  _Jv_JNI_CallAnyMethod<jdouble, nonvirtual>,
  _Jv_JNI_CallAnyMethodV<jdouble, nonvirtual>,
  _Jv_JNI_CallAnyMethodA<jdouble, nonvirtual>,
  _Jv_JNI_CallAnyVoidMethod<nonvirtual>,
  _Jv_JNI_CallAnyVoidMethodV<nonvirtual>,
  _Jv_JNI_CallAnyVoidMethodA<nonvirtual>,

  _Jv_JNI_GetAnyFieldID<false>,
  _Jv_JNI_GetField<jobject>,
  _Jv_JNI_GetField<jboolean>,
  _Jv_JNI_GetField<jbyte>,
  _Jv_JNI_GetField<jchar>,
  _Jv_JNI_GetField<jshort>,
  _Jv_JNI_GetField<jint>,
  _Jv_JNI_GetField<jlong>,
  _Jv_JNI_GetField<jfloat>,
  _Jv_JNI_GetField<jdouble>,
  _Jv_JNI_SetField,
  _Jv_JNI_SetField,
  _Jv_JNI_SetField,
  _Jv_JNI_SetField,
  _Jv_JNI_SetField,
  _Jv_JNI_SetField,
  _Jv_JNI_SetField,
  _Jv_JNI_SetField,
  _Jv_JNI_SetField,
  _Jv_JNI_GetAnyMethodID<true>,

  _Jv_JNI_CallStaticMethod<jobject>,
  _Jv_JNI_CallStaticMethodV<jobject>,
  _Jv_JNI_CallStaticMethodA<jobject>,
  _Jv_JNI_CallStaticMethod<jboolean>,
  _Jv_JNI_CallStaticMethodV<jboolean>,
  _Jv_JNI_CallStaticMethodA<jboolean>,
  _Jv_JNI_CallStaticMethod<jbyte>,
  _Jv_JNI_CallStaticMethodV<jbyte>,
  _Jv_JNI_CallStaticMethodA<jbyte>,
  _Jv_JNI_CallStaticMethod<jchar>,
  _Jv_JNI_CallStaticMethodV<jchar>,
  _Jv_JNI_CallStaticMethodA<jchar>,
  _Jv_JNI_CallStaticMethod<jshort>,
  _Jv_JNI_CallStaticMethodV<jshort>,
  _Jv_JNI_CallStaticMethodA<jshort>,
  _Jv_JNI_CallStaticMethod<jint>,
  _Jv_JNI_CallStaticMethodV<jint>,
  _Jv_JNI_CallStaticMethodA<jint>,
  _Jv_JNI_CallStaticMethod<jlong>,
  _Jv_JNI_CallStaticMethodV<jlong>,
  _Jv_JNI_CallStaticMethodA<jlong>,
  _Jv_JNI_CallStaticMethod<jfloat>,
  _Jv_JNI_CallStaticMethodV<jfloat>,
  _Jv_JNI_CallStaticMethodA<jfloat>,
  _Jv_JNI_CallStaticMethod<jdouble>,
  _Jv_JNI_CallStaticMethodV<jdouble>,
  _Jv_JNI_CallStaticMethodA<jdouble>,
  _Jv_JNI_CallStaticVoidMethod,
  _Jv_JNI_CallStaticVoidMethodV,
  _Jv_JNI_CallStaticVoidMethodA,

  _Jv_JNI_GetAnyFieldID<true>,
  _Jv_JNI_GetStaticField<jobject>,
  _Jv_JNI_GetStaticField<jboolean>,
  _Jv_JNI_GetStaticField<jbyte>,
  _Jv_JNI_GetStaticField<jchar>,
  _Jv_JNI_GetStaticField<jshort>,
  _Jv_JNI_GetStaticField<jint>,
  _Jv_JNI_GetStaticField<jlong>,
  _Jv_JNI_GetStaticField<jfloat>,
  _Jv_JNI_GetStaticField<jdouble>,
  _Jv_JNI_SetStaticField,
  _Jv_JNI_SetStaticField,
  _Jv_JNI_SetStaticField,
  _Jv_JNI_SetStaticField,
  _Jv_JNI_SetStaticField,
  _Jv_JNI_SetStaticField,
  _Jv_JNI_SetStaticField,
  _Jv_JNI_SetStaticField,
  _Jv_JNI_SetStaticField,
  _Jv_JNI_NewString,
  _Jv_JNI_GetStringLength,
  _Jv_JNI_GetStringChars,
  _Jv_JNI_ReleaseStringChars,
  _Jv_JNI_NewStringUTF,
  _Jv_JNI_GetStringUTFLength,
  _Jv_JNI_GetStringUTFChars,
  _Jv_JNI_ReleaseStringUTFChars,
  _Jv_JNI_GetArrayLength,
  _Jv_JNI_NewObjectArray,
  _Jv_JNI_GetObjectArrayElement,
  _Jv_JNI_SetObjectArrayElement,
  _Jv_JNI_NewPrimitiveArray<jboolean, (& _Jv_booleanClass)>,

  _Jv_JNI_NewPrimitiveArray<jbyte, (& _Jv_byteClass)>,
  _Jv_JNI_NewPrimitiveArray<jchar, (& _Jv_charClass)>,
  _Jv_JNI_NewPrimitiveArray<jshort, (& _Jv_shortClass)>,
  _Jv_JNI_NewPrimitiveArray<jint, (& _Jv_intClass)>,
  _Jv_JNI_NewPrimitiveArray<jlong, (& _Jv_longClass)>,
  _Jv_JNI_NewPrimitiveArray<jfloat, (& _Jv_floatClass)>,
  _Jv_JNI_NewPrimitiveArray<jdouble, (& _Jv_doubleClass)>,
  _Jv_JNI_GetPrimitiveArrayElements,
  _Jv_JNI_GetPrimitiveArrayElements,
  _Jv_JNI_GetPrimitiveArrayElements,
  _Jv_JNI_GetPrimitiveArrayElements,
  _Jv_JNI_GetPrimitiveArrayElements,
  _Jv_JNI_GetPrimitiveArrayElements,
  _Jv_JNI_GetPrimitiveArrayElements,
  _Jv_JNI_GetPrimitiveArrayElements,
  _Jv_JNI_ReleasePrimitiveArrayElements,
  _Jv_JNI_ReleasePrimitiveArrayElements,
  _Jv_JNI_ReleasePrimitiveArrayElements,
  _Jv_JNI_ReleasePrimitiveArrayElements,
  _Jv_JNI_ReleasePrimitiveArrayElements,
  _Jv_JNI_ReleasePrimitiveArrayElements,
  _Jv_JNI_ReleasePrimitiveArrayElements,
  _Jv_JNI_ReleasePrimitiveArrayElements,
  _Jv_JNI_GetPrimitiveArrayRegion,
  _Jv_JNI_GetPrimitiveArrayRegion,
  _Jv_JNI_GetPrimitiveArrayRegion,
  _Jv_JNI_GetPrimitiveArrayRegion,
  _Jv_JNI_GetPrimitiveArrayRegion,
  _Jv_JNI_GetPrimitiveArrayRegion,
  _Jv_JNI_GetPrimitiveArrayRegion,
  _Jv_JNI_GetPrimitiveArrayRegion,
  _Jv_JNI_SetPrimitiveArrayRegion,
  _Jv_JNI_SetPrimitiveArrayRegion,
  _Jv_JNI_SetPrimitiveArrayRegion,
  _Jv_JNI_SetPrimitiveArrayRegion,
  _Jv_JNI_SetPrimitiveArrayRegion,
  _Jv_JNI_SetPrimitiveArrayRegion,
  _Jv_JNI_SetPrimitiveArrayRegion,
  _Jv_JNI_SetPrimitiveArrayRegion,
  _Jv_JNI_RegisterNatives,
  _Jv_JNI_UnregisterNatives,
  _Jv_JNI_MonitorEnter,
  _Jv_JNI_MonitorExit,
  _Jv_JNI_GetJavaVM,

  _Jv_JNI_GetStringRegion,
  _Jv_JNI_GetStringUTFRegion,
  _Jv_JNI_GetPrimitiveArrayCritical,
  _Jv_JNI_ReleasePrimitiveArrayCritical,
  _Jv_JNI_GetStringCritical,
  _Jv_JNI_ReleaseStringCritical,

  __null ,
  __null ,

  _Jv_JNI_ExceptionCheck
};

struct JNIInvokeInterface _Jv_JNI_InvokeFunctions =
{
  __null,
  __null,
  __null,

  _Jv_JNI_DestroyJavaVM,
  _Jv_JNI_AttachCurrentThread,
  _Jv_JNI_DetachCurrentThread,
  _Jv_JNI_GetEnv
};


More information about the Gcc-bugs mailing list