Commit 355dff4c by Tom Tromey Committed by Tom Tromey

method.h (JvNumMethods): Moved from Class.h.

	* gcj/method.h (JvNumMethods): Moved from Class.h.
	(JvGetFirstMethod): Likewise.
	* java/lang/Class.h (Object): Updated decl of
	_Jv_JNI_ToReflectedField.
	(Object): Added _Jv_JNI_ToReflectedMethod as a friend.
	* Makefile.in: Rebuilt.
	* Makefile.am (java/lang/reflect/Field.h): Added `jboolean'
	argument of _Jv_JNI_ToReflectedField.
	(java/lang/reflect/Constructor.h): Added _Jv_JNI_ToReflectedMethod
	as a friend.
	(java/lang/reflect/Method.h): Likewise.
	* include/jni.h (class _Jv_JNIEnv): Added `klass' member.  Use
	__GCJ_JNI_IMPL__.
	(jweak): New typedef.
	(struct JNINativeInterface): Correctly declare remaining entries.
	* jni.cc: Include Class.h, ClassLoader.h.
	(_Jv_JNI_FindClass): New function.
	(_Jv_JNI_DefineClass): New function.
	(_Jv_JNI_conversion_call): New function.
	(_Jv_JNI_FindClass): Use current class loader to find class.
	(_Jv_JNI_ExceptionCheck): New function.
	(_Jv_JNI_FromReflectedField): Now static.
	(MethodClass): New define.
	(_Jv_JNI_FromReflectedMethod): New function.
	(_Jv_JNI_ToReflectedMethod): Likewise.
	Include Method.h.
	(_Jv_JNI_IsAssignableFrom): Renamed.
	(_Jv_JNI_GetStringRegion): New function.
	Include StringIndexOutOfBoundsException.h.
	(_Jv_JNI_GetStringUTFRegion): New function.
	(_Jv_JNIFunctions): Updated for new functions.
	(_Jv_JNI_GetPrimitiveArrayCritical): New function
	(_Jv_JNI_ReleasePrimitiveArrayCritical): Likewise.
	(_Jv_JNI_GetStringCritical): New function.
	(_Jv_JNI_ReleaseStringCritical): Likewise.
	(get_throwable): Removed.
	(GCJ_JV_JNIENV_FRIEND): Removed.
	(__GCJ_JNI_IMPL__): Define.
	Include method.h.

From-SVN: r31638
parent 673fdf6d
2000-01-26 Tom Tromey <tromey@cygnus.com> 2000-01-26 Tom Tromey <tromey@cygnus.com>
* gcj/method.h (JvNumMethods): Moved from Class.h.
(JvGetFirstMethod): Likewise.
* java/lang/Class.h (Object): Updated decl of
_Jv_JNI_ToReflectedField.
(Object): Added _Jv_JNI_ToReflectedMethod as a friend.
* Makefile.in: Rebuilt.
* Makefile.am (java/lang/reflect/Field.h): Added `jboolean'
argument of _Jv_JNI_ToReflectedField.
(java/lang/reflect/Constructor.h): Added _Jv_JNI_ToReflectedMethod
as a friend.
(java/lang/reflect/Method.h): Likewise.
* include/jni.h (class _Jv_JNIEnv): Added `klass' member. Use
__GCJ_JNI_IMPL__.
(jweak): New typedef.
(struct JNINativeInterface): Correctly declare remaining entries.
* jni.cc: Include Class.h, ClassLoader.h.
(_Jv_JNI_FindClass): New function.
(_Jv_JNI_DefineClass): New function.
(_Jv_JNI_conversion_call): New function.
(_Jv_JNI_FindClass): Use current class loader to find class.
(_Jv_JNI_ExceptionCheck): New function.
(_Jv_JNI_FromReflectedField): Now static.
(MethodClass): New define.
(_Jv_JNI_FromReflectedMethod): New function.
(_Jv_JNI_ToReflectedMethod): Likewise.
Include Method.h.
(_Jv_JNI_IsAssignableFrom): Renamed.
(_Jv_JNI_GetStringRegion): New function.
Include StringIndexOutOfBoundsException.h.
(_Jv_JNI_GetStringUTFRegion): New function.
(_Jv_JNIFunctions): Updated for new functions.
(_Jv_JNI_GetPrimitiveArrayCritical): New function
(_Jv_JNI_ReleasePrimitiveArrayCritical): Likewise.
(_Jv_JNI_GetStringCritical): New function.
(_Jv_JNI_ReleaseStringCritical): Likewise.
(get_throwable): Removed.
(GCJ_JV_JNIENV_FRIEND): Removed.
(__GCJ_JNI_IMPL__): Define.
Include method.h.
* resolve.cc (get_ffi_type_from_signature): Handle case where * resolve.cc (get_ffi_type_from_signature): Handle case where
boolean is an int. boolean is an int.
......
...@@ -235,12 +235,13 @@ java/lang/reflect/Constructor.h: java/lang/reflect/Constructor.class libgcj.zip ...@@ -235,12 +235,13 @@ java/lang/reflect/Constructor.h: java/lang/reflect/Constructor.class libgcj.zip
$(GCJH) -classpath $(top_builddir) \ $(GCJH) -classpath $(top_builddir) \
-friend 'jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);' \ -friend 'jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);' \
-friend 'java::lang::Class;' \ -friend 'java::lang::Class;' \
-friend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
$(basename $<) $(basename $<)
java/lang/reflect/Field.h: java/lang/reflect/Field.class libgcj.zip java/lang/reflect/Field.h: java/lang/reflect/Field.class libgcj.zip
$(GCJH) -classpath $(top_builddir) \ $(GCJH) -classpath $(top_builddir) \
-friend 'jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);' \ -friend 'jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);' \
-friend 'jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv*, jclass, jfieldID);' \ -friend 'jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv*, jclass, jfieldID, jboolean);' \
-friend 'java::lang::Class;' \ -friend 'java::lang::Class;' \
$(basename $<) $(basename $<)
...@@ -248,6 +249,7 @@ java/lang/reflect/Method.h: java/lang/reflect/Method.class libgcj.zip ...@@ -248,6 +249,7 @@ java/lang/reflect/Method.h: java/lang/reflect/Method.class libgcj.zip
$(GCJH) -classpath $(top_builddir) \ $(GCJH) -classpath $(top_builddir) \
-friend 'jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);' \ -friend 'jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);' \
-friend 'java::lang::Class;' \ -friend 'java::lang::Class;' \
-friend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
$(basename $<) $(basename $<)
gnu/gcj/runtime/VMClassLoader.h: gnu/gcj/runtime/VMClassLoader.class libgcj.zip gnu/gcj/runtime/VMClassLoader.h: gnu/gcj/runtime/VMClassLoader.class libgcj.zip
......
...@@ -1553,12 +1553,13 @@ java/lang/reflect/Constructor.h: java/lang/reflect/Constructor.class libgcj.zip ...@@ -1553,12 +1553,13 @@ java/lang/reflect/Constructor.h: java/lang/reflect/Constructor.class libgcj.zip
$(GCJH) -classpath $(top_builddir) \ $(GCJH) -classpath $(top_builddir) \
-friend 'jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);' \ -friend 'jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);' \
-friend 'java::lang::Class;' \ -friend 'java::lang::Class;' \
-friend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
$(basename $<) $(basename $<)
java/lang/reflect/Field.h: java/lang/reflect/Field.class libgcj.zip java/lang/reflect/Field.h: java/lang/reflect/Field.class libgcj.zip
$(GCJH) -classpath $(top_builddir) \ $(GCJH) -classpath $(top_builddir) \
-friend 'jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);' \ -friend 'jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);' \
-friend 'jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv*, jclass, jfieldID);' \ -friend 'jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv*, jclass, jfieldID, jboolean);' \
-friend 'java::lang::Class;' \ -friend 'java::lang::Class;' \
$(basename $<) $(basename $<)
...@@ -1566,6 +1567,7 @@ java/lang/reflect/Method.h: java/lang/reflect/Method.class libgcj.zip ...@@ -1566,6 +1567,7 @@ java/lang/reflect/Method.h: java/lang/reflect/Method.class libgcj.zip
$(GCJH) -classpath $(top_builddir) \ $(GCJH) -classpath $(top_builddir) \
-friend 'jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);' \ -friend 'jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);' \
-friend 'java::lang::Class;' \ -friend 'java::lang::Class;' \
-friend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
$(basename $<) $(basename $<)
gnu/gcj/runtime/VMClassLoader.h: gnu/gcj/runtime/VMClassLoader.class libgcj.zip gnu/gcj/runtime/VMClassLoader.h: gnu/gcj/runtime/VMClassLoader.class libgcj.zip
......
...@@ -27,4 +27,16 @@ _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *constructor) ...@@ -27,4 +27,16 @@ _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *constructor)
((char *) constructor->declaringClass->methods + constructor->offset); ((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];
}
#endif /* __GCJ_METHOD_H__ */ #endif /* __GCJ_METHOD_H__ */
...@@ -65,6 +65,9 @@ typedef const struct JNINativeInterface *JNIEnv; ...@@ -65,6 +65,9 @@ typedef const struct JNINativeInterface *JNIEnv;
#endif /* __cplusplus */ #endif /* __cplusplus */
/* FIXME: this is wrong. */
typedef jobject jweak;
/* Version numbers. */ /* Version numbers. */
#define JNI_VERSION_1_1 0x00010001 #define JNI_VERSION_1_1 0x00010001
#define JNI_VERSION_1_2 0x00010002 #define JNI_VERSION_1_2 0x00010002
...@@ -88,35 +91,57 @@ typedef union jvalue ...@@ -88,35 +91,57 @@ typedef union jvalue
typedef void * (*_Jv_func)(...); typedef void * (*_Jv_func)(...);
/* This structure is used when registering native methods. */
typedef struct
{
char *name;
char *signature;
void *fnPtr; /* Sigh. */
} JNINativeMethod;
/* FIXME: this is just a placeholder. */
typedef int JavaVM;
struct JNINativeInterface struct JNINativeInterface
{ {
_Jv_func reserved0; _Jv_func reserved0;
_Jv_func reserved1; _Jv_func reserved1;
_Jv_func reserved2; _Jv_func reserved2;
_Jv_func reserved3; _Jv_func reserved3;
jint (*GetVersion) (JNIEnv*);
_Jv_func DefineClass; jint (*GetVersion) (JNIEnv *);
_Jv_func FindClass; jclass (*DefineClass) (JNIEnv *, jobject,
_Jv_func reserved4; const jbyte *, jsize);
_Jv_func reserved5; jclass (*FindClass) (JNIEnv *, const char *);
_Jv_func reserved6;
jclass (*GetSuperclass) (JNIEnv*, jclass); jmethodID (*FromReflectedMethod) (JNIEnv *, jobject);
jboolean (*IsAssignableFrom) (JNIEnv*, jclass, jclass); jfieldID (*FromReflectedField) (JNIEnv *, jobject);
_Jv_func reserved7; jobject (*ToReflectedMethod) (JNIEnv *, jclass, jmethodID,
jint (*Throw) (JNIEnv*, jthrowable); jboolean);
jint (*ThrowNew) (JNIEnv*, jclass, const char *);
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 *); jthrowable (*ExceptionOccurred) (JNIEnv *);
void (*ExceptionDescribe) (JNIEnv *); void (*ExceptionDescribe) (JNIEnv *);
void (*ExceptionClear) (JNIEnv *); void (*ExceptionClear) (JNIEnv *);
void (*FatalError) (JNIEnv *, const char *); void (*FatalError) (JNIEnv *, const char *);
_Jv_func reserved8;
_Jv_func reserved9; jint (*PushLocalFrame) (JNIEnv *, jint);
_Jv_func NewGlobalRef; jobject (*PopLocalFrame) (JNIEnv *, jobject result);
_Jv_func DeleteGlobalRef;
_Jv_func DeleteLocalRef; jobject (*NewGlobalRef) (JNIEnv *, jobject);
void (*DeleteGlobalRef) (JNIEnv *, jobject);
void (*DeleteLocalRef) (JNIEnv *, jobject);;
jboolean (*IsSameObject) (JNIEnv *, jobject, jobject); jboolean (*IsSameObject) (JNIEnv *, jobject, jobject);
_Jv_func reserved10;
_Jv_func reserved11; jobject (*NewLocalRef) (JNIEnv *, jobject);
jint (*EnsureLocalCapacity) (JNIEnv *, jint);
jobject (*AllocObject) (JNIEnv *, jclass); jobject (*AllocObject) (JNIEnv *, jclass);
jobject (*NewObject) (JNIEnv *, jclass, jmethodID, ...); jobject (*NewObject) (JNIEnv *, jclass, jmethodID, ...);
...@@ -471,20 +496,29 @@ struct JNINativeInterface ...@@ -471,20 +496,29 @@ struct JNINativeInterface
void (*SetDoubleArrayRegion) (JNIEnv *, jbooleanArray, void (*SetDoubleArrayRegion) (JNIEnv *, jbooleanArray,
jsize, jsize, jboolean *); jsize, jsize, jboolean *);
_Jv_func RegisterNatives; jint (*RegisterNatives) (JNIEnv *, jclass,
_Jv_func UnregisterNatives; const JNINativeMethod *, jint);
jint (*UnregisterNatives) (JNIEnv *, jclass);
jint (*MonitorEnter) (JNIEnv *, jobject); jint (*MonitorEnter) (JNIEnv *, jobject);
jint (*MonitorExit) (JNIEnv *, jobject); jint (*MonitorExit) (JNIEnv *, jobject);
_Jv_func GetJavaVM; jint (*GetJavaVM) (JNIEnv *, JavaVM **);
};
/* This structure is used when registering native methods. */ void (*GetStringRegion) (JNIEnv *, jstring, jsize,
typedef struct jsize, jchar *);
{ void (*GetStringUTFRegion) (JNIEnv *, jstring, jsize,
char *name; jsize, char *);
char *signature;
void *fnPtr; /* Sigh. */ void * (*GetPrimitiveArrayCritical) (JNIEnv *, jarray, jboolean *);
} JNINativeMethod; 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 *);
};
#ifdef __cplusplus #ifdef __cplusplus
...@@ -494,16 +528,15 @@ public: ...@@ -494,16 +528,15 @@ public:
/* The method table. */ /* The method table. */
struct JNINativeInterface *p; struct JNINativeInterface *p;
/* FIXME: this is really ugly. */
#ifndef __GCJ_JNI_IMPL__
private: private:
#endif
/* The current exception. */ /* The current exception. */
jthrowable ex; jthrowable ex;
/* This doesn't really protect the private contents, because anybody /* The class of the current native method. */
can set this macro. However, if they do set it then they at jclass klass;
least know they are doing something unportable. */
#ifdef GCJ_JV_JNIENV_FRIEND
GCJ_JV_JNIENV_FRIEND;
#endif
public: public:
jclass GetSuperclass (jclass cl) jclass GetSuperclass (jclass cl)
......
...@@ -177,7 +177,11 @@ private: ...@@ -177,7 +177,11 @@ private:
friend jobject _Jv_AllocObject (jclass, jint); friend jobject _Jv_AllocObject (jclass, jint);
friend jobjectArray _Jv_NewObjectArray (jsize, jclass, jobject); friend jobjectArray _Jv_NewObjectArray (jsize, jclass, jobject);
friend jobject _Jv_NewPrimArray (jclass, jint); friend jobject _Jv_NewPrimArray (jclass, jint);
friend jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv *, jclass, jfieldID);
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 jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);
friend jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *); friend jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);
...@@ -266,17 +270,4 @@ private: ...@@ -266,17 +270,4 @@ private:
java::lang::Thread *thread; java::lang::Thread *thread;
}; };
extern inline jint
JvNumMethods (jclass klass)
{
return klass->method_count;
}
extern inline jmethodID
JvGetFirstMethod (jclass klass)
{
return &klass->methods[0];
}
#endif /* __JAVA_LANG_CLASS_H__ */ #endif /* __JAVA_LANG_CLASS_H__ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment