[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