[vmkit-commits] [vmkit] r52870 - in /vmkit/trunk/lib/N3/VMCore: PNetLib.cpp VMArray.cpp VMArray.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sat Jun 28 13:09:06 PDT 2008


Author: geoffray
Date: Sat Jun 28 15:09:01 2008
New Revision: 52870

URL: http://llvm.org/viewvc/llvm-project?rev=52870&view=rev
Log:
Make array classes inherit VMObject.


Modified:
    vmkit/trunk/lib/N3/VMCore/PNetLib.cpp
    vmkit/trunk/lib/N3/VMCore/VMArray.cpp
    vmkit/trunk/lib/N3/VMCore/VMArray.h

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/PNetLib.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/PNetLib.cpp Sat Jun 28 15:09:01 2008
@@ -149,15 +149,15 @@
 
   if (bs == N3::pChar) {
     for (uint32 i = 0; i < size; ++i) {
-      ((uint16*)(void*)(array->elements))[i] = READ_U2(bytes, offset);
+      ((ArrayUInt16*)array)->elements[i] = READ_U2(bytes, offset);
     }
   } else if (bs == N3::pSInt32) {
     for (uint32 i = 0; i < size; ++i) {
-      ((sint32*)(void*)(array->elements))[i] = READ_U4(bytes, offset);
+      ((ArraySInt32*)array)->elements[i] = READ_U4(bytes, offset);
     }
   } else if (bs == N3::pDouble) {
     for (uint32 i = 0; i < size; ++i) {
-      ((double*)(void*)(array->elements))[i] = READ_U8(bytes, offset);
+      ((ArrayDouble*)array)->elements[i] = READ_U8(bytes, offset);
     }
   } else {
     VMThread::get()->vm->error("implement me");

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMArray.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMArray.cpp Sat Jun 28 15:09:01 2008
@@ -27,7 +27,8 @@
     else if (n > VMArray::MaxArraySize)                                     \
       VMThread::get()->vm->outOfMemoryError(n);                             \
     name* res = (name*)                                                     \
-      gc::operator new(sizeof(name) + n * size, VMObject::VT);              \
+      gc::operator new(sizeof(VMObject) + sizeof(sint32) + n * size,        \
+                              VMObject::VT);                                \
     res->initialise(atype, n);                                              \
     res->setVirtualTable(name::VT);                                         \
     return res;                                                             \
@@ -178,8 +179,8 @@
     VMThread::get()->vm->negativeArraySizeException(n);
   else if (n > VMArray::MaxArraySize)
     VMThread::get()->vm->outOfMemoryError(n);
-  UTF8* res = (UTF8*)gc::operator new(sizeof(UTF8) + n * sizeof(uint16),
-                                      UTF8::VT);
+  uint32 size = sizeof(VMObject) + sizeof(sint32) + n * sizeof(uint16);
+  UTF8* res = (UTF8*)gc::operator new(size, UTF8::VT);
   res->initialise(atype, n);
   return res;
 }

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMArray.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMArray.h Sat Jun 28 15:09:01 2008
@@ -44,10 +44,11 @@
 typedef VMArray* (*arrayCtor_t)(uint32 len, VMCommonClass* cl);
 
 #define ARRAYCLASS(name, elmt)                                        \
-class name : public VMArray {                                         \
+class name : public VMObject {                                        \
 public:                                                               \
   static VirtualTable* VT;                                            \
   static const llvm::Type* llvmType;                                  \
+  sint32 size;                                                        \
   elmt elements[1];                                                   \
   static name *acons(sint32 n, VMClassArray* cl);                     \
   void initialise(VMCommonClass* atype, sint32 n);                    \
@@ -69,10 +70,11 @@
 
 #undef ARRAYCLASS
 
-class ArrayObject : public VMArray {
+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);
@@ -82,9 +84,10 @@
   virtual void TRACER;
 };
 
-class UTF8 : public VMArray {
+class UTF8 : public VMObject {
 public:
   static VirtualTable* VT;
+  sint32 size;
   uint16 elements[1];
 
   static const llvm::Type* llvmType;





More information about the vmkit-commits mailing list