]> gitweb.factorcode.org Git - factor.git/commitdiff
VM: change type of bignum_roots and remove unnecessary not-null checks
authorBjörn Lindqvist <bjourne@gmail.com>
Thu, 12 Jun 2014 17:10:42 +0000 (19:10 +0200)
committerJohn Benediktsson <mrjbq7@gmail.com>
Thu, 12 Jun 2014 20:50:10 +0000 (13:50 -0700)
Declaring bignum_roots to contain bignum** instead of cell avoids some
superfluous casts. Casting it to cell is wrong because the items in it
are never tagged. And due to a earlier commit, bignum_roots will never
contain NULL:s so checking for them is not needed.

vm/data_roots.hpp
vm/slot_visitor.hpp
vm/vm.hpp

index 628733291a2d763e4a1ee9ca0002a29faaccc3f4..fe71eb65f709f6b58e623e37010c4d40d02403f7 100644 (file)
@@ -35,13 +35,12 @@ struct gc_bignum {
   factor_vm* parent;
 
   gc_bignum(bignum** addr, factor_vm* parent) : addr(addr), parent(parent) {
-    if (*addr)
-      parent->check_data_pointer(*addr);
-    parent->bignum_roots.push_back((cell)addr);
+    parent->check_data_pointer(*addr);
+    parent->bignum_roots.push_back(addr);
   }
 
   ~gc_bignum() {
-    FACTOR_ASSERT(parent->bignum_roots.back() == (cell)addr);
+    FACTOR_ASSERT(parent->bignum_roots.back() == addr);
     parent->bignum_roots.pop_back();
   }
 };
index 094a178a189e9667a8a8b228572d48fbd975b75d..ca126feecccf8070e40bd5c68817944dec9b6509 100644 (file)
@@ -186,14 +186,14 @@ template <typename Fixup> void slot_visitor<Fixup>::visit_data_roots() {
 }
 
 template <typename Fixup> void slot_visitor<Fixup>::visit_bignum_roots() {
-  std::vector<cell>::const_iterator iter = parent->bignum_roots.begin();
-  std::vector<cell>::const_iterator end = parent->bignum_roots.end();
+  std::vector<bignum**>::const_iterator iter =
+      parent->bignum_roots.begin();
+  std::vector<bignum**>::const_iterator end =
+      parent->bignum_roots.end();
 
   for (; iter < end; iter++) {
-    cell* handle = (cell*)(*iter);
-
-    if (*handle)
-      *handle = (cell)fixup.fixup_data(*(object**)handle);
+    bignum** ref = *iter;
+    *ref = (bignum*)fixup.fixup_data(*ref);
   }
 }
 
index ce2c7913cbd11af4102d8e57c4970a550c76819b..6fc899ae0b07c9d396711af03bc1531c08f8f909 100644 (file)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -114,7 +114,7 @@ struct factor_vm {
      themselves here. See data_roots.hpp and code_roots.hpp */
 
   std::vector<cell*> data_roots;
-  std::vector<cell> bignum_roots;
+  std::vector<bignum**> bignum_roots;
   std::vector<code_root*> code_roots;
 
   /* Debugger */