ruby-changes:2534
From: ko1@a...
Date: 27 Nov 2007 10:03:02 +0900
Subject: [ruby-changes:2534] ko1 - Ruby:r14025 (trunk): * insns.def, compile.c: fix to allow dsym for alias/undef.
ko1 2007-11-27 10:02:30 +0900 (Tue, 27 Nov 2007) New Revision: 14025 Modified files: trunk/ChangeLog trunk/bootstraptest/test_method.rb trunk/compile.c trunk/insns.def trunk/version.h Log: * insns.def, compile.c: fix to allow dsym for alias/undef. [ruby-dev:32355] * bootstraptest/test_method.rb: add tests for above. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/version.h?r1=14025&r2=14024 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/compile.c?r1=14025&r2=14024 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14025&r2=14024 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/bootstraptest/test_method.rb?r1=14025&r2=14024 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/insns.def?r1=14025&r2=14024 Index: insns.def =================================================================== --- insns.def (revision 14024) +++ insns.def (revision 14025) @@ -751,18 +751,18 @@ */ DEFINE_INSN alias -(VALUE v_p, ID id1, ID id2) +(VALUE v_p) +(VALUE sym1, VALUE sym2) () -() { VALUE klass; if (v_p == Qtrue) { - rb_alias_variable(id1, id2); + rb_alias_variable(ID2SYM(sym1), SYM2ID(sym2)); } else { klass = get_cref(GET_ISEQ(), GET_LFP())->nd_clss; - rb_alias(klass, id1, id2); + rb_alias(klass, SYM2ID(sym1), SYM2ID(sym2)); } } @@ -773,12 +773,12 @@ */ DEFINE_INSN undef -(ID id) () +(VALUE sym) () { VALUE klass = get_cref(GET_ISEQ(), GET_LFP())->nd_clss; - rb_undef(klass, id); + rb_undef(klass, SYM2ID(sym)); INC_VM_STATE_VERSION(); } Index: ChangeLog =================================================================== --- ChangeLog (revision 14024) +++ ChangeLog (revision 14025) @@ -1,3 +1,10 @@ +Tue Nov 27 09:57:42 2007 Koichi Sasada <ko1@a...> + + * insns.def, compile.c: fix to allow dsym for alias/undef. + [ruby-dev:32355] + + * bootstraptest/test_method.rb: add tests for above. + Mon Nov 26 23:18:46 2007 Masatoshi SEKI <m_seki@m...> * lib/drb/extserv.rb (initialize, stop_service): synchronize with Index: bootstraptest/test_method.rb =================================================================== --- bootstraptest/test_method.rb (revision 14024) +++ bootstraptest/test_method.rb (revision 14025) @@ -230,6 +230,28 @@ end begin B.new.b; rescue NoMethodError; 1 end ) +assert_equal '3', %q{ + def m1 + 1 + end + alias m2 m1 + alias :"#{'m3'}" m1 + m1 + m2 + m3 +}, '[ruby-dev:32308]' +assert_equal '1', %q{ + def foobar + end + undef :"foo#{:bar}" + 1 +}, '[ruby-dev:32308]' +assert_equal '1', %q{ + def foobar + 1 + end + alias :"bar#{:baz}" :"foo#{:bar}" + barbaz +}, '[ruby-dev:32308]' + # private assert_equal '1', %q( class C def m() mm() end Index: compile.c =================================================================== --- compile.c (revision 14024) +++ compile.c (revision 14025) @@ -4063,42 +4063,37 @@ break; } case NODE_ALIAS:{ - VALUE s1, s2; - enum node_type t; + VALUE s1, s2; + enum node_type t; - if (((t = nd_type(node->u1.node)) != NODE_LIT && t != NODE_DSYM) || - ((t = nd_type(node->u2.node)) != NODE_LIT && t != NODE_DSYM)) { - 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; + COMPILE(ret, "alias arg1", node->u1.node); + COMPILE(ret, "alias arg2", node->u2.node); - 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); - } - break; + ADD_INSN1(ret, nd_line(node), alias, Qfalse); + + if (!poped) { + ADD_INSN(ret, nd_line(node), putnil); + } + break; } case NODE_VALIAS:{ - ADD_INSN3(ret, nd_line(node), alias, Qtrue, ID2SYM(node->u1.id), - ID2SYM(node->u2.id)); - if (!poped) { - ADD_INSN(ret, nd_line(node), putnil); - } - break; + ADD_INSN1(ret, nd_line(node), putobject, ID2SYM(node->u1.id)); + ADD_INSN1(ret, nd_line(node), putobject, ID2SYM(node->u2.id)); + ADD_INSN1(ret, nd_line(node), alias, Qtrue); + + if (!poped) { + ADD_INSN(ret, nd_line(node), putnil); + } + break; } 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"); - } - ADD_INSN1(ret, nd_line(node), undef, - ID2SYM(rb_to_id(node->u2.node->nd_lit))); - if (!poped) { - ADD_INSN(ret, nd_line(node), putnil); - } - break; + COMPILE(ret, "undef arg", node->u2.node); + ADD_INSN(ret, nd_line(node), undef); + + if (!poped) { + ADD_INSN(ret, nd_line(node), putnil); + } + break; } case NODE_CLASS:{ VALUE iseqval = Index: version.h =================================================================== --- version.h (revision 14024) +++ version.h (revision 14025) @@ -1,7 +1,7 @@ #define RUBY_VERSION "1.9.0" -#define RUBY_RELEASE_DATE "2007-11-26" +#define RUBY_RELEASE_DATE "2007-11-27" #define RUBY_VERSION_CODE 190 -#define RUBY_RELEASE_CODE 20071126 +#define RUBY_RELEASE_CODE 20071127 #define RUBY_PATCHLEVEL 0 #define RUBY_VERSION_MAJOR 1 @@ -9,7 +9,7 @@ #define RUBY_VERSION_TEENY 0 #define RUBY_RELEASE_YEAR 2007 #define RUBY_RELEASE_MONTH 11 -#define RUBY_RELEASE_DAY 26 +#define RUBY_RELEASE_DAY 27 #ifdef RUBY_EXTERN RUBY_EXTERN const char ruby_version[]; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml