[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