summaryrefslogtreecommitdiff
path: root/rts/TraverseHeap.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/TraverseHeap.c')
-rw-r--r--rts/TraverseHeap.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/rts/TraverseHeap.c b/rts/TraverseHeap.c
index 60c88a278d..e40e380765 100644
--- a/rts/TraverseHeap.c
+++ b/rts/TraverseHeap.c
@@ -336,8 +336,8 @@ traversePushReturn(traverseState *ts, StgClosure *c, stackAccum acc, stackElemen
*
* Invariants:
*
- * - 'c' is not any of TSO, AP, PAP, AP_STACK, which means that there cannot
- * be any stack objects.
+ * - 'c' is not any of TSO, AP, PAP, AP_STACK, or CONTINUATION, which means
+ * that there cannot be any stack objects.
*
* Note: SRTs are considered to be children as well.
*/
@@ -517,6 +517,7 @@ traverseGetChildren(StgClosure *c, StgClosure **first_child, bool *other_childre
case PAP:
case AP:
case AP_STACK:
+ case CONTINUATION:
case TSO:
case STACK:
case IND_STATIC:
@@ -818,6 +819,7 @@ traversePop(traverseState *ts, StgClosure **c, StgClosure **cp, stackData *data,
case PAP:
case AP:
case AP_STACK:
+ case CONTINUATION:
case TSO:
case STACK:
case IND_STATIC:
@@ -1288,6 +1290,14 @@ inner_loop:
(StgPtr)((StgAP_STACK *)c)->payload +
((StgAP_STACK *)c)->size);
goto loop;
+
+ case CONTINUATION:
+ {
+ StgContinuation *cont = (StgContinuation *)c;
+ traversePushStack(ts, c, sep, child_data,
+ cont->stack, cont->stack + cont->stack_size);
+ goto loop;
+ }
}
stackElement se;