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:
parent
02b84691b2
commit
7bbed5181c
3 changed files with 9 additions and 5 deletions
|
@ -259,7 +259,7 @@ vm_heapify_frames (SCM vm)
|
||||||
|
|
||||||
scm_t_bits scm_tc16_vm;
|
scm_t_bits scm_tc16_vm;
|
||||||
|
|
||||||
static SCM the_vm;
|
SCM scm_the_vm_fluid;
|
||||||
|
|
||||||
static SCM
|
static SCM
|
||||||
make_vm (void)
|
make_vm (void)
|
||||||
|
@ -342,7 +342,7 @@ SCM_DEFINE (scm_the_vm, "the-vm", 0, 0, 0,
|
||||||
"")
|
"")
|
||||||
#define FUNC_NAME s_scm_the_vm
|
#define FUNC_NAME s_scm_the_vm
|
||||||
{
|
{
|
||||||
return the_vm;
|
return scm_fluid_ref (scm_the_vm_fluid);
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#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));
|
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
|
void
|
||||||
|
@ -653,7 +653,9 @@ scm_bootstrap_vm (void)
|
||||||
scm_set_smob_free (scm_tc16_vm, vm_free);
|
scm_set_smob_free (scm_tc16_vm, vm_free);
|
||||||
scm_set_smob_apply (scm_tc16_vm, scm_vm_apply, 1, 0, 1);
|
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_define ("load-compiled",
|
||||||
scm_c_make_gsubr ("load-compiled/vm", 1, 0, 0,
|
scm_c_make_gsubr ("load-compiled/vm", 1, 0, 0,
|
||||||
|
|
|
@ -71,6 +71,8 @@ struct scm_vm {
|
||||||
unsigned long clock; /* bogos clock */
|
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_P(x) SCM_SMOB_PREDICATE (scm_tc16_vm, x)
|
||||||
#define SCM_VM_DATA(vm) ((struct scm_vm *) SCM_SMOB_DATA (vm))
|
#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 SCM_VALIDATE_VM(pos,x) SCM_MAKE_VALIDATE (pos, x, VM_P)
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
(define-module (system vm vm)
|
(define-module (system vm vm)
|
||||||
#:use-module (system vm frame)
|
#:use-module (system vm frame)
|
||||||
#:use-module (system vm objcode)
|
#: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:ip vm:sp vm:fp vm:last-ip
|
||||||
|
|
||||||
vm-load vm-return-value
|
vm-load vm-return-value
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue