sugie
1
e$B:XF#$H?=$7$^$9!#e(B
undefe$B$K<0E83+$rH<$&%7%s%%k$rEO$9$H!"0J2<$N$h$&$Ke(Bcoree$B$rEG$-$^$9!#e(B
$ ruby-trunk -ve ‘undef :"#{foo}"’
ruby 1.9.0 (2007-11-18 patchlevel 0) [i686-linux]
– control frame ----------
c:0001 p:---- s:0001 b:-001 l:000000 d:000000 ------
– backtrace of native function call (Use addr2line) –
0xb7f30c80
0xb7e87813
0xb7e878ea
0xb7f1e6d0
0xb7f206c0
0xb7f242b7
0xb7f24378
0xb7e8ad1a
0xb7e8f6bf
0x80486ac
0xb7cbcea8
0x80485d1
[BUG] undef args must be NODE_LIT
ruby 1.9.0 (2007-11-18) [i686-linux]
e$B%"%!<%H$7$^$7$?e(B (core dumped)
aliase$B$bF1MM$G$9!#e(B
$ ruby-trunk -e 'alias foo :"#{bar}" ’
– control frame ----------
c:0001 p:---- s:0001 b:-001 l:000000 d:000000 ------
– backtrace of native function call (Use addr2line) –
0xb7f40c80
0xb7e97813
0xb7e978ea
0xb7f2906a
0xb7f306c0
0xb7f342b7
0xb7f34378
0xb7e9ad1a
0xb7e9f6bf
0x80486ac
0xb7cccea8
0x80485d1
[BUG] alias args must be NODE_LIT
ruby 1.9.0 (2007-11-18) [i686-linux]
e$B%"%!<%H$7$^$7$?e(B (core dumped)
e$B$J$*E83+$5$l$k<0$NCf?H$O!"L$Dj5A$N%7%s%%k$G$b%j%F%i%k$G$b!"e(B
(e$B6u$b4^$ae(B)e$B$I$&$G$b$$$$$h$&$G$9!#e(B
sugie
2
e$B1sF#$H?=$7$^$9!#e(B
07/11/19 e$B$Ke(B Tadashi S.[email protected]
e$B$5$s$O=q$-$^$7$?e(B:
undefe$B$K<0E83+$rH<$&%7%s%%k$rEO$9$H!"0J2<$N$h$&$Ke(Bcoree$B$rEG$-$^$9!#e(B
$ ruby-trunk -ve ‘undef :“#{foo}”’
(snip)
e$B$3$NLdBj$OMn$A$J$$$h$&$KBP1~$5$l$?$h$&$G$9$,!"<0E83+$,$5$l$J$$$h$&$G$9!#e(B
$ ./miniruby -e ‘def foobar; end; undef :“foo#{ :bar }”’
-e:1:in <main>': undefined method foo’ for class `Object’ (NameError)
e$B%9%?%C%/$+$i%7%s%%k$rFI$9~$s$Ge(B alias e$B$de(B undef
e$B$r$9$k%P%$%H%3!<%IL?Na$re(B
(e$B8+$h$&8+$^$M$Ge(B)
e$BDI2C$7$F$$^$7$?!#M>7W$J$*@$OC$@$C$?$i$9$_$^$;$s!#e(B
Index: insns.def
— insns.def (revision 14012)
+++ insns.def (working copy)
@@ -769,6 +769,28 @@
/**
@c setting
-
@e make alias (if v_p is Qtrue, make valias)
-
@j e$B%7%s%%k$r<u$1<h$C$Fe(B alias e$B$r:n$k!#$b$7e(B v_p e$B$,e(B
Qtrue e$B$J$i!"e(Bvalias (global variable) e$B$r:n$k!#e(B
- */
+DEFINE_INSN
+alias_with_symbol
+(VALUE v_p)
+(VALUE id1, VALUE id2)
+()
+{
- VALUE klass;
-
- if (v_p == Qtrue) {
- rb_alias_variable(SYM2ID(id1), SYM2ID(id2));
- }
- else {
- klass = get_cref(GET_ISEQ(), GET_LFP())->nd_clss;
- rb_alias(klass, SYM2ID(id1), SYM2ID(id2));
- }
+}
-
+/**
-
@c setting
@e undef
@j undef e$B$r9T$&!#e(B
*/
@@ -785,6 +807,22 @@
/**
@c setting
-
@e undef_with_symbol
-
@j e$B%7%s%%k$r<u$1<h$C$Fe(B undef e$B$r9T$&!#e(B
- */
+DEFINE_INSN
+undef_with_symbol
+()
+(VALUE id)
+()
+{
- VALUE klass = get_cref(GET_ISEQ(), GET_LFP())->nd_clss;
- rb_undef(klass, SYM2ID(id));
- INC_VM_STATE_VERSION();
+}
-
+/**
-
@c setting
@e defined?
@j defined? e$B$r9T$&!#e(B
*/
Index: compile.c
===================================================================
— compile.c (revision 14012)
+++ compile.c (working copy)
@@ -4064,17 +4064,40 @@
}
case NODE_ALIAS:{
VALUE s1, s2;
- t1 = nd_type(node->u1.node);
- t2 = nd_type(node->u2.node);
- if (t1 == NODE_LIT && t2 == NODE_LIT) {
-
s1 = node->u1.node->nd_lit;
-
s2 = node->u2.node->nd_lit;
-
ADD_INSN3(ret, nd_line(node), alias, Qfalse,
ID2SYM(rb_to_id(s1)),
-
ID2SYM(rb_to_id(s2)));
- }
- else if ((t1 == NODE_LIT || t1 == NODE_DSYM) &&
-
(t2 == NODE_LIT || t2 == NODE_DSYM)) {
-
if (t1 == NODE_LIT) {
-
s1 = node->u1.node->nd_lit;
- ADD_INSN1(ret, nd_line(node), putobject, ID2SYM(rb_to_id(s1)));
-
}
-
else {
- compile_dstr(iseq, ret, node->u1.node);
- ADD_SEND(ret, nd_line(node), ID2SYM(idIntern), INT2FIX(0));
-
}
-
if (t2 == NODE_LIT) {
-
s2 = node->u2.node->nd_lit;
- ADD_INSN1(ret, nd_line(node), putobject, ID2SYM(rb_to_id(s2)));
-
}
-
else {
- compile_dstr(iseq, ret, node->u2.node);
- ADD_SEND(ret, nd_line(node), ID2SYM(idIntern), INT2FIX(0));
-
}
-
ADD_INSN1(ret, nd_line(node), alias_with_symbol, Qfalse);
- }
- else {
rb_compile_bug(ERROR_ARGS “alias args must be NODE_LIT or
NODE_DSYM”);
}
-
s1 = node->u1.node->nd_lit;
-
s2 = node->u2.node->nd_lit;
-
ADD_INSN3(ret, nd_line(node), alias, Qfalse, ID2SYM(rb_to_id(s1)),
-
ID2SYM(rb_to_id(s2)));
if (!poped) {
ADD_INSN(ret, nd_line(node), putnil);
}
@@ -4090,11 +4113,19 @@
}
case NODE_UNDEF:{
enum node_type t = nd_type(node->u2.node);
-
if (t != NODE_LIT && t != NODE_DSYM) {
-
rb_compile_bug(ERROR_ARGS "undef args must be NODE_LIT");
- switch (t) {
- case NODE_LIT:
-
ADD_INSN1(ret, nd_line(node), undef,
-
ID2SYM(rb_to_id(node->u2.node->nd_lit)));
-
break;
- case NODE_DSYM:
-
compile_dstr(iseq, ret, node->u2.node);
-
ADD_SEND(ret, nd_line(node), ID2SYM(idIntern), INT2FIX(0));
-
ADD_INSN(ret, nd_line(node), undef_with_symbol);
-
break;
- default:
-
rb_compile_bug(ERROR_ARGS "undef args must be NODE_LIT or
NODE_DSYM");
}
sugie
3
e$B1sF#$G$9!#e(B
07/11/25 e$B$Ke(B SASADA Koichi[email protected] e$B$5$s$O=q$-$^$7$?e(B:
e$B!!$&!<$s!%D>$9$N$G$b$&$A$g$C$HBT$C$F$/$@$5$$!%$I$A$i$+$H$$$&$H!$%9e(B
e$B%?%C%/$+$i%7%s%%k%*%V%8%'%/%H$r<h$C$F$/$k$[$&$KE}0l$7$^$9!%e(B
e$B$O$$!"$h$m$7$/$*4j$$$7$^$9!#e(B
e$B$9$G$KLdBj$H$7$FG’<1$5$l$F$$$?$3$H$J$i<:Ni$7$^$7$?!#e(B
e$B$A$J$_$K!$$3$N$"$?$j$N@_7W$O!$<B$O:#8e2y$7$F$$$F!$0lHVM}A[E*$J$N$Oe(B
e$BFC<l$J%a%=%C%I8F$S=P$7$KMn$H$9$3$H$+$J$!!$$J$I$H9M$($F$$$^$9!%$G$b!$e(B
e$B$=$&$$$&$3$H$r$9$k$He(B trace e$B$H$+$,F0$$$A$c$C$F%@%a$J$s$@$1$I!%e(B
e$B$=$NM}A[$Oe(B (e$B;d$NA[A|$,@5$7$1$l$Pe(B)
e$BITJQ$N%%Z%i%s%I$G$bKh2s%9%?%C%/e(B
e$B7PM3$GEO$9$3$H$K$J$j$=$&$G!"%!<%P!<%X%C%I$NJ}$,5$$K$J$j$^$9!#e(B
e$B$“!”$R$g$C$H$7$F8=>u$G$b%*%Z%i%s%IEO$7$H%9%?%C%/EO$7$K8zN($N:9$O$J$$!)e(B
e$B$3$N$"$?$j$r$^$H$a$kL?Na$r:n$m$&$+$J$H;W$C$F$$$^$9!%e(B
e$B%9%?%C%/$+$iFI$_9~$s$@%%V%8%'%/%H$r%%Z%i%s%I$H$7$FJL$NL?Na$r8F$Ve(B
e$B%a%?L?Na$H$+$G$9$+$M!#e(B
sugie
4
e$B!!$5$5$@$G$9!%e(B
Yusuke ENDOH wrote:
e$B$3$NLdBj$OMn$A$J$$$h$&$KBP1~$5$l$?$h$&$G$9$,!"<0E83+$,$5$l$J$$$h$&$G$9!#e(B
$ ./miniruby -e ‘def foobar; end; undef :“foo#{ :bar }”’
-e:1:in <main>': undefined methodfoo’ for class `Object’ (NameError)
e$B%9%?%C%/$+$i%7%s%%k$rFI$9~$s$Ge(B alias e$B$de(B undef e$B$r$9$k%P%$%H%3!<%IL?Na$re(B
(e$B8+$h$&8+$^$M$Ge(B) e$BDI2C$7$F$$^$7$?!#M>7W$J$*@$OC$@$C$?$i$9$_$^$;$s!#e(B
e$B!!$&!<$s!%D>$9$N$G$b$&$A$g$C$HBT$C$F$/$@$5$$!%$I$A$i$+$H$$$&$H!$%9e(B
e$B%?%C%/$+$i%7%s%%k%*%V%8%’%/%H$r<h$C$F$/$k$[$&$KE}0l$7$^$9!%e(B
e$B!!$A$J$_$K!$$3$N$"$?$j$N@_7W$O!$<B$O:#8e2y$7$F$$$F!$0lHVM}A[E*$J$N$Oe(B
e$BFC<l$J%a%=%C%I8F$S=P$7$KMn$H$9$3$H$+$J$!!$$J$I$H9M$($F$$$^$9!%$G$b!$e(B
e$B$=$&$$$&$3$H$r$9$k$He(B trace
e$B$H$+$,F0$$$A$c$C$F%@%a$J$s$@$1$I!%$3$N$"e(B
e$B$?$j$r$^$H$a$kL?Na$r:n$m$&$+$J$H;W$C$F$$$^$9!%e(B
sugie
5
e$B!!$5$5$@$G$9!%e(B
Yusuke ENDOH wrote:
e$B$9$G$KLdBj$H$7$FG’<1$5$l$F$$$?$3$H$J$i<:Ni$7$^$7$?!#e(B
e$B!!$$$d!$A4A35$$E$$$F$$$^$;$s$G$7$?!J2?;~$N4V$K=$@5$,$5$l$F$?$N$+$b$he(B
e$B$/CN$i$J$+$C$?!K!%$$$D$b$"$j$,$H$&$4$6$$$^$9!%e(B
e$B$=$NM}A[$Oe(B (e$B;d$NA[A|$,@5$7$1$l$Pe(B) e$BITJQ$N%%Z%i%s%I$G$bKh2s%9%?%C%/e(B
e$B7PM3$GEO$9$3$H$K$J$j$=$&$G!"%!<%P!<%X%C%I$NJ}$,5$$K$J$j$^$9!#e(B
e$B$"!"$R$g$C$H$7$F8=>u$G$b%*%Z%i%s%IEO$7$H%9%?%C%/EO$7$K8zN($N:9$O$J$$!)e(B
e$B!!%*!<%P%X%C%I$K$D$$$F$O!$$4;XE&$NDL$jA}$($^$9!%$,!$$^$!e(B
undef/alias
e$B$J$s$F%k!<%W$NCf$G$7$J$$$G$7$g!$$H$$$&$3$H$GLdBj$J$$$H;W$C$F$$$^$9!%e(B
e$B$3$N$"$?$j$r$^$H$a$kL?Na$r:n$m$&$+$J$H;W$C$F$$$^$9!%e(B
e$B%9%?%C%/$+$iFI$_9~$s$@%%V%8%’%/%H$r%%Z%i%s%I$H$7$FJL$NL?Na$r8F$Ve(B
e$B%a%?L?Na$H$+$G$9$+$M!#e(B
e$B!!$I$A$i$+$H$$$&$H!$L?Na%*%Z%i%s%I$GJ,4t$9$k46$8$G$9$M!%%3%s%Q%$%k;~e(B
e$B$K$o$+$C$F$$$k>pJs$J$N$G!$%9%?%C%/$K@Q$`I,MW$OL5$$$s$8$c$J$$$+$H;W$$e(B
e$B$^$9!%e(B
sugie
6
e$B1sF#$G$9!#e(B
07/11/26 e$B$Ke(B SASADA Koichi[email protected] e$B$5$s$O=q$-$^$7$?e(B:
e$B$=$NM}A[$Oe(B (e$B;d$NA[A|$,@5$7$1$l$Pe(B) e$BITJQ$N%%Z%i%s%I$G$bKh2s%9%?%C%/e(B
e$B7PM3$GEO$9$3$H$K$J$j$=$&$G!"%!<%P!<%X%C%I$NJ}$,5$$K$J$j$^$9!#e(B
e$B$“!”$R$g$C$H$7$F8=>u$G$b%*%Z%i%s%IEO$7$H%9%?%C%/EO$7$K8zN($N:9$O$J$$!)e(B
e$B!!%*!<%P%X%C%I$K$D$$$F$O!$$4;XE&$NDL$jA}$($^$9!%$,!$$^$!e(B undef/alias
e$B$J$s$F%k!<%W$NCf$G$7$J$$$G$7$g!$$H$$$&$3$H$GLdBj$J$$$H;W$C$F$$$^$9!%e(B
e$B$3$NLdBj$NHO0O$,e(B alias e$B$He(B undef
e$B$@$1$J$i;d$bLdBj$J$$$H;W$$$^$9!#e(B
e$B!V$3$N$"$?$j$N@_7W$O8e2y$7$F$$$k!W$H$$$&$3$H$G!“B>$K$bF1MM$N2U=j$,$”$k$Ne(B
e$B$+$J$H;W$C$?$N$G$7$?!#e(B
e$B$3$N$"$?$j$r$^$H$a$kL?Na$r:n$m$&$+$J$H;W$C$F$$$^$9!%e(B
e$B%9%?%C%/$+$iFI$_9~$s$@%%V%8%'%/%H$r%%Z%i%s%I$H$7$FJL$NL?Na$r8F$Ve(B
e$B%a%?L?Na$H$+$G$9$+$M!#e(B
e$B$I$A$i$+$H$$$&$H!$L?Na%*%Z%i%s%I$GJ,4t$9$k46$8$G$9$M!%%3%s%Q%$%k;~e(B
e$B$K$o$+$C$F$$$k>pJs$J$N$G!$%9%?%C%/$K@Q$`I,MW$OL5$$$s$8$c$J$$$+$H;W$$e(B
e$B$^$9!%e(B
undef :“foo#{ :bar }” e$B$N>l9g$O!"e(BID
e$B$,%3%s%Q%$%k;~$K7h$^$i$J$$$+$ie(B
e$B:$$C$?$3$H$K$J$C$F$$$k$s$@$H;W$$$^$9!#$H$s$A$s$+$s$J$3$H$r8@$C$F$?$ie(B
e$B$4$a$s$J$5$$!#e(B
sugie
7
e$B!!$5$5$@$G$9!%e(B
Yusuke ENDOH wrote:
e$B$3$NLdBj$NHO0O$,e(B alias e$B$He(B undef e$B$@$1$J$i;d$bLdBj$J$$$H;W$$$^$9!#e(B
e$B!V$3$N$"$?$j$N@_7W$O8e2y$7$F$$$k!W$H$$$&$3$H$G!“B>$K$bF1MM$N2U=j$,$”$k$Ne(B
e$B$+$J$H;W$C$?$N$G$7$?!#e(B
e$B!!$J$k$[$I!%8e2y$7$F$$$k$N$O!$$3$&$$$&LGB?$K;H$o$l$J$$L?Na$rMQ0U$7$Fe(B
e$B$$$k$3$H$G$9!%e(B
e$B$3$N$"$?$j$r$^$H$a$kL?Na$r:n$m$&$+$J$H;W$C$F$$$^$9!%e(B
e$B%9%?%C%/$+$iFI$_9~$s$@%%V%8%’%/%H$r%%Z%i%s%I$H$7$FJL$NL?Na$r8F$Ve(B
e$B%a%?L?Na$H$+$G$9$+$M!#e(B
e$B$I$A$i$+$H$$$&$H!$L?Na%*%Z%i%s%I$GJ,4t$9$k46$8$G$9$M!%%3%s%Q%$%k;~e(B
e$B$K$o$+$C$F$$$k>pJs$J$N$G!$%9%?%C%/$K@Q$`I,MW$OL5$$$s$8$c$J$$$+$H;W$$e(B
e$B$^$9!%e(B
undef :“foo#{ :bar }” e$B$N>l9g$O!"e(BID e$B$,%3%s%Q%$%k;~$K7h$^$i$J$$$+$ie(B
e$B:$$C$?$3$H$K$J$C$F$$$k$s$@$H;W$$$^$9!#$H$s$A$s$+$s$J$3$H$r8@$C$F$?$ie(B
e$B$4$a$s$J$5$$!#e(B
e$B!!$3$l$b;d$N4*0c$$$+$J!%e(B
putobject :undef
putobject :foo
e$B!!e(Bdocommand
e$B$$?$$$J!$e(Bdocommand
e$B$$?$$$JL?Na$rMQ0U$9$kOC$+$H;W$$$^$7$?!d%a%?L?Nae(B
e$B!!;d$O!$e(B
push :foo
docommand undef
e$B$_$?$$$J$N$r:n$m$&$+$J$!$H;W$C$F$$$^$9!%e(B
sugie
8
e$B1sF#$G$9!#e(B
07/11/26 e$B$Ke(B SASADA Koichi[email protected] e$B$5$s$O=q$-$^$7$?e(B:
e$B!!$J$k$[$I!%8e2y$7$F$$$k$N$O!$$3$&$$$&LGB?$K;H$o$l$J$$L?Na$rMQ0U$7$Fe(B
e$B$$$k$3$H$G$9!%e(B
e$B$$$&!"N;2r$7$^$7$?!#e(B
e$B$3$N$"$?$j$r$^$H$a$kL?Na$r:n$m$&$+$J$H;W$C$F$$$^$9!%e(B
e$B%9%?%C%/$+$iFI$_9~$s$@%%V%8%'%/%H$r%%Z%i%s%I$H$7$FJL$NL?Na$r8F$Ve(B
e$B%a%?L?Na$H$+$G$9$+$M!#e(B
(snip)
putobject :undef
putobject :foo
docommand
e$B$$?$$$J!$e(Bdocommand e$B$$?$$$JL?Na$rMQ0U$9$kOC$+$H;W$$$^$7$?!d%a%?L?Nae(B
e$B$G$O$J$/$F!"e(B
push :foo
docommand undef
e$B$_$?$$$J$N$r:n$m$&$+$J$!$H;W$C$F$$$^$9!%e(B
e$B$3$l$HF1$8%$%a!<%8$G$7$?!#e(B
e$B2DG=$J$i$P!"e(B
push :foo
callfunction rb_undef 1 0
(e$B4X?t%]%$%s%?$H!"e(B
e$B%9%?%C%/$+$iFI$_9~$`%*%Z%i%s%Ie(B (=e$B0z?te(B) e$B$N?t$H!"e(B
e$B%9%?%C%/$KJV$9CMe(B (=e$BLa$jCMe(B) e$B$N?te(B)
e$B$_$?$$$JL?Na$J$ie(B alias e$B$de(B undef
e$BL?Na$r40A4$K=|5n$G$-$^$9$7!"3HD%@-$be(B
e$B9b$/$FNI$$5$$,$7$^$9!#e(BC e$B%l%Y%k$N4X?t8F$S=P$7$J$N$Ge(B trace
e$B$be(B (e$BB?J,e(B)
e$BF0$+$J$$$G$9$7!#$G$b2?$G$b=PMh$9$.$F<}=8$D$+$J$/$J$k$+$J!#e(B