ruby-changes:11324
From: matz <ko1@a...>
Date: Sat, 14 Mar 2009 01:15:26 +0900 (JST)
Subject: [ruby-changes:11324] Ruby:r22939 (ruby_1_8): * eval.c (rb_call0): should pass rest argument information even
matz 2009-03-14 01:14:40 +0900 (Sat, 14 Mar 2009) New Revision: 22939 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22939 Log: * eval.c (rb_call0): should pass rest argument information even when it's empty. [ruby-dev:38117] Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/env.h branches/ruby_1_8/eval.c Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 22938) +++ ruby_1_8/ChangeLog (revision 22939) @@ -1,3 +1,8 @@ +Fri Mar 13 19:44:21 2009 Yukihiro Matsumoto <matz@r...> + + * eval.c (rb_call0): should pass rest argument information even + when it's empty. [ruby-dev:38117] + Fri Mar 13 19:41:09 2009 Nobuyoshi Nakada <nobu@r...> * mkconfig.rb (patchlevel): config.status may not contain Index: ruby_1_8/env.h =================================================================== --- ruby_1_8/env.h (revision 22938) +++ ruby_1_8/env.h (revision 22939) @@ -31,6 +31,7 @@ #define FRAME_DMETH 1 #define FRAME_FUNC 2 +#define FRAME_REST_ARG 4 extern struct SCOPE { struct RBasic super; Index: ruby_1_8/eval.c =================================================================== --- ruby_1_8/eval.c (revision 22938) +++ ruby_1_8/eval.c (revision 22939) @@ -3586,6 +3586,15 @@ } argv = RARRAY(RBASIC(ruby_scope)->klass)->ptr; } + else if (ruby_frame->flags & FRAME_REST_ARG) { + VALUE rest = ruby_scope->local_vars[argc+2]; + + /* check if T_ARRAY */; + argv = TMP_ALLOC(argc + RARRAY(rest)->len); + MEMCPY(argv, ruby_scope->local_vars+2, VALUE, argc); + MEMCPY(argv+argc, RARRAY(rest)->ptr, VALUE, RARRAY(rest)->len); + argc += RARRAY(rest)->len; + } else if (!ruby_scope->local_vars) { argc = 0; argv = 0; @@ -6095,6 +6104,7 @@ i = -i - 1; } else { + ruby_frame->flags |= FRAME_REST_ARG; v = rb_ary_new2(0); } assign(recv, node->nd_rest, v, 1); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/