From a38a1fbcc2e404c2ba7fc40699bd439ffdee8f61 Mon Sep 17 00:00:00 2001 From: ko1 Date: Fri, 20 Mar 2015 03:41:10 +0000 Subject: * gc.c (obj_info): obj_info() can receive internal objects. * gc.c (check_rvalue_consistency): obj_info() returns const char *. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50031 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ gc.c | 27 ++++++++++++--------------- vm.c | 4 ++++ 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index f4c20a85db..fd360a4802 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Fri Mar 20 12:38:36 2015 Koichi Sasada + + * gc.c (obj_info): obj_info() can receive internal objects. + + * gc.c (check_rvalue_consistency): obj_info() returns const char *. + Fri Mar 20 12:14:37 2015 Koichi Sasada * gc.c (obj_info): show class name and T_DATA type_name. diff --git a/gc.c b/gc.c index 13b7536acc..13390b30a3 100644 --- a/gc.c +++ b/gc.c @@ -998,8 +998,8 @@ check_rvalue_consistency(const VALUE obj) const int marking_bit = RVALUE_MARKING_BITMAP(obj) != 0, remembered_bit = marking_bit; const int age = RVALUE_FLAGS_AGE(RBASIC(obj)->flags); - if (BUILTIN_TYPE(obj) == T_NONE) rb_bug("check_rvalue_consistency: %p is T_NONE", obj_info(obj)); - if (BUILTIN_TYPE(obj) == T_ZOMBIE) rb_bug("check_rvalue_consistency: %p is T_ZOMBIE", obj_info(obj)); + if (BUILTIN_TYPE(obj) == T_NONE) rb_bug("check_rvalue_consistency: %s is T_NONE", obj_info(obj)); + if (BUILTIN_TYPE(obj) == T_ZOMBIE) rb_bug("check_rvalue_consistency: %s is T_ZOMBIE", obj_info(obj)); obj_memsize_of((VALUE)obj, FALSE); /* check generation @@ -8817,19 +8817,16 @@ obj_info(VALUE obj) C(RVALUE_WB_UNPROTECTED_BITMAP(obj), "U"), obj_type_name(obj)); - switch (type) { - case T_NODE: - case T_IMEMO: - break; - default: - if (RBASIC(obj)->klass == 0) { - snprintf(buff, OBJ_INFO_BUFFERS_SIZE, "%s (internal)", buff); - } - else { - VALUE class_path = rb_class_path_cached(RBASIC(obj)->klass); - if (!NIL_P(class_path)) { - snprintf(buff, OBJ_INFO_BUFFERS_SIZE, "%s (%s)", buff, RSTRING_PTR(class_path)); - } + if (internal_object_p(obj)) { + /* ignore */ + } + else if (RBASIC(obj)->klass == 0) { + snprintf(buff, OBJ_INFO_BUFFERS_SIZE, "%s (temporary internal)", buff); + } + else { + VALUE class_path = rb_class_path_cached(RBASIC(obj)->klass); + if (!NIL_P(class_path)) { + snprintf(buff, OBJ_INFO_BUFFERS_SIZE, "%s (%s)", buff, RSTRING_PTR(class_path)); } } diff --git a/vm.c b/vm.c index 74fa78be9d..c99dbd6b82 100644 --- a/vm.c +++ b/vm.c @@ -1492,6 +1492,10 @@ vm_exec(rb_thread_t *th) case VM_FRAME_MAGIC_LAMBDA: EXEC_EVENT_HOOK_AND_POP_FRAME(th, RUBY_EVENT_B_RETURN, th->cfp->self, 0, 0, Qnil); break; + case VM_FRAME_MAGIC_METHOD: + RUBY_DTRACE_METHOD_RETURN_HOOK(th, 0, 0); + EXEC_EVENT_HOOK_AND_POP_FRAME(th, RUBY_EVENT_RETURN, th->cfp->self, 0, 0, Qnil); + break; } vm_pop_frame(th); -- cgit v1.2.3