]> gitweb.factorcode.org Git - factor.git/commitdiff
VM: move free_list_allocator<Block>::next_allocated_block_after to
authorBjörn Lindqvist <bjourne@gmail.com>
Sat, 30 May 2015 18:07:16 +0000 (20:07 +0200)
committerBjörn Lindqvist <bjourne@gmail.com>
Fri, 5 Jun 2015 00:14:49 +0000 (02:14 +0200)
tenured_space::next_allocated_object_after, because it's only used there

vm/free_list_allocator.hpp
vm/tenured_space.hpp

index 165a65591d99891faa09a20d3fa0bce6a28837cf..eed481120afdf065636a127d6bcd4d794751a821 100644 (file)
@@ -18,7 +18,6 @@ template <typename Block> struct free_list_allocator {
   free_list_allocator(cell size, cell start);
   void initial_free_list(cell occupied);
   bool contains_p(Block* block);
-  Block* next_allocated_block_after(Block* block);
   bool can_allot_p(cell size);
   Block* allot(cell size);
   void free(Block* block);
@@ -55,19 +54,6 @@ bool free_list_allocator<Block>::contains_p(Block* block) {
   return ((cell)block - start) < size;
 }
 
-template <typename Block>
-Block* free_list_allocator<Block>::next_allocated_block_after(Block* block) {
-  while ((cell)block != this->end && block->free_p()) {
-    free_heap_block* free_block = (free_heap_block*)block;
-    block = (Block*)((cell)free_block + free_block->size());
-  }
-
-  if ((cell)block == this->end)
-    return NULL;
-  else
-    return block;
-}
-
 template <typename Block>
 bool free_list_allocator<Block>::can_allot_p(cell size) {
   return free_blocks.can_allot_p(size);
@@ -155,7 +141,7 @@ template <typename Block, typename Iterator> struct heap_compactor {
 
   void operator()(Block* block, cell size) {
     if (this->state->marked_p((cell)block)) {
-      *finger = (Block*)((char*)block + size);
+      *finger = (Block*)((cell)block + size);
       memmove((Block*)address, block, size);
       iter(block, (Block*)address, size);
       address += size;
@@ -182,15 +168,12 @@ void free_list_allocator<Block>::compact(Iterator& iter, Fixup fixup,
 template <typename Block>
 template <typename Iterator, typename Fixup>
 void free_list_allocator<Block>::iterate(Iterator& iter, Fixup fixup) {
-  Block* scan = (Block*)this->start;
-  Block* end = (Block*)this->end;
-
-  while (scan != end) {
-    cell size = fixup.size(scan);
-    Block* next = (Block*)((cell)scan + size);
-    if (!scan->free_p())
-      iter(scan, size);
-    scan = next;
+  cell scan = this->start;
+  while (scan != this->end) {
+    cell size = fixup.size((Block*)scan);
+    if (!((Block*)scan)->free_p())
+      iter((Block*)scan, size);
+    scan += size;
   }
 }
 
index 33ed45df47292d4fd82a62e5ece77ac378c1aa4e..5d06683677f0427ff2dd53db269a169675c2f05d 100644 (file)
@@ -15,14 +15,21 @@ struct tenured_space : free_list_allocator<object> {
       return NULL;
   }
 
+  cell next_allocated_object_after(cell scan) {
+    while (scan != this->end && ((object*)scan)->free_p()) {
+      free_heap_block* free_block = (free_heap_block*)scan;
+      scan = (cell)free_block + free_block->size();
+    }
+    return scan == this->end ? 0 : scan;
+  }
+
   cell first_object() {
-    return (cell)next_allocated_block_after((object*)this->start);
+    return next_allocated_object_after(this->start);
   }
 
   cell next_object_after(cell scan) {
     cell size = ((object*)scan)->size();
-    object* next = (object*)(scan + size);
-    return (cell)next_allocated_block_after(next);
+    return next_allocated_object_after(scan + size);
   }
 
   void sweep() {