summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-03-29 20:35:10 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-03-29 20:35:10 -0700
commit9e84c4f3f1796c23c94ad10525da4966115786b5 (patch)
treef9e917a2f3ff96ff4fb9a428593591ee4a5c44bc
parent0b6e2afdf3658b2fb4ca786d9d62a67b09894684 (diff)
downloadtxr-9e84c4f3f1796c23c94ad10525da4966115786b5.tar.gz
txr-9e84c4f3f1796c23c94ad10525da4966115786b5.tar.bz2
txr-9e84c4f3f1796c23c94ad10525da4966115786b5.zip
continuations: don't fixup pointers if delta is zero.
* unwind.c (revive_cont): If delta is zero, skip the loop. This is an important optimization. The delta zero case can occur frequently; I have observed it.
-rw-r--r--unwind.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/unwind.c b/unwind.c
index a1f0989d..b89bf991 100644
--- a/unwind.c
+++ b/unwind.c
@@ -892,7 +892,7 @@ static val revive_cont(val dc, val arg)
memcpy(space, cont->stack, cont->size);
- for (ptr = space; ptr < space + cont->size; ptr += sizeof (cnum))
+ for (ptr = space; delta && ptr < space + cont->size; ptr += sizeof (cnum))
{
uint_ptr_t *wordptr = coerce(uint_ptr_t *, ptr);
uint_ptr_t word;