mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* eval.c (rb_call0): should pass rest argument information even
when it's empty. [ruby-dev:38117] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@22939 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
46b6b8d218
commit
694d70cace
3 changed files with 16 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
Fri Mar 13 19:44:21 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* 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@ruby-lang.org>
|
||||
|
||||
* mkconfig.rb (patchlevel): config.status may not contain
|
||||
|
|
1
env.h
1
env.h
|
@ -31,6 +31,7 @@ void rb_gc_mark_frame _((struct FRAME *));
|
|||
|
||||
#define FRAME_DMETH 1
|
||||
#define FRAME_FUNC 2
|
||||
#define FRAME_REST_ARG 4
|
||||
|
||||
extern struct SCOPE {
|
||||
struct RBasic super;
|
||||
|
|
10
eval.c
10
eval.c
|
@ -3586,6 +3586,15 @@ rb_eval(self, n)
|
|||
}
|
||||
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 @@ rb_call0(klass, recv, id, oid, argc, argv, body, flags)
|
|||
i = -i - 1;
|
||||
}
|
||||
else {
|
||||
ruby_frame->flags |= FRAME_REST_ARG;
|
||||
v = rb_ary_new2(0);
|
||||
}
|
||||
assign(recv, node->nd_rest, v, 1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue