|
From: <ls...@us...> - 2008-12-27 17:00:29
|
Revision: 4809
http://jnode.svn.sourceforge.net/jnode/?rev=4809&view=rev
Author: lsantha
Date: 2008-12-27 17:00:27 +0000 (Sat, 27 Dec 2008)
Log Message:
-----------
Improved reflective field access.
Modified Paths:
--------------
trunk/core/src/core/org/jnode/vm/classmgr/VmField.java
trunk/core/src/openjdk/java/java/lang/reflect/Field.java
trunk/core/src/openjdk/vm/sun/misc/NativeUnsafe.java
Modified: trunk/core/src/core/org/jnode/vm/classmgr/VmField.java
===================================================================
--- trunk/core/src/core/org/jnode/vm/classmgr/VmField.java 2008-12-27 09:16:49 UTC (rev 4808)
+++ trunk/core/src/core/org/jnode/vm/classmgr/VmField.java 2008-12-27 17:00:27 UTC (rev 4809)
@@ -122,8 +122,20 @@
}
Field javaField = javaFieldHolder.get();
if (javaField == null) {
+ //slot
+ VmType<?> d_class = getDeclaringClass();
+ int slot = -1;
+ for (int i = 0; i < d_class.getNoDeclaredFields(); i++) {
+ if (this == d_class.getDeclaredField(i)) {
+ slot = i;
+ break;
+ }
+ }
+ if (slot == -1) {
+ throw new ClassFormatError("Invalid field: " + this.getName());
+ }
//todo add annotations
- javaField = new Field(getDeclaringClass().asClass(), getName(), getType().asClass(), getModifiers(), -1,
+ javaField = new Field(d_class.asClass(), getName(), getType().asClass(), getModifiers(), slot,
getSignature(), null);
javaFieldHolder.set(javaField);
}
Modified: trunk/core/src/openjdk/java/java/lang/reflect/Field.java
===================================================================
--- trunk/core/src/openjdk/java/java/lang/reflect/Field.java 2008-12-27 09:16:49 UTC (rev 4808)
+++ trunk/core/src/openjdk/java/java/lang/reflect/Field.java 2008-12-27 17:00:27 UTC (rev 4809)
@@ -1038,4 +1038,9 @@
}
return declaredAnnotations;
}
+
+ //jnode
+ public int getSlot() {
+ return slot;
+ }
}
Modified: trunk/core/src/openjdk/vm/sun/misc/NativeUnsafe.java
===================================================================
--- trunk/core/src/openjdk/vm/sun/misc/NativeUnsafe.java 2008-12-27 09:16:49 UTC (rev 4808)
+++ trunk/core/src/openjdk/vm/sun/misc/NativeUnsafe.java 2008-12-27 17:00:27 UTC (rev 4809)
@@ -417,8 +417,8 @@
private static VmField getVmField(Field f) {
VmType<?> vmClass = VmType.fromClass((Class<?>) f.getDeclaringClass());
- vmClass.link();
- return vmClass.getField(f.getName());
+ //vmClass.link();
+ return vmClass.getDeclaredField(f.getSlot());
}
public static void ensureClassInitialized(Unsafe instance, Class c) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|