[vmkit-commits] [vmkit] r83864 - in /vmkit/trunk: include/mvm/ lib/N3/Mono/ lib/N3/PNetLib/ lib/N3/VMCore/

Gael Thomas gael.thomas at lip6.fr
Mon Oct 12 10:59:53 PDT 2009


Author: gthomas
Date: Mon Oct 12 12:59:53 2009
New Revision: 83864

URL: http://llvm.org/viewvc/llvm-project?rev=83864&view=rev
Log:
Add a "declare_gcroot" to define a gc root variable.
VMThread::vmThread is a gcroot.
Remove useless functions of VMArray(s): acons, initialise, at, setAt.
Create an ArrayChar different from ArrayUInt16 to have a "char[]" printer.
Assign the pretty array printers in vt in makeArrayVT.
Remove useless tracer from CacheNode, Enveloppe, Param, CLIJit.
Modify all tracers to avoid cycle.



Modified:
    vmkit/trunk/include/mvm/Allocator.h
    vmkit/trunk/lib/N3/Mono/Mono.cpp
    vmkit/trunk/lib/N3/Mono/MonoMSCorlib.cpp
    vmkit/trunk/lib/N3/Mono/MonoString.cpp
    vmkit/trunk/lib/N3/Mono/MonoString.h
    vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp
    vmkit/trunk/lib/N3/PNetLib/PNetMSCorlib.cpp
    vmkit/trunk/lib/N3/PNetLib/PNetString.cpp
    vmkit/trunk/lib/N3/PNetLib/PNetString.h
    vmkit/trunk/lib/N3/VMCore/Assembly.cpp
    vmkit/trunk/lib/N3/VMCore/Assembly.h
    vmkit/trunk/lib/N3/VMCore/CLIJit.cpp
    vmkit/trunk/lib/N3/VMCore/CLIJit.h
    vmkit/trunk/lib/N3/VMCore/CLIRuntimeJIT.cpp
    vmkit/trunk/lib/N3/VMCore/CLIString.h
    vmkit/trunk/lib/N3/VMCore/MSCorlib.inc
    vmkit/trunk/lib/N3/VMCore/N3.cpp
    vmkit/trunk/lib/N3/VMCore/N3.h
    vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
    vmkit/trunk/lib/N3/VMCore/Opcodes.cpp
    vmkit/trunk/lib/N3/VMCore/VMArray.cpp
    vmkit/trunk/lib/N3/VMCore/VMArray.h
    vmkit/trunk/lib/N3/VMCore/VMCache.h
    vmkit/trunk/lib/N3/VMCore/VMClass.h
    vmkit/trunk/lib/N3/VMCore/VMObject.cpp
    vmkit/trunk/lib/N3/VMCore/VMThread.cpp
    vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp

Modified: vmkit/trunk/include/mvm/Allocator.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Allocator.h?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/Allocator.h (original)
+++ vmkit/trunk/include/mvm/Allocator.h Mon Oct 12 12:59:53 2009
@@ -27,6 +27,8 @@
 #define llvm_gcroot(a, b)
 #endif
 
+#define declare_gcroot(type, name) type name; llvm_gcroot(name, 0); name
+
 namespace mvm {
 
 class Allocator {

Modified: vmkit/trunk/lib/N3/Mono/Mono.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/Mono/Mono.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/Mono/Mono.cpp (original)
+++ vmkit/trunk/lib/N3/Mono/Mono.cpp Mon Oct 12 12:59:53 2009
@@ -168,7 +168,7 @@
 
 extern "C" void
 System_String_InternalCopyTo(MonoString* str, sint32 sindex, VMArray* dest, sint32 destIndex, sint32 count) {
-  const ArrayUInt16* contents = str->value;
+  const ArrayChar* contents = str->value;
   memcpy(&dest->elements[destIndex], &contents->elements[sindex], count * sizeof(uint16));
 }
 
@@ -244,7 +244,8 @@
 }
 
 extern "C" VMObject* System_Threading_Thread_CurrentThread_internal() {
-  return VMThread::get()->vmThread;
+	declare_gcroot(VMObject*, res) = VMThread::get()->vmThread;
+  return res;
 }
 
 extern "C" VMObject*
@@ -279,9 +280,9 @@
 }
 
 extern "C" void
-System_String__ctor(MonoString* str, ArrayUInt16* array, sint32 startIndex, sint32 count) {
+System_String__ctor(MonoString* str, ArrayChar* array, sint32 startIndex, sint32 count) {
   N3* vm = VMThread::get()->vm;
-  const ArrayUInt16* value = vm->bufToArray(&(array->elements[startIndex]), count);
+  const ArrayChar* value = vm->bufToArray(&(array->elements[startIndex]), count);
   str->length = count;
   str->startChar = array->elements[startIndex];
   str->value = value;
@@ -333,7 +334,7 @@
 	}
   
   N3* vm = (N3*)VMThread::get()->vm;
-  const ArrayUInt16* array = vm->bufToArray(dest, length);
+  const ArrayChar* array = vm->bufToArray(dest, length);
 	return (MonoString*)vm->arrayToString(array);
 }
 

Modified: vmkit/trunk/lib/N3/Mono/MonoMSCorlib.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/Mono/MonoMSCorlib.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/Mono/MonoMSCorlib.cpp (original)
+++ vmkit/trunk/lib/N3/Mono/MonoMSCorlib.cpp Mon Oct 12 12:59:53 2009
@@ -168,7 +168,7 @@
                                         vm->asciizToUTF8("System.Threading"),
                                         true, true, true, true);
   VMObject* th = (*cl)();
-  VMThread* myth = VMThread::get();
+  declare_gcroot(VMThread*, myth) = VMThread::get();
   myth->vmThread = th;
 
 }

Modified: vmkit/trunk/lib/N3/Mono/MonoString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/Mono/MonoString.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/Mono/MonoString.cpp (original)
+++ vmkit/trunk/lib/N3/Mono/MonoString.cpp Mon Oct 12 12:59:53 2009
@@ -25,19 +25,19 @@
 using namespace llvm;
 
 
-CLIString* CLIString::stringDup(const ArrayUInt16*& array, N3* vm) {
+CLIString* CLIString::stringDup(const ArrayChar*& array, N3* vm) {
   MonoString* obj = (MonoString*)(*MSCorlib::pString)();
   obj->length = array->size;
   if (array->size == 0) {
     obj->startChar = 0;
   } else {
-    obj->startChar = array->at(0);
+    obj->startChar = array->elements[0];
   }
   obj->value = array; 
   return obj;
 }
 
-const ArrayUInt16* CLIString::strToArray(N3* vm) const {
+const ArrayChar* CLIString::strToArray(N3* vm) const {
   return ((MonoString *)this)->value;
 }
 

Modified: vmkit/trunk/lib/N3/Mono/MonoString.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/Mono/MonoString.h?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/Mono/MonoString.h (original)
+++ vmkit/trunk/lib/N3/Mono/MonoString.h Mon Oct 12 12:59:53 2009
@@ -25,7 +25,7 @@
   // !!! mono layout !!!
   sint32 length;
   uint8 startChar;
-  const ArrayUInt16* value;
+  const ArrayChar* value;
   llvm::GlobalVariable* _llvmVar;
 
 };

Modified: vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp (original)
+++ vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp Mon Oct 12 12:59:53 2009
@@ -174,9 +174,9 @@
   }
 }
 
-static const ArrayUInt16* newBuilder(N3* vm, PNetString* value, uint32 length) {
+static const ArrayChar* newBuilder(N3* vm, PNetString* value, uint32 length) {
   uint32 valueLength = value ? value->length : 0;
-  const ArrayUInt16* array = value ? value->value : 0;
+  const ArrayChar* array = value ? value->value : 0;
   uint32 roundLength = (7 + length) & 0xfffffff8;
   uint16* buf = (uint16*)alloca(roundLength * sizeof(uint16));
   uint32 strLength = 0;
@@ -207,9 +207,9 @@
 }
 
 extern "C" void System_String_CopyToChecked(PNetString* str, sint32 sstart, 
-                                            ArrayUInt16* dest, sint32 dstart,
+                                            ArrayChar* dest, sint32 dstart,
                                             sint32 count) {
-  const ArrayUInt16* value = str->value;
+  const ArrayChar* value = str->value;
   memcpy(&dest->elements[dstart], &value->elements[sstart], count << 1);
 }
 
@@ -236,7 +236,7 @@
   }
 }
 
-extern "C" sint32 System_Text_DefaultEncoding_InternalGetBytes(ArrayUInt16* chars,
+extern "C" sint32 System_Text_DefaultEncoding_InternalGetBytes(ArrayChar* chars,
             sint32 charIndex, sint32 charCount, ArrayUInt8* bytes, sint32 byteIndex) {
   
   return ILAnsiGetBytes(&chars->elements[charIndex], charCount, &bytes->elements[byteIndex], bytes->size - byteIndex);
@@ -264,14 +264,14 @@
 
 extern "C" void System_String_Copy_3(PNetString* dest, sint32 pos, 
                                      PNetString* src) {
-  ArrayUInt16* arr = (ArrayUInt16*)MSCorlib::arrayChar->doNew(pos + src->value->size);
+  ArrayChar* arr = (ArrayChar*)MSCorlib::arrayChar->doNew(pos + src->value->size);
   
   for (sint32 i = 0; i < pos; ++i) {
-    arr->setAt(i, dest->value->at(i));
+    arr->elements[i] = dest->value->elements[i];
   }
-
+	
   for (sint32 i = 0; i < src->length; ++i) {
-    arr->setAt(pos + i, src->value->at(i));
+    arr->elements[pos + i] = src->value->elements[i];
   }
 
   dest->value = arr;
@@ -281,7 +281,7 @@
 extern "C" void System_String_Copy_5(PNetString* dest, sint32 destPos, 
                                      PNetString* src, sint32 srcPos, 
                                      sint32 length) {
-	const ArrayUInt16 *arraySrc = src->value;
+	const ArrayChar *arraySrc = src->value;
 
 	//	printf("Copy %p %p %d %d %d (%p %d)\n", (void *)dest, (void *)src, destPos, srcPos, length, (void *)dest->value, dest->length);
 
@@ -308,11 +308,11 @@
 }
 
 extern "C" void System_Threading_Monitor_Enter(VMObject* obj) {
-	obj->aquire();
+	//	obj->aquire();
 }
 
 extern "C" void System_Threading_Monitor_Exit(VMObject* obj) {
-	obj->unlock();
+	//	obj->unlock();
 }
 
 
@@ -325,7 +325,7 @@
 }
 
 extern "C" uint16 System_String_GetChar(PNetString* str, sint32 index) {
-  return str->value->at(index);
+  return str->value->elements[index];
 }
 
 extern "C" sint32 System_String_IndexOf(PNetString* str, uint16 value, 
@@ -339,9 +339,9 @@
   }
 
   sint32 i = startIndex;
-  const ArrayUInt16* array = str->value;
+  const ArrayChar* array = str->value;
   while (i < startIndex + count) {
-    if (array->at(i) == value) return i;
+    if (array->elements[i] == value) return i;
     else ++i;
   }
 
@@ -350,7 +350,7 @@
 
 extern "C" sint32 System_String_GetHashCode(PNetString* str) {
   sint32 hash = 0;
-  const ArrayUInt16* array = str->value;
+  const ArrayChar* array = str->value;
   for (sint32 i = 0; i < array->size; ++i) {
     hash += ((hash << 5) + array->elements[i]);
   }
@@ -363,7 +363,7 @@
                                                       uint16 value) {
   N3* vm = (N3*)(VMThread::get()->vm);
   PNetString* buildString = obj->buildString;
-  const ArrayUInt16* array = buildString->value;
+  const ArrayChar* array = buildString->value;
   sint32 strLength = buildString->length;
   sint32 length = (index + 1) > strLength ? index + 1 : strLength + 1;
   uint16* buf = (uint16*)alloca(length * sizeof(uint16));
@@ -390,8 +390,8 @@
                                                       PNetString* str) {
   N3* vm = (N3*)(VMThread::get()->vm);
   PNetString* buildString = obj->buildString;
-  const ArrayUInt16* strArray = str->value;
-  const ArrayUInt16* buildArray = buildString->value;
+  const ArrayChar* strArray = str->value;
+  const ArrayChar* buildArray = buildString->value;
   sint32 strLength = str->length;
   sint32 buildLength = buildString->length;
   sint32 length = strLength + buildLength;
@@ -421,7 +421,7 @@
                                                 uint16 value) {
   N3* vm = (N3*)(VMThread::get()->vm);
   PNetString* buildString = obj->buildString;
-  const ArrayUInt16* array = buildString->value;
+  const ArrayChar* array = buildString->value;
   sint32 length = buildString->length;
   uint16* buf = (uint16*)alloca((length + 1) * sizeof(uint16));
 
@@ -439,8 +439,8 @@
                                                 PNetString* str) {
   N3* vm = (N3*)(VMThread::get()->vm);
   PNetString* buildString = obj->buildString;
-  const ArrayUInt16* buildArray = buildString->value;
-  const ArrayUInt16* strArray = str->value;
+  const ArrayChar* buildArray = buildString->value;
+  const ArrayChar* strArray = str->value;
   sint32 buildLength = buildString->length;
   sint32 strLength = str->length;
   sint32 length = buildLength + strLength;
@@ -519,8 +519,8 @@
 
 extern "C" PNetString* System_String_Concat_2(PNetString* str1, PNetString* str2) {
   N3* vm = (N3*)(VMThread::get()->vm);
-  const ArrayUInt16* a1 = str1->value;
-  const ArrayUInt16* a2 = str2->value;
+  const ArrayChar* a1 = str1->value;
+  const ArrayChar* a2 = str2->value;
   sint32 len1 = str1->length;
   sint32 len2 = str2->length;
   uint16* buf = (uint16*)alloca((len1 + len2) * sizeof(uint16));
@@ -535,9 +535,9 @@
 
 extern "C" PNetString* System_String_Concat_3(PNetString* str1, PNetString* str2, PNetString* str3) {
   N3* vm = (N3*)(VMThread::get()->vm);
-  const ArrayUInt16* a1 = str1->value;
-  const ArrayUInt16* a2 = str2->value;
-  const ArrayUInt16* a3 = str3->value;
+  const ArrayChar* a1 = str1->value;
+  const ArrayChar* a2 = str2->value;
+  const ArrayChar* a3 = str3->value;
   sint32 len1 = str1->length;
   sint32 len2 = str2->length;
   sint32 len3 = str3->length;
@@ -553,7 +553,7 @@
 }
 
 extern "C" void System_String_RemoveSpace(PNetString* str, sint32 index, sint32 length) {
-  const ArrayUInt16* array = str->value;
+  const ArrayChar* array = str->value;
   sint32 strLength = str->length;
   uint16* buf = (uint16*)alloca(strLength * sizeof(uint16));
   sint32 j = index;
@@ -576,13 +576,13 @@
     memcpy(&(buf[j]), &(array->elements[index + length]), (strLength - (index + length)) * sizeof(uint16));
   }
 
-  const ArrayUInt16* res = VMThread::get()->vm->bufToArray(buf, j);
+  const ArrayChar* res = VMThread::get()->vm->bufToArray(buf, j);
   str->value = res;
   str->length = j;
 }
 
 extern "C" void System_String__ctor_3(PNetString* str, uint16 ch, sint32 count) {
-  ArrayUInt16* array = (ArrayUInt16*)MSCorlib::arrayChar->doNew(count);
+  ArrayChar* array = (ArrayChar*)MSCorlib::arrayChar->doNew(count);
   for (sint32 i = 0; i < count; ++i) {
     array->elements[i] = ch;
   }
@@ -607,8 +607,9 @@
 }
 
 extern "C" VMObject* System_Reflection_Assembly_GetType(VMObject* obj, PNetString* str, bool onError, bool ignoreCase) {
+	printf("Get type\n");
   Assembly* ass = ASSEMBLY_VALUE(obj);
-  const ArrayUInt16* array = str->value;
+  const ArrayChar* array = str->value;
 	mvm::PrintBuffer pb(array);
   char* asciiz = pb.cString();
   char* index = (char*)sys_memrchr(asciiz, '.', strlen(asciiz));
@@ -916,7 +917,7 @@
 
 extern "C" VMObject* System_Globalization_TextInfo_ToLower(VMObject* obj, PNetString* str) {
   verifyNull(str);
-  const ArrayUInt16* array = str->value;
+  const ArrayChar* array = str->value;
   uint32 length = str->length;
 
   uint16* buf = (uint16*)alloca(length * sizeof(uint16));
@@ -925,12 +926,12 @@
 
   memcpy(buf, array->elements, length * sizeof(uint16));
   ILUnicodeStringToLower((void*)buf, (void*)array->elements, length);
-  const ArrayUInt16* res = vm->bufToArray(buf, length);
+  const ArrayChar* res = vm->bufToArray(buf, length);
   return ((N3*)vm)->arrayToString(res);
 }
 
 extern "C" VMObject* System_String_Replace(PNetString* str, uint16 c1, uint16 c2) {
-  const ArrayUInt16* array = str->value;
+  const ArrayChar* array = str->value;
   uint32 length = str->length;
   if ((c1 == c2) || length == 0) return str;
 
@@ -941,7 +942,7 @@
   }
   
   N3* vm = (N3*)VMThread::get()->vm;
-  const ArrayUInt16* res = vm->bufToArray(buf, length);
+  const ArrayChar* res = vm->bufToArray(buf, length);
   return vm->arrayToString(res);
 }
 
@@ -991,7 +992,7 @@
 }
 
 extern "C" void System_String_CharFill(PNetString* str, sint32 start, sint32 count, char ch) {
-  const ArrayUInt16* array = str->value;
+  const ArrayChar* array = str->value;
   sint32 length = start + count;
   uint16* buf = (uint16*)alloca(length * sizeof(uint16));
 
@@ -1001,7 +1002,7 @@
   }
   
   N3* vm = VMThread::get()->vm;
-  const ArrayUInt16* val = vm->bufToArray(buf, length);
+  const ArrayChar* val = vm->bufToArray(buf, length);
   str->value = val;
   str->length = length;
 }
@@ -1064,5 +1065,6 @@
 }
 
 extern "C" VMObject* System_Threading_Thread_InternalCurrentThread() {
-  return VMThread::get()->vmThread;
+	declare_gcroot(VMObject*, res) = VMThread::get()->vmThread;
+  return res;
 }

Modified: vmkit/trunk/lib/N3/PNetLib/PNetMSCorlib.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/PNetLib/PNetMSCorlib.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/PNetLib/PNetMSCorlib.cpp (original)
+++ vmkit/trunk/lib/N3/PNetLib/PNetMSCorlib.cpp Mon Oct 12 12:59:53 2009
@@ -179,7 +179,7 @@
   args.push_back(MSCorlib::pIntPtr);
   VMMethod* meth = cl->lookupMethod(vm->asciizToUTF8(".ctor"), args, 
                                     false, false);
-  VMThread* myth = VMThread::get();
+  declare_gcroot(VMThread*, myth) = VMThread::get();
   (*meth)(th, myth);
   myth->vmThread = th;
 }

Modified: vmkit/trunk/lib/N3/PNetLib/PNetString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/PNetLib/PNetString.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/PNetLib/PNetString.cpp (original)
+++ vmkit/trunk/lib/N3/PNetLib/PNetString.cpp Mon Oct 12 12:59:53 2009
@@ -24,20 +24,20 @@
 using namespace llvm;
 
 
-CLIString* CLIString::stringDup(const ArrayUInt16*& array, N3* vm) {
+CLIString* CLIString::stringDup(const ArrayChar*& array, N3* vm) {
   PNetString* obj = (PNetString*)(*MSCorlib::pString)();
   obj->capacity = array->size;
   obj->length = array->size;
   if (array->size == 0) {
     obj->firstChar = 0;
   } else {
-    obj->firstChar = array->at(0);
+    obj->firstChar = array->elements[0];
   }
   obj->value = array; 
   return obj;
 }
 
-const ArrayUInt16* CLIString::strToArray(N3* vm) const {
+const ArrayChar* CLIString::strToArray(N3* vm) const {
   return ((PNetString*)this)->value;
 }
 

Modified: vmkit/trunk/lib/N3/PNetLib/PNetString.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/PNetLib/PNetString.h?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/PNetLib/PNetString.h (original)
+++ vmkit/trunk/lib/N3/PNetLib/PNetString.h Mon Oct 12 12:59:53 2009
@@ -19,7 +19,7 @@
 
 namespace n3 {
 
-class ArrayUInt16;
+class ArrayChar;
 
 class PNetString : public CLIString {
 public:
@@ -28,7 +28,7 @@
   sint32 capacity;
   sint32 length;
   uint8 firstChar;
-  const ArrayUInt16* value;
+  const ArrayChar* value;
   llvm::GlobalVariable* _llvmVar;
 
 };

Modified: vmkit/trunk/lib/N3/VMCore/Assembly.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/Assembly.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Assembly.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/Assembly.cpp Mon Oct 12 12:59:53 2009
@@ -703,12 +703,12 @@
   }
 }
 
-const ArrayUInt16* Assembly::readUTF16(N3* vm, uint32 len, 
+const ArrayChar* Assembly::readUTF16(N3* vm, uint32 len, 
                                 Reader* reader) {
   return readUTF16(vm, len, reader->bytes, reader->cursor);
 }
 
-const ArrayUInt16* Assembly::readUTF16(N3* vm, uint32 len, 
+const ArrayChar* Assembly::readUTF16(N3* vm, uint32 len, 
 																			 ByteCode* bytes, uint32 &offset) {
   uint32 realLen = len >> 1;
   uint16* buf = (uint16*)alloca(len);
@@ -1882,7 +1882,7 @@
   return NULL;
 }
 
-const ArrayUInt16* Assembly::readUserString(uint32 token) {
+const ArrayChar* Assembly::readUserString(uint32 token) {
   uint32 offset = CLIHeader->usStream->realOffset + token;
 
   uint8 size = READ_U1(bytes, offset);

Modified: vmkit/trunk/lib/N3/VMCore/Assembly.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/Assembly.h?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Assembly.h (original)
+++ vmkit/trunk/lib/N3/VMCore/Assembly.h Mon Oct 12 12:59:53 2009
@@ -38,7 +38,7 @@
 using mvm::UTF8;
 using mvm::UTF8Map;
 
-class ArrayUInt16;
+class ArrayChar;
 class ArrayUInt8;
 class ArrayObject;
 class Assembly;
@@ -199,8 +199,8 @@
 
   static const UTF8* readUTF8(N3* vm, uint32 len, Reader* reader);
   static const UTF8* readUTF8(N3* vm, uint32 len, ByteCode* bytes, uint32& offset);
-  static const ArrayUInt16* readUTF16(N3* vm, uint32 len, Reader* reader);
-  static const ArrayUInt16* readUTF16(N3* vm, uint32 len, ByteCode* bytes, uint32& offset);
+  static const ArrayChar* readUTF16(N3* vm, uint32 len, Reader* reader);
+  static const ArrayChar* readUTF16(N3* vm, uint32 len, ByteCode* bytes, uint32& offset);
   const UTF8*        readString(N3* vm, uint32 offset);
   void readTables(Reader* reader);
 
@@ -260,7 +260,7 @@
   uint32 getTypedefTokenFromMethod(uint32 token);
   VMMethod* readMemberRefAsMethod(uint32 token, std::vector<VMCommonClass*>* genArgs, VMGenericClass* genClass, VMGenericMethod* genMethod);
 
-  const ArrayUInt16* readUserString(uint32 token); 
+  const ArrayChar* readUserString(uint32 token); 
   uint32 getExplicitLayout(uint32 token);
   uint32 getRVAFromField(uint32 token);
   

Modified: vmkit/trunk/lib/N3/VMCore/CLIJit.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/CLIJit.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIJit.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIJit.cpp Mon Oct 12 12:59:53 2009
@@ -140,6 +140,7 @@
 }
 #endif
 
+
 VirtualTable* CLIJit::makeArrayVT(VMClassArray* cl) {
   VirtualTable * res = (VirtualTable*)malloc(VT_SIZE);
   memcpy(res, VMObject::VT, VT_SIZE);
@@ -236,6 +237,28 @@
   cl->virtualTracer = func;
 #endif
 
+
+	if     (cl->baseClass == MSCorlib::pChar) {
+		((void**)res)[VT_PRINT_OFFSET] = ((void **)ArrayChar::VT)[VT_PRINT_OFFSET];
+ 	} else if(cl->baseClass == MSCorlib::pSInt8)
+ 		((void**)res)[VT_PRINT_OFFSET] = ((void **)ArraySInt8::VT)[VT_PRINT_OFFSET];
+ 	else if(cl->baseClass == MSCorlib::pUInt8)
+ 		((void**)res)[VT_PRINT_OFFSET] = ((void **)ArrayUInt8::VT)[VT_PRINT_OFFSET];
+ 	else if(cl->baseClass == MSCorlib::pSInt16)
+ 		((void**)res)[VT_PRINT_OFFSET] = ((void **)ArraySInt16::VT)[VT_PRINT_OFFSET];
+ 	else if(cl->baseClass == MSCorlib::pUInt16)
+ 		((void**)res)[VT_PRINT_OFFSET] = ((void **)ArrayUInt16::VT)[VT_PRINT_OFFSET];
+ 	else if(cl->baseClass == MSCorlib::pSInt32)
+ 		((void**)res)[VT_PRINT_OFFSET] = ((void **)ArraySInt32::VT)[VT_PRINT_OFFSET];
+ 	else if(cl->baseClass == MSCorlib::pUInt32)
+ 		((void**)res)[VT_PRINT_OFFSET] = ((void **)ArrayUInt32::VT)[VT_PRINT_OFFSET];
+ 	else if(cl->baseClass == MSCorlib::pSInt64)
+ 		((void**)res)[VT_PRINT_OFFSET] = ((void **)ArrayLong::VT)[VT_PRINT_OFFSET];
+ 	else if(cl->baseClass == MSCorlib::pFloat)
+ 		((void**)res)[VT_PRINT_OFFSET] = ((void **)ArrayFloat::VT)[VT_PRINT_OFFSET];
+ 	else if(cl->baseClass == MSCorlib::pDouble)
+ 		((void**)res)[VT_PRINT_OFFSET] = ((void **)ArrayDouble::VT)[VT_PRINT_OFFSET];
+
   return res;
 }
 
@@ -288,6 +311,7 @@
     cl->staticTracer = func;
   }
 #endif
+
   return res;
 }
 
@@ -1532,6 +1556,8 @@
     PointerType::getUnqual(module->getTypeByName("ArrayUInt8"));
   ArraySInt8::llvmType = 
     PointerType::getUnqual(module->getTypeByName("ArraySInt8"));
+  ArrayChar::llvmType = 
+    PointerType::getUnqual(module->getTypeByName("ArrayUInt16")); // should be ArrayChar... but it does not work? 
   ArrayUInt16::llvmType = 
     PointerType::getUnqual(module->getTypeByName("ArrayUInt16"));
   ArraySInt16::llvmType = 
@@ -1546,13 +1572,11 @@
     PointerType::getUnqual(module->getTypeByName("ArrayFloat"));
   ArrayObject::llvmType = 
     PointerType::getUnqual(module->getTypeByName("ArrayObject"));
-	//  UTF8::llvmType = 
-	//    PointerType::getUnqual(module->getTypeByName("ArrayUInt16"));
   CacheNode::llvmType = 
     PointerType::getUnqual(module->getTypeByName("CacheNode"));
   Enveloppe::llvmType = 
     PointerType::getUnqual(module->getTypeByName("Enveloppe"));
-  
+
 #ifdef WITH_TRACER
   markAndTraceLLVM = module->getFunction("MarkAndTrace");
   markAndTraceLLVMType = markAndTraceLLVM->getFunctionType();

Modified: vmkit/trunk/lib/N3/VMCore/CLIJit.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/CLIJit.h?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIJit.h (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIJit.h Mon Oct 12 12:59:53 2009
@@ -77,7 +77,6 @@
   virtual void print(mvm::PrintBuffer* buf) const {
     buf->write("CLIJit");
   }
-  virtual void TRACER;
   
   static const char* OpcodeNames[0xE1];
   static const char* OpcodeNamesFE[0x23];

Modified: vmkit/trunk/lib/N3/VMCore/CLIRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/CLIRuntimeJIT.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIRuntimeJIT.cpp Mon Oct 12 12:59:53 2009
@@ -54,7 +54,7 @@
   assert(0 && "implement index out of bounds exception");
 }
 
-extern "C" VMObject* newString(const ArrayUInt16* utf8) {
+extern "C" VMObject* newString(const ArrayChar* utf8) {
 	N3 *vm = (N3*)VMThread::get()->vm;
   return vm->arrayToString(utf8);
 }

Modified: vmkit/trunk/lib/N3/VMCore/CLIString.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/CLIString.h?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIString.h (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIString.h Mon Oct 12 12:59:53 2009
@@ -20,7 +20,7 @@
 namespace n3 {
 
 class N3;
-class ArrayUInt16;
+class ArrayChar;
 
 class CLIString : public VMObject {
 public:
@@ -33,8 +33,8 @@
   llvm::GlobalVariable* llvmVar();
 
   
-  static CLIString* stringDup(const ArrayUInt16*& array, N3* vm);
-	const ArrayUInt16 *strToArray(N3 *vm) const;
+  static CLIString* stringDup(const ArrayChar*& array, N3* vm);
+	const ArrayChar *strToArray(N3 *vm) const;
 };
 
 } // end namespace jnjvm

Modified: vmkit/trunk/lib/N3/VMCore/MSCorlib.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/MSCorlib.inc?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/MSCorlib.inc (original)
+++ vmkit/trunk/lib/N3/VMCore/MSCorlib.inc Mon Oct 12 12:59:53 2009
@@ -157,7 +157,7 @@
   } else if (srcType->super != MSCorlib::pValue && srcType->super != MSCorlib::pEnum) {
     sint32 i = sstart;
     while (i < sstart + len && !doThrow) {
-      VMObject* cur = ((ArrayObject*)src)->at(i);
+      VMObject* cur = ((ArrayObject*)src)->elements[i];
       if (cur) {
         if (!(cur->classOf->isAssignableFrom(dstType))) {
           doThrow = true;

Modified: vmkit/trunk/lib/N3/VMCore/N3.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3.cpp Mon Oct 12 12:59:53 2009
@@ -107,7 +107,6 @@
   this->protectModule =     new mvm::LockNormal();
 
   this->functions =         new(allocator, "FunctionMap") FunctionMap();
-  this->hashStr =           new(allocator, "StringMap")   StringMap();
   this->loadedAssemblies =  new(allocator, "AssemblyMap") AssemblyMap();
 
   this->TheModuleProvider = new N3ModuleProvider(this->LLVMModule, this->functions);
@@ -322,7 +321,7 @@
   ClArgumentsInfo& info = vm->argumentsInfo;  
   ArrayObject* args = (ArrayObject*)MSCorlib::arrayString->doNew(info.argc-2);
   for (int i = 2; i < info.argc; ++i) {
-    args->setAt(i - 2, (VMObject*)vm->arrayToString(vm->asciizToArray(info.argv[i])));
+    args->elements[i - 2] = (VMObject*)vm->arrayToString(vm->asciizToArray(info.argv[i]));
   }
   
   try{
@@ -341,21 +340,21 @@
 
 
 
-ArrayUInt16* N3::asciizToArray(const char* asciiz) {
+ArrayChar* N3::asciizToArray(const char* asciiz) {
 	uint32 len = strlen(asciiz);
-	ArrayUInt16 *res = (ArrayUInt16*)MSCorlib::arrayChar->doNew(len);
+	ArrayChar *res = (ArrayChar*)MSCorlib::arrayChar->doNew(len);
 	for(uint32 i=0; i<len; i++)
 		res->elements[i] = asciiz[i];
 	return res;
 }
 
-ArrayUInt16* N3::bufToArray(const uint16* buf, uint32 size) {
-	ArrayUInt16 *res = (ArrayUInt16*)MSCorlib::arrayChar->doNew(size);
+ArrayChar* N3::bufToArray(const uint16* buf, uint32 size) {
+	ArrayChar *res = (ArrayChar*)MSCorlib::arrayChar->doNew(size);
 	memcpy(res->elements, buf, size<<1);
 	return res;
 }
 
-ArrayUInt16* N3::UTF8ToArray(const UTF8 *utf8) {
+ArrayChar* N3::UTF8ToArray(const UTF8 *utf8) {
   return bufToArray(utf8->elements, utf8->size);
 }
 
@@ -367,11 +366,11 @@
   return hashUTF8->lookupOrCreateReader(buf, len);
 }
 
-const UTF8* N3::arrayToUTF8(const ArrayUInt16 *array) {
+const UTF8* N3::arrayToUTF8(const ArrayChar *array) {
   return bufToUTF8(array->elements, array->size);
 }
 
-CLIString *N3::arrayToString(const ArrayUInt16 *array) {
+CLIString *N3::arrayToString(const ArrayChar *array) {
   return (CLIString*)CLIString::stringDup(array, this);
 }
 

Modified: vmkit/trunk/lib/N3/VMCore/N3.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3.h?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3.h (original)
+++ vmkit/trunk/lib/N3/VMCore/N3.h Mon Oct 12 12:59:53 2009
@@ -34,7 +34,6 @@
 using mvm::UTF8;
 using mvm::UTF8Map;
 class ArrayObject;
-class ArrayUInt8;
 class Assembly;
 class AssemblyMap;
 class N3;
@@ -50,7 +49,7 @@
 class VMMethod;
 class VMObject;
 class VMThread;
-class ArrayUInt16;
+class ArrayChar;
 class CLIString;
 
 class ThreadSystem : public mvm::PermanentObject {
@@ -92,7 +91,6 @@
   ThreadSystem*            threadSystem; 
   VMThread*                bootstrapThread;
 
-  StringMap*               hashStr;
   UTF8Map*                 hashUTF8;
 
   mvm::Lock*               protectModule;
@@ -126,13 +124,13 @@
 
 	// usefull string, uint16 and utf8 functions
 
-	ArrayUInt16*     asciizToArray(const char *asciiz);
-	ArrayUInt16*     bufToArray(const uint16 *buf, uint32 len);
-	ArrayUInt16*     UTF8ToArray(const UTF8 *utf8);
+	ArrayChar*       asciizToArray(const char *asciiz);
+	ArrayChar*       bufToArray(const uint16 *buf, uint32 len);
+	ArrayChar*       UTF8ToArray(const UTF8 *utf8);
 	const UTF8*      asciizToUTF8(const char *asciiz);
 	const UTF8*      bufToUTF8(const uint16 *buf, uint32 len);
-	const UTF8*      arrayToUTF8(const ArrayUInt16 *array);
-	CLIString*       arrayToString(const ArrayUInt16 *array);
+	const UTF8*      arrayToUTF8(const ArrayChar *array);
+	CLIString*       arrayToString(const ArrayChar *array);
 
   /*
   void          illegalAccessException(const char* msg);

Modified: vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Mon Oct 12 12:59:53 2009
@@ -149,6 +149,7 @@
 
 const llvm::Type* ArrayUInt8::llvmType = 0;
 const llvm::Type* ArraySInt8::llvmType = 0;
+const llvm::Type* ArrayChar::llvmType = 0;
 const llvm::Type* ArrayUInt16::llvmType = 0;
 const llvm::Type* ArraySInt16::llvmType = 0;
 const llvm::Type* ArrayUInt32::llvmType = 0;
@@ -178,6 +179,7 @@
   INIT(VMArray);
   INIT(ArrayUInt8);
   INIT(ArraySInt8);
+  INIT(ArrayChar);
   INIT(ArrayUInt16);
   INIT(ArraySInt16);
   INIT(ArrayUInt32);

Modified: vmkit/trunk/lib/N3/VMCore/Opcodes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/Opcodes.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Opcodes.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/Opcodes.cpp Mon Oct 12 12:59:53 2009
@@ -1573,7 +1573,7 @@
       case LDSTR : {
         uint32 value = readU4(bytecodes, i);
         uint32 index = value & 0xfffffff;
-        const ArrayUInt16* array = compilingClass->assembly->readUserString(index);
+        const ArrayChar* array = compilingClass->assembly->readUserString(index);
         Value* val = ConstantExpr::getIntToPtr(ConstantInt::get(Type::getInt64Ty(getGlobalContext()), (int64_t)array),
                                                module->ptrType);
         Value* res = CallInst::Create(newStringLLVM, val, "", currentBlock);

Modified: vmkit/trunk/lib/N3/VMCore/VMArray.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMArray.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMArray.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMArray.cpp Mon Oct 12 12:59:53 2009
@@ -20,152 +20,38 @@
 
 const sint32 VMArray::MaxArraySize = 268435455;
 
-#define ACONS(name, elmt, size)                                             \
-  name *name::acons(sint32 n, VMClassArray* atype) {                        \
-    if (n < 0)                                                              \
-      VMThread::get()->vm->negativeArraySizeException(n);                   \
-    else if (n > VMArray::MaxArraySize)                                     \
-      VMThread::get()->vm->outOfMemoryError(n);                             \
-    name* res = (name*)                                                     \
-      gc::operator new(sizeof(VMObject) + sizeof(sint32) + n * size,        \
-                              VMObject::VT);                                \
-    res->initialise(atype, n);                                              \
-    res->setVirtualTable(name::VT);                                         \
-    return res;                                                             \
-  }
-
-#define INITIALISE(name)                                                    \
-  void name::initialise(VMCommonClass* atype, sint32 n) {                   \
-    VMObject::initialise(atype);                                            \
-    this->size = n;                                                         \
-    for (int i = 0; i < n; i++)                                             \
-      elements[i] = 0;                                                      \
-  }                                                                         \
-
-#define AT(name, elmt)                                                      \
-  elmt name::at(sint32 offset) const {                                      \
-    if (offset >= size)                                                     \
-      VMThread::get()->vm->indexOutOfBounds(this, offset);                  \
-    return elements[offset];                                                \
-  }                                                                         \
-  void name::setAt(sint32 offset, elmt value) {                             \
-    if (offset >= size)                                                     \
-      VMThread::get()->vm->indexOutOfBounds(this, offset);                  \
-    elements[offset] = value;                                               \
-  }
-
-#define ARRAYCLASS(name, elmt, size)                                        \
-  ACONS(name, elmt, size)                                                   \
-  INITIALISE(name)                                                          \
-  AT(name, elmt)                                                            \
-
-ARRAYCLASS(ArrayUInt8,  uint8, 1)
-ARRAYCLASS(ArraySInt8,  sint8, 1)
-ARRAYCLASS(ArrayUInt16, uint16, 2)
-ARRAYCLASS(ArraySInt16, sint16, 2)
-ARRAYCLASS(ArrayUInt32, uint32, 4)
-ARRAYCLASS(ArraySInt32, sint32, 4)
-ARRAYCLASS(ArrayLong,   sint64, 8)
-ARRAYCLASS(ArrayFloat,  float, 4)
-ARRAYCLASS(ArrayDouble, double, 8)
-ARRAYCLASS(ArrayObject, VMObject*, 4)
+#define PRINT(name, printer, pre, sep, post)														\
+	void name::print(mvm::PrintBuffer *buf) const	{												\
+		declare_gcroot(const name *, self) = this;													\
+	  buf->write(pre);																										\
+	  for(int i=0; i<self->size; i++) {																		\
+	    if(i)																															\
+				buf->write(sep);																								\
+			buf->printer(self->elements[i]);																	\
+		}																																		\
+		buf->write(post);																										\
+	}
+
+#define ARRAYCLASS(name, elmt, size, printer, pre, sep, post)						\
+	PRINT(name, printer, pre, sep, post)
+
+ARRAYCLASS(ArrayUInt8,  uint8,     1, writeS4,   "Array<", " ", ">")
+ARRAYCLASS(ArraySInt8,  sint8,     1, writeS4,   "Array<", " ", ">")
+ARRAYCLASS(ArrayChar,   uint16,    2, writeChar, "",       "",  "")
+ARRAYCLASS(ArrayUInt16, uint16,    2, writeS4,   "Array<", " ", ">")
+ARRAYCLASS(ArraySInt16, sint16,    2, writeS4,   "Array<", " ", ">")
+ARRAYCLASS(ArrayUInt32, uint32,    4, writeS4,   "Array<", " ", ">")
+ARRAYCLASS(ArraySInt32, sint32,    4, writeS4,   "Array<", " ", ">")
+ARRAYCLASS(ArrayLong,   sint64,    8, writeS8,   "Array<", " ", ">")
+ARRAYCLASS(ArrayFloat,  float,     4, writeFP,   "Array<", " ", ">")
+ARRAYCLASS(ArrayDouble, double,    8, writeFP,   "Array<", " ", ">")
+ARRAYCLASS(ArrayObject, VMObject*, 4, writeObj,  "Array<", " ", ">")
 
 void VMArray::print(mvm::PrintBuffer *buf) const {
   assert(0 && "should not be here");
 }
 
-  
-void ArrayUInt8::print(mvm::PrintBuffer *buf) const {
-  buf->write("Array<");
-  for (int i = 0; i < size; i++) {
-    buf->writeS4(elements[i]);
-    buf->write(" ");
-  }
-  buf->write(">");
-}
-
-void ArraySInt8::print(mvm::PrintBuffer *buf) const {
-  buf->write("Array<");
-  for (int i = 0; i < size; i++) {
-    buf->writeS4(elements[i]);
-    buf->write(" ");
-  }
-  buf->write(">");
-}
-
-void ArrayUInt16::print(mvm::PrintBuffer *buf) const {
-  buf->write("Array<");
-  for (int i = 0; i < size; i++) {
-    buf->writeS4(elements[i]);
-    buf->write(" ");
-  }
-  buf->write(">");
-}
-
-void ArraySInt16::print(mvm::PrintBuffer *buf) const {
-  buf->write("Array<");
-  for (int i = 0; i < size; i++) {
-    buf->writeS4(elements[i]);
-    buf->write(" ");
-  }
-  buf->write(">");
-}
-
-void ArrayUInt32::print(mvm::PrintBuffer *buf) const {
-  buf->write("Array<");
-  for (int i = 0; i < size; i++) {
-    buf->writeS4(elements[i]);
-    buf->write(" ");
-  }
-  buf->write(">");
-}
-
-void ArraySInt32::print(mvm::PrintBuffer *buf) const {
-  buf->write("Array<");
-  for (int i = 0; i < size; i++) {
-    buf->writeS4(elements[i]);
-    buf->write(" ");
-  }
-  buf->write(">");
-}
-
-void ArrayLong::print(mvm::PrintBuffer *buf) const {
-  buf->write("Array<");
-  for (int i = 0; i < size; i++) {
-    buf->writeS8(elements[i]);
-    buf->write(" ");
-  }
-  buf->write(">");
-}
-
-void ArrayFloat::print(mvm::PrintBuffer *buf) const {
-  buf->write("Array<");
-  for (int i = 0; i < size; i++) {
-    buf->writeFP(elements[i]);
-    buf->write(" ");
-  }
-  buf->write(">");
-}
-
-void ArrayDouble::print(mvm::PrintBuffer *buf) const {
-  buf->write("Array<");
-  for (int i = 0; i < size; i++) {
-    buf->writeFP(elements[i]);
-    buf->write(" ");
-  }
-  buf->write(">");
-}
-
-void ArrayObject::print(mvm::PrintBuffer *buf) const {
-  buf->write("Array<");
-  for (int i = 0; i < size; i++) {
-		elements[i]->print(buf);
-    buf->write(" ");
-  }
-  buf->write(">");
-}
-
-
+#undef PRINT
 #undef AT
 #undef INITIALISE
 #undef ACONS

Modified: vmkit/trunk/lib/N3/VMCore/VMArray.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMArray.h?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMArray.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMArray.h Mon Oct 12 12:59:53 2009
@@ -51,16 +51,13 @@
   static const llvm::Type* llvmType;                                  \
   sint32 size;                                                        \
   elmt elements[1];                                                   \
-  static name *acons(sint32 n, VMClassArray* cl);                     \
-  void initialise(VMCommonClass* atype, sint32 n);                    \
-  elmt at(sint32) const;                                              \
-  void setAt(sint32, elmt);                                           \
   virtual void print(mvm::PrintBuffer* buf) const;                    \
   virtual void TRACER;                                     \
 }
 
 ARRAYCLASS(ArrayUInt8,  uint8);
 ARRAYCLASS(ArraySInt8,  sint8);
+ARRAYCLASS(ArrayChar,   uint16);
 ARRAYCLASS(ArrayUInt16, uint16);
 ARRAYCLASS(ArraySInt16, sint16);
 ARRAYCLASS(ArrayUInt32, uint32);
@@ -68,23 +65,10 @@
 ARRAYCLASS(ArrayLong,   sint64);
 ARRAYCLASS(ArrayFloat,  float);
 ARRAYCLASS(ArrayDouble, double);
+ARRAYCLASS(ArrayObject, VMObject*);
 
 #undef ARRAYCLASS
 
-class ArrayObject : public VMObject {
-public:
-  static VirtualTable* VT;
-  static const llvm::Type* llvmType;
-  sint32 size;
-  VMObject* elements[1];
-  static ArrayObject *acons(sint32 n, VMClassArray* cl);
-  void initialise(VMCommonClass* atype, sint32 n);
-  VMObject* at(sint32) const;
-  void setAt(sint32, VMObject*);
-  virtual void print(mvm::PrintBuffer* buf) const;
-  virtual void TRACER;
-};
-
 
 } // end namespace n3
 

Modified: vmkit/trunk/lib/N3/VMCore/VMCache.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMCache.h?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMCache.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMCache.h Mon Oct 12 12:59:53 2009
@@ -27,7 +27,6 @@
 class CacheNode : public mvm::PermanentObject {
 public:
   virtual void print(mvm::PrintBuffer* buf) const;
-  virtual void TRACER;
 
   void* methPtr;
   VMClass* lastCible;
@@ -42,7 +41,6 @@
 
 class Enveloppe : public mvm::PermanentObject {
 public:
-  virtual void TRACER;
   virtual void print(mvm::PrintBuffer* buf) const;
   
   CacheNode *firstCache;

Modified: vmkit/trunk/lib/N3/VMCore/VMClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMClass.h?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMClass.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMClass.h Mon Oct 12 12:59:53 2009
@@ -283,7 +283,6 @@
 class Param : public mvm::PermanentObject {
 public:
   virtual void print(mvm::PrintBuffer* buf) const;
-  virtual void TRACER;
 
   uint32 flags;
   uint32 sequence;

Modified: vmkit/trunk/lib/N3/VMCore/VMObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMObject.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMObject.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMObject.cpp Mon Oct 12 12:59:53 2009
@@ -31,14 +31,17 @@
     if (cur->interruptFlag != 0) {
       cur->lock->unlock();
       continue;
-    } else if (cur->vmThread != 0) {
-      cur->varcond->signal();
-      cur->lock->unlock();
-      threads.erase(i);
-      break;
-    } else { // dead thread
-      threads.erase(i);
-    }
+    } else {
+			declare_gcroot(VMObject *, th) = cur->vmThread;
+			if (th != 0) {
+				cur->varcond->signal();
+				cur->lock->unlock();
+				threads.erase(i);
+				break;
+			} else { // dead thread
+				threads.erase(i);
+			}
+		}
   }
 }
 

Modified: vmkit/trunk/lib/N3/VMCore/VMThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMThread.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMThread.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMThread.cpp Mon Oct 12 12:59:53 2009
@@ -30,7 +30,8 @@
 
 void VMThread::print(mvm::PrintBuffer* buf) const {
   buf->write("Thread:");
-  vmThread->print(buf);
+	declare_gcroot(VMObject *, th) = vmThread;
+  th->print(buf);
 }
 
 extern void AddStandardCompilePasses(llvm::FunctionPassManager*);
@@ -40,6 +41,7 @@
 }
 
 VMThread::VMThread(VMObject* thread, N3* vm) {
+	llvm_gcroot(thread, 0);
   this->perFunctionPasses = 0;
   this->vmThread = thread;
   this->vm = vm;
@@ -55,9 +57,10 @@
 
 VMObject* VMThread::currentThread() {
   VMThread* result = get();
-  if (result != 0)
-    return result->vmThread;
-  else
+  if (result != 0) {
+		declare_gcroot(VMObject *, res) = result->vmThread;
+    return res;
+  } else
     return 0;
 }
 

Modified: vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp?rev=83864&r1=83863&r2=83864&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp Mon Oct 12 12:59:53 2009
@@ -28,6 +28,7 @@
   INIT(VMArray);
   INIT(ArrayUInt8);
   INIT(ArraySInt8);
+  INIT(ArrayChar);
   INIT(ArrayUInt16);
   INIT(ArraySInt16);
   INIT(ArrayUInt32);
@@ -42,22 +43,24 @@
   
 #undef INIT
 
-void CLIJit::TRACER {
-  compilingMethod->CALL_TRACER;
-  compilingClass->CALL_TRACER;
-}
-
-void CacheNode::TRACER {
-  ((mvm::Object*)methPtr)->MARK_AND_TRACE;
-  lastCible->CALL_TRACER;
-  next->CALL_TRACER;
-  enveloppe->CALL_TRACER;
-}
-
-void Enveloppe::TRACER {
-  firstCache->CALL_TRACER;
-  //cacheLock->MARK_AND_TRACE;
-  originalMethod->CALL_TRACER;
+#ifdef MULTIPLE_GC
+extern "C" void CLIObjectTracer(VMObject* obj, Collector* GC) {
+#else
+extern "C" void CLIObjectTracer(VMObject* obj) {
+#endif
+  obj->lockObj->MARK_AND_TRACE;
+}
+
+// N3 Objects
+void LockObj::TRACER {
+}
+
+void VMObject::TRACER {
+  lockObj->MARK_AND_TRACE;
+}
+
+void CLIString::TRACER {
+	VMObject::CALL_TRACER;
 }
 
 void VMArray::TRACER {
@@ -79,6 +82,7 @@
 
 ARRAYTRACER(ArrayUInt8)
 ARRAYTRACER(ArraySInt8)
+ARRAYTRACER(ArrayChar)
 ARRAYTRACER(ArrayUInt16)
 ARRAYTRACER(ArraySInt16)
 ARRAYTRACER(ArrayUInt32)
@@ -89,7 +93,6 @@
 
 #undef ARRAYTRACER
 
-
 #define TRACE_VECTOR(type, name, alloc) { \
   for (std::vector<type, alloc<type> >::iterator i = name.begin(), e = name.end(); \
        i!= e; ++i) {                                                    \
@@ -100,32 +103,35 @@
        i!= e; ++i) {                                                    \
     (*i)->CALL_TRACER; }}
 
-
-// root of tracing
+// internal objects
 void VMThread::TRACER {
-  vmThread->MARK_AND_TRACE;
-  vm->CALL_TRACER;
-  //lock->MARK_AND_TRACE;
-  //varcond->MARK_AND_TRACE;
+	declare_gcroot(VMObject*, th) = vmThread;
+  th->MARK_AND_TRACE;
   pendingException->MARK_AND_TRACE;
+	// I suppose that the vm is already traced by the gc
+	//  vm->CALL_TRACER;
 }
 
+void N3::TRACER {
+	// If I understand, the gc already call trace for all VMThread
+//   if (bootstrapThread) {
+//     bootstrapThread->CALL_TRACER;
+//     for (VMThread* th = (VMThread*)bootstrapThread->next(); 
+//          th != bootstrapThread; th = (VMThread*)th->next())
+//       th->CALL_TRACER;
+//   }
+  loadedAssemblies->CALL_TRACER;
+}
 
-void VMCommonClass::TRACER {
-  super->CALL_TRACER;
-  CALL_TRACER_VECTOR(VMClass*, interfaces, std::allocator);
-  //lockVar->MARK_AND_TRACE;
-  //condVar->MARK_AND_TRACE;
-  CALL_TRACER_VECTOR(VMMethod*, virtualMethods, std::allocator);
-  CALL_TRACER_VECTOR(VMMethod*, staticMethods, std::allocator);
-  CALL_TRACER_VECTOR(VMField*, virtualFields, std::allocator);
-  CALL_TRACER_VECTOR(VMField*, staticFields, std::allocator);
+void Assembly::TRACER {
+  loadedNameClasses->CALL_TRACER;
   delegatee->MARK_AND_TRACE;
-  CALL_TRACER_VECTOR(VMCommonClass*, display, std::allocator);
-  vm->CALL_TRACER;
+}
 
-  assembly->CALL_TRACER;
-  //funcs->MARK_AND_TRACE;
+void VMCommonClass::TRACER {
+  delegatee->MARK_AND_TRACE;
+	CALL_TRACER_VECTOR(VMMethod*, virtualMethods, std::allocator);
+	CALL_TRACER_VECTOR(VMMethod*, staticMethods, std::allocator);
   CALL_TRACER_VECTOR(Property*, properties, gc_allocator);
 }
 
@@ -133,93 +139,32 @@
   VMCommonClass::CALL_TRACER;
   staticInstance->MARK_AND_TRACE;
   virtualInstance->MARK_AND_TRACE;
-  CALL_TRACER_VECTOR(VMClass*, innerClasses, std::allocator);
-  outerClass->CALL_TRACER;
-  CALL_TRACER_VECTOR(VMMethod*, genericMethods, std::allocator);
 }
 
 void VMGenericClass::TRACER {
   VMClass::CALL_TRACER;
-  CALL_TRACER_VECTOR(VMCommonClass*, genericParams, std::allocator);
 }
 
 void VMClassArray::TRACER {
   VMCommonClass::CALL_TRACER;
-  baseClass->CALL_TRACER;
 }
 
 void VMClassPointer::TRACER {
   VMCommonClass::CALL_TRACER;
-  baseClass->CALL_TRACER;
 }
 
 void VMMethod::TRACER {
   delegatee->MARK_AND_TRACE;
-  //signature->MARK_AND_TRACE;
-  classDef->CALL_TRACER;
-  CALL_TRACER_VECTOR(Param*, params, gc_allocator);
-  CALL_TRACER_VECTOR(Enveloppe*, caches, gc_allocator);
 }
 
 void VMGenericMethod::TRACER {
   VMMethod::CALL_TRACER;
-  CALL_TRACER_VECTOR(VMCommonClass*, genericParams, std::allocator);
-}
-
-void VMField::TRACER {
-  signature->CALL_TRACER;
-  classDef->CALL_TRACER;
-}
-
-void LockObj::TRACER {
-}
-
-void VMObject::TRACER {
-  classOf->CALL_TRACER;
-  lockObj->MARK_AND_TRACE;
-}
-
-void Param::TRACER {
-  method->CALL_TRACER;
 }
 
 void Property::TRACER {
-  type->CALL_TRACER;
-  //signature->MARK_AND_TRACE;
   delegatee->MARK_AND_TRACE;
 }
 
-void Assembly::TRACER {
-  loadedNameClasses->CALL_TRACER;
-  loadedTokenClasses->CALL_TRACER;
-  loadedTokenMethods->CALL_TRACER;
-  loadedTokenFields->CALL_TRACER;
-  vm->CALL_TRACER;
-  delegatee->MARK_AND_TRACE;
-  // TODO trace assembly refs...
-}
-
-void N3::TRACER {
-  functions->CALL_TRACER;
-  if (bootstrapThread) {
-    bootstrapThread->CALL_TRACER;
-    for (VMThread* th = (VMThread*)bootstrapThread->next(); 
-         th != bootstrapThread; th = (VMThread*)th->next())
-      th->CALL_TRACER;
-  }
-  hashStr->CALL_TRACER;
-  loadedAssemblies->CALL_TRACER;
-}
-
-void CLIString::TRACER {
-}
-
-#ifdef MULTIPLE_GC
-extern "C" void CLIObjectTracer(VMObject* obj, Collector* GC) {
-#else
-extern "C" void CLIObjectTracer(VMObject* obj) {
-#endif
-  obj->classOf->CALL_TRACER;
-  obj->lockObj->MARK_AND_TRACE;
+// never called but it simplifies the definition of LockedMap
+void VMField::TRACER {
 }
-





More information about the vmkit-commits mailing list