From: <go...@us...> - 2008-08-25 14:04:36
|
Revision: 14922 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=14922&view=rev Author: gousios Date: 2008-08-25 14:04:30 +0000 (Mon, 25 Aug 2008) Log Message: ----------- More methods imported from vanilla OpenJDK, required to build the boot image Modified Paths: -------------- rvmroot/branches/RVM-549-OpenJDK/libraryInterface/Common/src/java/lang/Class.java rvmroot/branches/RVM-549-OpenJDK/libraryInterface/Common/src/sun/misc/Unsafe.java Modified: rvmroot/branches/RVM-549-OpenJDK/libraryInterface/Common/src/java/lang/Class.java =================================================================== --- rvmroot/branches/RVM-549-OpenJDK/libraryInterface/Common/src/java/lang/Class.java 2008-08-25 10:20:33 UTC (rev 14921) +++ rvmroot/branches/RVM-549-OpenJDK/libraryInterface/Common/src/java/lang/Class.java 2008-08-25 14:04:30 UTC (rev 14922) @@ -38,6 +38,8 @@ import java.net.URL; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import org.jikesrvm.classloader.*; @@ -158,6 +160,10 @@ ClassLoader cl = type.getClassLoader(); return cl == BootstrapClassLoader.getBootstrapClassLoader() ? null : cl; } + + ClassLoader getClassLoader0() { + return getClassLoader(); + } public Class<?> getComponentType() { return type.isArrayType() ? type.asArray().getElementType().getClassForType(): null; @@ -1011,7 +1017,48 @@ return false; } } + + T[] getEnumConstantsShared() { + if (enumConstants == null) { + if (!isEnum()) return null; + try { + final Method values = getMethod("values"); + java.security.AccessController.doPrivileged( + new java.security.PrivilegedAction<Void>() { + public Void run() { + values.setAccessible(true); + return null; + } + }); + enumConstants = (T[])values.invoke(null); + } + // These can happen when users concoct enum-like classes + // that don't comply with the enum spec. + catch (InvocationTargetException ex) { return null; } + catch (NoSuchMethodException ex) { return null; } + catch (IllegalAccessException ex) { return null; } + } + return enumConstants; +} +private volatile transient T[] enumConstants = null; + + Map<String, T> enumConstantDirectory() { + if (enumConstantDirectory == null) { + T[] universe = getEnumConstantsShared(); + if (universe == null) + throw new IllegalArgumentException( + getName() + " is not an enum type"); + Map<String, T> m = new HashMap<String, T>(2 * universe.length); + for (T constant : universe) + m.put(((Enum)constant).name(), constant); + enumConstantDirectory = m; + } + return enumConstantDirectory; + } + + private volatile transient Map<String, T> enumConstantDirectory = null; + /** * Utility method for use by classes in this package. */ Modified: rvmroot/branches/RVM-549-OpenJDK/libraryInterface/Common/src/sun/misc/Unsafe.java =================================================================== --- rvmroot/branches/RVM-549-OpenJDK/libraryInterface/Common/src/sun/misc/Unsafe.java 2008-08-25 10:20:33 UTC (rev 14921) +++ rvmroot/branches/RVM-549-OpenJDK/libraryInterface/Common/src/sun/misc/Unsafe.java 2008-08-25 14:04:30 UTC (rev 14922) @@ -140,6 +140,17 @@ throw new Error("sun.misc.Unsafe.putDouble: Not implemented"); } + //Simulate getBoolean, hopefully succesfuly + public boolean getBoolean(Object o, long offset) { + Offset off = longToOffset(offset); + return Magic.getUnsignedByteAtOffset(o, off) > 0; + } + + public byte getByte(Object o, long offset) { + Offset off = longToOffset(offset); + return Magic.getByteAtOffset(o, off); + } + /* * Warning: Sun's JDK implementation requires 64-bit address sizes for all * memory operations. We use 32-bit sizes for now. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |