[vmkit-commits] [vmkit] r84090 - in /vmkit/trunk: include/mvm/PrintBuffer.h lib/N3/VMCore/CLIJit.cpp lib/N3/VMCore/CLIString.h lib/N3/VMCore/N3Initialise.cpp lib/N3/VMCore/VMObject.cpp lib/N3/VMCore/VMObject.h lib/N3/VMCore/VirtualTables.cpp

Gael Thomas gael.thomas at lip6.fr
Wed Oct 14 04:48:09 PDT 2009


Author: gthomas
Date: Wed Oct 14 06:48:08 2009
New Revision: 84090

URL: http://llvm.org/viewvc/llvm-project?rev=84090&view=rev
Log:
LockObj defines its vt with N3VirtualTable. CLIString does not define any vt.


Modified:
    vmkit/trunk/include/mvm/PrintBuffer.h
    vmkit/trunk/lib/N3/VMCore/CLIJit.cpp
    vmkit/trunk/lib/N3/VMCore/CLIString.h
    vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
    vmkit/trunk/lib/N3/VMCore/VMObject.cpp
    vmkit/trunk/lib/N3/VMCore/VMObject.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=84090&r1=84089&r2=84090&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/PrintBuffer.h (original)
+++ vmkit/trunk/include/mvm/PrintBuffer.h Wed Oct 14 06:48:08 2009
@@ -54,6 +54,12 @@
 		writeObj(obj);
 	}
 
+	PrintBuffer(const Object *obj) {
+		llvm_gcroot(obj, 0);
+		init();
+		writeObj(obj);
+	}
+
 	virtual ~PrintBuffer() {
 		delete contents;
 	}
@@ -145,7 +151,7 @@
     return this;
   }
 
-  /// writeObj - Writes an Object to the buffer.
+  /// writeObj - Writes anything (except an object) to the buffer.
   ///
 	template <class T>
   inline PrintBuffer *writeObj(const T *obj) {
@@ -153,6 +159,14 @@
 		return this;
 	}
 
+  /// writeObj - Writes a gc Object to the buffer.
+  ///
+  inline PrintBuffer *writeObj(const Object *obj) {
+		llvm_gcroot(obj, 0);
+		obj->print(this);
+		return this;
+	}
+
 
   /// replaceWith - replace the content of the buffer and free the old buffer
   ///

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIJit.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIJit.cpp Wed Oct 14 06:48:08 2009
@@ -143,7 +143,8 @@
 
 N3VirtualTable* CLIJit::makeArrayVT(VMClassArray* cl) {
 	VMClass *super = (VMClass*)cl->super;
-  N3VirtualTable * res = new(super->vtSize) N3VirtualTable(super->virtualInstance->getN3VirtualTable(), super->vtSize);
+  N3VirtualTable * res = 
+		new(cl->assembly->allocator, super->vtSize) N3VirtualTable(super->virtualInstance->getN3VirtualTable(), super->vtSize);
 
 #ifdef WITH_TRACER  
   Function* func = Function::Create(markAndTraceLLVMType,
@@ -254,8 +255,8 @@
 	int n                = N3VirtualTable::baseVtSize();
   N3VirtualTable * res =
 		stat || !cl->super ?
-		new(n)          N3VirtualTable(VMObject::VT, n) :
-		new(cl->vtSize) N3VirtualTable(((VMClass *)cl->super)->virtualInstance->getN3VirtualTable(), n, cl->vtSize);
+		new(cl->assembly->allocator, n)          N3VirtualTable(VMObject::VT, n) :
+		new(cl->assembly->allocator, cl->vtSize) N3VirtualTable(((VMClass *)cl->super)->virtualInstance->getN3VirtualTable(), n, cl->vtSize);
 		
 
 #ifdef WITH_TRACER  

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIString.h (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIString.h Wed Oct 14 06:48:08 2009
@@ -23,12 +23,12 @@
 class ArrayChar;
 
 class CLIString : public VMObject {
+	CLIString() {}
 public:
   static N3VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const {
     buf->write("CLI string");
   }
-  virtual void TRACER;
   
   llvm::GlobalVariable* llvmVar();
 

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Wed Oct 14 06:48:08 2009
@@ -168,9 +168,7 @@
 	}
 #endif
   
-  INIT(LockObj);
   INIT(VMObject);
-  INIT(CLIString);
 
 #undef INIT
 

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMObject.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMObject.cpp Wed Oct 14 06:48:08 2009
@@ -18,11 +18,16 @@
 
 using namespace n3;
 
-N3VirtualTable LockObj::_VT(LockObj::_destroy, 0, mvm::no_tracer, LockObj::_print, )
+N3VirtualTable LockObj::_VT((uintptr_t)LockObj::_destroy, 
+														(uintptr_t)0, 
+														(uintptr_t)mvm::Object::default_tracer, 
+														(uintptr_t)LockObj::_print, 
+														(uintptr_t)mvm::Object::default_hashcode);
+N3VirtualTable *LockObj::VT = &_VT;
 
-void *N3VirtualTable::operator new(size_t size, size_t totalVtSize) {
+void *N3VirtualTable::operator new(size_t size, mvm::BumpPtrAllocator &allocator, size_t totalVtSize) {
 	//printf("Allocate N3VirtualTable with %d elements\n", totalVtSize);
-	return malloc(totalVtSize * sizeof(uintptr_t));
+	return allocator.Allocate(totalVtSize * sizeof(uintptr_t), "N3VirtualTable");
 }
 
 N3VirtualTable::N3VirtualTable() {
@@ -46,6 +51,21 @@
   this->lockObj = 0;
 }
 
+
+LockObj* LockObj::allocate() {
+  LockObj* res = gc_new(LockObj)();
+  return res;
+}
+
+void LockObj::_print(const LockObj *self, mvm::PrintBuffer* buf) {
+	llvm_gcroot(self, 0);
+  buf->write("Lock<>");
+}
+
+void LockObj::_destroy(LockObj *self) {
+	llvm_gcroot(self, 0);
+}
+
 void LockObj::notify() {
   for (std::vector<VMThread*>::iterator i = threads.begin(), 
             e = threads.end(); i!= e; ++i) {
@@ -93,15 +113,6 @@
   }
 }
 
-void LockObj::print(mvm::PrintBuffer* buf) const {
-  buf->write("Lock<>");
-}
-
-LockObj* LockObj::allocate() {
-  LockObj* res = gc_new(LockObj)();
-  return res;
-}
-
 void LockObj::aquire() {
   lock.lock();
 }

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMObject.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMObject.h Wed Oct 14 06:48:08 2009
@@ -34,7 +34,7 @@
 	uintptr_t  print;
 	uintptr_t  hashcode;
 
-	void *operator new(size_t size, size_t totalVtSize);
+	void *operator new(size_t size, mvm::BumpPtrAllocator &allocator, size_t totalVtSize);
 
   N3VirtualTable();
   N3VirtualTable(N3VirtualTable *vmobjVt, uint32 baseVtSize, uint32 totalVtSize=-1);
@@ -52,11 +52,8 @@
 
   static LockObj* allocate();
 
-  virtual void print(mvm::PrintBuffer* buf) const;
-  virtual void TRACER;
-
 	static void _destroy(LockObj *);
-	static void _print(LockObj *);
+	static void _print(const LockObj *, mvm::PrintBuffer *);
   
   void notify();
   void notifyAll();

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp Wed Oct 14 06:48:08 2009
@@ -25,7 +25,6 @@
 
 #define INIT(X) N3VirtualTable* X::VT = 0
 
-INIT(LockObj);
 INIT(VMObject);
 INIT(CLIString);
 
@@ -40,17 +39,10 @@
 }
 
 // N3 Objects
-void LockObj::TRACER {
-}
-
 void VMObject::TRACER {
   lockObj->MARK_AND_TRACE;
 }
 
-void CLIString::TRACER {
-	VMObject::CALL_TRACER;
-}
-
 #define TRACE_VECTOR(type, name, alloc) { \
   for (std::vector<type, alloc<type> >::iterator i = name.begin(), e = name.end(); \
        i!= e; ++i) {                                                    \





More information about the vmkit-commits mailing list