summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gc.c6
-rw-r--r--vm_core.h1
2 files changed, 5 insertions, 2 deletions
diff --git a/gc.c b/gc.c
index 140fc5047f..8e4190f352 100644
--- a/gc.c
+++ b/gc.c
@@ -9346,8 +9346,12 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj)
break;
}
case T_DATA: {
+ const struct rb_block *block;
const rb_iseq_t *iseq;
- if (rb_obj_is_proc(obj) && (iseq = vm_proc_iseq(obj)) != NULL) {
+ if (rb_obj_is_proc(obj) &&
+ (block = vm_proc_block(obj)) != NULL &&
+ (vm_block_type(block) == block_type_iseq) &&
+ (iseq = vm_block_iseq(block)) != NULL) {
rb_raw_iseq_info(buff, buff_size, iseq);
}
else {
diff --git a/vm_core.h b/vm_core.h
index f2ea983d36..3691d13fa5 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -1406,7 +1406,6 @@ vm_proc_ep(VALUE procval)
static inline const rb_iseq_t *
vm_block_iseq(const struct rb_block *block)
{
- if (!block) return NULL;
switch (vm_block_type(block)) {
case block_type_iseq: return rb_iseq_check(block->as.captured.code.iseq);
case block_type_proc: return vm_proc_iseq(block->as.proc);