mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
iseq.c: show function name if possible
* iseq.c (rb_insn_operand_intern): show the name of the nearest run-time symbol if possible. * compile.c (insn_data_to_s_detail): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48858 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
389ea73014
commit
1d5c5ea153
2 changed files with 29 additions and 2 deletions
16
compile.c
16
compile.c
|
@ -18,6 +18,10 @@
|
|||
#include "insns.inc"
|
||||
#include "insns_info.inc"
|
||||
|
||||
#ifdef HAVE_DLADDR
|
||||
# include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
#define FIXNUM_INC(n, i) ((n)+(INT2FIX(i)&~FIXNUM_FLAG))
|
||||
#define FIXNUM_OR(n, i) ((n)|INT2FIX(i))
|
||||
|
||||
|
@ -5604,7 +5608,17 @@ insn_data_to_s_detail(INSN *iobj)
|
|||
rb_str_cat2(str, "<ch>");
|
||||
break;
|
||||
case TS_FUNCPTR:
|
||||
rb_str_catf(str, "<%p>", (rb_insn_func_t)OPERAND_AT(iobj, j));
|
||||
{
|
||||
rb_insn_func_t func = (rb_insn_func_t)OPERAND_AT(iobj, j);
|
||||
#ifdef HAVE_DLADDR
|
||||
Dl_info info;
|
||||
if (dladdr(func, &info) && info.dli_sname) {
|
||||
rb_str_cat2(str, info.dli_sname);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
rb_str_catf(str, "<%p>", func);
|
||||
}
|
||||
break;
|
||||
default:{
|
||||
rb_raise(rb_eSyntaxError, "unknown operand type: %c", type);
|
||||
|
|
15
iseq.c
15
iseq.c
|
@ -13,6 +13,10 @@
|
|||
#include "ruby/util.h"
|
||||
#include "eval_intern.h"
|
||||
|
||||
#ifdef HAVE_DLADDR
|
||||
# include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
/* #define RUBY_MARK_FREE_DEBUG 1 */
|
||||
#include "gc.h"
|
||||
#include "vm_core.h"
|
||||
|
@ -1375,7 +1379,16 @@ rb_insn_operand_intern(const rb_iseq_t *iseq,
|
|||
break;
|
||||
|
||||
case TS_FUNCPTR:
|
||||
ret = rb_str_new2("<funcptr>");
|
||||
{
|
||||
#ifdef HAVE_DLADDR
|
||||
Dl_info info;
|
||||
if (dladdr((void *)op, &info) && info.dli_sname) {
|
||||
ret = rb_str_new_cstr(info.dli_sname);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
ret = rb_str_new2("<funcptr>");
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue