diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-03-19 00:32:52 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-03-19 00:32:52 +0000 |
commit | 70782a161c29356a20dcc827744bbe9de458ff47 (patch) | |
tree | 47df41359c0723ba8c7cce93a7c059849dcfab01 /iseq.c | |
parent | f9f14ceb6d2645399ff1bdc286bb6c3c18756947 (diff) | |
download | ruby-70782a161c29356a20dcc827744bbe9de458ff47.tar.gz |
iseq.c: append local var index to name
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62831 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'iseq.c')
-rw-r--r-- | iseq.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -1498,18 +1498,24 @@ local_var_name(const rb_iseq_t *diseq, VALUE level, VALUE op) VALUE i; VALUE name; ID lid; + int idx; for (i = 0; i < level; i++) { diseq = diseq->body->parent_iseq; } - lid = diseq->body->local_table[diseq->body->local_table_size - op - 1]; + idx = diseq->body->local_table_size - (int)op - 1; + lid = diseq->body->local_table[idx]; name = rb_id2str(lid); if (!name) { - name = rb_sprintf("?%d", diseq->body->local_table_size - (int)op); + name = rb_str_new_cstr("?"); } else if (!rb_str_symname_p(name)) { name = rb_str_inspect(name); } + else { + name = rb_str_dup(name); + } + rb_str_catf(name, "@%d", idx); return name; } |