[vmkit-commits] [vmkit] r83248 - in /vmkit/trunk: include/mvm/PrintBuffer.h lib/N3/VMCore/Assembly.cpp lib/N3/VMCore/CLIJit.cpp lib/N3/VMCore/CLISignature.cpp lib/N3/VMCore/N3Initialise.cpp lib/N3/VMCore/VMClass.cpp lib/N3/VMCore/VMClass.h lib/N3/VMCore/VirtualTables.cpp

Gael Thomas gael.thomas at lip6.fr
Fri Oct 2 07:52:23 PDT 2009


Author: gthomas
Date: Fri Oct  2 09:52:22 2009
New Revision: 83248

URL: http://llvm.org/viewvc/llvm-project?rev=83248&view=rev
Log:
VMClass(es) are now allocated with BumpPtrAllocator.
Add a generic method in PrintBuffer to call printString even if the object is not an instance of mvm::Object.


Modified:
    vmkit/trunk/include/mvm/PrintBuffer.h
    vmkit/trunk/lib/N3/VMCore/Assembly.cpp
    vmkit/trunk/lib/N3/VMCore/CLIJit.cpp
    vmkit/trunk/lib/N3/VMCore/CLISignature.cpp
    vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
    vmkit/trunk/lib/N3/VMCore/VMClass.cpp
    vmkit/trunk/lib/N3/VMCore/VMClass.h
    vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp

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

==============================================================================
--- vmkit/trunk/include/mvm/PrintBuffer.h (original)
+++ vmkit/trunk/include/mvm/PrintBuffer.h Fri Oct  2 09:52:22 2009
@@ -186,6 +186,13 @@
     return pbf;
   }
 
+	template <typename T> 
+	static char *objectToString(T *obj) {
+		PrintBuffer *buf = alloc();
+		obj->print(buf);
+		return buf->contents()->cString();
+	}
+
   /// tracer - Traces this PrintBuffer.
   ///
   static void staticTracer(PrintBuffer* obj) {

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Assembly.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/Assembly.cpp Fri Oct  2 09:52:22 2009
@@ -244,7 +244,7 @@
 }
 
 static VMCommonClass* arrayDup(ClassNameCmp &cmp, Assembly* ass) {
-  VMClassArray* cl = gc_new(VMClassArray)();
+  VMClassArray* cl = new(ass->allocator, "VMClassArray") VMClassArray();
   cl->initialise(ass->vm, true);
   cl->name = cmp.name;
   cl->nameSpace = cmp.nameSpace;
@@ -280,7 +280,7 @@
 }
 
 static VMCommonClass* pointerDup(ClassNameCmp &cmp, Assembly* ass) {
-  VMClassPointer* cl = gc_new(VMClassPointer)();
+  VMClassPointer* cl = new(ass->allocator, "VMClassPointer") VMClassPointer();
   cl->initialise(ass->vm, false);
   cl->isPointer = true;
   cl->name = cmp.name;
@@ -317,7 +317,7 @@
 }
 
 static VMCommonClass* classDup(ClassNameCmp &cmp, Assembly* ass) {
-  VMClass* cl = gc_new(VMClass)();
+  VMClass* cl = new(ass->allocator, "VMClass") VMClass();
   cl->initialise(ass->vm, false);
   cl->name = cmp.name;
   cl->nameSpace = cmp.nameSpace;
@@ -341,7 +341,7 @@
 }
 
 static VMCommonClass* genClassDup(ClassNameCmp &cmp, Assembly* ass) {
-  VMClass* cl = gc_new(VMGenericClass)();
+  VMClass* cl = new(ass->allocator, "VMGenericClass") VMGenericClass();
   cl->initialise(ass->vm, false);
   cl->name = cmp.name;
   cl->nameSpace = cmp.nameSpace;

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIJit.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIJit.cpp Fri Oct  2 09:52:22 2009
@@ -608,7 +608,7 @@
     
   Value* obj = 0;
   if (type->isPointer) {
-    VMThread::get()->vm->error("implement me %s", type->printString());
+    VMThread::get()->vm->error("implement me %s", mvm::PrintBuffer::objectToString(type));
   } else if (type->isArray) {
     VMClassArray* arrayType = (VMClassArray*)type;
     Value* valCl = new LoadInst(arrayType->llvmVar(), "", currentBlock);
@@ -920,8 +920,7 @@
     else if (name == N3::invokeName) return invokeDelegate();
     else VMThread::get()->vm->error("implement me");
   } else {
-    VMThread::get()->vm->error("implement me %s",
-                               compilingClass->printString());
+    VMThread::get()->vm->error("implement me %s", mvm::PrintBuffer::objectToString(compilingClass));
   }
   return 0;
 }

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLISignature.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/CLISignature.cpp Fri Oct  2 09:52:22 2009
@@ -182,7 +182,7 @@
   uint32 numSizes = ass->uncompressSignature(offset);
 
   if (numSizes != 0) {
-    printf("type = %s\n", cl->printString());
+    printf("type = %s\n", mvm::PrintBuffer::objectToString(cl));
     VMThread::get()->vm->error("implement me");
   }
 
@@ -302,7 +302,7 @@
     // of generic methods we need create a placeholder for each of them,
     // this is done by creating a dummy VMClass which has the assembly field
     // set to NULL, the token field is used to store the generic argument number
-    VMClass* cl = gc_new(VMClass)();
+    VMClass* cl = new(ass->allocator, "VMClass") VMClass();
     cl->token = number;
     cl->assembly = ass;
     cl->nameSpace = ass->name;

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Fri Oct  2 09:52:22 2009
@@ -191,11 +191,6 @@
   INIT(ArrayDouble);
   INIT(ArrayObject);
   INIT(UTF8);
-  INIT(VMCommonClass);
-  INIT(VMClass);
-  INIT(VMClassPointer);
-  INIT(VMGenericClass);
-  INIT(VMClassArray);
   INIT(VMMethod);
   INIT(VMGenericMethod);
   INIT(VMField);

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMClass.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMClass.cpp Fri Oct  2 09:52:22 2009
@@ -563,7 +563,7 @@
   if (!res) {
     VMThread::get()->vm->error(VirtualMachine::MissingMethodException, 
                                "unable to find %s in %s",
-                               name->printString(), this->printString());
+                               mvm::PrintBuffer::objectToString(name), mvm::PrintBuffer::objectToString(this));
   }
   return res;
 }
@@ -610,7 +610,7 @@
   if (!res) {
     VMThread::get()->vm->error(VirtualMachine::MissingFieldException, 
                                "unable to find %s in %s",
-                               name->printString(), this->printString());
+                               mvm::PrintBuffer::objectToString(name), mvm::PrintBuffer::objectToString(this));
   }
   return res;
 }

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMClass.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMClass.h Fri Oct  2 09:52:22 2009
@@ -44,9 +44,8 @@
 }VMClassState;
 
 
-class VMCommonClass : public mvm::Object {
+class VMCommonClass : public mvm::PermanentObject {
 public:
-  static VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
 
@@ -131,7 +130,6 @@
 
 class VMClass : public VMCommonClass {
 public:
-  static VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
   
@@ -157,7 +155,6 @@
 //       add flag to VMClass instead
 class VMGenericClass : public VMClass {
 public:
-  static VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
 
@@ -166,7 +163,6 @@
 
 class VMClassArray : public VMCommonClass {
 public:
-  static VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
 
@@ -188,7 +184,6 @@
 
 class VMClassPointer : public VMCommonClass {
 public:
-  static VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
 

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp Fri Oct  2 09:52:22 2009
@@ -38,11 +38,6 @@
   INIT(ArrayDouble);
   INIT(ArrayObject);
   INIT(UTF8);
-  INIT(VMCommonClass);
-  INIT(VMClass);
-  INIT(VMGenericClass);
-  INIT(VMClassArray);
-  INIT(VMClassPointer);
   INIT(VMMethod);
   INIT(VMGenericMethod);
   INIT(VMField);
@@ -67,7 +62,7 @@
 
 void CLIJit::TRACER {
   compilingMethod->MARK_AND_TRACE;
-  compilingClass->MARK_AND_TRACE;
+  compilingClass->CALL_TRACER;
 }
 
 void ThreadSystem::TRACER {
@@ -81,7 +76,7 @@
 
 void CacheNode::TRACER {
   ((mvm::Object*)methPtr)->MARK_AND_TRACE;
-  lastCible->MARK_AND_TRACE;
+  lastCible->CALL_TRACER;
   next->MARK_AND_TRACE;
   enveloppe->MARK_AND_TRACE;
 }
@@ -136,8 +131,8 @@
 void VMCommonClass::TRACER {
   name->MARK_AND_TRACE;
   nameSpace->MARK_AND_TRACE;
-  super->MARK_AND_TRACE;
-  TRACE_VECTOR(VMClass*, interfaces, std::allocator);
+  super->CALL_TRACER;
+  CALL_TRACER_VECTOR(VMClass*, interfaces, std::allocator);
   //lockVar->MARK_AND_TRACE;
   //condVar->MARK_AND_TRACE;
   TRACE_VECTOR(VMMethod*, virtualMethods, std::allocator);
@@ -145,7 +140,7 @@
   TRACE_VECTOR(VMField*, virtualFields, std::allocator);
   TRACE_VECTOR(VMField*, staticFields, std::allocator);
   delegatee->MARK_AND_TRACE;
-  TRACE_VECTOR(VMCommonClass*, display, std::allocator);
+  CALL_TRACER_VECTOR(VMCommonClass*, display, std::allocator);
   vm->CALL_TRACER;
 
   assembly->CALL_TRACER;
@@ -157,31 +152,31 @@
   VMCommonClass::CALL_TRACER;
   staticInstance->MARK_AND_TRACE;
   virtualInstance->MARK_AND_TRACE;
-  TRACE_VECTOR(VMClass*, innerClasses, std::allocator);
-  outerClass->MARK_AND_TRACE;
+  CALL_TRACER_VECTOR(VMClass*, innerClasses, std::allocator);
+  outerClass->CALL_TRACER;
   TRACE_VECTOR(VMMethod*, genericMethods, std::allocator);
 }
 
 void VMGenericClass::TRACER {
   VMClass::CALL_TRACER;
-  TRACE_VECTOR(VMCommonClass*, genericParams, std::allocator);
+  CALL_TRACER_VECTOR(VMCommonClass*, genericParams, std::allocator);
 }
 
 void VMClassArray::TRACER {
   VMCommonClass::CALL_TRACER;
-  baseClass->MARK_AND_TRACE;
+  baseClass->CALL_TRACER;
 }
 
 void VMClassPointer::TRACER {
   VMCommonClass::CALL_TRACER;
-  baseClass->MARK_AND_TRACE;
+  baseClass->CALL_TRACER;
 }
 
 
 void VMMethod::TRACER {
   delegatee->MARK_AND_TRACE;
   //signature->MARK_AND_TRACE;
-  classDef->MARK_AND_TRACE;
+  classDef->CALL_TRACER;
   TRACE_VECTOR(Param*, params, gc_allocator);
   TRACE_VECTOR(Enveloppe*, caches, gc_allocator);
   name->MARK_AND_TRACE;
@@ -189,12 +184,12 @@
 
 void VMGenericMethod::TRACER {
   VMMethod::CALL_TRACER;
-  TRACE_VECTOR(VMCommonClass*, genericParams, std::allocator);
+  CALL_TRACER_VECTOR(VMCommonClass*, genericParams, std::allocator);
 }
 
 void VMField::TRACER {
-  signature->MARK_AND_TRACE;
-  classDef->MARK_AND_TRACE;
+  signature->CALL_TRACER;
+  classDef->CALL_TRACER;
   name->MARK_AND_TRACE;
 }
 
@@ -211,7 +206,7 @@
 }
 
 void VMObject::TRACER {
-  classOf->MARK_AND_TRACE;
+  classOf->CALL_TRACER;
   lockObj->MARK_AND_TRACE;
 }
 
@@ -241,7 +236,7 @@
 }
 
 void Property::TRACER {
-  type->MARK_AND_TRACE;
+  type->CALL_TRACER;
   //signature->MARK_AND_TRACE;
   name->MARK_AND_TRACE;
   delegatee->MARK_AND_TRACE;
@@ -295,7 +290,7 @@
 }
 
 void Exception::TRACER {
-  catchClass->MARK_AND_TRACE;
+  catchClass->CALL_TRACER;
 }
 
 #ifdef MULTIPLE_GC
@@ -303,7 +298,7 @@
 #else
 extern "C" void CLIObjectTracer(VMObject* obj) {
 #endif
-  obj->classOf->MARK_AND_TRACE;
+  obj->classOf->CALL_TRACER;
   obj->lockObj->MARK_AND_TRACE;
 }
 





More information about the vmkit-commits mailing list