Eval with binding


#1

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

e$B0J2<$Ne(B2e$B$D$N%3!<%I$,!"e(B1.8e$B$He(Btrunke$B$GF0:n$,0[$J$j$^$9!#e(B
e$B$J$<$G$7$g$&e(B?
e$B;d$K$Oe(B1.8e$B$N5sF0$,<+A3$K;W$($^$9!#e(B

e$B$=$Ne(B1

x = 0
eval(“p x”, TOPLEVEL_BINDING)

1.8 => 0

trunk => NameError

e$B$=$Ne(B2

BEGIN{$b = binding}
eval(“p x”, $b)

1.8 => NameError

trunk => 0

e$B$=$l$G$O!#e(B


#2

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

e$B$A$g$C$H4V0c$($^$7$?!#e(B

In message “[ruby-dev:37142] eval with binding”
on Nov.21,2008 22:02:04, removed_email_address@domain.invalid wrote:

e$B$=$Ne(B2

BEGIN{$b = binding}
x = 0
eval(“p x”, $b)

1.8 => NameError

trunk => 0

e$B$G$9!#e(B

e$B$=$l$G$O!#e(B


#3

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

e$BC/$b65$($F$/$l$J$$$N$Ge(Bbuge$B$K$7$^$9!#e(B

e$B$3$l$G$J$k$N$+$Je(B

In message “[ruby-dev:37142] eval with binding”
on Nov.21,2008 22:02:04, removed_email_address@domain.invalid wrote:

e$B$=$Ne(B2

BEGIN{$b = binding}
x = 0
eval(“p x”, $b)

1.8 => NameError

trunk => 0

e$B$=$l$G$O!#e(B


#4

e$B%A%1%C%He(B #803 e$B$,99?7$5$l$^$7$?!#e(B (by Yuki S.)

e$BM%@hEYe(B Lowe$B$+$ie(BHighe$B$KJQ99e(B
Target version 1.9.1 Release Candidatee$B$K%;%C%He(B

@ Rubye$B3+H/2q5De(B

  • e$B$=$Ne(B1e$B$O4hD%$ke(B
  • e$B$=$Ne(B2e$B$O=EMWEYDc$$!#e(BKNOWN BUGe$B07$$!#e(B

http://redmine.ruby-lang.org/issues/show/803


#5

e$B!!$5$5$@$G$9!%e(B

Yuki S. wrote::

  • e$B$=$Ne(B2e$B$O=EMWEYDc$$!#e(BKNOWN BUGe$B07$$!#e(B

e$B!!e(BKNOWN BUG e$B$H$$$&$+!$5v$5$l$k$N$J$i;EMMJQ99$K$7$?$$!%e(B
e$B!J=EMWEY$ODc$=$&!$<BAu$OBgJQ!Ke(B


#6

e$B!!$5$5$@$G$9!%e(B

U.Nakamura wrote::

e$B$=$Ne(B1

x = 0
eval(“p x”, TOPLEVEL_BINDING)

1.8 => 0

trunk => NameError

Index: vm.c

— vm.c (e$B%j%S%8%g%se(B 20969)
+++ vm.c (e$B:n6H%3%T!<e(B)
@@ -1240,7 +1240,10 @@ rb_iseq_eval(VALUE iseqval)
vm_set_top_stack(th, iseqval);

 if (!rb_const_defined(rb_cObject, rb_intern("TOPLEVEL_BINDING"))) {
  • rb_define_global_const(“TOPLEVEL_BINDING”, rb_binding_new());
  • VALUE bind;
  • rb_vm_set_finish_env(th); /* push dummy frame */
  • rb_define_global_const(“TOPLEVEL_BINDING”, bind);
  • vm_pop_frame(th); /* pop dummy frame /
    }
    val = vm_exec(th);
    tmp = iseqval; /
    prohibit tail call optimization */

e$B!!$3$l$GD>$k$N$G$O$J$$$+$H;W$$$^$9!%$43NG’$$$?$@$1$^$;$s$+!%e(B

e$B$=$Ne(B2

BEGIN{$b = binding}
x = 0
eval(“p x”, $b)

1.8 => NameError

trunk => 0

e$B!!$3$A$i$O!$A0$+$i=q$$$F$$$?$H$*$j!$;EMM$H$7$F$$$?$@$1$k$H!%!V$3$&$$$&>le(B
e$B9g$K7y$@!W$H$+!$$=$&$$$&OC$C$F$"$j$^$9$+$M!%e(B


#7

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:37585] Re: [Bug:trunk] eval with binding”
on Dec.25,2008 00:20:48, removed_email_address@domain.invalid wrote:

e$B!!$3$l$GD>$k$N$G$O$J$$$+$H;W$$$^$9!%$43NG’$$$?$@$1$^$;$s$+!%e(B

e$BJQ?te(Bbinde$B$K0lEY$bCM$rBeF~$7$?$3$H$,$J$$$N$KD>$k$3$H$O$"$j$($Je(B
e$B$$$H;W$&$s$G$9$,!#e(B

e$B$=$l$O$H$b$+$/!"$I$3$G$bDLMQ$9$k:F8=%1!<%9$r<($7$F$b!"Js9p<Te(B
e$B$,3NG’$7$J$$$H%@%a$G$9$+!#$$$d8@$o$l$l$P$d$j$^$9$1$I$M!#e(B

e$B$=$Ne(B2

e$B!!$3$A$i$O!$A0$+$i=q$$$F$$$?$H$*$j!$;EMM$H$7$F$$$?$@$1$k$H!%!V$3$&$$$&>le(B
e$B9g$K7y$@!W$H$+!$$=$&$$$&OC$C$F$"$j$^$9$+$M!%e(B

e$B$=$b$=$b!V%P%0$@!W$H;XE&$7$F$$$k$o$1$G$O$J$/$F!“e(B1.8e$B$H0c$&$N$Oe(B
e$B$J$<$G$9$+!”$HJ9$$$F$$$k$@$1$J$N$G!"M}M3$5$(@bL@$5$l$F$$$l$Pe(B
e$B0c$C$F$$$F$b$+$^$o$J$$$H$O;W$$$^$9!#e(B

e$B$=$l$G$O!#e(B


#8

e$B!!$5$5$@$G$9!%e(B

U.Nakamura wrote::

e$BJQ?te(Bbinde$B$K0lEY$bCM$rBeF~$7$?$3$H$,$J$$$N$KD>$k$3$H$O$"$j$($Je(B
e$B$$$H;W$&$s$G$9$,!#e(B

e$B!!$3$l$K4X$7$F$O%3%T%Z%_%9$G$7$?!%$G!$Ej9F$7$?%Q%C%A$@$HD>$i$J$$$3$H$,$oe(B
e$B$+$C$?$N$G!$J}?K$rJQ$($F=$@5Cf$G$9!%$+$J$j$NBg2~=$$K$J$j$=$&$G$9!%e(B

e$B$=$l$O$H$b$+$/!"$I$3$G$bDLMQ$9$k:F8=%1!<%9$r<($7$F$b!"Js9p<Te(B
e$B$,3NG’$7$J$$$H%@%a$G$9$+!#$$$d8@$o$l$l$P$d$j$^$9$1$I$M!#e(B

e$B!!<j85$G$O$=$N%1!<%9$He(B make test
e$B$K8B$j3NG’$7$F$$$?$s$G$9$,!$$=$l0J30$Ne(B
e$B%F%9%H$r9T$C$F$$$J$$$N$G3NG’$r$*4j$$$7$?$D$b$j$G$7$?!%e(B

e$B!J$G!$<j85$G>.$5$$%W%m%0%i%`$G3NG’$7$?$H;W$C$?$s$@$1$I!$D>$C$F$J$+$C$?!%e(B
e$B$*$+$7$$$J$"!Ke(B

e$B!!$D$^$j!$:$$C$?%W%m%0%i%$,$"$C$?$s$@$m$&!$$=$&$$$&%W%m%0%i%$G$b$-$A$se(B
e$B$HF0:n$9$k$N$+!$%(%s%P%0$r$7$F$$$J$$$+Ey!$$=$A$i$N;}$C$F$$$k%W%m%0%i%`$Ge(B
e$B3NG’$7$F$b$i$&$h$&$K$*4j$$$7$?$D$b$j$G$7$?!%e(B

e$B!J$G!$$=$b$=$bD>$C$F$J$+$C$?!Ke(B

e$B!!:#2s$O!$2?$r;W$C$?$+@h$K%a!<%k$G3NG’$7$^$7$?$,!$$H$j$"$($:!$:#8e$O5$$Ke(B
e$B$;$:%3%_%C%H$7$h$&$H;W$$$^$9!%e(B

e$B!J%F%9%HIU$-$G!Ke(B

e$B$=$Ne(B2

e$B!!$3$A$i$O!$A0$+$i=q$$$F$$$?$H$*$j!$;EMM$H$7$F$$$?$@$1$k$H!%!V$3$&$$$&>le(B
e$B9g$K7y$@!W$H$+!$$=$&$$$&OC$C$F$"$j$^$9$+$M!%e(B

e$B$=$b$=$b!V%P%0$@!W$H;XE&$7$F$$$k$o$1$G$O$J$/$F!“e(B1.8e$B$H0c$&$N$Oe(B
e$B$J$<$G$9$+!”$HJ9$$$F$$$k$@$1$J$N$G!"M}M3$5$(@bL@$5$l$F$$$l$Pe(B
e$B0c$C$F$$$F$b$+$^$o$J$$$H$O;W$$$^$9!#e(B

e$B!!M}M3$Oe(B [ruby-dev:37376]
e$B$G=q$$$?$H$*$j!$!V<BAu$,BgJQ!W$@$+$i$G$9!%e(B

e$B!!$^$D$b$H$5$s$KJ9$$$?$i!$$H$/$KLdBj$J$$!J<BAu$He(B1.8e$B8_49@-$NE7Gi$K$+$1e(B
e$B$F!$$3$N8_49@-7gG!$,LdBj$K$J$k$3$H$O$J$$$N$G$O$J$$$+!K$H$$$&2sEz$rF@$F$$e(B
e$B$^$9!%$,!$$&$5$5$s$K$O:$$C$?;v>p$,$"$C$?$N$G$O$J$$$+$H?d;!$7$^$9!%$=$N;ve(B
e$B>p$,$I$l$/$i$$LdBj$G$"$k$+J9$-$?$+$C$?!$$H$$$&$3$H$G$9!%e(B

e$B!!$b$7!$$=$NLdBj$,$^$D$b$H$5$s$K!V$3$l$OD>$5$J$$$H$$$+$s!W$H$$$&$3$H$K$Je(B
e$B$l$P!$;d$OD>$9$3$H$K$J$k$+$H;W$$$^$9!%e(B

e$B!!$3$N5sF0<+BN$O!$e(BBEGIN{}
e$B$N%9%3!<%W$K4X$9$k;d$N40c$$$+$i$3$N$h$&$K$J$Ce(B
e$B$F$$$^$9!%6qBNE
$K$O!$e(BBEGIN{} e$B$re(B iseq
e$B$N@hF,$K$/$C$D$1$k$h$&$J<BAu$K$7$Fe(B
e$B$$$k!%e(B


#9

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:37600] Re: [Bug:trunk] eval with binding”
on Dec.26,2008 07:58:59, removed_email_address@domain.invalid wrote:

e$B!!$D$^$j!$:$$C$?%W%m%0%i%$,$"$C$?$s$@$m$&!$$=$&$$$&%W%m%0%i%$G$b$-$A$se(B
e$B$HF0:n$9$k$N$+!$%(%s%P%0$r$7$F$$$J$$$+Ey!$$=$A$i$N;}$C$F$$$k%W%m%0%i%`$Ge(B
e$B3NG’$7$F$b$i$&$h$&$K$*4j$$$7$?$D$b$j$G$7$?!%e(B

e$BOC$N85$Oe(BIRCe$B$G$N1sF#$5$s$H$N;(CLe(B(e$B!Ve(Brubye$B$G!A!A$J$3$H$,$G$-$k$+!We(B
e$B$H$$$&%/%$%:e(B)e$B$@$C$?$N$G!“B>$N2?$NA0Ds$b$J$/!“LdBj%1!<%9$=$Ne(B1
e$B$N%3!<%I$,=q$+$l$F$$$^$9!#e(B
e$B$J$N$G!”;d$N<j85$GFC$K$3$l$,860x$G:$$C$?%W%m%0%i%`$,$”$k$o$1e(B
e$B$G$O$"$j$^$;$s!#e(B

e$B$?$@$7!"$3$N5sF0$rA0Ds$H$7$?%3!<%I$r$I$3$+$G8+$?5-21$O$"$k$Ne(B
e$B$Ge(B(e$B;d$,=q$$$?$b$N$8$c$J$$$G$9$,e(B)e$B!"@$3&$N$I$3$+$K$O$3$l$G:$$ke(B
e$B$3$H$K$J$k?M$O$$$k$@$m$&$H;W$o$l$^$9!#e(B

e$B$=$b$=$b!V%P%0$@!W$H;XE&$7$F$$$k$o$1$G$O$J$/$F!“e(B1.8e$B$H0c$&$N$Oe(B
e$B$J$<$G$9$+!”$HJ9$$$F$$$k$@$1$J$N$G!"M}M3$5$(@bL@$5$l$F$$$l$Pe(B
e$B0c$C$F$$$F$b$+$^$o$J$$$H$O;W$$$^$9!#e(B

e$B!!M}M3$Oe(B [ruby-dev:37376] e$B$G=q$$$?$H$*$j!$!V<BAu$,BgJQ!W$@$+$i$G$9!%e(B

e$B!!$^$D$b$H$5$s$KJ9$$$?$i!$$H$/$KLdBj$J$$!J<BAu$He(B1.8e$B8_49@-$NE7Gi$K$+$1e(B
e$B$F!$$3$N8_49@-7gG!$,LdBj$K$J$k$3$H$O$J$$$N$G$O$J$$$+!K$H$$$&2sEz$rF@$F$$e(B
e$B$^$9!%$,!$$&$5$5$s$K$O:$$C$?;v>p$,$"$C$?$N$G$O$J$$$+$H?d;!$7$^$9!%$=$N;ve(B
e$B>p$,$I$l$/$i$$LdBj$G$"$k$+J9$-$?$+$C$?!$$H$$$&$3$H$G$9!%e(B

e$B$=$Ne(B2e$B$K$D$$$F$O!"$=$Ne(B1e$B$N85$H$J$C$?%/%$%:$r$$$+$Ke(B1.9e$B$G2r$/$+!“e(B
e$B$H$$$&E@$+$i$R$M$j=P$7$?$b$N$J$N$G!”@5D>5sF0<+BN$O$I$&$G$b$$e(B
e$B$$$G$9!#e(B

e$B;d$K4X$7$F$Oe(Bruby_1_8e$B%V%i%s%A$,@Z$i$l$F$+$i$:$C$He(Btrunke$B;H$C$F$ke(B
e$B$N$G:#99e(B1.8e$B$H8_49@-$,$J$$ItJ,$,$"$C$?$N$K5$$E$$$?!"$H$+$$$&$3e(B
e$B$H$,$"$C$F$b2?$b:$$j$^$;$s!#e(B

e$B:rF|$^$G$Ne(Btrunke$B$H:#F|$Ne(Btrunke$B$G0c$&$h!"$H$+$$$&$3$H$,$"$C$?e(B

e$B$i$5$9$,$K:$$j$^$9$,e(B :slight_smile:

e$B$?$@!"@bL@$5$l$F$$$J$$Hs8_49@-$O%P%0$H$7$+9M$($h$&$,$"$j$^$;e(B
e$B$s$+$i!"%P%0$8$c$J$$$J$i@bL@$r$7$F$M!"$H8@$C$F$k$@$1$G$9!#e(B
e$BK\7o$K$D$$$F$O!“Hs8_49$G$”$k$3$H<+BN$OEv=i$+$i0lEY$bLdBj$K$Oe(B
e$B$7$F$$$J$$$D$b$j$G$9!#e(B

e$B$=$l$G$O!#e(B


#10

e$B%A%1%C%He(B #803 e$B$,99?7$5$l$^$7$?!#e(B (by Koichi Sasada)

e$B%9%F!<%?%9e(B Opene$B$+$ie(BClosede$B$KJQ99e(B
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B

Applied in changeset r21079.

http://redmine.ruby-lang.org/issues/show/803