1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 19:50:24 +02:00

the vm is a fluid

* module/system/vm/vm.scm:
* libguile/vm.h:
* libguile/vm.c: Make the `the-vm' procedure access a fluid, `*the-vm*'.
  Export that fluid from vm.h and vm.scm.
This commit is contained in:
Andy Wingo 2008-09-24 11:47:25 +02:00
parent 02b84691b2
commit 7bbed5181c
3 changed files with 9 additions and 5 deletions

View file

@ -259,7 +259,7 @@ vm_heapify_frames (SCM vm)
scm_t_bits scm_tc16_vm;
static SCM the_vm;
SCM scm_the_vm_fluid;
static SCM
make_vm (void)
@ -342,7 +342,7 @@ SCM_DEFINE (scm_the_vm, "the-vm", 0, 0, 0,
"")
#define FUNC_NAME s_scm_the_vm
{
return the_vm;
return scm_fluid_ref (scm_the_vm_fluid);
}
#undef FUNC_NAME
@ -628,7 +628,7 @@ SCM scm_load_compiled_with_vm (SCM file)
{
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
@ -653,7 +653,9 @@ scm_bootstrap_vm (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,

View file

@ -71,6 +71,8 @@ struct scm_vm {
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)

View file

@ -22,7 +22,7 @@
(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