]> gitweb.factorcode.org Git - factor.git/blob - vm/callbacks.hpp
vm: code heap compaction at runtime using compact-gc primitive
[factor.git] / vm / callbacks.hpp
1 namespace factor
2 {
3
4 struct callback {
5         cell size;
6         code_block *compiled;
7         void *code() { return (void *)(this + 1); }
8 };
9
10 struct callback_heap {
11         segment *seg;
12         cell here;
13         factor_vm *myvm;
14
15         explicit callback_heap(cell size, factor_vm *myvm);
16         ~callback_heap();
17
18         callback *callback_heap::add(code_block *compiled);
19         void update(callback *stub);
20
21         callback *next(callback *stub)
22         {
23                 return (callback *)((cell)stub + stub->size + sizeof(callback));
24         }
25
26         template<typename Iterator> void iterate(Iterator &iter)
27         {
28                 callback *scan = (callback *)seg->start;
29                 callback *end = (callback *)here;
30                 while(scan < end)
31                 {
32                         iter(scan);
33                         scan = next(scan);
34                 }
35         }
36 };
37
38 }