]> gitweb.factorcode.org Git - factor.git/commitdiff
VM: refactoring to use the visit_object_array method
authorBjörn Lindqvist <bjourne@gmail.com>
Mon, 4 May 2015 15:32:51 +0000 (17:32 +0200)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 10 May 2015 03:04:21 +0000 (20:04 -0700)
vm/collector.hpp

index 791446e9fee1f77c66a41e2eed892b4526ee8000..9a5439c86840a1da1a40d2147e8abf22d9f82975 100644 (file)
@@ -100,18 +100,12 @@ template <typename TargetGeneration, typename Policy> struct collector {
   void trace_partial_objects(cell start, cell card_start, cell card_end) {
     object* obj = (object*)start;
     cell end = start + obj->binary_payload_start();
-    if (card_start < end) {
-      start += sizeof(cell);
+    start += sizeof(cell);
 
-      start = std::max(start, card_start);
-      end = std::min(end, card_end);
+    start = std::max(start, card_start);
+    end = std::min(end, card_end);
 
-      cell* slot_ptr = (cell*)start;
-      cell* end_ptr = (cell*)end;
-
-      for (; slot_ptr < end_ptr; slot_ptr++)
-        visitor.visit_handle(slot_ptr);
-    }
+    visitor.visit_object_array((cell*)start, (cell*)end);
   }
 
   template <typename SourceGeneration>
@@ -152,21 +146,20 @@ template <typename TargetGeneration, typename Policy> struct collector {
     /* Address of last traced object. */
     cell start = 0;
 
-    for (cell deck_index = first_deck; deck_index < last_deck; deck_index++) {
-      if (decks[deck_index] & mask) {
-        decks[deck_index] &= ~unmask;
+    for (cell di = first_deck; di < last_deck; di++) {
+      if (decks[di] & mask) {
+        decks[di] &= ~unmask;
         decks_scanned++;
 
-        cell first_card = cards_per_deck * deck_index;
+        cell first_card = cards_per_deck * di;
         cell last_card = first_card + cards_per_deck;
 
-        for (cell card_index = first_card; card_index < last_card;
-             card_index++) {
-          if (cards[card_index] & mask) {
-            cards[card_index] &= ~unmask;
+        for (cell ci = first_card; ci < last_card; ci++) {
+          if (cards[ci] & mask) {
+            cards[ci] &= ~unmask;
             cards_scanned++;
 
-            start = trace_card(gen, card_index, start);
+            start = trace_card(gen, ci, start);
             if (!start) {
               /* At end of generation, no need to scan more cards. */
               return;