Binary files jamvm-1.1.3/lib/classes.tar and /home/mark/src/jamvm-1.1.3/lib/classes.tar differ diff -uNr jamvm-1.1.3/lib/java/io/VMObjectStreamClass.java /home/mark/src/jamvm-1.1.3/lib/java/io/VMObjectStreamClass.java --- jamvm-1.1.3/lib/java/io/VMObjectStreamClass.java 2004-04-12 23:44:49.000000000 +0200 +++ /home/mark/src/jamvm-1.1.3/lib/java/io/VMObjectStreamClass.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -/* - VMObjectStreamClass.java -- jamvm (workarounds) for (VM)ObjectStreamClass. -*/ - -package java.io; - -import java.lang.reflect.Field; - -final class VMObjectStreamClass -{ - static boolean hasClassInitializer (Class clazz) { - return VMClass.hasClassInitializer(clazz); - } - - static native void setDoubleNative(Field field, Object obj, double val); - static native void setFloatNative(Field field, Object obj, float val); - static native void setLongNative(Field field, Object obj, long val); - static native void setIntNative(Field field, Object obj, int val); - static native void setShortNative(Field field, Object obj, short val); - static native void setCharNative(Field field, Object obj, char val); - static native void setByteNative(Field field, Object obj, byte val); - static native void setBooleanNative(Field field, Object obj, boolean val); - static native void setObjectNative(Field field, Object obj, Object val); -} diff -uNr jamvm-1.1.3/lib/java/lang/VMClass.java /home/mark/src/jamvm-1.1.3/lib/java/lang/VMClass.java --- jamvm-1.1.3/lib/java/lang/VMClass.java 2004-03-25 06:51:45.000000000 +0100 +++ /home/mark/src/jamvm-1.1.3/lib/java/lang/VMClass.java 2004-04-23 13:36:43.000000000 +0200 @@ -46,9 +46,10 @@ import java.lang.reflect.*; -public final class VMClass +final class VMClass { - private Class clazz; + + // Only static methods. Cannot be instantiated. private VMClass() { } @@ -57,11 +58,12 @@ * Discover whether an Object is an instance of this Class. Think of it * as almost like o instanceof (this class). * + * @param klass the Class object that's calling us * @param o the Object to check * @return whether o is an instance of this class * @since 1.1 */ - native boolean isInstance(Object o); + static native boolean isInstance(Class klazz, Object o); /** * Discover whether an instance of the Class parameter would be an @@ -71,21 +73,23 @@ * checks widening conversions for objects, it must be exact for primitive * types. * + * @param klass the Class object that's calling us * @param c the class to check * @return whether an instance of c would be an instance of this class * as well * @throws NullPointerException if c is null * @since 1.1 */ - native boolean isAssignableFrom(Class c); + static native boolean isAssignableFrom(Class klass, Class c); /** * Check whether this class is an interface or not. Array types are not * interfaces. * + * @param klass the Class object that's calling us * @return whether this class is an interface or not */ - native boolean isInterface(); + static native boolean isInterface(Class klass); /** * Return whether this class is a primitive type. A primitive type class @@ -94,6 +98,7 @@ * classes through java.lang.Boolean.TYPE, java.lang.Integer.TYPE, etc., * or through boolean.class, int.class, etc. * + * @param klass the Class object that's calling us * @return whether this class is a primitive type * @see Boolean#TYPE * @see Byte#TYPE @@ -106,7 +111,7 @@ * @see Void#TYPE * @since 1.1 */ - native boolean isPrimitive(); + static native boolean isPrimitive(Class klass); /** * Get the name of this class, separated by dots for package separators. @@ -125,18 +130,20 @@ * class or interface, alone: <dotted name> * class or interface, as element type: L<dotted name>; * + * @param klass the Class object that's calling us * @return the name of this class */ - native String getName(); + static native String getName(Class klass); /** * Get the direct superclass of this class. If this is an interface, * Object, a primitive type, or void, it will return null. If this is an * array type, it will return Object. * + * @param klass the Class object that's calling us * @return the direct superclass of this class */ - native Class getSuperclass(); + static native Class getSuperclass(Class klass); /** * Get the interfaces this class directly implements, in the @@ -144,9 +151,10 @@ * for Object, primitives, void, and classes or interfaces with no direct * superinterface. Array types return Cloneable and Serializable. * + * @param klass the Class object that's calling us * @return the interfaces this class directly implements */ - native Class[] getInterfaces(); + static native Class[] getInterfaces(Class klass); /** * If this is an array, get the Class representing the type of array. @@ -154,11 +162,12 @@ * calling getComponentType on that would give "java.lang.String". If * this is not an array, returns null. * + * @param klass the Class object that's calling us * @return the array type of this class, or null * @see Array * @since 1.1 */ - native Class getComponentType(); + static native Class getComponentType(Class klass); /** * Get the modifiers of this class. These can be decoded using Modifier, @@ -168,56 +177,64 @@ * marked final but not an interface. Primitive types and void are marked * public and final, but not an interface. * + * @param klass the Class object that's calling us * @return the modifiers of this class * @see Modifer * @since 1.1 */ - native int getModifiers(); + static native int getModifiers(Class klass); /** * If this is a nested or inner class, return the class that declared it. * If not, return null. * + * @param klass the Class object that's calling us * @return the declaring class of this class * @since 1.1 */ - native Class getDeclaringClass(); + static native Class getDeclaringClass(Class klass); /** * Like getDeclaredClasses() but without the security checks. * + * @param klass the Class object that's calling us * @param pulicOnly Only public classes should be returned */ - native Class[] getDeclaredClasses(boolean publicOnly); + static native Class[] getDeclaredClasses(Class klass, boolean publicOnly); /** * Like getDeclaredFields() but without the security checks. * + * @param klass the Class object that's calling us * @param pulicOnly Only public fields should be returned */ - native Field[] getDeclaredFields(boolean publicOnly); + static native Field[] getDeclaredFields(Class klass, boolean publicOnly); /** * Like getDeclaredMethods() but without the security checks. * + * @param klass the Class object that's calling us * @param pulicOnly Only public methods should be returned */ - native Method[] getDeclaredMethods(boolean publicOnly); + static native Method[] getDeclaredMethods(Class klass, boolean publicOnly); /** * Like getDeclaredConstructors() but without * the security checks. * + * @param klass the Class object that's calling us * @param pulicOnly Only public constructors should be returned */ - native Constructor[] getDeclaredConstructors(boolean publicOnly); + static native Constructor[] getDeclaredConstructors(Class klass, + boolean publicOnly); /** * Return the class loader of this class. * + * @param klass the Class object that's calling us * @return the class loader */ - native ClassLoader getClassLoader(); + static native ClassLoader getClassLoader(Class klass); /** * VM implementors are free to make this method a noop if @@ -236,19 +253,21 @@ /** * Return whether this class is an array type. * + * @param klass the Class object that's calling us * @return 1 if this class is an array type, 0 otherwise, -1 if unsupported * operation */ - native int isArray(); + static native boolean isArray(Class klass); /** * This method should trigger class initialization (if the * class hasn't already been initialized) * + * @param klass the Class object that's calling us * @throws ExceptionInInitializerError if an exception * occurs during initialization */ - native void initialize(); + static native void initialize(Class klass); /** * Load an array class. @@ -264,6 +283,4 @@ * Throw a checked exception without declaring it. */ static native void throwException(Throwable t); - - public static native boolean hasClassInitializer(Class c); } // class VMClass diff -uNr jamvm-1.1.3/src/class.c /home/mark/src/jamvm-1.1.3/src/class.c --- jamvm-1.1.3/src/class.c 2004-04-12 03:10:18.000000000 +0200 +++ /home/mark/src/jamvm-1.1.3/src/class.c 2004-04-23 11:52:03.000000000 +0200 @@ -43,11 +43,6 @@ Class *java_lang_Class = NULL; Class *java_lang_VMClass = NULL; -/* Field offsets into Class and VMClass objects - used when - preparing a new class. */ -static int vmClass_offset; -int clazz_offset; /* Not static as referenced by native.c */ - /* Method table index of ClassLoader.loadClass - used when requesting a Java-level class loader to load a class. Cached on first use. */ @@ -94,33 +89,15 @@ static void prepareClass(Class *class) { ClassBlock *cb = CLASS_CB(class); - Object *vmClass; if(strcmp(cb->name,"java/lang/Class") == 0) class->class = class; else { - if(java_lang_Class == NULL) { - FieldBlock *field; + if(java_lang_Class == NULL) java_lang_Class = findSystemClass0("java/lang/Class"); - if((field = findField(java_lang_Class, "vmClass", "Ljava/lang/VMClass;")) == NULL) - goto init_error; - vmClass_offset = field->offset; - } class->class = java_lang_Class; } - if(java_lang_VMClass == NULL) { - FieldBlock *field; - java_lang_VMClass = findSystemClass0("java/lang/VMClass"); - if((field = findField(java_lang_VMClass, "clazz", "Ljava/lang/Class;")) == NULL) - goto init_error; - clazz_offset = field->offset; - } - - vmClass = allocObject(java_lang_VMClass); - INST_DATA(vmClass)[clazz_offset] = (u4) class; - INST_DATA(class)[vmClass_offset] = (u4) vmClass; - return; init_error: diff -uNr jamvm-1.1.3/src/natives.c /home/mark/src/jamvm-1.1.3/src/natives.c --- jamvm-1.1.3/src/natives.c 2004-04-12 04:14:57.000000000 +0200 +++ /home/mark/src/jamvm-1.1.3/src/natives.c 2004-04-23 13:39:25.000000000 +0200 @@ -292,9 +292,7 @@ /* java.lang.VMClass */ -extern int clazz_offset; - -#define GET_CLASS(vmClass) (Class*)(INST_DATA((Object*)vmClass)[clazz_offset]) +#define GET_CLASS(vmClass) (Class*)vmClass u4 *isInstance(Class *class, MethodBlock *mb, u4 *ostack) { Class *clazz = GET_CLASS(ostack[0]);