[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