[vmkit-commits] [vmkit] r118262 - /vmkit/branches/precise/mmtk/mmtk-j3/ObjectModel.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu Nov 4 15:20:14 PDT 2010


Author: geoffray
Date: Thu Nov  4 17:20:14 2010
New Revision: 118262

URL: http://llvm.org/viewvc/llvm-project?rev=118262&view=rev
Log:
Implement getTypeDescriptor.


Modified:
    vmkit/branches/precise/mmtk/mmtk-j3/ObjectModel.cpp

Modified: vmkit/branches/precise/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/precise/mmtk/mmtk-j3/ObjectModel.cpp?rev=118262&r1=118261&r2=118262&view=diff
==============================================================================
--- vmkit/branches/precise/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/branches/precise/mmtk/mmtk-j3/ObjectModel.cpp Thu Nov  4 17:20:14 2010
@@ -10,6 +10,7 @@
 #include "JavaArray.h"
 #include "JavaClass.h"
 #include "JavaObject.h"
+#include "JavaString.h"
 #include "JavaThread.h"
 
 #include "debug.h"
@@ -137,8 +138,42 @@
 extern "C" void Java_org_j3_mmtk_ObjectModel_getNextObject__Lorg_vmmagic_unboxed_ObjectReference_2 (
     JavaObject* OM, uintptr_t object) { UNIMPLEMENTED(); }
 
-extern "C" void Java_org_j3_mmtk_ObjectModel_getTypeDescriptor__Lorg_vmmagic_unboxed_ObjectReference_2 (
-    JavaObject* OM, uintptr_t object) { UNIMPLEMENTED(); }
+
+class FakeByteArray {
+ public:
+  void* operator new(size_t size, int length) {
+    return new char[size + length];
+  }
+
+  FakeByteArray(const char* name) {
+    length = strlen(name);
+    for (uint32 i = 0; i < length; i++) {
+      elements[i] = name[i];
+    }
+  }
+  
+  FakeByteArray(const UTF8* name) {
+    length = name->size;
+    for (uint32 i = 0; i < length; i++) {
+      elements[i] = name->elements[i];
+    }
+  }
+ private:
+  JavaObject header;
+  size_t length;
+  uint8_t elements[1];
+};
+
+extern "C" FakeByteArray* Java_org_j3_mmtk_ObjectModel_getTypeDescriptor__Lorg_vmmagic_unboxed_ObjectReference_2 (
+    JavaObject* OM, JavaObject* src) {
+  if (VMClassLoader::isVMClassLoader(src)) {
+    return new (14) FakeByteArray("VMClassLoader");
+  } else {
+    CommonClass* cl = JavaObject::getClass(src);
+    return new (cl->name->size) FakeByteArray(cl->name);
+  }
+}
+
 
 extern "C" void Java_org_j3_mmtk_ObjectModel_getArrayLength__Lorg_vmmagic_unboxed_ObjectReference_2 (
     JavaObject* OM, uintptr_t object) { UNIMPLEMENTED(); }





More information about the vmkit-commits mailing list