[vmkit-commits] [vmkit] r62575 - in /vmkit/trunk/lib/JnJVM/Classpath: ClasspathField.cpp ClasspathReflect.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Jan 20 00:07:23 PST 2009
Author: geoffray
Date: Tue Jan 20 02:07:23 2009
New Revision: 62575
URL: http://llvm.org/viewvc/llvm-project?rev=62575&view=rev
Log:
I'm buggy... Use the C++ representation instead of Java for
having direct access to the fields of reflection objects.
Modified:
vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp
vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp?rev=62575&r1=62574&r2=62575&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp Tue Jan 20 02:07:23 2009
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "Classpath.h"
+#include "ClasspathReflect.h"
#include "JavaClass.h"
#include "JavaThread.h"
#include "JavaTypes.h"
@@ -19,27 +20,16 @@
extern "C" {
-static UserClass* internalGetClass(Jnjvm* vm, jobject Field) {
- JavaField* slot = vm->upcalls->fieldClass;
- JavaObject* Cl = (JavaObject*)slot->getObjectField((JavaObject*)Field);
- UserClass* cl = (UserClass*)UserCommonClass::resolvedImplClass(vm, Cl, false);
- return cl;
-}
-
JNIEXPORT jint JNICALL Java_java_lang_reflect_Field_getModifiersInternal(
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject obj) {
+JavaObjectField* Field) {
jint res = 0;
BEGIN_NATIVE_EXCEPTION(0)
- Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ JavaField* field = Field->getInternalField();
res = field->access;
END_NATIVE_EXCEPTION
@@ -51,17 +41,15 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject obj) {
+JavaObjectField* Field) {
jclass res = 0;
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
JnjvmClassLoader* loader = cl->classLoader;
UserCommonClass* fieldCl = field->getSignature()->assocClass(loader);
res = (jclass)fieldCl->getClassDelegatee(vm);
@@ -75,17 +63,15 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj) {
+JavaObjectField* Field, jobject obj) {
jint res = 0;
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
const Typedef* type = field->getSignature();
void* Obj = (void*)obj;
@@ -124,17 +110,15 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj) {
+JavaObjectField* Field, jobject obj) {
jlong res = 0;
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -174,17 +158,15 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj) {
+JavaObjectField* Field, jobject obj) {
jboolean res = 0;
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -216,17 +198,15 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj) {
+JavaObjectField* Field, jobject obj) {
jfloat res = 0;
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -268,17 +248,15 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj) {
+JavaObjectField* Field, jobject obj) {
jbyte res = 0;
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -309,7 +287,7 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj) {
+JavaObjectField* Field, jobject obj) {
jchar res = 0;
@@ -317,10 +295,8 @@
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -352,7 +328,7 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj) {
+JavaObjectField* Field, jobject obj) {
jshort res = 0;
@@ -360,10 +336,8 @@
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -396,17 +370,15 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj) {
+JavaObjectField* Field, jobject obj) {
jdouble res = 0;
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -449,7 +421,7 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject _obj) {
+JavaObjectField* Field, jobject _obj) {
jobject result = 0;
@@ -457,10 +429,8 @@
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, Field);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)Field);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)_obj;
@@ -530,15 +500,13 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj, jobject val) {
+JavaObjectField* Field, jobject obj, jobject val) {
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, Field);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)Field);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
uintptr_t buf = (uintptr_t)alloca(sizeof(uint64));
void* _buf = (void*)buf;
const Typedef* type = field->getSignature();
@@ -584,15 +552,13 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj, jboolean val) {
+JavaObjectField* Field, jobject obj, jboolean val) {
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -622,15 +588,13 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj, jbyte val) {
+JavaObjectField* Field, jobject obj, jbyte val) {
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -669,15 +633,13 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj, jchar val) {
+JavaObjectField* Field, jobject obj, jchar val) {
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -713,15 +675,13 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj, jshort val) {
+JavaObjectField* Field, jobject obj, jshort val) {
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -758,15 +718,13 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj, jint val) {
+JavaObjectField* Field, jobject obj, jint val) {
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -801,15 +759,13 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj, jlong val) {
+JavaObjectField* Field, jobject obj, jlong val) {
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -842,16 +798,14 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj, jfloat val) {
+JavaObjectField* Field, jobject obj, jfloat val) {
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -882,15 +836,13 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Field, jobject obj, jdouble val) {
+JavaObjectField* Field, JavaObject* obj, jdouble val) {
BEGIN_NATIVE_EXCEPTION(0)
Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, obj);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)obj);
- JavaField* field = &(cl->virtualFields[index]);
+ UserClass* cl = Field->getClass();
+ JavaField* field = Field->getInternalField();
void* Obj = (void*)obj;
@@ -920,12 +872,8 @@
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-jobject Unsafe, jobject Field) {
- Jnjvm* vm = JavaThread::get()->getJVM();
- UserClass* cl = internalGetClass(vm, Field);
- JavaField* slot = vm->upcalls->fieldSlot;
- uint32 index = (uint32)slot->getInt32Field((JavaObject*)Field);
- JavaField* field = &(cl->virtualFields[index]);
+JavaObject* Unsafe, JavaObjectField* Field) {
+ JavaField* field = Field->getInternalField();
return (jlong)field->ptrOffset;
}
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h?rev=62575&r1=62574&r2=62575&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h Tue Jan 20 02:07:23 2009
@@ -60,6 +60,10 @@
return &(((UserClass*)declaringClass->vmdata)->virtualFields[slot]);
}
+ UserClass* getClass() {
+ return declaringClass->vmdata->asClass();
+ }
+
};
class JavaObjectMethod : public JavaObject {
More information about the vmkit-commits
mailing list