Beispiel #1
0
inline void factorvm::do_slots(cell obj, void (* iter)(cell *,factorvm*))
{
	cell scan = obj;
	cell payload_start = binary_payload_start((object *)obj);
	cell end = obj + payload_start;

	scan += sizeof(cell);

	while(scan < end)
	{
		iter((cell *)scan,this);
		scan += sizeof(cell);
	}
}
Beispiel #2
0
/* Every object has a regular representation in the runtime, which makes GC
much simpler. Every slot of the object until binary_payload_start is a pointer
to some other object. */
inline static void do_slots(cell obj, void (* iter)(cell *))
{
	cell scan = obj;
	cell payload_start = binary_payload_start((object *)obj);
	cell end = obj + payload_start;

	scan += sizeof(cell);

	while(scan < end)
	{
		iter((cell *)scan);
		scan += sizeof(cell);
	}
}
Beispiel #3
0
inline cell object::binary_payload_start() const {
  return binary_payload_start(no_fixup());
}