3 // Context object count and identifiers must be kept in sync with:
4 // core/kernel/kernel.factor
6 static const cell context_object_count = 10;
15 static const cell stack_reserved = 1024;
19 // First 4 fields accessed directly by compiler. See basis/vm/vm.factor
21 /* Factor callstack pointers */
23 void* callstack_bottom;
25 /* current datastack top pointer */
28 /* current retain stack top pointer */
31 /* C callstack pointer */
34 segment* datastack_seg;
35 segment* retainstack_seg;
36 segment* callstack_seg;
38 /* context-specific special objects, accessed by context-object and
39 set-context-object primitives */
40 cell context_objects[context_object_count];
42 context(cell datastack_size, cell retainstack_size, cell callstack_size);
45 void reset_datastack();
46 void reset_retainstack();
47 void reset_callstack();
48 void reset_context_objects();
50 void scrub_stacks(gc_info* info, cell index);
52 cell peek() { return *(cell*)datastack; }
54 void replace(cell tagged) { *(cell*)datastack = tagged; }
58 datastack -= sizeof(cell);
62 void push(cell tagged) {
63 datastack += sizeof(cell);
68 VM_C_API context* new_context(factor_vm* parent);
69 VM_C_API void delete_context(factor_vm* parent, context* old_context);
70 VM_C_API void reset_context(factor_vm* parent, context* ctx);
71 VM_C_API cell begin_callback(factor_vm* parent, cell quot);
72 VM_C_API void end_callback(factor_vm* parent);