diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-11-07 08:51:15 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-11-07 08:51:15 +0000 |
commit | 568602aeeaa1636a8f74dcf967e15ebd0e843da7 (patch) | |
tree | 19fb4f48daed687fa8a779a4219f0a23d909b017 /eval.c | |
parent | 84ad9c0a26c7046f5074b2a9a3f8ffabd1542dc8 (diff) | |
download | ruby-568602aeeaa1636a8f74dcf967e15ebd0e843da7.tar.gz |
* eval.c (method_missing): update old argument adjustment.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11290 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 11 |
1 files changed, 7 insertions, 4 deletions
@@ -5515,14 +5515,17 @@ method_missing(VALUE obj, ID id, int argc, const VALUE *argv, } if (argc < 0) { VALUE tmp; + int n; - argc = -argc-1; + argc = -argc; + n = argc / 256 - 1; + argc %= 256; tmp = svalue_to_avalue(argv[argc]); - nargv = ALLOCA_N(VALUE, argc + RARRAY_LEN(tmp) + 1); + nargv = ALLOCA_N(VALUE, argc + RARRAY_LEN(tmp) + n + 1); MEMCPY(nargv+1, argv, VALUE, argc); MEMCPY(nargv+1+argc, RARRAY_PTR(tmp), VALUE, RARRAY_LEN(tmp)); - argc += RARRAY_LEN(tmp); - + MEMCPY(nargv+1+argc+RARRAY_LEN(tmp), argv+argc+1, VALUE, n); + argc += RARRAY_LEN(tmp)+n; } else { nargv = ALLOCA_N(VALUE, argc+1); |