[vmkit-commits] [vmkit] r61518 - /vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Dec 31 01:05:55 PST 2008


Author: geoffray
Date: Wed Dec 31 03:05:53 2008
New Revision: 61518

URL: http://llvm.org/viewvc/llvm-project?rev=61518&view=rev
Log:
Do a try catch when loading the class, because it may raise an exception.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=61518&r1=61517&r2=61518&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Wed Dec 31 03:05:53 2008
@@ -880,16 +880,16 @@
 }
 
 void Jnjvm::executeClass(const char* className, ArrayObject* args) {
-  const UTF8* name = appClassLoader->asciizConstructUTF8(className);
-  UserClass* cl = (UserClass*)appClassLoader->loadName(name, true, true);
-  cl->initialiseClass(this);
-  
-  const UTF8* funcSign = 
-    appClassLoader->asciizConstructUTF8("([Ljava/lang/String;)V");
-  const UTF8* funcName = appClassLoader->asciizConstructUTF8("main");
-  JavaMethod* method = cl->lookupMethod(funcName, funcSign, true, true, 0);
-  
   try {
+    const UTF8* name = appClassLoader->asciizConstructUTF8(className);
+    UserClass* cl = (UserClass*)appClassLoader->loadName(name, true, true);
+    cl->initialiseClass(this);
+  
+    const UTF8* funcSign = 
+      appClassLoader->asciizConstructUTF8("([Ljava/lang/String;)V");
+    const UTF8* funcName = appClassLoader->asciizConstructUTF8("main");
+    JavaMethod* method = cl->lookupMethod(funcName, funcSign, true, true, 0);
+  
     method->invokeIntStatic(this, method->classDef, args);
   }catch(...) {
   }
@@ -913,16 +913,20 @@
 
 void Jnjvm::executePremain(const char* className, JavaString* args,
                              JavaObject* instrumenter) {
-  const UTF8* name = appClassLoader->asciizConstructUTF8(className);
-  UserClass* cl = (UserClass*)appClassLoader->loadName(name, true, true);
-  cl->initialiseClass(this);
+  try {
+    const UTF8* name = appClassLoader->asciizConstructUTF8(className);
+    UserClass* cl = (UserClass*)appClassLoader->loadName(name, true, true);
+    cl->initialiseClass(this);
   
-  const UTF8* funcSign = appClassLoader->asciizConstructUTF8(
+    const UTF8* funcSign = appClassLoader->asciizConstructUTF8(
       "(Ljava/lang/String;Ljava/lang/instrument/Instrumentation;)V");
-  const UTF8* funcName = appClassLoader->asciizConstructUTF8("premain");
-  JavaMethod* method = cl->lookupMethod(funcName, funcSign, true, true, 0);
+    const UTF8* funcName = appClassLoader->asciizConstructUTF8("premain");
+    JavaMethod* method = cl->lookupMethod(funcName, funcSign, true, true, 0);
   
-  method->invokeIntStatic(this, method->classDef, args, instrumenter);
+    method->invokeIntStatic(this, method->classDef, args, instrumenter);
+  } catch(...) {
+    JavaThread::get()->clearException();
+  }
 }
 
 void Jnjvm::waitForExit() { 





More information about the vmkit-commits mailing list