[vmkit-commits] [vmkit] r56201 - /vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Sep 15 04:18:56 PDT 2008


Author: geoffray
Date: Mon Sep 15 06:18:55 2008
New Revision: 56201

URL: http://llvm.org/viewvc/llvm-project?rev=56201&view=rev
Log:
Set missing informations in UserClass*.


Modified:
    vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp

Modified: vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp?rev=56201&r1=56200&r2=56201&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp Mon Sep 15 06:18:55 2008
@@ -48,6 +48,12 @@
   delegatee = 0;
   _baseClass = 0;
   _funcs = 0;
+  super = JCL->bootstrapLoader->SuperArray;
+  interfaces = JCL->bootstrapLoader->InterfacesArray;
+  depth = 1;
+  display = (UserCommonClass**)malloc(2 * sizeof(UserCommonClass*));
+  display[0] = super;
+  display[1] = this;
 }
 
 UserClassPrimitive::UserClassPrimitive(JnjvmClassLoader* JCL, const UTF8* name,
@@ -60,6 +66,8 @@
   classDef = cl;
   classLoader = JCL;
   delegatee = 0;
+  display = (UserCommonClass**)malloc(sizeof(UserCommonClass*));
+  display[0] = this;
 }
 
 void UserCommonClass::resolveClass() {
@@ -95,6 +103,18 @@
             status = prepared;
             def->classLoader->TheModule->resolveVirtualClass(def);
             virtualSize = def->virtualSize;
+            /*uint64 vtSize = def->virtualTableSize * sizeof(void*);
+            virtualVT = (VirtualTable*)malloc(2 * vtSize);
+            memcpy(virtualVT, (void*)((uint64)def->virtualVT + vtSize), vtSize);
+            if (super) {
+              memcpy(virtualVT, (void*)((uint64)super->virtualVT - vtSize),
+                     vtSize);
+            }
+            for (CommonClass::method_iterator i = def->virtualMethods.begin(),
+                 e = def->virtualMethods.end(); i != e; ++i) {
+              ((void**)virtualVT)[i->second->offset] = ctpInfo;
+            }
+            virtualVT = (VirtualTable*)((uint64)virtualVT + vtSize);*/
             virtualVT = def->virtualVT;
             def->status = resolved;
             status = resolved;
@@ -125,9 +145,10 @@
 }
 
 UserClass* UserCommonClass::lookupClassFromMethod(JavaMethod* meth) {
-  fprintf(stderr, "implement me");
-  abort();
-  return 0;
+  UserClass* res = 0;
+  lookupMethodDontThrow(meth->name, meth->type,
+                        isStatic(meth->access), true, res);
+  return res;
 }
 
 UserCommonClass* UserCommonClass::getUserClass(CommonClass* cl) {
@@ -197,10 +218,13 @@
 
 UserClassPrimitive* AssessorDesc::getPrimitiveClass() const {
   Jnjvm* vm = JavaThread::get()->isolate;
-  UserClassArray* arrayCl = vm->arrayClasses[numId];
-  UserClassPrimitive* cl = (UserClassPrimitive*)arrayCl->baseClass();
-  assert(cl && "Primitive array class does not have a primitive.");
-  return cl;
+  if (numId > VOID_ID && numId < ARRAY_ID) {
+    UserClassArray* arrayCl = vm->arrayClasses[numId];
+    UserClassPrimitive* cl = (UserClassPrimitive*)arrayCl->baseClass();
+    assert(cl && "Primitive array class does not have a primitive.");
+    return cl;
+  }
+  return 0;
 }
 
 UserClassArray* AssessorDesc::getArrayClass() const {





More information about the vmkit-commits mailing list