scm_t_bits scm_tc16_vm;
-static SCM the_vm;
+SCM scm_the_vm_fluid;
static SCM
make_vm (void)
"")
#define FUNC_NAME s_scm_the_vm
{
- return the_vm;
+ return scm_fluid_ref (scm_the_vm_fluid);
}
#undef FUNC_NAME
{
SCM program = scm_objcode_to_program (scm_load_objcode (file));
- return vm_run (the_vm, program, SCM_EOL);
+ return vm_run (scm_the_vm (), program, SCM_EOL);
}
void
scm_set_smob_free (scm_tc16_vm, vm_free);
scm_set_smob_apply (scm_tc16_vm, scm_vm_apply, 1, 0, 1);
- the_vm = scm_permanent_object (make_vm ());
+ scm_the_vm_fluid = scm_permanent_object (scm_make_fluid ());
+ scm_fluid_set_x (scm_the_vm_fluid, make_vm ());
+ scm_c_define ("*the-vm*", scm_the_vm_fluid);
scm_c_define ("load-compiled",
scm_c_make_gsubr ("load-compiled/vm", 1, 0, 0,
unsigned long clock; /* bogos clock */
};
+extern SCM scm_the_vm_fluid;
+
#define SCM_VM_P(x) SCM_SMOB_PREDICATE (scm_tc16_vm, x)
#define SCM_VM_DATA(vm) ((struct scm_vm *) SCM_SMOB_DATA (vm))
#define SCM_VALIDATE_VM(pos,x) SCM_MAKE_VALIDATE (pos, x, VM_P)
(define-module (system vm vm)
#:use-module (system vm frame)
#:use-module (system vm objcode)
- #:export (vm? the-vm make-vm vm-version
+ #:export (vm? the-vm *the-vm* make-vm vm-version
vm:ip vm:sp vm:fp vm:last-ip
vm-load vm-return-value