factor/vm/callbacks.hpp

39 lines
657 B
C++

namespace factor
{
struct callback {
cell size;
code_block *compiled;
void *code() { return (void *)(this + 1); }
};
struct callback_heap {
segment *seg;
cell here;
factor_vm *parent;
explicit callback_heap(cell size, factor_vm *parent);
~callback_heap();
callback *add(code_block *compiled);
void update(callback *stub);
callback *next(callback *stub)
{
return (callback *)((cell)stub + stub->size + sizeof(callback));
}
template<typename Iterator> void iterate(Iterator &iter)
{
callback *scan = (callback *)seg->start;
callback *end = (callback *)here;
while(scan < end)
{
iter(scan);
scan = next(scan);
}
}
};
}