[vmkit-commits] [vmkit] r71944 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp JavaClass.h Jnjvm.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sat May 16 06:20:07 PDT 2009


Author: geoffray
Date: Sat May 16 08:20:06 2009
New Revision: 71944

URL: http://llvm.org/viewvc/llvm-project?rev=71944&view=rev
Log:
Give a nice error message to UnsatisfiedLinkError.


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

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Sat May 16 08:20:06 2009
@@ -1210,6 +1210,31 @@
   return false;
 }
 
+
+ArrayUInt16* JavaMethod::toString() const {
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  uint32 size = classDef->name->size + name->size + type->size + 1;
+  ArrayUInt16* res = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(size, vm);
+  uint32 i = 0;
+ 
+  for (sint32 j = 0; j < classDef->name->size; ++j) {
+    if (classDef->name->elements[j] == '/') res->elements[i++] = '.';
+    else res->elements[i++] = classDef->name->elements[j];
+  }
+
+  res->elements[i++] = '.';
+  
+  for (sint32 j = 0; j < name->size; ++j) {
+    res->elements[i++] = name->elements[j];
+  }
+  
+  for (sint32 j = 0; j < type->size; ++j) {
+    res->elements[i++] = type->elements[j];
+  }
+
+  return res;
+}
+
 bool UserClass::needsInitialisationCheck() {
   
   if (!isClassRead()) return true;

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=71944&r1=71943&r2=71944&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Sat May 16 08:20:06 2009
@@ -29,6 +29,7 @@
 
 class ArrayObject;
 class ArrayUInt8;
+class ArrayUInt16;
 class Enveloppe;
 class Class;
 class ClassArray;
@@ -1168,6 +1169,10 @@
   /// printString - Output a string representation of the method.
   ///
   const char* printString() const;
+ 
+  /// toString - Return an array of chars, suitable for creating a string.
+  ///
+  ArrayUInt16* toString() const;
   
   /// jniConsFromMeth - Construct the JNI name of this method as if
   /// there is no other function in the class with the same name.

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Sat May 16 08:20:06 2009
@@ -333,7 +333,7 @@
 JavaObject* Jnjvm::CreateUnsatisfiedLinkError(JavaMethod* meth) {
   return CreateError(upcalls->UnsatisfiedLinkError,
                      upcalls->InitUnsatisfiedLinkError,
-                     (JavaString*)0);
+                     constructString(meth->toString()));
 }
 
 JavaObject* Jnjvm::CreateArithmeticException() {





More information about the vmkit-commits mailing list