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
commit68ec8b89dca3da4517cd32a3c551747b600bc0d8 (patch)
treef9e917a2f3ff96ff4fb9a428593591ee4a5c44bc
parent4683b7cf15c4b434a4ffe74d9eeae0f94ef334bf (diff)
downloadtxr-68ec8b89dca3da4517cd32a3c551747b600bc0d8.tar.gz
txr-68ec8b89dca3da4517cd32a3c551747b600bc0d8.tar.bz2
txr-68ec8b89dca3da4517cd32a3c551747b600bc0d8.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;