[vmkit-commits] [vmkit] r105940 - in /vmkit/trunk: lib/J3/Classpath/ lib/J3/Compiler/ lib/J3/VMCore/ mmtk/mmtk-j3/

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Jun 14 11:12:40 PDT 2010


Author: geoffray
Date: Mon Jun 14 13:12:40 2010
New Revision: 105940

URL: http://llvm.org/viewvc/llvm-project?rev=105940&view=rev
Log:
Make methods on JavaString static instead of virtual.


Modified:
    vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc
    vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc
    vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc
    vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp
    vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp
    vmkit/trunk/lib/J3/VMCore/JavaObject.h
    vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp
    vmkit/trunk/lib/J3/VMCore/JavaString.cpp
    vmkit/trunk/lib/J3/VMCore/JavaString.h
    vmkit/trunk/lib/J3/VMCore/Jni.cpp
    vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/J3/VMCore/LockedMap.cpp
    vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp
    vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp
    vmkit/trunk/mmtk/mmtk-j3/Strings.cpp

Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc (original)
+++ vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc Mon Jun 14 13:12:40 2010
@@ -139,7 +139,7 @@
   JnjvmClassLoader* JCL = 
     JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader, vm);
   
-  const UTF8* name = str->javaToInternal(JCL->hashUTF8);
+  const UTF8* name = JavaString::javaToInternal(str, JCL->hashUTF8);
   UserCommonClass* cl = JCL->lookupClass(name);
   
   if (!cl) {

Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc (original)
+++ vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc Mon Jun 14 13:12:40 2010
@@ -49,7 +49,7 @@
 
   Jnjvm* vm = JavaThread::get()->getJVM();
 
-  utf8Lib = strLib->value;
+  utf8Lib = JavaString::getValue(strLib);
   uint32 stLib = strLib->offset;
   sint32 lgLib = strLib->count;
   sint32 lgPre = vm->bootstrapLoader->prelib->size;
@@ -118,7 +118,7 @@
   JnjvmClassLoader* loader = 
     JnjvmClassLoader::getJnjvmLoaderFromJavaObject(javaLoader, vm);
 
-  char* buf = str->strToAsciiz();
+  char* buf = JavaString::strToAsciiz(str);
   
   res = loader->loadLib(buf);
  

Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc (original)
+++ vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc Mon Jun 14 13:12:40 2010
@@ -47,9 +47,7 @@
   assert(vmThread && "Didn't fix the vmThread of a j3 thread");
   vmThread->setVmdata(thread);
   
-  UserClass* vmthClass = (UserClass*)JavaObject::getClass(vmThread);
-  ThreadSystem& ts = vm->threadSystem;
-  
+  UserClass* vmthClass = (UserClass*)JavaObject::getClass(vmThread); 
   
   javaThread = thread->javaThread;
   assert(javaThread && "Didn't fix the javaThread of a j3 thread");

Modified: vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp Mon Jun 14 13:12:40 2010
@@ -383,7 +383,7 @@
   BEGIN_NATIVE_EXCEPTION(0)
   
   Jnjvm* vm = JavaThread::get()->getJVM();
-  array = obj->strToArray(vm);
+  array = JavaString::strToArray(obj, vm);
   res = vm->constructString(array);
   
   END_NATIVE_EXCEPTION
@@ -534,7 +534,7 @@
   
   BEGIN_NATIVE_EXCEPTION(0)
 
-  char* buf = str->strToAsciiz();
+  char* buf = JavaString::strToAsciiz(str);
   char* res = getenv(buf);
   delete[] buf;
   if (res) {

Modified: vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp Mon Jun 14 13:12:40 2010
@@ -730,8 +730,9 @@
 
   Elmts.push_back(CreateConstantForBaseObject(cl));
 
-  Constant* Array = CreateConstantFromIntArray<ArrayUInt16>(str->value,
-                                        Type::getInt16Ty(getLLVMContext()));
+  Constant* Array =
+    CreateConstantFromIntArray<ArrayUInt16>(JavaString::getValue(str),
+                                            Type::getInt16Ty(getLLVMContext()));
   
 
   Module& Mod = *getLLVMModule();

Modified: vmkit/trunk/lib/J3/VMCore/JavaObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaObject.h?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaObject.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaObject.h Mon Jun 14 13:12:40 2010
@@ -241,6 +241,7 @@
   /// getClass - Returns the class of this object.
   ///
   static UserCommonClass* getClass(const JavaObject* self) {
+    llvm_gcroot(self, 0);
     return ((JavaVirtualTable*)self->getVirtualTable())->cl;
   }
 
@@ -301,7 +302,7 @@
   #define verifyNull(obj) {}
 #else
   #define verifyNull(obj) \
-    if (obj == 0) JavaThread::get()->getJVM()->nullPointerException();
+    if (obj == NULL) JavaThread::get()->getJVM()->nullPointerException();
 #endif
   
   /// lockObj - Get the LockObj if the lock is a fat lock.

Modified: vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp Mon Jun 14 13:12:40 2010
@@ -341,8 +341,6 @@
   
   // Update the number of references.
   th->currentAddedReferences = *oldLRN;
-
-
 }
 
 extern "C" void* j3StartJNI(uint32* localReferencesNumber,

Modified: vmkit/trunk/lib/J3/VMCore/JavaString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaString.cpp?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaString.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaString.cpp Mon Jun 14 13:12:40 2010
@@ -22,11 +22,10 @@
 JavaString* JavaString::stringDup(const ArrayUInt16*& _array, Jnjvm* vm) {
   
   JavaString* res = 0;
-  const ArrayUInt16* array = 0;
+  const ArrayUInt16* array = _array;
   llvm_gcroot(array, 0);
   llvm_gcroot(res, 0);
 
-  array = _array;
   UserClass* cl = vm->upcalls->newString;
   res = (JavaString*)cl->doNew(vm);
   
@@ -37,38 +36,38 @@
 
   // No need to call the Java function: both the Java function and
   // this function do the same thing.
-  res->value = array;
+  setValue(res, array);
   res->count = ArrayUInt16::getSize(array);
   res->offset = 0;
   res->cachedHashCode = 0;
   return res;
 }
 
-char* JavaString::strToAsciiz() {
-  char* buf = new char[count + 1]; 
-  for (sint32 i = 0; i < count; ++i) {
-    buf[i] = ArrayUInt16::getElement(value, i + offset);
+char* JavaString::strToAsciiz(JavaString* self) {
+  llvm_gcroot(self, 0);
+  char* buf = new char[self->count + 1]; 
+  for (sint32 i = 0; i < self->count; ++i) {
+    buf[i] = ArrayUInt16::getElement(getValue(self), i + self->offset);
   }
-  buf[count] =  0; 
+  buf[self->count] =  0; 
   return buf;
 }
 
-const ArrayUInt16* JavaString::strToArray(Jnjvm* vm) {
-  JavaString* self = this;
+const ArrayUInt16* JavaString::strToArray(JavaString* self, Jnjvm* vm) {
   ArrayUInt16* array = 0;
   llvm_gcroot(self, 0);
   llvm_gcroot(array, 0);
 
-  assert(self->value && "String without an array?");
-  if (self->offset || (self->count != ArrayUInt16::getSize(self->value))) {
+  assert(getValue(self) && "String without an array?");
+  if (self->offset || (self->count != ArrayUInt16::getSize(getValue(self)))) {
     array = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(self->count, vm);
-    for (sint32 i = 0; i < count; i++) {
+    for (sint32 i = 0; i < self->count; i++) {
       ArrayUInt16::setElement(
-          array, ArrayUInt16::getElement(value, i + self->offset), i);
+          array, ArrayUInt16::getElement(getValue(self), i + self->offset), i);
     }
     return array;
   } else {
-    return self->value;
+    return getValue(self);
   }
 }
 
@@ -77,7 +76,7 @@
   
   Jnjvm* vm = JavaThread::get()->getJVM();
   assert(vm && "No vm when destroying a string");
-  if (str->value) vm->hashStr.removeUnlocked(str->value, str);
+  if (getValue(str) != NULL) vm->hashStr.removeUnlocked(getValue(str), str);
 }
 
 JavaString* JavaString::internalToJava(const UTF8* name, Jnjvm* vm) {
@@ -99,14 +98,13 @@
   return vm->constructString(array);
 }
 
-const UTF8* JavaString::javaToInternal(UTF8Map* map) const {
-  const JavaString* self = this;
+const UTF8* JavaString::javaToInternal(const JavaString* self, UTF8Map* map) {
   llvm_gcroot(self, 0);
   
   uint16* java = new uint16[self->count];
 
-  for (sint32 i = 0; i < count; ++i) {
-    uint16 cur = ArrayUInt16::getElement(self->value, offset + i);
+  for (sint32 i = 0; i < self->count; ++i) {
+    uint16 cur = ArrayUInt16::getElement(getValue(self), self->offset + i);
     if (cur == '.') java[i] = '/';
     else java[i] = cur;
   }

Modified: vmkit/trunk/lib/J3/VMCore/JavaString.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaString.h?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaString.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaString.h Mon Jun 14 13:12:40 2010
@@ -21,13 +21,23 @@
 class Jnjvm;
 
 class JavaString : public JavaObject {
-public:
-
+private:
   // CLASSPATH FIELDS!!
   const ArrayUInt16* value;
+public:
   sint32 count;
   sint32 cachedHashCode;
   sint32 offset;
+
+  static void setValue(JavaString* self, const ArrayUInt16* array) {
+    llvm_gcroot(self, 0);
+    llvm_gcroot(array, 0);
+    self->value = array;
+  }
+  static const ArrayUInt16* getValue(const JavaString* self) {
+    llvm_gcroot(self, 0);
+    return self->value;
+  }
   
   static JavaString* stringDup(const ArrayUInt16*& array, Jnjvm* vm);
 
@@ -39,11 +49,11 @@
   static JavaString* internalToJava(const UTF8* utf8, Jnjvm* vm);
 
   static void stringDestructor(JavaString*);
-  char* strToAsciiz();
-  const ArrayUInt16* strToArray(Jnjvm* vm);
+  static char* strToAsciiz(JavaString* self);
+  static const ArrayUInt16* strToArray(JavaString* self, Jnjvm* vm);
 
-    /// javaToInternal - Replaces all '/' into '.'.
-  const UTF8* javaToInternal(UTF8Map* map) const;
+  /// javaToInternal - Replaces all '/' into '.'.
+  static const UTF8* javaToInternal(const JavaString* self, UTF8Map* map);
 
   static JavaVirtualTable* internStringVT;
 };

Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Mon Jun 14 13:12:40 2010
@@ -2515,7 +2515,7 @@
   llvm_gcroot(string, 0);
 
   if (isCopy != 0) (*isCopy) = true;
-  const char* res = string->strToAsciiz();
+  const char* res = JavaString::strToAsciiz(string);
   RETURN_FROM_JNI(res);
 
   END_JNI_EXCEPTION

Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Mon Jun 14 13:12:40 2010
@@ -605,10 +605,10 @@
   ArrayUInt16::setElement(msg, ' ', i); i++;
 
   for (sint32 j = name->offset; j < name->offset + name->count; ++j) {
-    if (ArrayUInt16::getElement(name->value, j) == '/') {
+    if (ArrayUInt16::getElement(JavaString::getValue(name), j) == '/') {
       ArrayUInt16::setElement(msg, '.', i); i++;
     } else {
-      ArrayUInt16::setElement(msg, ArrayUInt16::getElement(name->value, j), i);
+      ArrayUInt16::setElement(msg, ArrayUInt16::getElement(JavaString::getValue(name), j), i);
     }
   }
 

Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Mon Jun 14 13:12:40 2010
@@ -572,16 +572,16 @@
   UTF8* name = (UTF8*)malloc(sizeof(UTF8) + str->count * sizeof(uint16));
  
   name->size = str->count;
-  if (ArrayUInt16::getElement(str->value, str->offset) != I_TAB) {
+  if (ArrayUInt16::getElement(JavaString::getValue(str), str->offset) != I_TAB) {
     for (sint32 i = 0; i < str->count; ++i) {
-      uint16 cur = ArrayUInt16::getElement(str->value, str->offset + i);
+      uint16 cur = ArrayUInt16::getElement(JavaString::getValue(str), str->offset + i);
       if (cur == '.') name->elements[i] = '/';
       else if (cur == '/') return 0;
       else name->elements[i] = cur;
     }
   } else {
     for (sint32 i = 0; i < str->count; ++i) {
-      uint16 cur = ArrayUInt16::getElement(str->value, str->offset + i);
+      uint16 cur = ArrayUInt16::getElement(JavaString::getValue(str), str->offset + i);
       if (cur == '.') name->elements[i] = '/';
       else if (cur == '/') return 0;
       else name->elements[i] = cur;
@@ -600,7 +600,7 @@
   UTF8* name = (UTF8*)malloc(sizeof(UTF8) + str->count * sizeof(uint16));
   name->size = str->count;
   for (sint32 i = 0; i < str->count; ++i) {
-    uint16 cur = ArrayUInt16::getElement(str->value, str->offset + i);
+    uint16 cur = ArrayUInt16::getElement(JavaString::getValue(str), str->offset + i);
     if (cur == '.') name->elements[i] = '/';
     else name->elements[i] = cur;
   }

Modified: vmkit/trunk/lib/J3/VMCore/LockedMap.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/LockedMap.cpp?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/LockedMap.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/LockedMap.cpp Mon Jun 14 13:12:40 2010
@@ -22,5 +22,5 @@
 
 void StringMap::insert(JavaString* str) {
   llvm_gcroot(str, 0);
-  map.insert(std::make_pair(str->value, str));
+  map.insert(std::make_pair(JavaString::getValue(str), str));
 }

Modified: vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Mon Jun 14 13:12:40 2010
@@ -281,6 +281,8 @@
        i!= e; ++i) {
     JavaString** str = &(i->second);
     mvm::Collector::markAndTraceRoot(str, closure);
+    ArrayUInt16** key = const_cast<ArrayUInt16**>(&(i->first));
+    mvm::Collector::markAndTraceRoot(key, closure);
   }
  
   for (uint32 i = 0; i < LockSystem::GlobalSize; i++) {

Modified: vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp Mon Jun 14 13:12:40 2010
@@ -14,9 +14,11 @@
 using namespace j3;
 
 extern "C" uint16_t MMTkCharAt(JavaString* str, uint32_t index) {
-  return ArrayUInt16::getElement(str->value, index);
+  llvm_gcroot(str, 0);
+  return ArrayUInt16::getElement(JavaString::getValue(str), index);
 }
 
 extern "C" JavaObject* MMTkGetClass(JavaObject* obj) {
+  llvm_gcroot(obj, 0);
   return JavaObject::getClass(obj)->delegatee[0];
 }

Modified: vmkit/trunk/mmtk/mmtk-j3/Strings.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Strings.cpp?rev=105940&r1=105939&r2=105940&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Strings.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Strings.cpp Mon Jun 14 13:12:40 2010
@@ -17,6 +17,8 @@
 extern "C" void Java_org_j3_mmtk_Strings_write___3CI(JavaObject* str,
                                                      ArrayUInt16* msg,
                                                      sint32 len) {
+  llvm_gcroot(str, 0);
+  llvm_gcroot(msg, 0);
   for (sint32 i = 0; i < len; ++i) {
     fprintf(stderr, "%c", ArrayUInt16::getElement(msg, i));
   }
@@ -25,6 +27,8 @@
 extern "C" void Java_org_j3_mmtk_Strings_writeThreadId___3CI(JavaObject*str,
                                                              ArrayUInt16* msg,
                                                              sint32 len) {
+  llvm_gcroot(str, 0);
+  llvm_gcroot(msg, 0);
   
   fprintf(stderr, "[%p] ", (void*)JavaThread::get());
   
@@ -38,13 +42,16 @@
 Java_org_j3_mmtk_Strings_copyStringToChars__Ljava_lang_String_2_3CII(
     JavaObject* obj, JavaString* str, ArrayUInt16* dst, uint32 dstBegin,
     uint32 dstEnd) {
+  llvm_gcroot(str, 0);
+  llvm_gcroot(obj, 0);
+  llvm_gcroot(dst, 0);
 
   sint32 len = str->count;
   sint32 n = (dstBegin + len <= dstEnd) ? len : (dstEnd - dstBegin);
 
   for (sint32 i = 0; i < n; i++) {
     ArrayUInt16::setElement(dst,
-        ArrayUInt16::getElement(str->value, str->offset + i), dstBegin + i);
+        ArrayUInt16::getElement(JavaString::getValue(str), str->offset + i), dstBegin + i);
   }
   
   return n;





More information about the vmkit-commits mailing list