4 static const cell context_object_count = 10;
13 // First 4 fields accessed directly by compiler. See basis/vm/vm.factor
15 /* Factor callstack pointers */
16 stack_frame *callstack_top;
17 stack_frame *callstack_bottom;
19 /* current datastack top pointer */
22 /* current retain stack top pointer */
25 /* C callstack pointer */
28 /* context-specific special objects, accessed by context-object and
29 set-context-object primitives */
30 cell context_objects[context_object_count];
32 segment *datastack_seg;
33 segment *retainstack_seg;
34 segment *callstack_seg;
36 context(cell datastack_size, cell retainstack_size, cell callstack_size);
39 void reset_datastack();
40 void reset_retainstack();
41 void reset_callstack();
42 void reset_context_objects();
47 return *(cell *)datastack;
50 void replace(cell tagged)
52 *(cell *)datastack = tagged;
58 datastack -= sizeof(cell);
62 void push(cell tagged)
64 datastack += sizeof(cell);
68 static const cell stack_reserved = (64 * sizeof(cell));
72 if(datastack + sizeof(cell) < datastack_seg->start
73 || datastack + stack_reserved >= datastack_seg->end)
76 if(retainstack + sizeof(cell) < retainstack_seg->start
77 || retainstack + stack_reserved >= retainstack_seg->end)
82 VM_C_API void begin_callback(factor_vm *vm);
83 VM_C_API void end_callback(factor_vm *vm);