[vmkit-commits] [vmkit] r85214 - in /vmkit/trunk: include/mvm/VirtualMachine.h lib/JnJVM/Classpath/ClasspathReflect.h lib/JnJVM/Classpath/JavaUpcalls.cpp lib/JnJVM/VMCore/JavaClass.h lib/JnJVM/VMCore/Jnjvm.h lib/JnJVM/VMCore/JnjvmClassLoader.h lib/JnJVM/VMCore/VirtualTables.cpp lib/Mvm/GCMmap2/MvmGC.h lib/Mvm/GCMmap2/gc.cpp lib/Mvm/MMTk/MvmGC.cpp lib/Mvm/MMTk/MvmGC.h lib/Mvm/Runtime/Object.cpp lib/N3/VMCore/VirtualTables.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Oct 27 02:01:16 PDT 2009


Author: geoffray
Date: Tue Oct 27 04:01:16 2009
New Revision: 85214

URL: http://llvm.org/viewvc/llvm-project?rev=85214&view=rev
Log:
Adjust the markAndTrace function to MMTk interface.


Modified:
    vmkit/trunk/include/mvm/VirtualMachine.h
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h
    vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
    vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
    vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
    vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
    vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp
    vmkit/trunk/lib/Mvm/MMTk/MvmGC.h
    vmkit/trunk/lib/Mvm/Runtime/Object.cpp
    vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp

Modified: vmkit/trunk/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Tue Oct 27 04:01:16 2009
@@ -388,7 +388,7 @@
   /// getReferent - Get the referent of the reference. Should be overriden
   /// by the VM.
   //
-  virtual gc* getReferent(gc*) { return 0; }
+  virtual gc** getReferent(gc*) { return 0; }
 
   /// enqueueReference - Calls the enqueue method. Should be overriden
   /// by the VM.

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h Tue Oct 27 04:01:16 2009
@@ -35,12 +35,12 @@
   }
 
   static void staticTracer(JavaObjectClass* obj) {
-    obj->pd->markAndTrace();
-    obj->signers->markAndTrace();
-    obj->constructor->markAndTrace();
+    mvm::Collector::markAndTrace(obj, &obj->pd);
+    mvm::Collector::markAndTrace(obj, &obj->signers);
+    mvm::Collector::markAndTrace(obj, &obj->constructor);
     if (obj->vmdata) {
-      JavaObject* Obj = obj->vmdata->classLoader->getJavaClassLoader();
-      if (Obj) Obj->markAndTrace();
+      JavaObject** Obj = obj->vmdata->classLoader->getJavaClassLoaderPtr();
+      if (*Obj) mvm::Collector::markAndTraceRoot(Obj);
     }
   }
 };
@@ -55,8 +55,8 @@
 public:
 
   static void staticTracer(JavaObjectField* obj) {
-    obj->name->markAndTrace();
-    obj->declaringClass->markAndTrace();
+    mvm::Collector::markAndTrace(obj, &obj->name);
+    mvm::Collector::markAndTrace(obj, &obj->declaringClass);
   }
 
   JavaField* getInternalField() {
@@ -79,8 +79,8 @@
 public:
   
   static void staticTracer(JavaObjectMethod* obj) {
-    obj->name->markAndTrace();
-    obj->declaringClass->markAndTrace();
+    mvm::Collector::markAndTrace(obj, &obj->name);
+    mvm::Collector::markAndTrace(obj, &obj->declaringClass);
   }
   
   JavaMethod* getInternalMethod() {
@@ -101,7 +101,7 @@
 
 public:
   static void staticTracer(JavaObjectConstructor* obj) {
-    obj->clazz->markAndTrace();
+    mvm::Collector::markAndTrace(obj, &obj->clazz);
   }
   
   JavaMethod* getInternalMethod() {
@@ -161,12 +161,12 @@
     queue = q;
   }
 
-  JavaObject* getReferent() const { return referent; }
+  JavaObject** getReferent() { return &referent; }
   void setReferent(JavaObject* r) { referent = r; }
   
   static void staticTracer(JavaObjectReference* obj) {
-    obj->queue->markAndTrace();
-    obj->nextOnQueue->markAndTrace();
+    mvm::Collector::markAndTrace(obj, &obj->queue);
+    mvm::Collector::markAndTrace(obj, &obj->nextOnQueue);
   }
 };
 

Modified: vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp Tue Oct 27 04:01:16 2009
@@ -1051,9 +1051,9 @@
 
 }
 
-gc* Jnjvm::getReferent(gc* _obj) {
+gc** Jnjvm::getReferent(gc* _obj) {
   JavaObjectReference* obj = (JavaObjectReference*)_obj;
-  return obj->getReferent();
+  return (gc**)obj->getReferent();
  }
  
 void Jnjvm::clearReferent(gc* _obj) {

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Tue Oct 27 04:01:16 2009
@@ -1293,6 +1293,12 @@
   ///
   Attribut* lookupAttribut(const UTF8* key);
 
+  JavaObject** getObjectFieldPtr(void* obj) {
+    assert(classDef->isResolved());
+    void* ptr = (void*)((uint64)obj + ptrOffset);
+    return (JavaObject**)ptr;
+  }
+
   /// getVritual*Field - Get a virtual field of an object.
   ///
   #define GETFIELD(TYPE, TYPE_NAME) \

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Tue Oct 27 04:01:16 2009
@@ -359,7 +359,7 @@
 #endif
 
   virtual void clearReferent(gc*);
-  virtual gc* getReferent(gc*);
+  virtual gc** getReferent(gc*);
   virtual bool enqueueReference(gc*);
 
 protected:

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Tue Oct 27 04:01:16 2009
@@ -146,6 +146,13 @@
     return javaLoader;
   }
   
+  /// getJavaClassLoaderPtr - Return a pointer to the Java representation of
+  /// this class loader.
+  ///
+  JavaObject** getJavaClassLoaderPtr() {
+    return &javaLoader;
+  }
+  
   /// loadName - Loads the class of the given name.
   ///
   UserClass* loadName(const UTF8* name, bool doResolve, bool doThrow,

Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Tue Oct 27 04:01:16 2009
@@ -83,7 +83,7 @@
 extern "C" void JavaObjectTracer(JavaObject* obj) {
   CommonClass* cl = obj->getClass();
   assert(cl && "No class");
-  cl->classLoader->getJavaClassLoader()->markAndTrace();
+  mvm::Collector::markAndTraceRoot(cl->classLoader->getJavaClassLoaderPtr());
 }
 
 /// Method for scanning an array whose elements are JavaObjects. This method is
@@ -91,11 +91,13 @@
 extern "C" void ArrayObjectTracer(ArrayObject* obj) {
   CommonClass* cl = obj->getClass();
   assert(cl && "No class");
-  cl->classLoader->getJavaClassLoader()->markAndTrace();
+  mvm::Collector::markAndTraceRoot(cl->classLoader->getJavaClassLoaderPtr());
   
 
   for (sint32 i = 0; i < obj->size; i++) {
-    if (obj->elements[i]) obj->elements[i]->markAndTrace();
+    if (obj->elements[i]) {
+      mvm::Collector::markAndTrace(obj, obj->elements + i);
+    }
   } 
 }
 
@@ -109,14 +111,14 @@
 extern "C" void RegularObjectTracer(JavaObject* obj) {
   Class* cl = obj->getClass()->asClass();
   assert(cl && "Not a class in regular tracer");
-  cl->classLoader->getJavaClassLoader()->markAndTrace();
+  mvm::Collector::markAndTraceRoot(cl->classLoader->getJavaClassLoaderPtr());
 
   while (cl->super != 0) {
     for (uint32 i = 0; i < cl->nbVirtualFields; ++i) {
       JavaField& field = cl->virtualFields[i];
       if (field.isReference()) {
-        JavaObject* ptr = field.getObjectField(obj);
-        ptr->markAndTrace();
+        JavaObject** ptr = field.getObjectFieldPtr(obj);
+        mvm::Collector::markAndTrace(obj, ptr);
       }
     }
     cl = cl->super;
@@ -140,23 +142,25 @@
 void CommonClass::tracer() {
   
   if (super && super->classLoader) {
-    JavaObject* Obj = super->classLoader->getJavaClassLoader();
-    if (Obj) Obj->markAndTrace();
+    JavaObject** Obj = super->classLoader->getJavaClassLoaderPtr();
+    if (*Obj) mvm::Collector::markAndTraceRoot(Obj);
   
     for (uint32 i = 0; i < nbInterfaces; ++i) {
-      if (interfaces[i]->classLoader)
-        interfaces[i]->classLoader->getJavaClassLoader()->markAndTrace();
+      if (interfaces[i]->classLoader) {
+        JavaObject** Obj = interfaces[i]->classLoader->getJavaClassLoaderPtr();
+        if (*Obj) mvm::Collector::markAndTraceRoot(Obj);
+      }
     }
   }
 
   if (classLoader)
-    classLoader->getJavaClassLoader()->markAndTrace();
+    mvm::Collector::markAndTraceRoot(classLoader->getJavaClassLoaderPtr());
 
   for (uint32 i = 0; i < NR_ISOLATES; ++i) {
     // If the delegatee was static allocated, we want to trace its fields.
     if (delegatee[i]) {
       delegatee[i]->tracer();
-      delegatee[i]->markAndTrace();
+      mvm::Collector::markAndTraceRoot(delegatee + i);
     }
   }
 }
@@ -164,7 +168,7 @@
 void Class::tracer() {
   CommonClass::tracer();
   if (classLoader != classLoader->bootstrapLoader)
-    bytes->markAndTrace();
+    mvm::Collector::markAndTraceRoot(&bytes);
   
   for (uint32 i =0; i < NR_ISOLATES; ++i) {
     TaskClassMirror &M = IsolateInfo[i];
@@ -172,8 +176,8 @@
       for (uint32 i = 0; i < nbStaticFields; ++i) {
         JavaField& field = staticFields[i];
         if (field.isReference()) {
-          JavaObject* ptr = field.getObjectField(M.staticInstance);
-          ptr->markAndTrace();
+          JavaObject** ptr = field.getObjectFieldPtr(M.staticInstance);
+          mvm::Collector::markAndTraceRoot(ptr);
         }
       }
     }
@@ -209,8 +213,8 @@
   StringList* end = strings;
   while (end) {
     for (uint32 i = 0; i < end->length; ++i) {
-      JavaObject* obj = end->strings[i];
-      obj->markAndTrace(); 
+      JavaString** obj = end->strings + i;
+      mvm::Collector::markAndTraceRoot(obj);
     }
     end = end->prev;
   }
@@ -252,25 +256,26 @@
 void Jnjvm::tracer() {
   bootstrapLoader->tracer();
   
-  if (appClassLoader) appClassLoader->getJavaClassLoader()->markAndTrace();
+  if (appClassLoader) 
+    mvm::Collector::markAndTraceRoot(appClassLoader->getJavaClassLoaderPtr());
   
   JNIGlobalReferences* start = &globalRefs;
   while (start) {
     for (uint32 i = 0; i < start->length; ++i) {
-      JavaObject* obj = start->globalReferences[i];
-      obj->markAndTrace(); 
+      JavaObject** obj = start->globalReferences + i;
+      mvm::Collector::markAndTraceRoot(obj);
     }
     start = start->next;
   }
   
   for (StringMap::iterator i = hashStr.map.begin(), e = hashStr.map.end();
        i!= e; ++i) {
-    JavaString* str = i->second;
-    str->markAndTrace();
+    JavaString** str = &(i->second);
+    mvm::Collector::markAndTraceRoot(str);
   }
 
 #if defined(ISOLATE_SHARING)
-  JnjvmSharedLoader::sharedLoader->markAndTrace();
+  mvm::Collector::markAndTraceRoot(&JnjvmSharedLoader::sharedLoader);
 #endif
   
 #ifdef SERVICE
@@ -279,17 +284,17 @@
 }
 
 void JavaThread::tracer() {
-  if (pendingException) pendingException->markAndTrace();
-  javaThread->markAndTrace();
+  if (pendingException) mvm::Collector::markAndTraceRoot(&pendingException);
+  mvm::Collector::markAndTraceRoot(&javaThread);
 #ifdef SERVICE
-  ServiceException->markAndTrace();
+  mvm::Collector::markAndTraceRoot(&ServiceException);
 #endif
   
   JNILocalReferences* end = localJNIRefs;
   while (end) {
     for (uint32 i = 0; i < end->length; ++i) {
-      JavaObject* obj = end->localReferences[i];
-      obj->markAndTrace(); 
+      JavaObject** obj = end->localReferences + i;
+      mvm::Collector::markAndTraceRoot(obj);
     }
     end = end->prev;
   }

Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Tue Oct 27 04:01:16 2009
@@ -21,7 +21,6 @@
 
 
 #define TRACER tracer()
-#define MARK_AND_TRACE markAndTrace()
 #define CALL_TRACER tracer()
 
 namespace mvm {
@@ -276,8 +275,13 @@
     o->tracer();
   }
 
-  static inline void markAndTrace(void *ptr) {
-    GCChunkNode *node = o2node(ptr);
+  static inline void markAndTrace(void* source, void *ptr) {
+    markAndTraceRoot(ptr);
+  }
+  
+  static inline void markAndTraceRoot(void *ptr) {
+    void* obj = *(void**)ptr;
+    GCChunkNode *node = o2node(obj);
 
     if(node && !isMarked(node)) {
       mark(node);
@@ -312,10 +316,6 @@
 class gc : public gcRoot {
 public:
  
-  void markAndTrace() const {
-    mvm::Collector::markAndTrace((void*)this);
-  }
-
   size_t objectSize() const {
     return mvm::Collector::objectSize((void*)this);
   }

Modified: vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp Tue Oct 27 04:01:16 2009
@@ -15,7 +15,7 @@
 
 
 extern "C" void MarkAndTrace(gc* gc) {
-  Collector::markAndTrace((void*)gc);
+  Collector::markAndTraceRoot(&gc);
 }
 
 extern "C" void* gcmalloc(size_t sz, VirtualTable* VT) {

Modified: vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp (original)
+++ vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp Tue Oct 27 04:01:16 2009
@@ -19,6 +19,7 @@
 gc::MMTkPostAllocType gc::MMTkGCPostAllocator = 0;
 gc::MMTkCheckAllocatorType gc::MMTkCheckAllocator = 0;
 gc::MMTkDelayedRootType gc::MMTkDelayedRoot = 0;
+gc::MMTkProcessEdgeType gc::MMTkProcessEdge = 0;
 
 uintptr_t Collector::TraceLocal = 0;
 

Modified: vmkit/trunk/lib/Mvm/MMTk/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/MMTk/MvmGC.h?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/MMTk/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/MMTk/MvmGC.h Tue Oct 27 04:01:16 2009
@@ -32,11 +32,6 @@
 class gc : public gcRoot {
 public:
 
-  void markAndTrace() const {
-    fprintf(stderr, "Implement mark and trace\n");
-    abort();
-  }
-
   size_t objectSize() const {
     fprintf(stderr, "Implement object size\n");
     abort();
@@ -106,7 +101,15 @@
     assert(TraceLocal && "scanning without a trace local");
     gc::MMTkDelayedRoot(TraceLocal, ptr);
   }
+ 
+  static void markAndTrace(void* source, void* ptr) {
+    abort();
+  }
   
+  static void markAndTraceRoot(void* ptr) {
+    abort();
+  }
+
   static void collect() {
     abort();
   }

Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=85214&r1=85213&r2=85214&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Tue Oct 27 04:01:16 2009
@@ -177,7 +177,8 @@
     gc* obj = FinalizationQueue[i];
 
     if (!Collector::isLive(obj)) {
-      obj->markAndTrace();
+      Collector::markAndTrace((void*)&FinalizationQueue,
+                              (void**)(FinalizationQueue + i));
       
       if (CurrentFinalizedIndex >= ToBeFinalizedLength)
         growToBeFinalizedQueue();
@@ -191,8 +192,8 @@
   CurrentIndex = NewIndex;
 
   for (uint32 i = 0; i < CurrentFinalizedIndex; ++i) {
-    gc* obj = ToBeFinalized[i];
-    obj->markAndTrace();
+    Collector::markAndTrace((void*)&ToBeFinalized,
+                            (void**)(ToBeFinalized + i));
   }
 }
 
@@ -202,20 +203,20 @@
     return 0;
   }
 
-  gc* referent = vm->getReferent(reference);
+  gc** referent = vm->getReferent(reference);
 
   if (!referent) return 0;
 
   if (semantics == SOFT) {
     // TODO: are we are out of memory? Consider that we always are for now.
     if (false) {
-      referent->markAndTrace();
+      Collector::markAndTrace((void*)reference, (void**)referent);
     }
   } else if (semantics == PHANTOM) {
     // Nothing to do.
   }
 
-  if (Collector::isLive(referent)) {
+  if (Collector::isLive(*referent)) {
     return reference;
   } else {
     vm->clearReferent(reference);

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp Tue Oct 27 04:01:16 2009
@@ -29,13 +29,13 @@
 
 // N3 Objects
 void VMObject::_trace(VMObject *self) {
-  self->lockObj->MARK_AND_TRACE;
+  mvm::Collector::markAndTrace(self, &self->lockObj);
 }
 
 #define TRACE_VECTOR(type, name, alloc) { \
   for (std::vector<type, alloc<type> >::iterator i = name.begin(), e = name.end(); \
        i!= e; ++i) {                                                    \
-    (*i)->MARK_AND_TRACE; }}
+    mvm::Collector::markAndTraceRoot(&(*i)); }}
 
 #define CALL_TRACER_VECTOR(type, name, alloc) { \
   for (std::vector<type, alloc<type> >::iterator i = name.begin(), e = name.end(); \
@@ -44,8 +44,8 @@
 
 // internal objects
 void VMThread::TRACER {
-  ooo_appThread->MARK_AND_TRACE;
-  ooo_pendingException->MARK_AND_TRACE;
+  mvm::Collector::markAndTraceRoot(&ooo_appThread);
+  mvm::Collector::markAndTraceRoot(&ooo_pendingException);
 	// I suppose that the vm is already traced by the gc
 	//  vm->CALL_TRACER;
 }
@@ -63,11 +63,11 @@
 
 void Assembly::TRACER {
   loadedNameClasses->CALL_TRACER;
-  ooo_delegatee->MARK_AND_TRACE;
+  mvm::Collector::markAndTraceRoot(&ooo_delegatee);
 }
 
 void VMCommonClass::TRACER {
-  ooo_delegatee->MARK_AND_TRACE;
+  mvm::Collector::markAndTraceRoot(&ooo_delegatee);
 	CALL_TRACER_VECTOR(VMMethod*, virtualMethods, std::allocator);
 	CALL_TRACER_VECTOR(VMMethod*, staticMethods, std::allocator);
   CALL_TRACER_VECTOR(Property*, properties, gc_allocator);
@@ -75,8 +75,8 @@
 
 void VMClass::TRACER {
   VMCommonClass::CALL_TRACER;
-  staticInstance->MARK_AND_TRACE;
-  virtualInstance->MARK_AND_TRACE;
+  mvm::Collector::markAndTraceRoot(&staticInstance);
+  mvm::Collector::markAndTraceRoot(&virtualInstance);
 }
 
 void VMGenericClass::TRACER {
@@ -92,7 +92,7 @@
 }
 
 void VMMethod::TRACER {
-  ooo_delegatee->MARK_AND_TRACE;
+  mvm::Collector::markAndTraceRoot(&ooo_delegatee);
 }
 
 void VMGenericMethod::TRACER {
@@ -100,7 +100,7 @@
 }
 
 void Property::TRACER {
-  ooo_delegatee->MARK_AND_TRACE;
+  mvm::Collector::markAndTraceRoot(&ooo_delegatee);
 }
 
 // useless (never called or used) but it simplifies the definition of LockedMap





More information about the vmkit-commits mailing list