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. |