From 48226f988c506a16c5fa5f0ee82b0cccb927e5eb Mon Sep 17 00:00:00 2001 From: Joel Dice Date: Sat, 21 Jul 2007 11:50:26 -0600 Subject: [PATCH] add a bunch of classes to classpath and flesh out a few existing ones --- classpath/java/lang/Byte.java | 22 ++++++- classpath/java/lang/ClassCastException.java | 11 ++++ classpath/java/lang/ClassLoader.java | 5 ++ .../java/lang/ClassNotFoundException.java | 15 +++++ .../java/lang/CloneNotSupportedException.java | 11 ++++ classpath/java/lang/Double.java | 20 ++++++ classpath/java/lang/Float.java | 22 ++++++- .../java/lang/IllegalAccessException.java | 11 ++++ .../java/lang/IllegalArgumentException.java | 19 ++++++ .../java/lang/InstantiationException.java | 11 ++++ classpath/java/lang/Integer.java | 22 ++++++- classpath/java/lang/Long.java | 22 ++++++- classpath/java/lang/NoClassDefFoundError.java | 11 ++++ classpath/java/lang/NoSuchFieldException.java | 11 ++++ .../java/lang/NoSuchMethodException.java | 11 ++++ classpath/java/lang/Number.java | 10 +++ .../java/lang/NumberFormatException.java | 11 ++++ classpath/java/lang/Runtime.java | 17 +++++ classpath/java/lang/SecurityException.java | 19 ++++++ classpath/java/lang/Short.java | 22 ++++++- classpath/java/lang/System.java | 14 +++- classpath/java/lang/ref/Reference.java | 2 +- .../java/lang/reflect/AccessibleObject.java | 9 +++ classpath/java/lang/reflect/Constructor.java | 20 ++++++ classpath/java/lang/reflect/Field.java | 21 ++++++ classpath/java/lang/reflect/Method.java | 23 +++++++ makefile | 2 +- src/builtin.cpp | 66 ++++++++++++------- src/machine.cpp | 19 ++++-- src/run.cpp | 4 +- src/system.cpp | 21 +++++- src/system.h | 2 + src/types.def | 19 ++++-- 33 files changed, 475 insertions(+), 50 deletions(-) create mode 100644 classpath/java/lang/ClassCastException.java create mode 100644 classpath/java/lang/ClassLoader.java create mode 100644 classpath/java/lang/ClassNotFoundException.java create mode 100644 classpath/java/lang/CloneNotSupportedException.java create mode 100644 classpath/java/lang/IllegalAccessException.java create mode 100644 classpath/java/lang/IllegalArgumentException.java create mode 100644 classpath/java/lang/InstantiationException.java create mode 100644 classpath/java/lang/NoClassDefFoundError.java create mode 100644 classpath/java/lang/NoSuchFieldException.java create mode 100644 classpath/java/lang/NoSuchMethodException.java create mode 100644 classpath/java/lang/Number.java create mode 100644 classpath/java/lang/NumberFormatException.java create mode 100644 classpath/java/lang/Runtime.java create mode 100644 classpath/java/lang/SecurityException.java create mode 100644 classpath/java/lang/reflect/AccessibleObject.java create mode 100644 classpath/java/lang/reflect/Constructor.java create mode 100644 classpath/java/lang/reflect/Field.java create mode 100644 classpath/java/lang/reflect/Method.java diff --git a/classpath/java/lang/Byte.java b/classpath/java/lang/Byte.java index 03250631a1..0ace19db24 100644 --- a/classpath/java/lang/Byte.java +++ b/classpath/java/lang/Byte.java @@ -1,6 +1,6 @@ package java.lang; -public final class Byte { +public final class Byte extends Number { private final byte value; public Byte(byte value) { @@ -10,4 +10,24 @@ public final class Byte { public byte byteValue() { return value; } + + public short shortValue() { + return value; + } + + public int intValue() { + return value; + } + + public long longValue() { + return value; + } + + public float floatValue() { + return (float) value; + } + + public double doubleValue() { + return (double) value; + } } diff --git a/classpath/java/lang/ClassCastException.java b/classpath/java/lang/ClassCastException.java new file mode 100644 index 0000000000..1160942a11 --- /dev/null +++ b/classpath/java/lang/ClassCastException.java @@ -0,0 +1,11 @@ +package java.lang; + +public class ClassCastException extends RuntimeException { + public ClassCastException(String message) { + super(message); + } + + public ClassCastException() { + super(); + } +} diff --git a/classpath/java/lang/ClassLoader.java b/classpath/java/lang/ClassLoader.java new file mode 100644 index 0000000000..b9648d565c --- /dev/null +++ b/classpath/java/lang/ClassLoader.java @@ -0,0 +1,5 @@ +package java.lang; + +public abstract class ClassLoader { + +} diff --git a/classpath/java/lang/ClassNotFoundException.java b/classpath/java/lang/ClassNotFoundException.java new file mode 100644 index 0000000000..9a68dfa54f --- /dev/null +++ b/classpath/java/lang/ClassNotFoundException.java @@ -0,0 +1,15 @@ +package java.lang; + +public class ClassNotFoundException extends Exception { + public ClassNotFoundException(String message, Throwable cause) { + super(message, cause); + } + + public ClassNotFoundException(String message) { + this(message, null); + } + + public ClassNotFoundException() { + this(null, null); + } +} diff --git a/classpath/java/lang/CloneNotSupportedException.java b/classpath/java/lang/CloneNotSupportedException.java new file mode 100644 index 0000000000..59d8e9fa05 --- /dev/null +++ b/classpath/java/lang/CloneNotSupportedException.java @@ -0,0 +1,11 @@ +package java.lang; + +public class CloneNotSupportedException extends Exception { + public CloneNotSupportedException(String message) { + super(message); + } + + public CloneNotSupportedException() { + super(); + } +} diff --git a/classpath/java/lang/Double.java b/classpath/java/lang/Double.java index 8765d9541e..2c8f388e76 100644 --- a/classpath/java/lang/Double.java +++ b/classpath/java/lang/Double.java @@ -7,6 +7,26 @@ public final class Double { this.value = value; } + public byte byteValue() { + return (byte) value; + } + + public short shortValue() { + return (short) value; + } + + public int intValue() { + return (int) value; + } + + public long longValue() { + return (long) value; + } + + public float floatValue() { + return (float) value; + } + public double doubleValue() { return value; } diff --git a/classpath/java/lang/Float.java b/classpath/java/lang/Float.java index 3e8d6b5eef..9c4aa3ffb2 100644 --- a/classpath/java/lang/Float.java +++ b/classpath/java/lang/Float.java @@ -1,13 +1,33 @@ package java.lang; -public final class Float { +public final class Float extends Number { private final float value; public Float(float value) { this.value = value; } + public byte byteValue() { + return (byte) value; + } + + public short shortValue() { + return (short) value; + } + + public int intValue() { + return (int) value; + } + + public long longValue() { + return (long) value; + } + public float floatValue() { return value; } + + public double doubleValue() { + return (double) value; + } } diff --git a/classpath/java/lang/IllegalAccessException.java b/classpath/java/lang/IllegalAccessException.java new file mode 100644 index 0000000000..57b0afd726 --- /dev/null +++ b/classpath/java/lang/IllegalAccessException.java @@ -0,0 +1,11 @@ +package java.lang; + +public class IllegalAccessException extends Exception { + public IllegalAccessException(String message) { + super(message); + } + + public IllegalAccessException() { + super(); + } +} diff --git a/classpath/java/lang/IllegalArgumentException.java b/classpath/java/lang/IllegalArgumentException.java new file mode 100644 index 0000000000..13c8d1d34f --- /dev/null +++ b/classpath/java/lang/IllegalArgumentException.java @@ -0,0 +1,19 @@ +package java.lang; + +public class IllegalArgumentException extends RuntimeException { + public IllegalArgumentException(String message, Throwable cause) { + super(message, cause); + } + + public IllegalArgumentException(String message) { + this(message, null); + } + + public IllegalArgumentException(Throwable cause) { + this(null, cause); + } + + public IllegalArgumentException() { + this(null, null); + } +} diff --git a/classpath/java/lang/InstantiationException.java b/classpath/java/lang/InstantiationException.java new file mode 100644 index 0000000000..fffa241189 --- /dev/null +++ b/classpath/java/lang/InstantiationException.java @@ -0,0 +1,11 @@ +package java.lang; + +public class InstantiationException extends Exception { + public InstantiationException(String message) { + super(message); + } + + public InstantiationException() { + super(); + } +} diff --git a/classpath/java/lang/Integer.java b/classpath/java/lang/Integer.java index 68eb18b006..2a98535024 100644 --- a/classpath/java/lang/Integer.java +++ b/classpath/java/lang/Integer.java @@ -1,13 +1,33 @@ package java.lang; -public final class Integer { +public final class Integer extends Number { private final int value; public Integer(int value) { this.value = value; } + public byte byteValue() { + return (byte) value; + } + + public short shortValue() { + return (short) value; + } + public int intValue() { return value; } + + public long longValue() { + return value; + } + + public float floatValue() { + return (float) value; + } + + public double doubleValue() { + return (double) value; + } } diff --git a/classpath/java/lang/Long.java b/classpath/java/lang/Long.java index ed0c74f157..1fce98ec72 100644 --- a/classpath/java/lang/Long.java +++ b/classpath/java/lang/Long.java @@ -1,13 +1,33 @@ package java.lang; -public final class Long { +public final class Long extends Number { private final long value; public Long(long value) { this.value = value; } + public byte byteValue() { + return (byte) value; + } + + public short shortValue() { + return (short) value; + } + + public int intValue() { + return (int) value; + } + public long longValue() { return value; } + + public float floatValue() { + return (float) value; + } + + public double doubleValue() { + return (double) value; + } } diff --git a/classpath/java/lang/NoClassDefFoundError.java b/classpath/java/lang/NoClassDefFoundError.java new file mode 100644 index 0000000000..fbfb21be6f --- /dev/null +++ b/classpath/java/lang/NoClassDefFoundError.java @@ -0,0 +1,11 @@ +package java.lang; + +public class NoClassDefFoundError extends LinkageError { + public NoClassDefFoundError(String message) { + super(message); + } + + public NoClassDefFoundError() { + super(); + } +} diff --git a/classpath/java/lang/NoSuchFieldException.java b/classpath/java/lang/NoSuchFieldException.java new file mode 100644 index 0000000000..c8bdbf3c11 --- /dev/null +++ b/classpath/java/lang/NoSuchFieldException.java @@ -0,0 +1,11 @@ +package java.lang; + +public class NoSuchFieldException extends Exception { + public NoSuchFieldException(String message) { + super(message); + } + + public NoSuchFieldException() { + super(); + } +} diff --git a/classpath/java/lang/NoSuchMethodException.java b/classpath/java/lang/NoSuchMethodException.java new file mode 100644 index 0000000000..5633f33ce9 --- /dev/null +++ b/classpath/java/lang/NoSuchMethodException.java @@ -0,0 +1,11 @@ +package java.lang; + +public class NoSuchMethodException extends Exception { + public NoSuchMethodException(String message) { + super(message); + } + + public NoSuchMethodException() { + super(); + } +} diff --git a/classpath/java/lang/Number.java b/classpath/java/lang/Number.java new file mode 100644 index 0000000000..8135a7a26e --- /dev/null +++ b/classpath/java/lang/Number.java @@ -0,0 +1,10 @@ +package java.lang; + +public abstract class Number { + public abstract byte byteValue(); + public abstract short shortValue(); + public abstract int intValue(); + public abstract long longValue(); + public abstract float floatValue(); + public abstract double doubleValue(); +} diff --git a/classpath/java/lang/NumberFormatException.java b/classpath/java/lang/NumberFormatException.java new file mode 100644 index 0000000000..57fcba7f6c --- /dev/null +++ b/classpath/java/lang/NumberFormatException.java @@ -0,0 +1,11 @@ +package java.lang; + +public class NumberFormatException extends IllegalArgumentException { + public NumberFormatException(String message) { + super(message); + } + + public NumberFormatException() { + super(); + } +} diff --git a/classpath/java/lang/Runtime.java b/classpath/java/lang/Runtime.java new file mode 100644 index 0000000000..94c220b7b1 --- /dev/null +++ b/classpath/java/lang/Runtime.java @@ -0,0 +1,17 @@ +package java.lang; + +public class Runtime { + private static final Runtime instance = new Runtime(); + + private Runtime() { } + + public static Runtime getRuntime() { + return instance; + } + + public native void loadLibrary(String name); + + public native void gc(); + + public native void exit(int code); +} diff --git a/classpath/java/lang/SecurityException.java b/classpath/java/lang/SecurityException.java new file mode 100644 index 0000000000..4007351a67 --- /dev/null +++ b/classpath/java/lang/SecurityException.java @@ -0,0 +1,19 @@ +package java.lang; + +public class SecurityException extends RuntimeException { + public SecurityException(String message, Throwable cause) { + super(message, cause); + } + + public SecurityException(String message) { + this(message, null); + } + + public SecurityException(Throwable cause) { + this(null, cause); + } + + public SecurityException() { + this(null, null); + } +} diff --git a/classpath/java/lang/Short.java b/classpath/java/lang/Short.java index 214cc0efe0..b860feee6a 100644 --- a/classpath/java/lang/Short.java +++ b/classpath/java/lang/Short.java @@ -1,13 +1,33 @@ package java.lang; -public final class Short { +public final class Short extends Number { private final short value; public Short(short value) { this.value = value; } + public byte byteValue() { + return (byte) value; + } + public short shortValue() { return value; } + + public int intValue() { + return value; + } + + public long longValue() { + return value; + } + + public float floatValue() { + return (float) value; + } + + public double doubleValue() { + return (double) value; + } } diff --git a/classpath/java/lang/System.java b/classpath/java/lang/System.java index af5df4b24e..4499401131 100644 --- a/classpath/java/lang/System.java +++ b/classpath/java/lang/System.java @@ -11,11 +11,19 @@ public abstract class System { public static native void arraycopy(Object src, int srcOffset, Object dst, int dstOffset, int length); - public static native void loadLibrary(String name); - public static native String getProperty(String name); - public static native void gc(); + public static void loadLibrary(String name) { + Runtime.getRuntime().loadLibrary(name); + } + + public static void gc() { + Runtime.getRuntime().gc(); + } + + public static void exit(int code) { + Runtime.getRuntime().exit(code); + } public static class Output { public synchronized native void print(String s); diff --git a/classpath/java/lang/ref/Reference.java b/classpath/java/lang/ref/Reference.java index 48451617c3..b015112c32 100644 --- a/classpath/java/lang/ref/Reference.java +++ b/classpath/java/lang/ref/Reference.java @@ -1,9 +1,9 @@ package java.lang.ref; public abstract class Reference { + private Object vmNext; private T target; private ReferenceQueue queue; - private Object vmNext; Reference next; protected Reference(T target, ReferenceQueue queue) { diff --git a/classpath/java/lang/reflect/AccessibleObject.java b/classpath/java/lang/reflect/AccessibleObject.java new file mode 100644 index 0000000000..41783d1255 --- /dev/null +++ b/classpath/java/lang/reflect/AccessibleObject.java @@ -0,0 +1,9 @@ +package java.lang.reflect; + +public abstract class AccessibleObject { + protected static final int Accessible = 1 << 0; + + public abstract boolean isAccessible(); + + public abstract void setAccessible(boolean v); +} diff --git a/classpath/java/lang/reflect/Constructor.java b/classpath/java/lang/reflect/Constructor.java new file mode 100644 index 0000000000..cba1ec9331 --- /dev/null +++ b/classpath/java/lang/reflect/Constructor.java @@ -0,0 +1,20 @@ +package java.lang.reflect; + +public class Constructor extends AccessibleObject { + private Method method; + + private Constructor() { } + + public boolean equals(Object o) { + return o instanceof Constructor + && ((Constructor) o).method.equals(method); + } + + public boolean isAccessible() { + return method.isAccessible(); + } + + public void setAccessible(boolean v) { + method.setAccessible(v); + } +} diff --git a/classpath/java/lang/reflect/Field.java b/classpath/java/lang/reflect/Field.java new file mode 100644 index 0000000000..9fd11bf112 --- /dev/null +++ b/classpath/java/lang/reflect/Field.java @@ -0,0 +1,21 @@ +package java.lang.reflect; + +public class Field extends AccessibleObject { + private byte vmFlags; + private byte code; + private short flags; + private short offset; + private byte[] name; + private byte[] spec; + private Class class_; + + private Field() { } + + public boolean isAccessible() { + return (vmFlags & Accessible) != 0; + } + + public void setAccessible(boolean v) { + if (v) vmFlags |= Accessible; else vmFlags &= ~Accessible; + } +} diff --git a/classpath/java/lang/reflect/Method.java b/classpath/java/lang/reflect/Method.java new file mode 100644 index 0000000000..4d18a19a0a --- /dev/null +++ b/classpath/java/lang/reflect/Method.java @@ -0,0 +1,23 @@ +package java.lang.reflect; + +public class Method extends AccessibleObject { + private byte vmFlags; + private byte parameterCount; + private short parameterFootprint; + private short flags; + private short offset; + private byte[] name; + private byte[] spec; + private Class class_; + private Object code; + + private Method() { } + + public boolean isAccessible() { + return (vmFlags & Accessible) != 0; + } + + public void setAccessible(boolean v) { + if (v) vmFlags |= Accessible; else vmFlags &= ~Accessible; + } +} diff --git a/makefile b/makefile index e875719e7a..daf0b7b600 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,4 @@ -#MAKEFLAGS = -s +MAKEFLAGS = -s arch = $(shell uname -m) ifeq ($(arch),i586) diff --git a/src/builtin.cpp b/src/builtin.cpp index 50d685dfdc..5f8a9dd60d 100644 --- a/src/builtin.cpp +++ b/src/builtin.cpp @@ -51,28 +51,6 @@ sleep(Thread* t, jlong milliseconds) t->vm->system->sleep(milliseconds); } -void -loadLibrary(Thread* t, jstring nameString) -{ - if (LIKELY(nameString)) { - object n = *nameString; - char name[stringLength(t, n) + 1]; - stringChars(t, n, name); - - System::Library* lib; - if (LIKELY(t->vm->system->success - (t->vm->system->load(&lib, name, t->vm->libraries)))) - { - t->vm->libraries = lib; - } else { - object message = makeString(t, "library not found: %s", name); - t->exception = makeRuntimeException(t, message); - } - } else { - t->exception = makeNullPointerException(t); - } -} - void arraycopy(Thread* t, jobject src, jint srcOffset, jobject dst, jint dstOffset, jint length) @@ -108,13 +86,48 @@ arraycopy(Thread* t, jobject src, jint srcOffset, jobject dst, jint dstOffset, } void -gc(Thread* t) +loadLibrary(Thread* t, jobject, jstring nameString) +{ + if (LIKELY(nameString)) { + object n = *nameString; + char name[stringLength(t, n) + 1]; + stringChars(t, n, name); + + for (System::Library* lib = t->vm->libraries; lib; lib = lib->next()) { + if (::strcmp(lib->name(), name) == 0) { + // already loaded + return; + } + } + + System::Library* lib; + if (LIKELY(t->vm->system->success + (t->vm->system->load(&lib, name, t->vm->libraries)))) + { + t->vm->libraries = lib; + } else { + object message = makeString(t, "library not found: %s", name); + t->exception = makeRuntimeException(t, message); + } + } else { + t->exception = makeNullPointerException(t); + } +} + +void +gc(Thread* t, jobject) { ENTER(t, Thread::ExclusiveState); collect(t, Heap::MajorCollection); } +void +exit(Thread* t, jobject, jint code) +{ + t->vm->system->exit(code); +} + jobject trace(Thread* t, jint skipCount) { @@ -224,10 +237,13 @@ populate(Thread* t, object map) } builtins[] = { { "Java_java_lang_System_arraycopy", reinterpret_cast(arraycopy) }, - { "Java_java_lang_System_loadLibrary", + + { "Java_java_lang_Runtime_loadLibrary", reinterpret_cast(loadLibrary) }, - { "Java_java_lang_System_gc", + { "Java_java_lang_Runtime_gc", reinterpret_cast(gc) }, + { "Java_java_lang_Runtiime_exit", + reinterpret_cast(exit) }, { "Java_java_lang_Thread_start", reinterpret_cast(start) }, diff --git a/src/machine.cpp b/src/machine.cpp index 0c45c4b693..ed08d9151b 100644 --- a/src/machine.cpp +++ b/src/machine.cpp @@ -139,6 +139,9 @@ visitRoots(Thread* t, Heap::Visitor* v) void referenceTargetUnreachable(Thread* t, object* p, Heap::Visitor* v) { +// fprintf(stderr, "target %p unreachable for reference %p\n", +// jreferenceTarget(t, *p), *p); + v->visit(p); jreferenceTarget(t, *p) = 0; @@ -166,6 +169,9 @@ referenceTargetUnreachable(Thread* t, object* p, Heap::Visitor* v) void referenceUnreachable(Thread* t, object* p, Heap::Visitor* v) { +// fprintf(stderr, "reference %p unreachable\n", +// *p); + if (jreferenceQueue(t, *p) and t->vm->heap->status(jreferenceQueue(t, *p)) != Heap::Unreachable) { @@ -177,6 +183,9 @@ referenceUnreachable(Thread* t, object* p, Heap::Visitor* v) void referenceTargetReachable(Thread* t, object* p, Heap::Visitor* v) { +// fprintf(stderr, "target %p reachable for reference %p\n", +// jreferenceTarget(t, *p), *p); + v->visit(p); v->visit(&jreferenceTarget(t, *p)); @@ -711,9 +720,10 @@ parseFieldTable(Thread* t, Stream& s, object class_, object pool) object field = makeField (t, + 0, // vm flags + fieldCode(t, byteArrayBody(t, arrayBody(t, pool, spec - 1), 0)), flags, 0, // offset - fieldCode(t, byteArrayBody(t, arrayBody(t, pool, spec - 1), 0)), arrayBody(t, pool, name - 1), arrayBody(t, pool, spec - 1), class_); @@ -914,10 +924,11 @@ parseMethodTable(Thread* t, Stream& s, object class_, object pool) } object method = makeMethod(t, - flags, - 0, // offset + 0, // vm flags parameterCount, parameterFootprint, + flags, + 0, // offset arrayBody(t, pool, name - 1), arrayBody(t, pool, spec - 1), class_, @@ -1791,7 +1802,7 @@ hashMapInsert(Thread* t, object map, object key, object value, PROTECT(t, value); t->vm->weakReferences = makeWeakReference - (t, 0, 0, t->vm->weakReferences, 0); + (t, t->vm->weakReferences, 0, 0, 0); jreferenceTarget(t, t->vm->weakReferences) = key; key = t->vm->weakReferences; } diff --git a/src/run.cpp b/src/run.cpp index 239373fac5..a583077374 100644 --- a/src/run.cpp +++ b/src/run.cpp @@ -91,8 +91,8 @@ make(Thread* t, object class_) ACQUIRE(t, t->vm->referenceLock); - // jreferenceNext(t, r) - cast(instance, 3 * BytesPerWord) = t->vm->weakReferences; + // jreferenceNext(t, instance) + cast(instance, BytesPerWord) = t->vm->weakReferences; t->vm->weakReferences = instance; } diff --git a/src/system.cpp b/src/system.cpp index 2db57b5555..b98477e7e3 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -236,9 +236,10 @@ class MySystem: public System { class Library: public System::Library { public: - Library(System* s, void* p, System::Library* next): + Library(System* s, void* p, const char* name, System::Library* next): s(s), p(p), + name_(name), next_(next) { } @@ -246,6 +247,10 @@ class MySystem: public System { return dlsym(p, function); } + virtual const char* name() { + return name_; + } + virtual System::Library* next() { return next_; } @@ -260,11 +265,14 @@ class MySystem: public System { if (next_) { next_->dispose(); } + + s->free(name_); s->free(this); } System* s; void* p; + const char* name_; System::Library* next_; }; @@ -359,7 +367,8 @@ class MySystem: public System { const char* name, System::Library* next) { - unsigned size = strlen(name) + 7; + unsigned nameLength = strlen(name); + unsigned size = nameLength + 7; char buffer[size]; snprintf(buffer, size, "lib%s.so", name); @@ -369,13 +378,19 @@ class MySystem: public System { fprintf(stderr, "open %s as %p\n", buffer, p); } - *lib = new (System::allocate(sizeof(Library))) Library(this, p, next); + char* n = static_cast(System::allocate(nameLength + 1)); + memcpy(n, name, nameLength + 1); + *lib = new (System::allocate(sizeof(Library))) Library(this, p, n, next); return 0; } else { return 1; } } + virtual void exit(int code) { + ::exit(code); + } + virtual void abort() { ::abort(); } diff --git a/src/system.h b/src/system.h index 03a3d8275f..f6db4ae5e8 100644 --- a/src/system.h +++ b/src/system.h @@ -49,6 +49,7 @@ class System: public Allocator { public: virtual ~Library() { } virtual void* resolve(const char* function) = 0; + virtual const char* name() = 0; virtual Library* next() = 0; virtual void dispose() = 0; }; @@ -64,6 +65,7 @@ class System: public Allocator { unsigned count, unsigned size, unsigned returnType) = 0; virtual Status load(Library**, const char* name, Library* next) = 0; + virtual void exit(int code) = 0; virtual void abort() = 0; virtual void dispose() = 0; diff --git a/src/types.def b/src/types.def index b97224add7..8025a86036 100644 --- a/src/types.def +++ b/src/types.def @@ -17,19 +17,26 @@ (object staticTable) (object initializer)) -(type field +(type accessibleObject java/lang/reflect/AccessibleObject + (extends jobject)) + +(type field java/lang/reflect/Field + (extends accessibleObject) + (uint8_t vmFlags) + (uint8_t code) (uint16_t flags) (uint16_t offset) - (uint8_t code) (object name) (object spec) (object class)) -(type method +(type method java/lang/reflect/Method + (extends accessibleObject) + (uint8_t vmFlags) + (uint8_t parameterCount) + (uint16_t parameterFootprint) (uint16_t flags) (uint16_t offset) - (uint16_t parameterCount) - (uint16_t parameterFootprint) (object name) (object spec) (object class) @@ -223,9 +230,9 @@ (type jreference java/lang/ref/Reference (extends jobject) + (void* next) (void* target) (void* queue) - (void* next) (object jnext)) (type weakReference java/lang/ref/WeakReference