PatchSet 7587 Date: 2007/10/22 20:10:51 Author: robilad Branch: HEAD Tag: (none) Log: 2007-10-22 Dalibor Topic <[EMAIL PROTECTED]>
* libraries/javalib/vmspecific/java/lang/VMClassLoader.java: Removed. * libraries/javalib/vmspecific/Makefile.am (dist_vminterface_JAVA): Removed /java/lang/VMClassLoader.java. * libraries/clib/native/ClassLoader.c (java_lang_VMClassLoader_getPrimitiveClass): Renamed from java_lang_VMClassLoader_getPrimitiveClass0. Throw NoClassDefError if primitive class is not found. Members: ChangeLog:1.5084->1.5085 libraries/clib/native/ClassLoader.c:1.55->1.56 libraries/javalib/vmspecific/Makefile.am:1.7->1.8 libraries/javalib/vmspecific/Makefile.in:1.14->1.15 libraries/javalib/vmspecific/java/lang/VMClassLoader.java:1.4->1.5(DEAD) Index: kaffe/ChangeLog diff -u kaffe/ChangeLog:1.5084 kaffe/ChangeLog:1.5085 --- kaffe/ChangeLog:1.5084 Mon Oct 22 14:06:33 2007 +++ kaffe/ChangeLog Mon Oct 22 20:10:51 2007 @@ -1,5 +1,15 @@ 2007-10-22 Dalibor Topic <[EMAIL PROTECTED]> + * libraries/javalib/vmspecific/java/lang/VMClassLoader.java: Removed. + + * libraries/javalib/vmspecific/Makefile.am (dist_vminterface_JAVA): Removed /java/lang/VMClassLoader.java. + + * libraries/clib/native/ClassLoader.c (java_lang_VMClassLoader_getPrimitiveClass): + Renamed from java_lang_VMClassLoader_getPrimitiveClass0. + Throw NoClassDefError if primitive class is not found. + +2007-10-22 Dalibor Topic <[EMAIL PROTECTED]> + * libraries/clib/native/ClassLoader.c (java_lang_VMClassLoader_getPrimitiveClass0): Rewritten to use getPrimitiveClassFromSignature. Index: kaffe/libraries/clib/native/ClassLoader.c diff -u kaffe/libraries/clib/native/ClassLoader.c:1.55 kaffe/libraries/clib/native/ClassLoader.c:1.56 --- kaffe/libraries/clib/native/ClassLoader.c:1.55 Mon Oct 22 14:06:33 2007 +++ kaffe/libraries/clib/native/ClassLoader.c Mon Oct 22 20:10:53 2007 @@ -32,9 +32,21 @@ #include "defs.h" struct Hjava_lang_Class* -java_lang_VMClassLoader_getPrimitiveClass0(jchar typeCode) +java_lang_VMClassLoader_getPrimitiveClass(jchar typeCode) { - return getPrimitiveClassFromSignature(typeCode); + struct Hjava_lang_Class* primitiveClass; + + primitiveClass = getPrimitiveClassFromSignature(typeCode); + + if (primitiveClass == NULL) { + errorInfo info; + + postNoClassDefFoundError(&info, "Invalid type specifier"); + throwError(&info); + } + else { + return primitiveClass; + } } /* Index: kaffe/libraries/javalib/vmspecific/Makefile.am diff -u kaffe/libraries/javalib/vmspecific/Makefile.am:1.7 kaffe/libraries/javalib/vmspecific/Makefile.am:1.8 --- kaffe/libraries/javalib/vmspecific/Makefile.am:1.7 Sun Jun 24 23:37:28 2007 +++ kaffe/libraries/javalib/vmspecific/Makefile.am Mon Oct 22 20:10:53 2007 @@ -30,7 +30,6 @@ gnu/java/net/InetAddressImpl.java \ gnu/java/net/SysInetAddressImpl.java \ java/lang/Runtime.java \ - java/lang/VMClassLoader.java \ java/lang/VMProcess.java \ java/lang/VMRuntime.java \ java/lang/VMString.java \ Index: kaffe/libraries/javalib/vmspecific/Makefile.in diff -u kaffe/libraries/javalib/vmspecific/Makefile.in:1.14 kaffe/libraries/javalib/vmspecific/Makefile.in:1.15 --- kaffe/libraries/javalib/vmspecific/Makefile.in:1.14 Tue Aug 7 01:44:57 2007 +++ kaffe/libraries/javalib/vmspecific/Makefile.in Mon Oct 22 20:10:53 2007 @@ -305,7 +305,6 @@ gnu/java/net/InetAddressImpl.java \ gnu/java/net/SysInetAddressImpl.java \ java/lang/Runtime.java \ - java/lang/VMClassLoader.java \ java/lang/VMProcess.java \ java/lang/VMRuntime.java \ java/lang/VMString.java \ =================================================================== Checking out kaffe/libraries/javalib/vmspecific/java/lang/VMClassLoader.java RCS: /home/cvs/kaffe/kaffe/libraries/javalib/vmspecific/java/lang/Attic/VMClassLoader.java,v VERS: 1.4 *************** --- kaffe/libraries/javalib/vmspecific/java/lang/VMClassLoader.java Mon Oct 22 20:12:51 2007 +++ /dev/null Sun Aug 4 19:57:58 2002 @@ -1,455 +0,0 @@ -/* VMClassLoader.java -- Reference implementation of native interface - required by ClassLoader - Copyright (C) 1998, 2001, 2002, 2004, 2005, 2006 Free Software Foundation - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - - -package java.lang; - -import gnu.classpath.Configuration; -import gnu.classpath.SystemProperties; -import gnu.java.lang.InstrumentationImpl; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.lang.instrument.Instrumentation; -import java.net.MalformedURLException; -import java.net.URL; -import java.security.ProtectionDomain; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Map; -import java.util.Set; -import java.util.StringTokenizer; -import java.util.Vector; -import java.util.zip.ZipFile; - -/** - * java.lang.VMClassLoader is a package-private helper for VMs to implement - * on behalf of java.lang.ClassLoader. - * - * @author John Keiser - * @author Mark Wielaard ([EMAIL PROTECTED]) - * @author Eric Blake ([EMAIL PROTECTED]) - */ -final class VMClassLoader -{ - - /** jars from property java.boot.class.path */ - static final Hashtable bootjars = new Hashtable(); - - /** packages loaded by the bootstrap class loader */ - static final HashMap definedPackages = new HashMap(); - - /** - * Converts the array string of native package names to - * Packages. The packages are then put into the - * definedPackages hashMap - */ - static - { - String[] packages = getBootPackages(); - - if( packages != null) - { - String specName = - SystemProperties.getProperty("java.specification.name"); - String vendor = - SystemProperties.getProperty("java.specification.vendor"); - String version = - SystemProperties.getProperty("java.specification.version"); - - Package p; - - for(int i = 0; i < packages.length; i++) - { - p = new Package(packages[i], - specName, - vendor, - version, - "GNU Classpath", - "GNU", - Configuration.CLASSPATH_VERSION, - null, - null); - - definedPackages.put(packages[i], p); - } - } - } - - - /** - * Helper to define a class using a string of bytes. This assumes that - * the security checks have already been performed, if necessary. - * - * Implementations of this method are advised to consider the - * situation where user code modifies the byte array after it has - * been passed to defineClass. This can be handled by making a - * private copy of the array, or arranging to only read any given - * byte a single time. - * - * @param name the name to give the class, or null if unknown - * @param data the data representing the classfile, in classfile format - * @param offset the offset into the data where the classfile starts - * @param len the length of the classfile data in the array - * @param pd the protection domain - * @return the class that was defined - * @throws ClassFormatError if data is not in proper classfile format - */ - static final native Class defineClass(ClassLoader cl, String name, - byte[] data, int offset, int len, - ProtectionDomain pd) - throws ClassFormatError; - - /** - * Helper to resolve all references to other classes from this class. - * - * @param c the class to resolve - */ - static final native void resolveClass(Class c); - - /** - * Helper to load a class from the bootstrap class loader. - * - * @param name the class name to load - * @param resolve whether to resolve it - * @return the class, loaded by the bootstrap classloader or null - * if the class wasn't found. Returning null is equivalent to throwing - * a ClassNotFoundException (but a possible performance optimization). - */ - static final native Class loadClass(String name, boolean resolve) - throws ClassNotFoundException; - - /** - * Helper to load a resource from the bootstrap class loader. - * - * @param name the resource to find - * @return the URL to the resource - */ - static URL getResource(String name) - { - Enumeration e = getResources(name); - if (e.hasMoreElements()) - return (URL)e.nextElement(); - return null; - } - - /** - * Helper to get a list of resources from the bootstrap class loader. - * - * @param name the resource to find - * @return an enumeration of resources - */ - static Enumeration getResources(String name) - { - StringTokenizer st = new StringTokenizer( - SystemProperties.getProperty("java.boot.class.path", "."), - File.pathSeparator); - Vector v = new Vector(); - while (st.hasMoreTokens()) - { - File file = new File(st.nextToken()); - if (file.isDirectory()) - { - try - { - File f = new File(file, name); - if (!f.exists()) continue; - v.add(new URL("file://" + f.getAbsolutePath())); - } - catch (MalformedURLException e) - { - throw new Error(e); - } - } - else if (file.isFile()) - { - ZipFile zip; - zip = (ZipFile) bootjars.get(file.getName()); - - if(zip == null) - { - try - { - zip = new ZipFile(file); - bootjars.put(file.getName(), zip); - } - catch (IOException e) - { - continue; - } - } - String zname = name.startsWith("/") ? name.substring(1) : name; - if (zip.getEntry(zname) == null) - continue; - try - { - v.add(new URL("jar:file://" - + file.getAbsolutePath() + "!/" + zname)); - } - catch (MalformedURLException e) - { - throw new Error(e); - } - } - } - return v.elements(); - } - - - /** - * Returns a String[] of native package names. The default - * implementation tries to load a list of package from - * the META-INF/INDEX.LIST file in the boot jar file. - * If not found or if any exception is raised, it returns - * an empty array. You may decide this needs native help. - */ - private static String[] getBootPackages() - { - URL indexList = getResource("META-INF/INDEX.LIST"); - if (indexList != null) - { - try - { - Set packageSet = new HashSet(); - String line; - int lineToSkip = 3; - BufferedReader reader = new BufferedReader( - new InputStreamReader( - indexList.openStream())); - while ((line = reader.readLine()) != null) - { - if (lineToSkip == 0) - { - if (line.length() == 0) - lineToSkip = 1; - else - packageSet.add(line.replace('/', '.')); - } - else - lineToSkip--; - } - reader.close(); - return (String[]) packageSet.toArray(new String[packageSet.size()]); - } - catch (IOException e) - { - return new String[0]; - } - } - else - return new String[0]; - } - - - /** - * Helper to get a package from the bootstrap class loader. - * - * @param name the name to find - * @return the named package, if it exists - */ - static Package getPackage(String name) - { - return (Package)definedPackages.get(name); - } - - - - /** - * Helper to get all packages from the bootstrap class loader. - * - * @return all named packages, if any exist - */ - static Package[] getPackages() - { - Package[] packages = new Package[definedPackages.size()]; - definedPackages.values().toArray(packages); - return packages; - } - - /** - * Helper for java.lang.Integer, Byte, etc to get the TYPE class - * at initialization time. The type code is one of the chars that - * represents the primitive type as in JNI. - * - * <ul> - * <li>'Z' - boolean</li> - * <li>'B' - byte</li> - * <li>'C' - char</li> - * <li>'D' - double</li> - * <li>'F' - float</li> - * <li>'I' - int</li> - * <li>'J' - long</li> - * <li>'S' - short</li> - * <li>'V' - void</li> - * </ul> - * - * @param type the primitive type - * @return a "bogus" class representing the primitive type - */ - static final Class getPrimitiveClass(char type) - { - Class primitive = getPrimitiveClass0(type); - if (primitive == null) - throw new NoClassDefFoundError("Invalid type specifier: " + type); - return primitive; - } - - /** - * Helper for java.lang.Integer, Byte, etc to get the TYPE class - * at initialization time. The type code is one of the chars that - * represents the primitive type as in JNI. - * - * <ul> - * <li>'Z' - boolean</li> - * <li>'B' - byte</li> - * <li>'C' - char</li> - * <li>'D' - double</li> - * <li>'F' - float</li> - * <li>'I' - int</li> - * <li>'J' - long</li> - * <li>'S' - short</li> - * <li>'V' - void</li> - * </ul> - * - * @param type the primitive type - * @return a "bogus" class representing the primitive type, or null - * - */ - native static final Class getPrimitiveClass0(char type); - - /** - * The system default for assertion status. This is used for all system - * classes (those with a null ClassLoader), as well as the initial value for - * every ClassLoader's default assertion status. - * - * XXX - Not implemented yet; this requires native help. - * - * @return the system-wide default assertion status - */ - static final boolean defaultAssertionStatus() - { - return true; - } - - /** - * The system default for package assertion status. This is used for all - * ClassLoader's packageAssertionStatus defaults. It must be a map of - * package names to Boolean.TRUE or Boolean.FALSE, with the unnamed package - * represented as a null key. - * - * XXX - Not implemented yet; this requires native help. - * - * @return a (read-only) map for the default packageAssertionStatus - */ - static final Map packageAssertionStatus() - { - return new HashMap(); - } - - /** - * The system default for class assertion status. This is used for all - * ClassLoader's classAssertionStatus defaults. It must be a map of - * class names to Boolean.TRUE or Boolean.FALSE - * - * XXX - Not implemented yet; this requires native help. - * - * @return a (read-only) map for the default classAssertionStatus - */ - static final Map classAssertionStatus() - { - return new HashMap(); - } - - static ClassLoader getSystemClassLoader() - { - return ClassLoader.defaultGetSystemClassLoader(); - } - - /** - * Find the class if this class loader previously defined this class - * or if this class loader has been recorded as the initiating class loader - * for this class. - */ - static native Class findLoadedClass(ClassLoader cl, String name); - - /** - * The Instrumentation object created by the vm when agents are defined. - */ - static final Instrumentation instrumenter = null; - - /** - * Call the transformers of the possible Instrumentation object. This - * implementation assumes the instrumenter is a - * <code>InstrumentationImpl</code> object. VM implementors would - * have to redefine this method if they provide their own implementation - * of the <code>Instrumentation</code> interface. - * - * @param loader the initiating loader - * @param name the name of the class - * @param data the data representing the classfile, in classfile format - * @param offset the offset into the data where the classfile starts - * @param len the length of the classfile data in the array - * @param pd the protection domain - * @return the new data representing the classfile - */ - static final Class defineClassWithTransformers(ClassLoader loader, - String name, byte[] data, int offset, int len, ProtectionDomain pd) - { - - if (instrumenter != null) - { - byte[] modifiedData = new byte[len]; - System.arraycopy(data, offset, modifiedData, 0, len); - String jvmName = name.replace('.', '/'); - modifiedData = - ((InstrumentationImpl)instrumenter).callTransformers(loader, jvmName, - null, pd, modifiedData); - - return defineClass(loader, name, modifiedData, 0, modifiedData.length, - pd); - } - else - { - return defineClass(loader, name, data, offset, len, pd); - } - } -} _______________________________________________ kaffe mailing list kaffe@kaffe.org http://kaffe.org/cgi-bin/mailman/listinfo/kaffe