summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/vm-i-system.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c
index 6827e79ad..003bdb443 100644
--- a/libguile/vm-i-system.c
+++ b/libguile/vm-i-system.c
@@ -1532,6 +1532,28 @@ VM_DEFINE_INSTRUCTION (87, unwind, "unwind", 0, 0, 0)
NEXT;
}
+VM_DEFINE_INSTRUCTION (90, wind_fluids, "wind-fluids", 1, -1, 0)
+{
+ unsigned n = FETCH ();
+ SCM wf;
+
+ if (sp - 2*n < SCM_FRAME_UPPER_ADDRESS (fp))
+ goto vm_error_stack_underflow;
+
+ wf = scm_i_make_with_fluids (n, sp + 1 - 2*n, sp + 1 - n);
+ scm_i_swap_with_fluids (wf, SCM_I_CURRENT_THREAD->dynamic_state);
+ scm_i_set_dynwinds (scm_cons (wf, scm_i_dynwinds ()));
+ NEXT;
+}
+
+VM_DEFINE_INSTRUCTION (91, unwind_fluids, "unwind-fluids", 0, 0, 0)
+{
+ SCM wf;
+ wf = scm_car (scm_i_dynwinds ());
+ scm_i_set_dynwinds (scm_cdr (scm_i_dynwinds ()));
+ scm_i_swap_with_fluids (wf, SCM_I_CURRENT_THREAD->dynamic_state);
+ NEXT;
+}
/*