ruby-changes:20692
From: nobu <ko1@a...>
Date: Fri, 29 Jul 2011 23:54:02 +0900 (JST)
Subject: [ruby-changes:20692] nobu:r32740 (trunk): * array.c (rb_ary_set_len): new function to set array length.
nobu 2011-07-29 23:53:51 +0900 (Fri, 29 Jul 2011) New Revision: 32740 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32740 Log: * array.c (rb_ary_set_len): new function to set array length. * vm_eval.c (method_missing): set the length of argv array, to mark arguments. Modified files: trunk/ChangeLog trunk/array.c trunk/internal.h trunk/vm_eval.c Index: array.c =================================================================== --- array.c (revision 32739) +++ array.c (revision 32740) @@ -1310,6 +1310,21 @@ } } +void +rb_ary_set_len(VALUE ary, long len) +{ + long capa; + + rb_ary_modify_check(ary); + if (ARY_SHARED_P(ary)) { + rb_raise(rb_eRuntimeError, "can't set length of shared "); + } + if (len > (capa = (long)ARY_CAPA(ary))) { + rb_bug("probable buffer overflow: %ld for %ld", len, capa); + } + ARY_SET_LEN(ary, len); +} + /*! * expands or shrinks \a ary to \a len elements. * expanded region will be filled with Qnil. Index: ChangeLog =================================================================== --- ChangeLog (revision 32739) +++ ChangeLog (revision 32740) @@ -1,5 +1,10 @@ -Fri Jul 29 23:53:44 2011 Nobuyoshi Nakada <nobu@r...> +Fri Jul 29 23:53:48 2011 Nobuyoshi Nakada <nobu@r...> + * array.c (rb_ary_set_len): new function to set array length. + + * vm_eval.c (method_missing): set the length of argv array, to mark + arguments. + * vm_eval.c (rb_apply): get rid of too large alloca. Fri Jul 29 20:48:39 2011 Tanaka Akira <akr@f...> Index: vm_eval.c =================================================================== --- vm_eval.c (revision 32739) +++ vm_eval.c (revision 32740) @@ -568,6 +568,7 @@ } nargv[0] = ID2SYM(id); MEMCPY(nargv + 1, argv, VALUE, argc); + if (argv_ary) rb_ary_set_len(argv_ary, argc + 1); if (rb_method_basic_definition_p(CLASS_OF(obj) , idMethodMissing)) { raise_method_missing(th, argc+1, nargv, obj, call_status | NOEX_MISSING); Index: internal.h =================================================================== --- internal.h (revision 32739) +++ internal.h (revision 32740) @@ -41,6 +41,7 @@ /* array.c */ VALUE rb_ary_last(int, VALUE *, VALUE); +void rb_ary_set_len(VALUE, long); /* bignum.c */ VALUE rb_big_fdiv(VALUE x, VALUE y); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/