1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-08 02:40:17 +02:00

Partial continuations are RTL stubs

* libguile/control.c: Implement partial continuations as RTL programs.

* libguile/programs.c (scm_i_rtl_program_minimum_arity): Add partial
  continuation case.

* libguile/vm-engine.c (compose-continuation): Fix to look for vm_cont
  from the free variables.

* libguile/vm-i-system.c (abort): Poison continuations captured in the
  stack VM, as the can't be rewound by the RTL stubs.
This commit is contained in:
Andy Wingo 2013-10-18 19:33:50 +02:00
parent d6fbf0c00e
commit d76de8716d
4 changed files with 24 additions and 70 deletions

View file

@ -1482,7 +1482,9 @@ VM_DEFINE_INSTRUCTION (89, abort, "abort", 1, -1, -1)
tail = sp[0];
stack_args = sp - n;
tag = sp[-(n + 1)];
vm_abort (vm, tag, n, stack_args, tail, sp - (n + 2), &registers);
/* Partial continuations are now RTL programs, and therefore not
resumable. Pass NULL as registers to indicate that fact. */
vm_abort (vm, tag, n, stack_args, tail, sp - (n + 2), NULL);
/* vm_abort should not return */
abort ();
}