[#8824] [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro)

ごとけんです

38 messages 2000/01/05
[#8839] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — matz@... (Yukihiro Matsumoto) 2000/01/06

まつもと ゆきひろです

[#8842] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro) 2000/01/06

ごとけんです

[#8843] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — matz@... (Yukihiro Matsumoto) 2000/01/06

まつもと ゆきひろです

[#8844] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro) 2000/01/06

ごとけんです

[#8846] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — matz@... (Yukihiro Matsumoto) 2000/01/06

まつもと ゆきひろです

[#8847] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro) 2000/01/06

ごとけんです

[#8893] Re: [ruby-list:20142] Re: Range expansion? — Akinori MUSHA aka knu <knu@...>

 knuです。ruby-listから舞台を移しました。

13 messages 2000/01/09

[#8980] 1.4.3 patch for near-future *BSD IPv6 support — Jun-ichiro itojun Hagino <itojun@...>

近い将来の{Net,Free,Open}BSDにはKAME IPv6 stackが統合されています。

17 messages 2000/01/20
[#8981] Re: 1.4.3 patch for near-future *BSD IPv6 support — Jun-ichiro itojun Hagino <itojun@...> 2000/01/20

> それから、

[ruby-dev:8958] Re: [BUG] recycle the ruby_dyna_vars

From: Koji Arai <JCA02266@...>
Date: 2000-01-18 13:58:12 UTC
List: ruby-dev #8958
新井です。

>>> From: matz@netlab.co.jp (Yukihiro Matsumoto)
>>> Date: 17 Jan 2000 16:53:11 +0900
>>> Subject: [ruby-dev:8946] Re: [BUG] recycle the ruby_dyna_vars

> まつもと ゆきひろです

> id==0のエントリから次のid==0のエントリの間までが一番内側のブ
> ロックで導入されたブロック内ローカル変数に相当します。これら

うーん、であればやっぱり、dvar_asgn()がおかしいような気がします。

[ruby-dev:8941]の再現スクリプトを/tmp/bug.rbとして以下のファ
イルを.gdbinitに置いて実行すると

<-------こっから.gdbinit
set height 0

# eval.c:639 は、dvar_asgn()の最後
break eval.c:639
commands
  echo ----------------------\n
  bt 4
  set $vars = ruby_dyna_vars
  echo ruby_sourceline=
  output ruby_sourceline
  echo \n
  p $vars
  while $vars != 0
    p *$vars
    p rb_id2name($vars->id)
    set $vars = $vars->next
  end
  c
end

r /tmp/bug.rb
ここまで.gdbinit------>

$ gdb --batch ./ruby
Breakpoint 1 at 0x8050938: file eval.c, line 639.

Breakpoint 1, dvar_asgn (id=8641, value=4, push=1) at eval.c:639
639     }
----------------------
#0  dvar_asgn (id=8641, value=4, push=1) at eval.c:639
#1  0x805099e in dvar_asgn_push (id=8641, value=4) at eval.c:660
#2  0x80581d4 in assign (self=1074949844, lhs=0x4011abac, val=4, check=0)
    at eval.c:3450
#3  0x8057b67 in rb_yield_0 (val=4, self=1074949844, klass=0, acheck=0)
    at eval.c:3290
ruby_sourceline=3
$1 = (struct RVarmap *) 0x4011a7c4
$2 = {super = {flags = 125, klass = 0}, id = 8641, val = 4, next = 0x0}
$3 = 0x8106320 "x"

Breakpoint 1, dvar_asgn (id=8641, value=3, push=0) at eval.c:639
639     }
----------------------
#0  dvar_asgn (id=8641, value=3, push=0) at eval.c:639
#1  0x805094e in rb_dvar_asgn (id=8641, value=3) at eval.c:646
#2  0x8055938 in rb_eval (self=1074949844, node=0x4011ab84) at eval.c:2463
#3  0x8053134 in rb_eval (self=1074949844, node=0x4011aaa8) at eval.c:1842
ruby_sourceline=4
$4 = (struct RVarmap *) 0x4011a7d8
$5 = {super = {flags = 125, klass = 0}, id = 0, val = 0, next = 0x4011a7c4}
$6 = 0x0
$7 = {super = {flags = 125, klass = 0}, id = 8641, val = 3, next = 0x0}
$8 = 0x8106320 "x"

Breakpoint 1, dvar_asgn (id=8649, value=3, push=0) at eval.c:639
639     }
----------------------
#0  dvar_asgn (id=8649, value=3, push=0) at eval.c:639
#1  0x805094e in rb_dvar_asgn (id=8649, value=3) at eval.c:646
#2  0x8055938 in rb_eval (self=1074949844, node=0x4011aa58) at eval.c:2463
#3  0x8053134 in rb_eval (self=1074949844, node=0x4011aa1c) at eval.c:1842
ruby_sourceline=8
$9 = (struct RVarmap *) 0x4011a7b0
$10 = {super = {flags = 125, klass = 0}, id = 8649, val = 3, next = 0x4011a7d8}
$11 = 0x8106398 "v"
$12 = {super = {flags = 125, klass = 0}, id = 0, val = 0, next = 0x4011a7c4}
$13 = 0x0
$14 = {super = {flags = 125, klass = 0}, id = 8641, val = 3, next = 0x0}
$15 = 0x8106320 "x"
1
nil

Program exited normally.

となります。最後のid=8649(v)とid=8641(x)が違うブロックの変数
であるように見えます。一方再現スクリプトのif nilをif trueに
すると(結果の最後だけ抜粋)

----------------------
#0  dvar_asgn (id=8649, value=3, push=0) at eval.c:639
#1  0x805094e in rb_dvar_asgn (id=8649, value=3) at eval.c:646
#2  0x8055938 in rb_eval (self=1074949844, node=0x4011aa58) at eval.c:2463
#3  0x8053134 in rb_eval (self=1074949844, node=0x4011aa1c) at eval.c:1842
ruby_sourceline=8
$14 = (struct RVarmap *) 0x4011a7d8
$15 = {super = {flags = 125, klass = 0}, id = 0, val = 0, next = 0x4011a7b0}
$16 = 0x0
$17 = {super = {flags = 125, klass = 0}, id = 8649, val = 3, next = 0x4011a7c4}
$18 = 0x8106398 "v"
$19 = {super = {flags = 125, klass = 0}, id = 8641, val = 3, next = 0x0}
$20 = 0x8106320 "x"
1
1

Program exited normally.

と同じブロック内の変数になります。
[ruby-dev:8942]はこれを直したつもりなのですが...
# パッチのwhileループの後にvars=NULLを忘れてますが(^^;

--
新井康司 (Koji Arai)

In This Thread