summaryrefslogtreecommitdiff
path: root/vm.c
diff options
context:
space:
mode:
-rw-r--r--vm.c52
1 files changed, 24 insertions, 28 deletions
@@ -3362,22 +3362,20 @@ rb_execution_context_update(rb_execution_context_t *ec)
}
while (cfp != limit_cfp) {
- if (VM_FRAME_TYPE(cfp) != VM_FRAME_MAGIC_DUMMY) {
- const VALUE *ep = cfp->ep;
- cfp->self = rb_gc_location(cfp->self);
- cfp->iseq = (rb_iseq_t *)rb_gc_location((VALUE)cfp->iseq);
- cfp->block_code = (void *)rb_gc_location((VALUE)cfp->block_code);
-
- if (!VM_ENV_LOCAL_P(ep)) {
- const VALUE *prev_ep = VM_ENV_PREV_EP(ep);
- if (VM_ENV_FLAGS(prev_ep, VM_ENV_FLAG_ESCAPED)) {
- VM_FORCE_WRITE(&prev_ep[VM_ENV_DATA_INDEX_ENV], rb_gc_location(prev_ep[VM_ENV_DATA_INDEX_ENV]));
- }
- if (VM_ENV_FLAGS(ep, VM_ENV_FLAG_ESCAPED)) {
- VM_FORCE_WRITE(&ep[VM_ENV_DATA_INDEX_ENV], rb_gc_location(ep[VM_ENV_DATA_INDEX_ENV]));
- VM_FORCE_WRITE(&ep[VM_ENV_DATA_INDEX_ME_CREF], rb_gc_location(ep[VM_ENV_DATA_INDEX_ME_CREF]));
- }
}
}
@@ -3413,21 +3411,19 @@ rb_execution_context_mark(const rb_execution_context_t *ec)
const VALUE *ep = cfp->ep;
VM_ASSERT(!!VM_ENV_FLAGS(ep, VM_ENV_FLAG_ESCAPED) == vm_ep_in_heap_p_(ec, ep));
- if (VM_FRAME_TYPE(cfp) != VM_FRAME_MAGIC_DUMMY) {
- rb_gc_mark_movable(cfp->self);
- rb_gc_mark_movable((VALUE)cfp->iseq);
- rb_gc_mark_movable((VALUE)cfp->block_code);
- if (!VM_ENV_LOCAL_P(ep)) {
- const VALUE *prev_ep = VM_ENV_PREV_EP(ep);
- if (VM_ENV_FLAGS(prev_ep, VM_ENV_FLAG_ESCAPED)) {
- rb_gc_mark_movable(prev_ep[VM_ENV_DATA_INDEX_ENV]);
- }
- if (VM_ENV_FLAGS(ep, VM_ENV_FLAG_ESCAPED)) {
- rb_gc_mark_movable(ep[VM_ENV_DATA_INDEX_ENV]);
- rb_gc_mark(ep[VM_ENV_DATA_INDEX_ME_CREF]);
- }
}
}