summaryrefslogtreecommitdiff
path: root/libguile/vm-i-system.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2013-10-14 17:32:16 +0200
committerAndy Wingo <wingo@pobox.com>2013-10-14 17:32:16 +0200
commit99511cd0abfa0bde4440b2781740f18f49248a99 (patch)
tree6fc8acd3aad9fbf731d5b4499dab00b960149935 /libguile/vm-i-system.c
parent5bd4b6585b3733077d0a36265ce057611836e163 (diff)
downloadguile-99511cd0abfa0bde4440b2781740f18f49248a99.tar.gz
Refactor vm_abort
* libguile/vm.c (vm_abort): * libguile/vm-i-system.c (abort): Refactor abort interface so that it is more amenable to the RTL VM.
Diffstat (limited to 'libguile/vm-i-system.c')
-rw-r--r--libguile/vm-i-system.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c
index 83e07f1ff..8df56de49 100644
--- a/libguile/vm-i-system.c
+++ b/libguile/vm-i-system.c
@@ -1475,10 +1475,14 @@ VM_DEFINE_INSTRUCTION (88, wind, "wind", 0, 2, 0)
VM_DEFINE_INSTRUCTION (89, abort, "abort", 1, -1, -1)
{
- unsigned n = FETCH ();
- SYNC_REGISTER ();
+ ptrdiff_t n = FETCH ();
+ SCM tag, *stack_args, tail;
PRE_CHECK_UNDERFLOW (n + 2);
- vm_abort (vm, n, &registers);
+ SYNC_REGISTER ();
+ tail = sp[0];
+ stack_args = sp - n;
+ tag = sp[-(n + 1)];
+ vm_abort (vm, tag, n, stack_args, tail, sp - (n + 2), &registers);
/* vm_abort should not return */
abort ();
}