diff options
author | Andy Wingo <wingo@pobox.com> | 2013-10-18 19:33:50 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2013-10-27 11:30:22 +0100 |
commit | d76de8716d36e1fe419224119111fdb594a5d1b9 (patch) | |
tree | c3b6cbda18023c109da3f9191832dd82bb5d507e /libguile/vm-i-system.c | |
parent | d6fbf0c00e913ab2726f98f70b3026aafb7fcdc6 (diff) | |
download | guile-d76de8716d36e1fe419224119111fdb594a5d1b9.tar.gz |
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.
Diffstat (limited to 'libguile/vm-i-system.c')
-rw-r--r-- | libguile/vm-i-system.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c index 8df56de49..e023d562b 100644 --- a/libguile/vm-i-system.c +++ b/libguile/vm-i-system.c @@ -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), ®isters); + /* 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 (); } |