[vmkit-commits] [vmkit] r69318 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathVMClassLoader.cpp VMCore/Jnjvm.cpp VMCore/Jnjvm.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu Apr 16 15:17:35 PDT 2009
Author: geoffray
Date: Thu Apr 16 17:17:34 2009
New Revision: 69318
URL: http://llvm.org/viewvc/llvm-project?rev=69318&view=rev
Log:
Throw a linkage error when a class is being defined twice.
Modified:
vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp?rev=69318&r1=69317&r2=69318&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp Thu Apr 16 17:17:34 2009
@@ -125,9 +125,16 @@
JavaString* str = (JavaString*)_str;
const UTF8* name = str->value->javaToInternal(vm, str->offset, str->count);
- UserClass* cl = JCL->constructClass(name, (ArrayUInt8*)bytes);
+ UserCommonClass* cl = JCL->lookupClass(name);
+
+ if (!cl) {
+ UserClass* cl = JCL->constructClass(name, (ArrayUInt8*)bytes);
- res = (jclass)(cl->getClassDelegatee(vm, (JavaObject*)pd));
+ res = (jclass)(cl->getClassDelegatee(vm, (JavaObject*)pd));
+ } else {
+ JavaObject* obj = vm->CreateLinkageError("duplicate class definition");
+ JavaThread::get()->throwException(obj);
+ }
END_NATIVE_EXCEPTION
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=69318&r1=69317&r2=69318&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu Apr 16 17:17:34 2009
@@ -331,6 +331,11 @@
upcalls->InitClassCastException, "");
}
+JavaObject* Jnjvm::CreateLinkageError(const char* msg) {
+ return CreateError(upcalls->LinkageError,
+ upcalls->InitLinkageError, msg);
+}
+
void Jnjvm::illegalAccessException(const char* msg) {
error(upcalls->IllegalAccessException,
upcalls->InitIllegalAccessException, msg);
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=69318&r1=69317&r2=69318&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Thu Apr 16 17:17:34 2009
@@ -251,6 +251,7 @@
JavaObject* CreateIndexOutOfBoundsException(sint32 entry);
JavaObject* CreateNegativeArraySizeException();
JavaObject* CreateClassCastException(JavaObject* obj, UserCommonClass* cl);
+ JavaObject* CreateLinkageError(const char* msg = "");
/// Exceptions - These are the only exceptions VMKit will make.
///
More information about the vmkit-commits
mailing list