[vmkit-commits] [vmkit] r83320 - in /vmkit/trunk/lib/N3: PNetLib/PNetLib.cpp PNetLib/PNetString.cpp PNetLib/PNetString.h VMCore/CLIString.h VMCore/N3.cpp VMCore/N3.h VMCore/N3Initialise.cpp VMCore/Reader.cpp

Gael Thomas gael.thomas at lip6.fr
Mon Oct 5 12:43:45 PDT 2009


Author: gthomas
Date: Mon Oct  5 14:43:44 2009
New Revision: 83320

URL: http://llvm.org/viewvc/llvm-project?rev=83320&view=rev
Log:
PNetString are now using ArrayUInt16. An utf8 is still an object.


Modified:
    vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp
    vmkit/trunk/lib/N3/PNetLib/PNetString.cpp
    vmkit/trunk/lib/N3/PNetLib/PNetString.h
    vmkit/trunk/lib/N3/VMCore/CLIString.h
    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/Reader.cpp

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

==============================================================================
--- vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp (original)
+++ vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp Mon Oct  5 14:43:44 2009
@@ -176,17 +176,17 @@
 
 static const ArrayUInt16* newBuilder(N3* vm, PNetString* value, uint32 length) {
   uint32 valueLength = value ? value->length : 0;
-  const UTF8* utf8 = value ? value->value : 0;
+  const ArrayUInt16* array = value ? value->value : 0;
   uint32 roundLength = (7 + length) & 0xfffffff8;
   uint16* buf = (uint16*)alloca(roundLength * sizeof(uint16));
   uint32 strLength = 0;
 
   if (value != 0) {
     if (valueLength <= roundLength) {
-      memcpy(buf, utf8->elements, valueLength * sizeof(uint16));
+      memcpy(buf, array->elements, valueLength * sizeof(uint16));
       strLength = valueLength;
     } else {
-      memcpy(buf, utf8->elements, roundLength * sizeof(uint16));
+      memcpy(buf, array->elements, roundLength * sizeof(uint16));
       strLength = roundLength;
     }
   }
@@ -209,7 +209,7 @@
 extern "C" void System_String_CopyToChecked(PNetString* str, sint32 sstart, 
                                             ArrayUInt16* dest, sint32 dstart,
                                             sint32 count) {
-  const UTF8* value = str->value;
+  const ArrayUInt16* value = str->value;
   memcpy(&dest->elements[dstart], &value->elements[sstart], count << 1);
 }
 
@@ -264,8 +264,7 @@
 
 extern "C" void System_String_Copy_3(PNetString* dest, sint32 pos, 
                                      PNetString* src) {
-  ArrayUInt16* arr = ArrayUInt16::acons(pos + src->value->size, 
-                                        (VMClassArray*)MSCorlib::pChar);
+  ArrayUInt16* arr = (ArrayUInt16*)MSCorlib::arrayChar->doNew(pos + src->value->size);
   
   for (sint32 i = 0; i < pos; ++i) {
     arr->setAt(i, dest->value->at(i));
@@ -275,34 +274,52 @@
     arr->setAt(pos + i, src->value->at(i));
   }
 
-  dest->value = ((UTF8*)arr)->extract(VMThread::get()->vm, 0, pos + src->value->size);
+  dest->value = arr;
   dest->length = dest->value->size;
 }
 
 extern "C" void System_String_Copy_5(PNetString* dest, sint32 destPos, 
                                      PNetString* src, sint32 srcPos, 
                                      sint32 length) {
-  const UTF8* utf8Src = src->value->extract(VMThread::get()->vm, srcPos, 
-                                            srcPos + length);
-  if (destPos == 0) {
-    dest->value = utf8Src;
-    dest->length = dest->value->size;
-  } else {
-    const UTF8* utf8Dest = dest->value->extract(VMThread::get()->vm, 0, 
-                                                destPos);
-    sint32 len1 = utf8Dest->size;
-    sint32 len2 = utf8Src->size;
-    uint16* buf = (uint16*)alloca((len1 + len2) * sizeof(uint16));
-
-    memcpy(buf, utf8Dest->elements, len1 * sizeof(uint16));
-    memcpy(buf + len1, utf8Dest->elements, len2 * sizeof(uint16));
-
-    const UTF8* utf8 = VMThread::get()->vm->bufToUTF8(buf, 
-                                                                len1 + len2);
-    dest->value = utf8;
-    dest->length = dest->value->size;
-  }
+	const ArrayUInt16 *arraySrc = src->value;
+
+	if(destPos == 0 && srcPos == 0 && length == src->length) {
+		dest->value = arraySrc;
+		dest->length = length;
+	} else {
+		sint32 newLength = destPos + length;
+
+		if(newLength <= dest->length) {
+			memcpy((uint16*)dest->value->elements + destPos, (uint16*)src->value->elements + srcPos, length<<1);
+		} else {
+			uint16 *buf = (uint16*)alloca(newLength<<1);
+			memcpy(buf,           (uint16*)dest->value->elements, destPos<<1);
+			memcpy(buf + destPos, (uint16*)src->value->elements + srcPos, length<<1);
+			dest->length = newLength;
+			dest->value  = VMThread::get()->vm->bufToArray(buf, newLength);
+		}
+	}
 }
+//   const UTF8* utf8Src = src->value->extract(VMThread::get()->vm, srcPos, 
+//                                             srcPos + length);
+//   if (destPos == 0) {
+//     dest->value = utf8Src;
+//     dest->length = dest->value->size;
+//   } else {
+//     const UTF8* utf8Dest = dest->value->extract(VMThread::get()->vm, 0, 
+//                                                 destPos);
+//     sint32 len1 = utf8Dest->size;
+//     sint32 len2 = utf8Src->size;
+//     uint16* buf = (uint16*)alloca((len1 + len2) * sizeof(uint16));
+
+//     memcpy(buf, utf8Dest->elements, len1 * sizeof(uint16));
+//     memcpy(buf + len1, utf8Dest->elements, len2 * sizeof(uint16));
+
+//     const UTF8* utf8 = VMThread::get()->vm->bufToUTF8(buf, 
+//                                                                 len1 + len2);
+//     dest->value = utf8;
+//     dest->length = dest->value->size;
+//   }
 
 extern "C" void System_Threading_Monitor_Enter(VMObject* obj) {
   obj->aquire();
@@ -336,9 +353,9 @@
   }
 
   sint32 i = startIndex;
-  const UTF8* utf8 = str->value;
+  const ArrayUInt16* array = str->value;
   while (i < startIndex + count) {
-    if (utf8->at(i) == value) return i;
+    if (array->at(i) == value) return i;
     else ++i;
   }
 
@@ -347,9 +364,9 @@
 
 extern "C" sint32 System_String_GetHashCode(PNetString* str) {
   sint32 hash = 0;
-  const UTF8* utf8 = str->value;
-  for (sint32 i = 0; i < utf8->size; ++i) {
-    hash += ((hash << 5) + utf8->elements[i]);
+  const ArrayUInt16* array = str->value;
+  for (sint32 i = 0; i < array->size; ++i) {
+    hash += ((hash << 5) + array->elements[i]);
   }
   return hash;
 }
@@ -360,17 +377,17 @@
                                                       uint16 value) {
   N3* vm = (N3*)(VMThread::get()->vm);
   PNetString* buildString = obj->buildString;
-  const UTF8* utf8 = buildString->value;
+  const ArrayUInt16* array = buildString->value;
   sint32 strLength = buildString->length;
   sint32 length = (index + 1) > strLength ? index + 1 : strLength + 1;
   uint16* buf = (uint16*)alloca(length * sizeof(uint16));
 
   if (index != 0) {
-    memcpy(buf, utf8->elements, index * sizeof(uint16));
+    memcpy(buf, array->elements, index * sizeof(uint16));
   }
 
   if (strLength > index) {
-    memcpy(&(buf[index + 1]), &(utf8->elements[index]), 
+    memcpy(&(buf[index + 1]), &(array->elements[index]), 
                (strLength - index) * sizeof(uint16));
   }
 
@@ -387,23 +404,23 @@
                                                       PNetString* str) {
   N3* vm = (N3*)(VMThread::get()->vm);
   PNetString* buildString = obj->buildString;
-  const UTF8* strUtf8 = str->value;
-  const UTF8* buildUtf8 = buildString->value;
+  const ArrayUInt16* strArray = str->value;
+  const ArrayUInt16* buildArray = buildString->value;
   sint32 strLength = str->length;
   sint32 buildLength = buildString->length;
   sint32 length = strLength + buildLength;
   uint16* buf = (uint16*)alloca(length * sizeof(uint16));
 
   if (index != 0) {
-    memcpy(buf, buildUtf8->elements, index * sizeof(uint16));
+    memcpy(buf, buildArray->elements, index * sizeof(uint16));
   }
 
   if (strLength != 0) {
-    memcpy(&(buf[index]), strUtf8->elements, strLength * sizeof(uint16));
+    memcpy(&(buf[index]), strArray->elements, strLength * sizeof(uint16));
   }
     
   if (buildLength - index > 0) {
-    memcpy(&(buf[strLength + index]), &(buildUtf8->elements[index]), 
+    memcpy(&(buf[strLength + index]), &(buildArray->elements[index]), 
                (buildLength - index) * sizeof(uint16));
   }
 
@@ -418,11 +435,11 @@
                                                 uint16 value) {
   N3* vm = (N3*)(VMThread::get()->vm);
   PNetString* buildString = obj->buildString;
-  const UTF8* utf8 = buildString->value;
+  const ArrayUInt16* array = buildString->value;
   sint32 length = buildString->length;
   uint16* buf = (uint16*)alloca((length + 1) * sizeof(uint16));
 
-  memcpy(buf, utf8->elements, length * sizeof(uint16));
+  memcpy(buf, array->elements, length * sizeof(uint16));
 
   buf[length] = value;
   PNetString* val = (PNetString*)vm->arrayToString(vm->bufToArray(buf, length + 1));
@@ -436,15 +453,15 @@
                                                 PNetString* str) {
   N3* vm = (N3*)(VMThread::get()->vm);
   PNetString* buildString = obj->buildString;
-  const UTF8* buildUtf8 = buildString->value;
-  const UTF8* strUtf8 = str->value;
+  const ArrayUInt16* buildArray = buildString->value;
+  const ArrayUInt16* strArray = str->value;
   sint32 buildLength = buildString->length;
   sint32 strLength = str->length;
   sint32 length = buildLength + strLength;
   uint16* buf = (uint16*)alloca(length * sizeof(uint16));
 
-  memcpy(buf, buildUtf8->elements, buildLength * sizeof(uint16));
-  memcpy(&(buf[buildLength]), strUtf8->elements, strLength * sizeof(uint16));
+  memcpy(buf, buildArray->elements, buildLength * sizeof(uint16));
+  memcpy(&(buf[buildLength]), strArray->elements, strLength * sizeof(uint16));
 
   PNetString* val = (PNetString*)vm->arrayToString(vm->bufToArray(buf, length));
   obj->buildString = val;
@@ -505,7 +522,7 @@
 
 extern "C" VMObject* System_Reflection_Assembly_LoadFromName(PNetString* str, sint32 & error, VMObject* parent) {
   N3* vm = (N3*)(VMThread::get()->vm);
-  Assembly* ass = vm->loadAssembly(str->value, "dll");
+  Assembly* ass = vm->loadAssembly(vm->arrayToUTF8(str->value), "dll");
   if (!ass) vm->error("unfound assembly %s\n", str->value->printString());
   error = 0;
   return ass->getAssemblyDelegatee();
@@ -513,14 +530,14 @@
 
 extern "C" PNetString* System_String_Concat_2(PNetString* str1, PNetString* str2) {
   N3* vm = (N3*)(VMThread::get()->vm);
-  const UTF8* u1 = str1->value;
-  const UTF8* u2 = str2->value;
+  const ArrayUInt16* a1 = str1->value;
+  const ArrayUInt16* a2 = str2->value;
   sint32 len1 = str1->length;
   sint32 len2 = str2->length;
   uint16* buf = (uint16*)alloca((len1 + len2) * sizeof(uint16));
 
-  memcpy(buf, u1->elements, len1 * sizeof(uint16));
-  memcpy(&(buf[len1]), u2->elements, len2 * sizeof(uint16));
+  memcpy(buf, a1->elements, len1 * sizeof(uint16));
+  memcpy(&(buf[len1]), a2->elements, len2 * sizeof(uint16));
   
   PNetString* val = (PNetString*)vm->arrayToString(vm->bufToArray(buf, len1 + len2));
   
@@ -529,17 +546,17 @@
 
 extern "C" PNetString* System_String_Concat_3(PNetString* str1, PNetString* str2, PNetString* str3) {
   N3* vm = (N3*)(VMThread::get()->vm);
-  const UTF8* u1 = str1->value;
-  const UTF8* u2 = str2->value;
-  const UTF8* u3 = str3->value;
+  const ArrayUInt16* a1 = str1->value;
+  const ArrayUInt16* a2 = str2->value;
+  const ArrayUInt16* a3 = str3->value;
   sint32 len1 = str1->length;
   sint32 len2 = str2->length;
   sint32 len3 = str3->length;
   uint16* buf = (uint16*)alloca((len1 + len2 + len3) * sizeof(uint16));
 
-  memcpy(buf, u1->elements, len1 * sizeof(uint16));
-  memcpy(&(buf[len1]), u2->elements, len2 * sizeof(uint16));
-  memcpy(&(buf[len1 + len2]), u3->elements, len3 * sizeof(uint16));
+  memcpy(buf, a1->elements, len1 * sizeof(uint16));
+  memcpy(&(buf[len1]), a2->elements, len2 * sizeof(uint16));
+  memcpy(&(buf[len1 + len2]), a3->elements, len3 * sizeof(uint16));
   
   PNetString* val = (PNetString*)vm->arrayToString(vm->bufToArray(buf, len1 + len2 + len3));
   
@@ -547,18 +564,18 @@
 }
 
 extern "C" void System_String_RemoveSpace(PNetString* str, sint32 index, sint32 length) {
-  const UTF8* utf8 = str->value;
+  const ArrayUInt16* array = str->value;
   sint32 strLength = str->length;
   uint16* buf = (uint16*)alloca(strLength * sizeof(uint16));
   sint32 j = index;
 
   if (index != 0) {
-    memcpy(buf, utf8->elements, index * sizeof(uint16));
+    memcpy(buf, array->elements, index * sizeof(uint16));
   }
   
   // 32 is space
   for (sint32 i = 0; i < length; ++i) {
-    uint16 cur = utf8->elements[index + i];
+    uint16 cur = array->elements[index + i];
     if (cur != 32) {
       buf[j] = cur;
     } else {
@@ -567,22 +584,21 @@
   }
 
   if (strLength > (index + length)) {
-    memcpy(&(buf[j]), &(utf8->elements[index + length]), (strLength - (index + length)) * sizeof(uint16));
+    memcpy(&(buf[j]), &(array->elements[index + length]), (strLength - (index + length)) * sizeof(uint16));
   }
 
-  const UTF8* res = VMThread::get()->vm->bufToUTF8(buf, j);
+  const ArrayUInt16* 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::acons(count, MSCorlib::arrayChar);
+  ArrayUInt16* array = (ArrayUInt16*)MSCorlib::arrayChar->doNew(count);
   for (sint32 i = 0; i < count; ++i) {
     array->elements[i] = ch;
   }
 
-  const UTF8* utf8 = VMThread::get()->vm->bufToUTF8(array->elements, array->size);
-  str->value = utf8;
+  str->value = array;
   str->length = array->size;
   str->capacity = array->size;
 }
@@ -603,8 +619,8 @@
 
 extern "C" VMObject* System_Reflection_Assembly_GetType(VMObject* obj, PNetString* str, bool onError, bool ignoreCase) {
   Assembly* ass = ASSEMBLY_VALUE(obj);
-  const UTF8* utf8 = str->value;
-  char* asciiz = utf8->UTF8ToAsciiz();
+  const ArrayUInt16* array = str->value;
+  char* asciiz = ass->vm->arrayToAsciiz(array);
   char* index = (char*)sys_memrchr(asciiz, '.', strlen(asciiz));
   N3* vm = ass->vm;
   
@@ -628,7 +644,8 @@
 extern "C" VMObject* System_Reflection_ClrType_GetMemberImpl(VMObject* Type, PNetString* str, sint32 memberTypes, sint32 bindingFlags, VMObject* binder, 
                                                    sint32 callingConventions, ArrayObject* types, VMObject* modifiers) {
   VMCommonClass* type = (VMCommonClass*)((*MSCorlib::typeClrType)(Type).PointerVal);
-  const UTF8* name = str->value;
+  N3* vm = (N3*)(VMThread::get()->vm);
+  const UTF8* name = vm->arrayToUTF8(str->value);
   if (memberTypes == MEMBER_TYPES_PROPERTY) {
     std::vector<Property*, gc_allocator<Property*> > properties = 
                                                     type->properties;
@@ -873,20 +890,20 @@
       
 extern "C" VMObject* System_Reflection_Assembly_GetManifestResourceStream(VMObject* Ass, PNetString* str) {
   Assembly* ass = (Assembly*)(*MSCorlib::assemblyAssemblyReflection)(Ass).PointerVal;
-  const UTF8* utf8 = str->value;
+  N3* vm = (N3*)(VMThread::get()->vm);
+  const UTF8* id = vm->arrayToUTF8(str->value);
   Header* header = ass->CLIHeader;
   uint32 stringOffset = header->stringStream->realOffset;
   Table* manTable  = header->tables[CONSTANT_ManifestResource];
   uint32 manRows   = manTable->rowsNumber;
   sint32 pos = -1;
   uint32 i = 0;
-  N3* vm = VMThread::get()->vm;
   
   while ((pos == -1) && (i < manRows)) {
     uint32 nameOffset = manTable->readIndexInRow(i + 1, CONSTANT_MANIFEST_RESOURCE_NAME, ass->bytes);
     const UTF8* name = ass->readString(vm, stringOffset + nameOffset);
 
-    if (name == utf8) {
+    if (name == id) {
       pos = i;
     } else {
       ++i;
@@ -907,26 +924,26 @@
 
 extern "C" VMObject* System_Globalization_TextInfo_ToLower(VMObject* obj, PNetString* str) {
   verifyNull(str);
-  const UTF8* utf8 = str->value;
+  const ArrayUInt16* array = str->value;
   uint32 length = str->length;
 
   uint16* buf = (uint16*)alloca(length * sizeof(uint16));
 
   N3* vm = VMThread::get()->vm;
 
-  memcpy(buf, utf8->elements, length * sizeof(uint16));
-  ILUnicodeStringToLower((void*)buf, (void*)utf8->elements, length);
+  memcpy(buf, array->elements, length * sizeof(uint16));
+  ILUnicodeStringToLower((void*)buf, (void*)array->elements, length);
   const ArrayUInt16* res = vm->bufToArray(buf, length);
   return ((N3*)vm)->arrayToString(res);
 }
 
 extern "C" VMObject* System_String_Replace(PNetString* str, uint16 c1, uint16 c2) {
-  const UTF8* utf8 = str->value;
+  const ArrayUInt16* array = str->value;
   uint32 length = str->length;
   if ((c1 == c2) || length == 0) return str;
 
   uint16* buf = (uint16*)alloca(length * sizeof(uint16));
-  memcpy(buf, utf8->elements, length * sizeof(uint16));
+  memcpy(buf, array->elements, length * sizeof(uint16));
   for (uint32 i = 0; i < length; ++i) {
     if (buf[i] == c1) buf[i] = c2;
   }
@@ -982,17 +999,17 @@
 }
 
 extern "C" void System_String_CharFill(PNetString* str, sint32 start, sint32 count, char ch) {
-  const UTF8* utf8 = str->value;
+  const ArrayUInt16* array = str->value;
   sint32 length = start + count;
   uint16* buf = (uint16*)alloca(length * sizeof(uint16));
 
-  memcpy(buf, utf8->elements, start * sizeof(uint16));
+  memcpy(buf, array->elements, start * sizeof(uint16));
   for (sint32 i = 0; i < count; ++i) {
     buf[i + start] = ch;
   }
   
   N3* vm = VMThread::get()->vm;
-  const UTF8* val = vm->bufToUTF8(buf, length);
+  const ArrayUInt16* val = vm->bufToArray(buf, length);
   str->value = val;
   str->length = length;
 }

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

==============================================================================
--- vmkit/trunk/lib/N3/PNetLib/PNetString.cpp (original)
+++ vmkit/trunk/lib/N3/PNetLib/PNetString.cpp Mon Oct  5 14:43:44 2009
@@ -24,25 +24,21 @@
 using namespace llvm;
 
 
-CLIString* CLIString::stringDup(const UTF8*& utf8, N3* vm) {
+CLIString* CLIString::stringDup(const ArrayUInt16*& array, N3* vm) {
   PNetString* obj = (PNetString*)(*MSCorlib::pString)();
-  obj->capacity = utf8->size;
-  obj->length = utf8->size;
-  if (utf8->size == 0) {
+  obj->capacity = array->size;
+  obj->length = array->size;
+  if (array->size == 0) {
     obj->firstChar = 0;
   } else {
-    obj->firstChar = utf8->at(0);
+    obj->firstChar = array->at(0);
   }
-  obj->value = utf8; 
+  obj->value = array; 
   return obj;
 }
 
-const UTF8* CLIString::strToUTF8(N3* vm) {
-  return (UTF8*)((PNetString*)this)->value;
-}
-
-ArrayUInt16* CLIString::strToArray(N3* vm) const {
-  return (ArrayUInt16*)((PNetString*)this)->value;
+const ArrayUInt16* CLIString::strToArray(N3* vm) const {
+  return ((PNetString*)this)->value;
 }
 
 GlobalVariable* CLIString::llvmVar() {

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

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

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIString.h (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIString.h Mon Oct  5 14:43:44 2009
@@ -34,9 +34,8 @@
   llvm::GlobalVariable* llvmVar();
 
   
-  static CLIString* stringDup(const UTF8*& utf8, N3* vm);
-  const  UTF8* strToUTF8(N3* vm);
-	ArrayUInt16 *strToArray(N3 *vm) const;
+  static CLIString* stringDup(const ArrayUInt16*& array, N3* vm);
+	const ArrayUInt16 *strToArray(N3 *vm) const;
 };
 
 } // end namespace jnjvm

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3.cpp Mon Oct  5 14:43:44 2009
@@ -361,7 +361,7 @@
   MSCorlib::loadBootstrap(vm);
   
   ClArgumentsInfo& info = vm->argumentsInfo;  
-  ArrayObject* args = ArrayObject::acons(info.argc - 2, MSCorlib::arrayString);
+  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])));
   }
@@ -413,8 +413,17 @@
 }
 
 CLIString *N3::arrayToString(const ArrayUInt16 *array) {
-	const UTF8 *utf8 = arrayToUTF8(array);
-  return (CLIString*)CLIString::stringDup(utf8, this);
+  return (CLIString*)CLIString::stringDup(array, this);
+}
+
+char* N3::arrayToAsciiz(const ArrayUInt16 *array) {
+	int size = array->size;
+  mvm::NativeString* buf = mvm::NativeString::alloc(size + 1);
+  for (sint32 i = 0; i < size; ++i) {
+    buf->setAt(i, array->elements[i]);
+  }
+  buf->setAt(size, 0);
+  return buf->cString();
 }
 
 #include "MSCorlib.inc"

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3.h (original)
+++ vmkit/trunk/lib/N3/VMCore/N3.h Mon Oct  5 14:43:44 2009
@@ -129,6 +129,7 @@
 
 	// usefull string, uint16 and utf8 functions
 
+	char*            arrayToAsciiz(const ArrayUInt16 *array);
 	ArrayUInt16*     asciizToArray(const char *asciiz);          // done
 	ArrayUInt16*     bufToArray(const uint16 *buf, uint32 len);  // done
 	ArrayUInt16*     UTF8ToArray(const UTF8 *utf8);              // done

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Mon Oct  5 14:43:44 2009
@@ -277,18 +277,14 @@
 
   MSCorlib::loadStringClass(vm);
 
-  MSCorlib::arrayString = ass->constructArray(vm->asciizToUTF8("String"),
-                                        System, 1);
+  MSCorlib::arrayString = ass->constructArray(vm->asciizToUTF8("String"), System, 1);
   MSCorlib::arrayString->baseClass = MSCorlib::pString;
   
-  MSCorlib::arrayByte = ass->constructArray(vm->asciizToUTF8("Byte"),
-                                        System, 1);
+  MSCorlib::arrayByte = ass->constructArray(vm->asciizToUTF8("Byte"), System, 1);
   MSCorlib::arrayByte->baseClass = MSCorlib::pUInt8;
   
-  MSCorlib::arrayObject = ass->constructArray(vm->asciizToUTF8("Object"),
-                                        System, 1);
+  MSCorlib::arrayObject = ass->constructArray(vm->asciizToUTF8("Object"), System, 1);
   MSCorlib::arrayObject->baseClass = MSCorlib::pObject;
-  
 
   N3::clinitName = vm->asciizToUTF8(".cctor");
   N3::ctorName = vm->asciizToUTF8(".ctor");

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Reader.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/Reader.cpp Mon Oct  5 14:43:44 2009
@@ -15,6 +15,7 @@
 #include "MSCorlib.h"
 #include "N3.h"
 #include "VMArray.h"
+#include "VMClass.h"
 #include "VMThread.h"
 #include "Reader.h"
 
@@ -59,6 +60,8 @@
     fseek(fp, 0, SeekEnd);
     long nbb = ftell(fp);
     fseek(fp, 0, SeekSet);
+		//		printf("---> %p\n", MSCorlib::arrayByte);
+		//		MSCorlib::arrayByte->doNew(nbb);
     res = ArrayUInt8::acons(nbb, MSCorlib::arrayByte);
     fread(res->elements, nbb, 1, fp);
     fclose(fp);





More information about the vmkit-commits mailing list