summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-10-07 14:35:19 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-10-07 14:35:19 +0000
commit5ce24fb40ee6345dc9be7112094aab629132310d (patch)
tree0176c034317d071fa80815b55f1c5087c09a888c /eval.c
parent942e81bd0d43d10c124fca071f61633f8e6280d2 (diff)
downloadruby-5ce24fb40ee6345dc9be7112094aab629132310d.tar.gz
ruby-5ce24fb40ee6345dc9be7112094aab629132310d.tar.xz
ruby-5ce24fb40ee6345dc9be7112094aab629132310d.zip
* eval.c (formal_assign): packed post splat arguments may conflict
with normal arguments. [ruby-core:09021] * eval.c (rb_call0): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@11103 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/eval.c b/eval.c
index 9e788df9e..12f852f77 100644
--- a/eval.c
+++ b/eval.c
@@ -5678,6 +5678,7 @@ formal_assign(VALUE recv, NODE *node, int argc, const VALUE *argv, VALUE *local_
v = rb_ary_new4(argc,argv);
n += npost;
i += n*256;
+ i = -i;
}
else {
v = rb_ary_new2(0);
@@ -5719,11 +5720,13 @@ rb_call0(VALUE klass, VALUE recv, ID id, ID oid,
stack_check();
rb_gc_finalize_deferred();
}
- if (argc >= 256) {
+ if (argc < 0) {
VALUE tmp;
VALUE *nargv;
- int n = argc / 256 - 1;
+ int n;
+ argc = -argc;
+ n = argc / 256 - 1;
argc %= 256;
tmp = svalue_to_avalue(argv[argc]);
nargv = TMP_ALLOC(argc + RARRAY_LEN(tmp) + n);