[vmkit-commits] [vmkit] r53597 - /vmkit/trunk/lib/N3/Mono/Mono.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Jul 15 01:52:53 PDT 2008
Author: geoffray
Date: Tue Jul 15 03:52:52 2008
New Revision: 53597
URL: http://llvm.org/viewvc/llvm-project?rev=53597&view=rev
Log:
Implement Mono functions.
Modified:
vmkit/trunk/lib/N3/Mono/Mono.cpp
Modified: vmkit/trunk/lib/N3/Mono/Mono.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/Mono/Mono.cpp?rev=53597&r1=53596&r2=53597&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/Mono/Mono.cpp (original)
+++ vmkit/trunk/lib/N3/Mono/Mono.cpp Tue Jul 15 03:52:52 2008
@@ -250,3 +250,90 @@
{
return 0;
}
+
+extern "C" VMObject* System_Object_MemberwiseClone(VMObject* obj) {
+ uint64 size = obj->objectSize();
+ VMObject* res = (VMObject*)gc::operator new(size, obj->getVirtualTable());
+ memcpy(res, obj, size);
+ res->lockObj = 0;
+ return res;
+}
+
+extern "C" bool
+System_Globalization_CultureInfo_construct_internal_locale_from_current_locale (VMObject *ci)
+{
+ return false;
+}
+
+extern "C" void
+System_Threading_Thread_SetCachedCurrentCulture (VMObject* thread, VMObject *culture)
+{
+}
+
+extern "C" void
+System_String__ctor(MonoString* str, ArrayUInt16* array, sint32 startIndex, sint32 count) {
+ VirtualMachine* vm = VMThread::get()->vm;
+ const UTF8* utf8 = vm->readerConstructUTF8(&(array->elements[startIndex]), count);
+ str->length = count;
+ str->startChar = array->elements[startIndex];
+ str->value = utf8;
+}
+
+extern "C" MonoString *
+System_String_InternalJoin (MonoString *separator, VMArray * value, sint32 sindex, sint32 count)
+{
+ MonoString *current;
+ sint32 length;
+ sint32 pos;
+ sint32 insertlen;
+ sint32 destpos;
+ sint32 srclen;
+ const uint16 *insert;
+ const uint16 *src;
+ uint16 *dest;
+
+ insert = separator->value->elements;
+ insertlen = separator->length;
+
+ length = 0;
+ for (pos = sindex; pos != sindex + count; pos++) {
+ current = (MonoString*)value->elements[pos];
+ if (current != NULL)
+ length += current->length;
+
+ if (pos < sindex + count - 1)
+ length += insertlen;
+ }
+
+ dest = (uint16*)alloca(length * sizeof(uint16));
+ destpos = 0;
+
+ for (pos = sindex; pos != sindex + count; pos++) {
+ current = (MonoString*)value->elements[pos];
+ if (current != NULL) {
+ src = current->value->elements;
+ srclen = current->length;
+
+ memcpy (dest + destpos, src, srclen * sizeof(uint16));
+ destpos += srclen;
+ }
+
+ if (pos < sindex + count - 1) {
+ memcpy(dest + destpos, insert, insertlen * sizeof(uint16));
+ destpos += insertlen;
+ }
+ }
+
+ N3* vm = (N3*)VMThread::get()->vm;
+ const UTF8* utf8 = vm->readerConstructUTF8(dest, length);
+ return (MonoString*)vm->UTF8ToStr(utf8);
+}
+
+extern "C" MonoString *
+System_String_InternalAllocateStr (sint32 length)
+{
+ MonoString* str = (MonoString*)(MSCorlib::pString->doNew());
+ str->length = length;
+ return str;
+}
+
More information about the vmkit-commits
mailing list