summaryrefslogtreecommitdiff
path: root/libguile/vm-engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r--libguile/vm-engine.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index 41b62bb7d..65342b6b3 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -192,12 +192,18 @@
} while (0)
/* Reset the current frame to hold N locals. Used when we know that no
- stack expansion is needed. */
+ stack expansion is needed. Note that in some cases this may lower
+ SP, e.g. after a return but where there are more locals below, but we
+ know it was preceded by an alloc-frame in that case, so no stack need
+ be allocated.
+
+ As an optimization, we don't update sp_min_since_gc in this case; the
+ principal place stacks are expanded is in ALLOC_FRAME. it doesn't
+ need to strictly be the min since GC, as it's just an optimization to
+ prevent passing too-large of a range to madvise. */
#define RESET_FRAME(n) \
do { \
VP->sp = sp = VP->fp - (n); \
- if (sp < VP->sp_min_since_gc) \
- VP->sp_min_since_gc = sp; \
} while (0)
/* Compute the number of locals in the frame. At a call, this is equal