1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-19 18:20:22 +02:00

push and pop dynamic state via intrinsics

* libguile/intrinsics.c (push_dynamic_state, pop_dynamic_state): New
  intrinsics.
  (scm_bootstrap_intrinsics): Add new intrinsics.
* libguile/intrinsics.h: Declare new intrinsics.
* libguile/vm-engine.c (call-thread-scm): New intrinsic caller.
  (push-dynamic-state, pop-dynamic-state): Disable.
* module/language/cps/reify-primitives.scm (compute-known-primitives):
  Add new intrinsics.
* module/system/vm/assembler.scm (push-dynamic-state)
  (pop-dynamic-state): Emit as intrinsics.
This commit is contained in:
Andy Wingo 2018-04-29 10:41:24 +02:00
parent 2eb9c755d1
commit 89fda6da60
5 changed files with 49 additions and 19 deletions

View file

@ -148,6 +148,20 @@ fluid_set_x (scm_i_thread *thread, SCM fluid, SCM value)
scm_fluid_set_x (fluid, value);
}
static void
push_dynamic_state (scm_i_thread *thread, SCM state)
{
scm_dynstack_push_dynamic_state (&thread->dynstack, state,
thread->dynamic_state);
}
static void
pop_dynamic_state (scm_i_thread *thread)
{
scm_dynstack_unwind_dynamic_state (&thread->dynstack,
thread->dynamic_state);
}
void
scm_bootstrap_intrinsics (void)
{
@ -181,6 +195,8 @@ scm_bootstrap_intrinsics (void)
scm_vm_intrinsics.pop_fluid = pop_fluid;
scm_vm_intrinsics.fluid_ref = fluid_ref;
scm_vm_intrinsics.fluid_set_x = fluid_set_x;
scm_vm_intrinsics.push_dynamic_state = push_dynamic_state;
scm_vm_intrinsics.pop_dynamic_state = pop_dynamic_state;
scm_c_register_extension ("libguile-" SCM_EFFECTIVE_VERSION,
"scm_init_intrinsics",