[vmkit-commits] [vmkit] r70851 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathConstructor.cpp VMCore/JavaUpcalls.cpp VMCore/JavaUpcalls.h VMCore/Jnjvm.cpp VMCore/Jnjvm.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon May 4 04:44:56 PDT 2009
Author: geoffray
Date: Mon May 4 06:44:49 2009
New Revision: 70851
URL: http://llvm.org/viewvc/llvm-project?rev=70851&view=rev
Log:
Throw an instantiation exception when wanting to instantiate
an abstract class.
Modified:
vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp?rev=70851&r1=70850&r2=70851&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp Mon May 4 06:44:49 2009
@@ -73,11 +73,14 @@
jobject res = 0;
Jnjvm* vm = JavaThread::get()->getJVM();
JavaMethod* meth = cons->getInternalMethod();
+ UserClass* cl = cons->getClass();
JavaArray* args = (JavaArray*)_args;
sint32 nbArgs = args ? args->size : 0;
Signdef* sign = meth->getSignature();
sint32 size = sign->nbArguments;
+ if (isAbstract(cl->access)) vm->instantiationException();
+
// Allocate a buffer to store the arguments.
uintptr_t buf = size ? (uintptr_t)alloca(size * sizeof(uint64)) : 0;
// Record the beginning of the buffer.
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp?rev=70851&r1=70850&r2=70851&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp Mon May 4 06:44:49 2009
@@ -129,6 +129,7 @@
Class* Classpath::NoSuchFieldError;
Class* Classpath::NoSuchMethodError;
Class* Classpath::InstantiationError;
+Class* Classpath::InstantiationException;
Class* Classpath::IllegalAccessError;
Class* Classpath::IllegalAccessException;
Class* Classpath::VerifyError;
@@ -161,6 +162,7 @@
JavaMethod* Classpath::InitNoSuchFieldError;
JavaMethod* Classpath::InitNoSuchMethodError;
JavaMethod* Classpath::InitInstantiationError;
+JavaMethod* Classpath::InitInstantiationException;
JavaMethod* Classpath::InitIllegalAccessError;
JavaMethod* Classpath::InitIllegalAccessException;
JavaMethod* Classpath::InitVerifyError;
@@ -553,6 +555,7 @@
UPCALL_CLASS_EXCEPTION(loader, NoSuchFieldError);
UPCALL_CLASS_EXCEPTION(loader, NoSuchMethodError);
UPCALL_CLASS_EXCEPTION(loader, InstantiationError);
+ UPCALL_CLASS_EXCEPTION(loader, InstantiationException);
UPCALL_CLASS_EXCEPTION(loader, IllegalAccessError);
UPCALL_CLASS_EXCEPTION(loader, IllegalAccessException);
UPCALL_CLASS_EXCEPTION(loader, VerifyError);
@@ -585,6 +588,7 @@
UPCALL_METHOD_EXCEPTION(loader, NoSuchFieldError);
UPCALL_METHOD_EXCEPTION(loader, NoSuchMethodError);
UPCALL_METHOD_EXCEPTION(loader, InstantiationError);
+ UPCALL_METHOD_EXCEPTION(loader, InstantiationException);
UPCALL_METHOD_EXCEPTION(loader, IllegalAccessError);
UPCALL_METHOD_EXCEPTION(loader, IllegalAccessException);
UPCALL_METHOD_EXCEPTION(loader, VerifyError);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h?rev=70851&r1=70850&r2=70851&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h Mon May 4 06:44:49 2009
@@ -161,6 +161,7 @@
ISOLATE_STATIC UserClass* NoSuchFieldError;
ISOLATE_STATIC UserClass* NoSuchMethodError;
ISOLATE_STATIC UserClass* InstantiationError;
+ ISOLATE_STATIC UserClass* InstantiationException;
ISOLATE_STATIC UserClass* IllegalAccessError;
ISOLATE_STATIC UserClass* IllegalAccessException;
ISOLATE_STATIC UserClass* VerifyError;
@@ -193,6 +194,7 @@
ISOLATE_STATIC JavaMethod* InitNoSuchFieldError;
ISOLATE_STATIC JavaMethod* InitNoSuchMethodError;
ISOLATE_STATIC JavaMethod* InitInstantiationError;
+ ISOLATE_STATIC JavaMethod* InitInstantiationException;
ISOLATE_STATIC JavaMethod* InitIllegalAccessError;
ISOLATE_STATIC JavaMethod* InitIllegalAccessException;
ISOLATE_STATIC JavaMethod* InitVerifyError;
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=70851&r1=70850&r2=70851&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Mon May 4 06:44:49 2009
@@ -263,13 +263,15 @@
void Jnjvm::error(UserClass* cl, JavaMethod* init, const char* fmt, ...) {
char* tmp = (char*)alloca(4096);
- va_list ap;
- va_start(ap, fmt);
- vsnprintf(tmp, 4096, fmt, ap);
- va_end(ap);
+ if (fmt) {
+ va_list ap;
+ va_start(ap, fmt);
+ vsnprintf(tmp, 4096, fmt, ap);
+ va_end(ap);
+ }
if (cl && !bootstrapLoader->getCompiler()->isStaticCompiling()) {
- JavaObject* obj = CreateError(cl, init, tmp);
+ JavaObject* obj = CreateError(cl, init, fmt ? fmt : 0);
JavaThread::get()->throwException(obj);
} else {
throw std::string(tmp);
@@ -456,6 +458,11 @@
str->strToAsciiz());
}
+void Jnjvm::instantiationException() {
+ error(upcalls->InstantiationException,
+ upcalls->InitInstantiationException, 0);
+}
+
void Jnjvm::unknownError(const char* fmt, ...) {
error(upcalls->UnknownError,
upcalls->InitUnknownError,
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=70851&r1=70850&r2=70851&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Mon May 4 06:44:49 2009
@@ -276,6 +276,7 @@
void noClassDefFoundError(JavaObject* obj);
void noClassDefFoundError(const UTF8* name);
void classNotFoundException(JavaString* str);
+ void instantiationException();
/// asciizToStr - Constructs a java/lang/String object from the given asciiz.
///
More information about the vmkit-commits
mailing list