[vmkit-commits] [vmkit] r83247 - in /vmkit/trunk/lib/N3: PNetLib/PNetLib.cpp VMCore/Assembly.cpp VMCore/Assembly.h VMCore/LockedMap.h VMCore/N3.cpp VMCore/N3.h VMCore/N3Initialise.cpp VMCore/Reader.cpp VMCore/Reader.h VMCore/VirtualTables.cpp

Gael Thomas gael.thomas at lip6.fr
Fri Oct 2 07:02:29 PDT 2009


Author: gthomas
Date: Fri Oct  2 09:02:28 2009
New Revision: 83247

URL: http://llvm.org/viewvc/llvm-project?rev=83247&view=rev
Log:
A reader is now allocated by a BumpPtrAllocator. Use constructors whenever possible (and remove static allocate functions).


Modified:
    vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp
    vmkit/trunk/lib/N3/VMCore/Assembly.cpp
    vmkit/trunk/lib/N3/VMCore/Assembly.h
    vmkit/trunk/lib/N3/VMCore/LockedMap.h
    vmkit/trunk/lib/N3/VMCore/N3.cpp
    vmkit/trunk/lib/N3/VMCore/N3.h
    vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
    vmkit/trunk/lib/N3/VMCore/Reader.cpp
    vmkit/trunk/lib/N3/VMCore/Reader.h
    vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp

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

==============================================================================
--- vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp (original)
+++ vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp Fri Oct  2 09:02:28 2009
@@ -840,7 +840,7 @@
   uint32 length = 0;
   uint32 pad = 0;
   
-  Reader* reader = Reader::allocateReader(ass->bytes);
+  Reader* reader = ass->newReader(ass->bytes);
   section = textSection->rawAddress + (resRva - textSection->virtualAddress);
 
   reader->seek(section, Reader::SeekSet);

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Assembly.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/Assembly.cpp Fri Oct  2 09:02:28 2009
@@ -464,17 +464,15 @@
   return meth;
 }
 
-Assembly* Assembly::allocate(const UTF8* name) {
-	mvm::BumpPtrAllocator *a = new mvm::BumpPtrAllocator();
-  Assembly* ass = new(*a, "Assembly") Assembly(*a);
-  ass->loadedNameClasses = ClassNameMap::allocate(ass->allocator);
-  ass->loadedTokenClasses = ClassTokenMap::allocate(ass->allocator);
-  ass->loadedTokenMethods = MethodTokenMap::allocate(ass->allocator);
-  ass->loadedTokenFields = FieldTokenMap::allocate(ass->allocator);
-  ass->assemblyRefs = 0;
-  ass->isRead = false;
-  ass->name = name;
-  return ass;
+Assembly::Assembly(mvm::BumpPtrAllocator &allocator, const UTF8 *name) : allocator(allocator) {
+  this->loadedNameClasses =  new(allocator, "ClassNameMap")   ClassNameMap();
+  this->loadedTokenClasses = new(allocator, "ClassTokenMap")  ClassTokenMap();
+  this->loadedTokenMethods = new(allocator, "MethodTokenMap") MethodTokenMap();
+  this->loadedTokenFields =  new(allocator, "FieldTokenMap")  FieldTokenMap();
+
+  this->assemblyRefs = 0;
+  this->isRead = false;
+  this->name = name;
 }
 
 static void unimplemented(uint32 index,
@@ -669,7 +667,7 @@
   characteristics   = reader->readU4();
 }
 
-void Header::read(Reader* reader, N3* vm) {
+void Header::read(mvm::BumpPtrAllocator &allocator, Reader* reader, N3* vm) {
   uint32 start = reader->cursor;
   signature = reader->readU4();
   major = reader->readU2();
@@ -686,7 +684,7 @@
     uint32 len = 
       strlen((char*)(&(reader->bytes->elements[reader->cursor])));
 
-    Stream* stream = gc_new(Stream)();
+    Stream* stream = new(allocator, "Stream") Stream();
     char* str = (char*)malloc(len + 1);
     memcpy(str, &(reader->bytes->elements[reader->cursor]), len + 1);
     reader->cursor += (len + (4 - (len % 4)));
@@ -788,7 +786,7 @@
   uint32 offset = 0;
 
   for (uint32 i = 0; i < 32; ++i) {
-    Table* table = gc_new(Table)();
+    Table* table = new(allocator, "Table") Table();
     if ((1 << i) & validLow) {
       table->rowsNumber = reader->readU4();
       ++tableNumber;
@@ -799,7 +797,7 @@
   }
 
   for (uint32 i = 0; i < 32; ++i) {
-    Table* table = gc_new(Table)();
+    Table* table = new(allocator, "Table") Table();
     if ((1 << i) & validHigh) {
       table->rowsNumber = reader->readU4();
       ++tableNumber;
@@ -824,14 +822,18 @@
   }
 }
 
+Reader *Assembly::newReader(ArrayUInt8* array, uint32 start, uint32 end) { 
+	return new(allocator, "Reader") Reader(array, start, end); 
+}
+
 void Assembly::read() {
-  Reader* reader = Reader::allocateReader(bytes);
+  Reader* reader = newReader(bytes);
   PRINT_DEBUG(DEBUG_LOAD, 1, LIGHT_GREEN, "Reading %s::%s", vm->printString(),
               this->printString());
 
-  textSection = gc_new(Section)();
-  rsrcSection = gc_new(Section)();
-  relocSection = gc_new(Section)();
+  textSection =  new(allocator, "Section") Section();
+  rsrcSection =  new(allocator, "Section") Section();
+  relocSection = new(allocator, "Section") Section();
 
   reader->seek(TEXT_SECTION_HEADER, Reader::SeekSet);
   textSection->read(reader, vm);
@@ -857,8 +859,8 @@
   reader->seek(textSection->rawAddress + (mdRva - textSection->virtualAddress),
                Reader::SeekSet);
 
-  CLIHeader = gc_new(Header)();
-  CLIHeader->read(reader, vm);
+  CLIHeader = new (allocator, "Header") Header();
+  CLIHeader->read(allocator, reader, vm);
 
   reader->seek(CLIHeader->tildStream->realOffset, Reader::SeekSet);
 

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Assembly.h (original)
+++ vmkit/trunk/lib/N3/VMCore/Assembly.h Fri Oct  2 09:02:28 2009
@@ -52,9 +52,8 @@
 class VMGenericClass;
 class VMGenericMethod;
 
-class Section : public mvm::Object {
+class Section : public mvm::PermanentObject {
 public:
-  static VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
   
@@ -72,9 +71,8 @@
   void read(Reader* reader, N3* vm);
 };
 
-class Stream : public mvm::Object {
+class Stream : public mvm::PermanentObject {
 public:
-  static VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
 
@@ -83,9 +81,8 @@
   uint32 size;
 };
 
-class Table : public mvm::Object {
+class Table : public mvm::PermanentObject {
 public:
-  static VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
 
@@ -101,9 +98,8 @@
 };
 
 
-class Header : public mvm::Object {
+class Header : public mvm::PermanentObject {
 public:
-  static VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
 
@@ -123,7 +119,7 @@
   Stream* guidStream;
   std::vector<Table*, gc_allocator<Table*> > tables;
   
-  void read(Reader* reader, N3* vm);
+  void read(mvm::BumpPtrAllocator &allocator, Reader* reader, N3* vm);
 };
 
 typedef void (*maskVector_t)(uint32 index,
@@ -189,9 +185,8 @@
 
 	mvm::BumpPtrAllocator &allocator;
 
-	Assembly(mvm::BumpPtrAllocator &Alloc) : allocator(Alloc) {}
+	Assembly(mvm::BumpPtrAllocator &Alloc, const UTF8* name);
 
-  static Assembly* allocate(const UTF8* name);
   static const UTF8* readUTF8(VirtualMachine* vm, uint32 len, Reader* reader);
   static const UTF8* readUTF16(VirtualMachine* vm, uint32 len, Reader* reader);
   static const UTF8* readUTF8(VirtualMachine* vm, uint32 len, ArrayUInt8* bytes,
@@ -208,6 +203,8 @@
   static const char* signatureNames[0x46];
   
 
+	Reader *newReader(ArrayUInt8* array, uint32 start = 0, uint32 end = 0);
+
   uint32 uncompressSignature(uint32& offset);
   uint32 getTypeDefTokenFromMethod(uint32 token);
   VMCommonClass* loadType(N3* vm, uint32 token, bool resolveFunc, bool resolve,
@@ -268,7 +265,6 @@
 private:
     VMMethod *instantiateGenericMethod(std::vector<VMCommonClass*> *genArgs, VMCommonClass *type, const UTF8 *& name, std::vector<VMCommonClass*> & args, uint32 token, bool virt, VMGenericClass* genClass);
 
-
 };
 
 

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/N3/VMCore/LockedMap.h Fri Oct  2 09:02:28 2009
@@ -39,12 +39,17 @@
 template<class Key, class Container, class Compare, class Upcall>
 class LockedMap : public mvm::PermanentObject {
 public:
+
   typedef typename std::map<const Key, Container*, Compare>::iterator iterator;
   typedef Container* (*funcCreate)(Key& V, Upcall* ass);
 
-  mvm::Lock* lock;
+  mvm::Lock *lock;
   std::map<Key, Container*, Compare,
            gc_allocator<std::pair<const Key, Container*> > > map;
+
+	LockedMap(mvm::Lock *lock) {
+		this->lock = lock;
+	}
   
   inline Container* lookupOrCreate(Key& V, Upcall* ass, funcCreate func) {
     lock->lock();
@@ -117,76 +122,40 @@
 };
 
 
-class ClassNameMap : 
-  public LockedMap<ClassNameCmp, VMCommonClass, std::less<ClassNameCmp>, Assembly > {
+class ClassNameMap : public LockedMap<ClassNameCmp, VMCommonClass, std::less<ClassNameCmp>, Assembly > {
 public:
-  static ClassNameMap* allocate(mvm::BumpPtrAllocator &allocator) {
-    ClassNameMap* map = new(allocator, "ClassNameMap") ClassNameMap();
-    map->lock = new mvm::LockNormal();
-    return map;
-  }
+	ClassNameMap() : LockedMap<ClassNameCmp, VMCommonClass, std::less<ClassNameCmp>, Assembly >(new mvm::LockNormal()) {}
 };
 
-class ClassTokenMap : 
-  public LockedMap<uint32, VMCommonClass, std::less<uint32>, Assembly > {
+class ClassTokenMap : public LockedMap<uint32, VMCommonClass, std::less<uint32>, Assembly > {
 public:
-  static ClassTokenMap* allocate(mvm::BumpPtrAllocator &allocator) {
-    ClassTokenMap* map = new(allocator, "ClassTokenMap") ClassTokenMap();
-    map->lock = new mvm::LockNormal();
-    return map;
-  }
-  
+	ClassTokenMap() : LockedMap<uint32, VMCommonClass, std::less<uint32>, Assembly >(new mvm::LockNormal()) {}
 };
 
-class FieldTokenMap : 
-  public LockedMap<uint32, VMField, std::less<uint32>, Assembly > {
+class FieldTokenMap : public LockedMap<uint32, VMField, std::less<uint32>, Assembly > {
 public:
-  static FieldTokenMap* allocate(mvm::BumpPtrAllocator &allocator) {
-    FieldTokenMap* map = new(allocator, "FieldTokenMap") FieldTokenMap();
-    map->lock = new mvm::LockNormal();
-    return map;
-  }
+	FieldTokenMap() : LockedMap<uint32, VMField, std::less<uint32>, Assembly >(new mvm::LockNormal()) {}
 };
 
-class MethodTokenMap : 
-  public LockedMap<uint32, VMMethod, std::less<uint32>, Assembly > {
+class MethodTokenMap : public LockedMap<uint32, VMMethod, std::less<uint32>, Assembly > {
 public:
-  static MethodTokenMap* allocate(mvm::BumpPtrAllocator &allocator) {
-    MethodTokenMap* map = new(allocator, "MethodTokenMap") MethodTokenMap();
-    map->lock = new mvm::LockNormal();
-    return map;
-  }
+	MethodTokenMap() : LockedMap<uint32, VMMethod, std::less<uint32>, Assembly >(new mvm::LockNormal()) {}
 };
 
-class AssemblyMap : 
-  public LockedMap<const UTF8*, Assembly, std::less<const UTF8*>, N3 > {
+class AssemblyMap : public LockedMap<const UTF8*, Assembly, std::less<const UTF8*>, N3 > {
 public:
-  static AssemblyMap* allocate(mvm::BumpPtrAllocator &allocator) {
-    AssemblyMap* map = new(allocator, "AssemblyMap") AssemblyMap();
-    map->lock = new mvm::LockNormal();
-    return map;
-  }
+	AssemblyMap() : LockedMap<const UTF8*, Assembly, std::less<const UTF8*>, N3 >(new mvm::LockNormal()) {}
 };
 
 
-class StringMap :
-    public LockedMap<const UTF8*, CLIString, std::less<const UTF8*>, N3 > { 
+class StringMap : public LockedMap<const UTF8*, CLIString, std::less<const UTF8*>, N3 > { 
 public:
-  static StringMap* allocate(mvm::BumpPtrAllocator &allocator) {
-    StringMap* map = new(allocator, "StringMap") StringMap();
-    map->lock = new mvm::LockRecursive();
-    return map;
-  }
+	StringMap() : LockedMap<const UTF8*, CLIString, std::less<const UTF8*>, N3 >(new mvm::LockRecursive()) {}
 };
 
-class FunctionMap :
-    public LockedMap<llvm::Function*, VMMethod, std::less<llvm::Function*>, N3 > { 
+class FunctionMap : public LockedMap<llvm::Function*, VMMethod, std::less<llvm::Function*>, N3 > { 
 public:
-  static FunctionMap* allocate(mvm::BumpPtrAllocator &allocator) {
-    FunctionMap* map = new(allocator, "FunctionMap") FunctionMap();
-    map->lock = new mvm::LockNormal();
-    return map;
-  }
+	FunctionMap() : LockedMap<llvm::Function*, VMMethod, std::less<llvm::Function*>, N3 >(new mvm::LockNormal()) {}
 };
 
 
@@ -202,6 +171,10 @@
   const UTF8* lookupOrCreateAsciiz(const char* asciiz); 
   const UTF8* lookupOrCreateReader(const uint16* buf, uint32 size);
   
+  UTF8Map() {
+    lock = new mvm::LockNormal();
+  }
+  
   virtual void TRACER {
     //lock->MARK_AND_TRACE;
     for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
@@ -212,14 +185,6 @@
   virtual void print(mvm::PrintBuffer* buf) const {
     buf->write("UTF8 Hashtable<>");
   }
-  
-  static UTF8Map* allocate(mvm::BumpPtrAllocator &allocator) {
-    UTF8Map* map = new(allocator, "UTF8Map") UTF8Map();
-    map->lock = new mvm::LockNormal();
-    return map;
-  }
-
-
 };
 
 } // end namespace n3

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3.cpp Fri Oct  2 09:02:28 2009
@@ -47,8 +47,8 @@
 }
 
 static Assembly* assemblyDup(const UTF8*& name, N3* vm) {
-  Assembly* res = Assembly::allocate(name);
-  return res;
+	mvm::BumpPtrAllocator *a = new mvm::BumpPtrAllocator();
+  return new(*a, "Assembly") Assembly(*a, name);
 }
 
 Assembly* N3::constructAssembly(const UTF8* name) {
@@ -59,55 +59,48 @@
   return loadedAssemblies->lookup(name);
 }
 
+N3::N3(mvm::BumpPtrAllocator &allocator, const char *name) : VirtualMachine(allocator) {
+	this->name =              name;
+
+  this->scanner =           new mvm::UnpreciseStackScanner(); 
+  this->LLVMModule =        new llvm::Module(name, llvm::getGlobalContext());
+  this->module =            new mvm::MvmModule(this->LLVMModule);
+
+  this->LLVMModule->setDataLayout(mvm::MvmModule::executionEngine->getTargetData()->getStringRepresentation());
+  this->protectModule =     new mvm::LockNormal();
+
+  this->functions =         new(allocator, "FunctionMap") FunctionMap();
+  this->hashStr =           new(allocator, "StringMap")   StringMap();
+  this->loadedAssemblies =  new(allocator, "AssemblyMap") AssemblyMap();
+
+  this->TheModuleProvider = new N3ModuleProvider(this->LLVMModule, this->functions);
+}
+
 N3* N3::allocateBootstrap() {
   mvm::BumpPtrAllocator *a = new mvm::BumpPtrAllocator();
-  N3 *vm= new(*a, "VM") N3(*a);
-
-  std::string str = 
-    mvm::MvmModule::executionEngine->getTargetData()->getStringRepresentation();
+  N3 *vm= new(*a, "VM") N3(*a, "bootstrapN3");
+  
+  vm->hashUTF8 =         new(vm->allocator, "UTF8Map")     UTF8Map();
 
-  vm->LLVMModule = new llvm::Module("Bootstrap N3", llvm::getGlobalContext());
-  vm->module = new mvm::MvmModule(vm->LLVMModule);
-  vm->getLLVMModule()->setDataLayout(str);
-  vm->protectModule = new mvm::LockNormal();
-  vm->functions = FunctionMap::allocate(vm->allocator);
-  vm->TheModuleProvider = new N3ModuleProvider(vm->LLVMModule, vm->functions);
   CLIJit::initialiseBootstrapVM(vm);
   
-  vm->name = "bootstrapN3";
-  vm->hashUTF8 = UTF8Map::allocate(vm->allocator);
-  vm->hashStr = StringMap::allocate(vm->allocator);
-  vm->loadedAssemblies = AssemblyMap::allocate(vm->allocator);
-  vm->scanner = new mvm::UnpreciseStackScanner(); 
-  
   return vm;
 }
 
 
 N3* N3::allocate(const char* name, N3* parent) {
   mvm::BumpPtrAllocator *a = new mvm::BumpPtrAllocator();
-  N3 *vm= new(*a, "VM") N3(*a);
-  vm->scanner = new mvm::UnpreciseStackScanner(); 
-  
-  std::string str = 
-    mvm::MvmModule::executionEngine->getTargetData()->getStringRepresentation();
-  vm->LLVMModule = new llvm::Module("Bootstrap N3", llvm::getGlobalContext());
-  vm->module = new mvm::MvmModule(vm->LLVMModule);
-  vm->LLVMModule->setDataLayout(str);
-  vm->protectModule = new mvm::LockNormal();
-  vm->functions = FunctionMap::allocate(vm->allocator);
-  vm->TheModuleProvider = new N3ModuleProvider(vm->LLVMModule, vm->functions);
-  CLIJit::initialiseAppDomain(vm);
+  N3 *vm= new(*a, "VM") N3(*a, name);
 
+  vm->hashUTF8 = parent->hashUTF8;
   
   vm->threadSystem = ThreadSystem::allocateThreadSystem();
-  vm->name = name;
-  vm->hashUTF8 = parent->hashUTF8;
-  vm->hashStr = StringMap::allocate(vm->allocator);
-  vm->loadedAssemblies = AssemblyMap::allocate(vm->allocator);
+
   vm->assemblyPath = parent->assemblyPath;
   vm->coreAssembly = parent->coreAssembly;
   vm->loadedAssemblies->hash(parent->coreAssembly->name, parent->coreAssembly);
+
+  CLIJit::initialiseAppDomain(vm);
   
   return vm; 
 }

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3.h (original)
+++ vmkit/trunk/lib/N3/VMCore/N3.h Fri Oct  2 09:02:28 2009
@@ -53,8 +53,6 @@
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
 
-	N3(mvm::BumpPtrAllocator &allocator) : VirtualMachine(allocator) {}
-
   VMObject*     asciizToStr(const char* asciiz);
   VMObject*     UTF8ToStr(const UTF8* utf8);
   Assembly*     constructAssembly(const UTF8* name);
@@ -67,6 +65,10 @@
   std::vector<const char*> assemblyPath;
   Assembly* coreAssembly;
 
+private:
+	N3(mvm::BumpPtrAllocator &allocator, const char *name);
+
+public:
 
   static N3* allocateBootstrap();
   static N3* allocate(const char* name, N3* parent);

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Fri Oct  2 09:02:28 2009
@@ -177,12 +177,8 @@
 	}
 #endif
   
-  INIT(Header);
   INIT(Property);
   INIT(Param);
-  INIT(Section);
-  INIT(Stream);
-  INIT(Table);
   INIT(VMArray);
   INIT(ArrayUInt8);
   INIT(ArraySInt8);
@@ -207,9 +203,7 @@
   INIT(LockObj);
   INIT(VMObject);
   INIT(VMThread);
-  //mvm::Key<VMThread>::VT = mvm::ThreadKey::VT;
   INIT(ThreadSystem);
-  INIT(Reader);
   INIT(CLIString);
   INIT(CLIJit);
   INIT(CacheNode);

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Reader.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/Reader.cpp Fri Oct  2 09:02:28 2009
@@ -104,25 +104,23 @@
   return tmp | (((sint64)(readS8())) << 32);
 }
 
-Reader* Reader::allocateReader(ArrayUInt8* array, uint32 start,
-                               uint32 end) {
-  Reader* reader = gc_new(Reader)();
-  if (!end) end = array->size;
-  reader->bytes = array;
-  reader->cursor = start;
-  reader->min = start;
-  reader->max = start + end;
-  return reader;
-
+Reader::Reader(ArrayUInt8* array, uint32 start, uint32 end) {
+  if (!end) 
+		end = array->size;
+
+  bytes = array;
+  cursor = start;
+  min = start;
+  max = start + end;
 }
 
 unsigned int Reader::tell() {
   return cursor - min;
 }
 
-Reader* Reader::derive(uint32 nbb) {
-  return allocateReader(bytes, cursor, nbb);
-}
+// Reader* Reader::derive(uint32 nbb) {
+//   return new(allocator, "Reader") Reader(allocator, bytes, cursor, nbb);
+// }
 
 void Reader::seek(uint32 pos, int from) {
   uint32 n = 0;

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Reader.h (original)
+++ vmkit/trunk/lib/N3/VMCore/Reader.h Fri Oct  2 09:02:28 2009
@@ -19,14 +19,15 @@
 namespace n3 {
 
 
-class Reader : public mvm::Object {
+class Reader : public mvm::PermanentObject {
 public:
-  static VirtualTable* VT;
   ArrayUInt8* bytes;
   uint32 min;
   uint32 cursor;
   uint32 max;
 
+  Reader(ArrayUInt8* array, uint32 start = 0, uint32 end = 0);
+
   static double readDouble(int first, int second);
   static sint64 readLong(int first, int second);
 
@@ -43,10 +44,8 @@
   sint32 readS4();
   uint64 readU8();
   sint64 readS8();
-  static Reader* allocateReader(ArrayUInt8* array, uint32 start = 0,
-                                uint32 end = 0);
   unsigned int tell();
-  Reader* derive(uint32 nbb);
+	//  Reader* derive(uint32 nbb);
   void seek(uint32 pos, int from);
 
   virtual void print(mvm::PrintBuffer* buf) const;

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp Fri Oct  2 09:02:28 2009
@@ -50,17 +50,12 @@
   INIT(LockObj);
   INIT(VMObject);
   INIT(VMThread);
-  INIT(Section);
-  INIT(Stream);
-  INIT(Table);
-  INIT(Header);
   INIT(ThreadSystem);
   INIT(CLIString);
   INIT(Property);
   INIT(Param);
   INIT(CacheNode);
   INIT(Enveloppe);
-  INIT(Reader);
   INIT(Opinfo);
   INIT(CLIJit);
   INIT(Exception);
@@ -132,6 +127,12 @@
        i!= e; ++i) {                                                    \
     (*i)->MARK_AND_TRACE; }}
 
+#define CALL_TRACER_VECTOR(type, name, alloc) { \
+  for (std::vector<type, alloc<type> >::iterator i = name.begin(), e = name.end(); \
+       i!= e; ++i) {                                                    \
+    (*i)->CALL_TRACER; }}
+
+
 void VMCommonClass::TRACER {
   name->MARK_AND_TRACE;
   nameSpace->MARK_AND_TRACE;
@@ -255,10 +256,10 @@
   //condVar->MARK_AND_TRACE;
   name->MARK_AND_TRACE;
   bytes->MARK_AND_TRACE;
-  textSection->MARK_AND_TRACE;
-  rsrcSection->MARK_AND_TRACE;
-  relocSection->MARK_AND_TRACE;
-  CLIHeader->MARK_AND_TRACE;
+  textSection->CALL_TRACER;
+  rsrcSection->CALL_TRACER;
+  relocSection->CALL_TRACER;
+  CLIHeader->CALL_TRACER;
   vm->CALL_TRACER;
   delegatee->MARK_AND_TRACE;
   // TODO trace assembly refs...
@@ -282,12 +283,12 @@
 
 void Header::TRACER {
   versionName->MARK_AND_TRACE;
-  tildStream->MARK_AND_TRACE;
-  stringStream->MARK_AND_TRACE;
-  usStream->MARK_AND_TRACE;
-  blobStream->MARK_AND_TRACE;
-  guidStream->MARK_AND_TRACE;
-  TRACE_VECTOR(Table*, tables, gc_allocator);
+  tildStream->CALL_TRACER;
+  stringStream->CALL_TRACER;
+  usStream->CALL_TRACER;
+  blobStream->CALL_TRACER;
+  guidStream->CALL_TRACER;
+  CALL_TRACER_VECTOR(Table*, tables, gc_allocator);
 }
 
 void CLIString::TRACER {





More information about the vmkit-commits mailing list