From: <ls...@us...> - 2007-09-06 14:43:31
|
Revision: 3458 http://jnode.svn.sourceforge.net/jnode/?rev=3458&view=rev Author: lsantha Date: 2007-09-06 07:43:30 -0700 (Thu, 06 Sep 2007) Log Message: ----------- openjdk integration Modified Paths: -------------- trunk/builder/src/builder/org/jnode/build/ObjectEmitter.java trunk/core/src/classpath/vm/java/lang/Class.java trunk/core/src/classpath/vm/java/lang/VMThrowable.java trunk/core/src/core/org/jnode/security/JNodeSecurityManager.java Modified: trunk/builder/src/builder/org/jnode/build/ObjectEmitter.java =================================================================== --- trunk/builder/src/builder/org/jnode/build/ObjectEmitter.java 2007-09-06 14:42:12 UTC (rev 3457) +++ trunk/builder/src/builder/org/jnode/build/ObjectEmitter.java 2007-09-06 14:43:30 UTC (rev 3458) @@ -234,6 +234,10 @@ bis.writeObjectRef(null); // name bis.writeObjectRef(null); + // enumConstants + bis.writeObjectRef(null); + // enumConstantsDirectory + bis.writeObjectRef(null); } } catch (ClassNotFoundException ex) { throw new BuildException("emitting object: [" + c + "]", ex); @@ -244,9 +248,9 @@ // This layout should match the order and type of fields // in java.lang.String bis.writeObjectRef(s.toCharArray()); // char[] value + os.write32(0); // int offset os.write32(s.length()); // int count - os.write32(s.hashCode()); // int cachedHashCode - os.write32(0); // int offset + os.write32(s.hashCode()); // int cachedHashCode } private void emitInteger(Integer i) throws BuildException { Modified: trunk/core/src/classpath/vm/java/lang/Class.java =================================================================== --- trunk/core/src/classpath/vm/java/lang/Class.java 2007-09-06 14:42:12 UTC (rev 3457) +++ trunk/core/src/classpath/vm/java/lang/Class.java 2007-09-06 14:43:30 UTC (rev 3458) @@ -1411,5 +1411,67 @@ return p.getInterfaceTypes(); } + //jnode openjdk + /** + * Returns the elements of this enum class or null if this + * Class object does not represent an enum type; + * identical to getEnumConstantsShared except that + * the result is uncloned, cached, and shared by all callers. + */ + T[] getEnumConstantsShared() { + if (enumConstants == null) { + if (!isEnum()) return null; + try { + final Method values = getMethod("values"); + java.security.AccessController.doPrivileged + (new java.security.PrivilegedAction() { + public Object 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; + + /** + * Returns a map from simple name to enum constant. This package-private + * method is used internally by Enum to implement + * public static <T extends Enum<T>> T valueOf(Class<T>, String) + * efficiently. Note that the map is returned by this method is + * created lazily on first use. Typically it won't ever get created. + */ + HashMap<String, T> enumConstantDirectory() { + if (enumConstantDirectory == null) { + T[] universe = getEnumConstantsShared(); + if (universe == null) + throw new IllegalArgumentException( + getName() + " is not an enum type"); + HashMap<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 HashMap enumConstantDirectory; + + ClassLoader getClassLoader0(){ + return getClassLoader(); + } } Modified: trunk/core/src/classpath/vm/java/lang/VMThrowable.java =================================================================== --- trunk/core/src/classpath/vm/java/lang/VMThrowable.java 2007-09-06 14:42:12 UTC (rev 3457) +++ trunk/core/src/classpath/vm/java/lang/VMThrowable.java 2007-09-06 14:43:30 UTC (rev 3458) @@ -93,7 +93,7 @@ final String fname = (vmClass == null) ? null : vmClass.getSourceFile(); final String cname = (vmClass == null) ? "<unknown class>" : vmClass.getName(); final String mname = (method == null) ? "<unknown method>" : method.getName(); - trace[i] = new StackTraceElement(fname, lineNumber, cname, mname, method.isNative()); + trace[i] = new StackTraceElement(cname, mname, fname, method == null || method.isNative() ? -2 : lineNumber); } return trace; } Modified: trunk/core/src/core/org/jnode/security/JNodeSecurityManager.java =================================================================== --- trunk/core/src/core/org/jnode/security/JNodeSecurityManager.java 2007-09-06 14:42:12 UTC (rev 3457) +++ trunk/core/src/core/org/jnode/security/JNodeSecurityManager.java 2007-09-06 14:43:30 UTC (rev 3458) @@ -36,10 +36,12 @@ */ @Override public void checkPermission(Permission perm) { + /* if (perm.implies(SET_SECURITY_MANAGER)) { throw new SecurityException("Cannot override security manager"); } super.checkPermission(perm); + */ } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |