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();
}
};
}
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);
}
}
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 */