diff options
author | Andy Wingo <wingo@pobox.com> | 2008-09-13 14:40:27 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2008-09-13 14:40:27 +0200 |
commit | 1dc8f8517c4f89f7e0a330fe7f5b945f2a8e2523 (patch) | |
tree | 4361df948482e7b5e4172e5355a624540135f722 /libguile/vm-i-system.c | |
parent | f13c269b7ffde245f12503fc9c80f92fcea2026a (diff) | |
download | guile-1dc8f8517c4f89f7e0a330fe7f5b945f2a8e2523.tar.gz |
inline FREE_FRAME in halt
* libguile/vm-i-system.c (halt): Inline FREE_FRAME, specialized for the
halt case.
Diffstat (limited to 'libguile/vm-i-system.c')
-rw-r--r-- | libguile/vm-i-system.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c index aff8331e9..259e93861 100644 --- a/libguile/vm-i-system.c +++ b/libguile/vm-i-system.c @@ -58,9 +58,20 @@ VM_DEFINE_INSTRUCTION (halt, "halt", 0, 0, 0) vp->time += scm_c_get_internal_run_time () - start_time; HALT_HOOK (); POP (ret); - FREE_FRAME (); + { +#ifdef THE_GOVERNMENT_IS_AFTER_ME + if (sp != stack_base) + abort (); + if (stack_base != SCM_FRAME_UPPER_ADDRESS (fp) - 1) + abort (); +#endif + + /* Restore registers */ + sp = SCM_FRAME_LOWER_ADDRESS (fp) - 1; + ip = NULL; + fp = SCM_FRAME_DYNAMIC_LINK (fp); + } SYNC_ALL (); - vp->ip = NULL; scm_dynwind_end (); return ret; } |