mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* eval.c: unify ruby_class (for method definition) and ruby_cbase
(for constant reference). * eval.c (rb_call0): use TMP_ALLOC() instead of allocating a temporary array object. * eval.c (eval): need not to protect $SAFE value. [ruby-core:07177] * error.c (Init_Exception): change NameError to direct subclass of Exception so that default rescue do not handle it silently. * struct.c (rb_struct_select): update RDoc description. [ruby-core:7254] * numeric.c (int_upto): return an enumerator if no block is attached to the method. * numeric.c (int_downto): ditto. * numeric.c (int_dotimes): ditto. * enum.c (enum_first): new method Enumerable#first to take first n element from an enumerable. * enum.c (enum_group_by): new method Enumerable#group_by that groups enumerable values according to their block values. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9880 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e4f1feac3e
commit
5675cdbd41
27 changed files with 657 additions and 591 deletions
36
ChangeLog
36
ChangeLog
|
@ -1,3 +1,8 @@
|
||||||
|
Fri Feb 3 17:57:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* eval.c: unify ruby_class (for method definition) and ruby_cbase
|
||||||
|
(for constant reference).
|
||||||
|
|
||||||
Fri Feb 3 15:02:10 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
|
Fri Feb 3 15:02:10 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
|
||||||
|
|
||||||
* ext/syck/syck.c (syck_move_tokens): should reset p->cursor or etc
|
* ext/syck/syck.c (syck_move_tokens): should reset p->cursor or etc
|
||||||
|
@ -15,6 +20,17 @@ Thu Feb 2 17:13:01 2006 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser#get_tk): added
|
* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser#get_tk): added
|
||||||
support of :'string' style Symbol.
|
support of :'string' style Symbol.
|
||||||
|
|
||||||
|
Thu Feb 2 16:01:24 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* eval.c (rb_call0): use TMP_ALLOC() instead of allocating
|
||||||
|
a temporary array object.
|
||||||
|
|
||||||
|
* eval.c (eval): need not to protect $SAFE value.
|
||||||
|
[ruby-core:07177]
|
||||||
|
|
||||||
|
* error.c (Init_Exception): change NameError to direct subclass of
|
||||||
|
Exception so that default rescue do not handle it silently.
|
||||||
|
|
||||||
Thu Feb 2 14:45:53 2006 Ville Mattila <ville.mattila@stonesoft.com>
|
Thu Feb 2 14:45:53 2006 Ville Mattila <ville.mattila@stonesoft.com>
|
||||||
|
|
||||||
* configure.in: The isinf is not regognized by autoconf
|
* configure.in: The isinf is not regognized by autoconf
|
||||||
|
@ -29,6 +45,11 @@ Wed Feb 1 22:01:47 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
|
||||||
* ruby.c (set_arg0): if use setenv(3), environ space cannot be used
|
* ruby.c (set_arg0): if use setenv(3), environ space cannot be used
|
||||||
for altering argv[0].
|
for altering argv[0].
|
||||||
|
|
||||||
|
Tue Jan 31 14:46:28 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* struct.c (rb_struct_select): update RDoc description.
|
||||||
|
[ruby-core:7254]
|
||||||
|
|
||||||
Tue Jan 31 11:58:51 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
Tue Jan 31 11:58:51 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
||||||
|
|
||||||
* ext/tk/lib/multi-tk.rb: add MultiTkIp#eval and bg_eval.
|
* ext/tk/lib/multi-tk.rb: add MultiTkIp#eval and bg_eval.
|
||||||
|
@ -36,6 +57,21 @@ Tue Jan 31 11:58:51 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
||||||
* ext/tk/lib/tk/namespace.rb: TkNamespace#eval was enbugged at the
|
* ext/tk/lib/tk/namespace.rb: TkNamespace#eval was enbugged at the
|
||||||
last commit. Now it will return a proper object.
|
last commit. Now it will return a proper object.
|
||||||
|
|
||||||
|
Tue Jan 31 08:07:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* numeric.c (int_upto): return an enumerator if no block is
|
||||||
|
attached to the method.
|
||||||
|
|
||||||
|
* numeric.c (int_downto): ditto.
|
||||||
|
|
||||||
|
* numeric.c (int_dotimes): ditto.
|
||||||
|
|
||||||
|
* enum.c (enum_first): new method Enumerable#first to take first n
|
||||||
|
element from an enumerable.
|
||||||
|
|
||||||
|
* enum.c (enum_group_by): new method Enumerable#group_by that
|
||||||
|
groups enumerable values according to their block values.
|
||||||
|
|
||||||
Tue Jan 31 00:08:22 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
|
Tue Jan 31 00:08:22 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
|
||||||
|
|
||||||
* ext/syck/rubyext.c (syck_resolver_transfer): workaround for SEGV.
|
* ext/syck/rubyext.c (syck_resolver_transfer): workaround for SEGV.
|
||||||
|
|
144
enum.c
144
enum.c
|
@ -17,12 +17,6 @@
|
||||||
VALUE rb_mEnumerable;
|
VALUE rb_mEnumerable;
|
||||||
static ID id_each, id_eqq, id_cmp;
|
static ID id_each, id_eqq, id_cmp;
|
||||||
|
|
||||||
VALUE
|
|
||||||
rb_each(VALUE obj)
|
|
||||||
{
|
|
||||||
return rb_funcall(obj, id_each, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
grep_i(VALUE i, VALUE *arg)
|
grep_i(VALUE i, VALUE *arg)
|
||||||
{
|
{
|
||||||
|
@ -68,7 +62,7 @@ enum_grep(VALUE obj, VALUE pat)
|
||||||
arg[0] = pat;
|
arg[0] = pat;
|
||||||
arg[1] = ary;
|
arg[1] = ary;
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, rb_block_given_p() ? grep_iter_i : grep_i, (VALUE)arg);
|
rb_block_call(obj, id_each, 0, 0, rb_block_given_p() ? grep_iter_i : grep_i, (VALUE)arg);
|
||||||
|
|
||||||
return ary;
|
return ary;
|
||||||
}
|
}
|
||||||
|
@ -117,13 +111,13 @@ enum_count(int argc, VALUE *argv, VALUE obj)
|
||||||
rb_scan_args(argc, argv, "1", &item);
|
rb_scan_args(argc, argv, "1", &item);
|
||||||
args[0] = item;
|
args[0] = item;
|
||||||
args[1] = 0;
|
args[1] = 0;
|
||||||
rb_iterate(rb_each, obj, count_i, (VALUE)&args);
|
rb_block_call(obj, id_each, 0, 0, count_i, (VALUE)&args);
|
||||||
return INT2NUM(args[1]);
|
return INT2NUM(args[1]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
long n = 0;
|
long n = 0;
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, count_iter_i, (VALUE)&n);
|
rb_block_call(obj, id_each, 0, 0, count_iter_i, (VALUE)&n);
|
||||||
return INT2NUM(n);
|
return INT2NUM(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -161,7 +155,7 @@ enum_find(int argc, VALUE *argv, VALUE obj)
|
||||||
|
|
||||||
rb_scan_args(argc, argv, "01", &if_none);
|
rb_scan_args(argc, argv, "01", &if_none);
|
||||||
RETURN_ENUMERATOR(obj, argc, argv);
|
RETURN_ENUMERATOR(obj, argc, argv);
|
||||||
rb_iterate(rb_each, obj, find_i, (VALUE)&memo);
|
rb_block_call(obj, id_each, 0, 0, find_i, (VALUE)&memo);
|
||||||
if (memo != Qundef) {
|
if (memo != Qundef) {
|
||||||
return memo;
|
return memo;
|
||||||
}
|
}
|
||||||
|
@ -201,7 +195,7 @@ enum_find_all(VALUE obj)
|
||||||
RETURN_ENUMERATOR(obj, 0, 0);
|
RETURN_ENUMERATOR(obj, 0, 0);
|
||||||
|
|
||||||
ary = rb_ary_new();
|
ary = rb_ary_new();
|
||||||
rb_iterate(rb_each, obj, find_all_i, ary);
|
rb_block_call(obj, id_each, 0, 0, find_all_i, ary);
|
||||||
|
|
||||||
return ary;
|
return ary;
|
||||||
}
|
}
|
||||||
|
@ -234,7 +228,7 @@ enum_reject(VALUE obj)
|
||||||
RETURN_ENUMERATOR(obj, 0, 0);
|
RETURN_ENUMERATOR(obj, 0, 0);
|
||||||
|
|
||||||
ary = rb_ary_new();
|
ary = rb_ary_new();
|
||||||
rb_iterate(rb_each, obj, reject_i, ary);
|
rb_block_call(obj, id_each, 0, 0, reject_i, ary);
|
||||||
|
|
||||||
return ary;
|
return ary;
|
||||||
}
|
}
|
||||||
|
@ -276,7 +270,7 @@ enum_collect(VALUE obj)
|
||||||
RETURN_ENUMERATOR(obj, 0, 0);
|
RETURN_ENUMERATOR(obj, 0, 0);
|
||||||
|
|
||||||
ary = rb_ary_new();
|
ary = rb_ary_new();
|
||||||
rb_iterate(rb_each, obj, collect_i, ary);
|
rb_block_call(obj, id_each, 0, 0, collect_i, ary);
|
||||||
|
|
||||||
return ary;
|
return ary;
|
||||||
}
|
}
|
||||||
|
@ -296,7 +290,7 @@ enum_to_a(VALUE obj)
|
||||||
{
|
{
|
||||||
VALUE ary = rb_ary_new();
|
VALUE ary = rb_ary_new();
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, collect_all, ary);
|
rb_block_call(obj, id_each, 0, 0, collect_all, ary);
|
||||||
|
|
||||||
return ary;
|
return ary;
|
||||||
}
|
}
|
||||||
|
@ -351,7 +345,7 @@ enum_inject(int argc, VALUE *argv, VALUE obj)
|
||||||
|
|
||||||
if (rb_scan_args(argc, argv, "01", &memo) == 0)
|
if (rb_scan_args(argc, argv, "01", &memo) == 0)
|
||||||
memo = Qundef;
|
memo = Qundef;
|
||||||
rb_iterate(rb_each, obj, inject_i, (VALUE)&memo);
|
rb_block_call(obj, id_each, 0, 0, inject_i, (VALUE)&memo);
|
||||||
if (memo == Qundef) return Qnil;
|
if (memo == Qundef) return Qnil;
|
||||||
return memo;
|
return memo;
|
||||||
}
|
}
|
||||||
|
@ -389,11 +383,103 @@ enum_partition(VALUE obj)
|
||||||
|
|
||||||
ary[0] = rb_ary_new();
|
ary[0] = rb_ary_new();
|
||||||
ary[1] = rb_ary_new();
|
ary[1] = rb_ary_new();
|
||||||
rb_iterate(rb_each, obj, partition_i, (VALUE)ary);
|
rb_block_call(obj, id_each, 0, 0, partition_i, (VALUE)ary);
|
||||||
|
|
||||||
return rb_assoc_new(ary[0], ary[1]);
|
return rb_assoc_new(ary[0], ary[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
group_by_i(VALUE i, VALUE hash)
|
||||||
|
{
|
||||||
|
VALUE group = rb_yield(i);
|
||||||
|
VALUE values;
|
||||||
|
|
||||||
|
values = rb_hash_aref(hash, group);
|
||||||
|
if (NIL_P(values)) {
|
||||||
|
values = rb_ary_new3(1, i);
|
||||||
|
rb_hash_aset(hash, group, values);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rb_ary_push(values, i);
|
||||||
|
}
|
||||||
|
return Qnil;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* enum.group_by {| obj | block } => a_hash
|
||||||
|
*
|
||||||
|
* Returns a hash, which keys are evaluated result from the
|
||||||
|
* block, and values are arrays of elements in <i>enum</i>
|
||||||
|
* corresponding to the key.
|
||||||
|
*
|
||||||
|
* (1..6).group_by {|i| i%3} #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
enum_group_by(VALUE obj)
|
||||||
|
{
|
||||||
|
VALUE hash;
|
||||||
|
|
||||||
|
RETURN_ENUMERATOR(obj, 0, 0);
|
||||||
|
|
||||||
|
hash = rb_hash_new();
|
||||||
|
rb_block_call(obj, id_each, 0, 0, group_by_i, hash);
|
||||||
|
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
first_i(VALUE i, VALUE *ary)
|
||||||
|
{
|
||||||
|
if (NIL_P(ary[0])) {
|
||||||
|
ary[1] = i;
|
||||||
|
rb_iter_break();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
long n = NUM2LONG(ary[0]);
|
||||||
|
|
||||||
|
if (n <= 0) {
|
||||||
|
rb_iter_break();
|
||||||
|
}
|
||||||
|
rb_ary_push(ary[1], i);
|
||||||
|
n--;
|
||||||
|
ary[0] = INT2NUM(n);
|
||||||
|
}
|
||||||
|
return Qnil;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* enum.first -> obj or nil
|
||||||
|
* enum.first(n) -> an_array
|
||||||
|
*
|
||||||
|
* Returns the first element, or the first +n+ elements, of the enumerable.
|
||||||
|
* If the enumerable is empty, the first form returns <code>nil</code>, and the
|
||||||
|
* second form returns an empty array.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
enum_first(int argc, VALUE *argv, VALUE obj)
|
||||||
|
{
|
||||||
|
VALUE n, ary[2];
|
||||||
|
|
||||||
|
rb_scan_args(argc, argv, "01", &n);
|
||||||
|
|
||||||
|
if (NIL_P(n)) {
|
||||||
|
ary[0] = ary[1] = Qnil;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ary[0] = n;
|
||||||
|
ary[1] = rb_ary_new2(NUM2LONG(n));
|
||||||
|
}
|
||||||
|
rb_block_call(obj, id_each, 0, 0, first_i, (VALUE)ary);
|
||||||
|
|
||||||
|
return ary[1];
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* enum.sort => array
|
* enum.sort => array
|
||||||
|
@ -525,7 +611,7 @@ enum_sort_by(VALUE obj)
|
||||||
ary = rb_ary_new();
|
ary = rb_ary_new();
|
||||||
}
|
}
|
||||||
RBASIC(ary)->klass = 0;
|
RBASIC(ary)->klass = 0;
|
||||||
rb_iterate(rb_each, obj, sort_by_i, ary);
|
rb_block_call(obj, id_each, 0, 0, sort_by_i, ary);
|
||||||
if (RARRAY(ary)->len > 1) {
|
if (RARRAY(ary)->len > 1) {
|
||||||
ruby_qsort(RARRAY(ary)->ptr, RARRAY(ary)->len, sizeof(VALUE), sort_by_cmp, 0);
|
ruby_qsort(RARRAY(ary)->ptr, RARRAY(ary)->len, sizeof(VALUE), sort_by_cmp, 0);
|
||||||
}
|
}
|
||||||
|
@ -581,7 +667,7 @@ enum_all(VALUE obj)
|
||||||
{
|
{
|
||||||
VALUE result = Qtrue;
|
VALUE result = Qtrue;
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, rb_block_given_p() ? all_iter_i : all_i, (VALUE)&result);
|
rb_block_call(obj, id_each, 0, 0, rb_block_given_p() ? all_iter_i : all_i, (VALUE)&result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -628,7 +714,7 @@ enum_any(VALUE obj)
|
||||||
{
|
{
|
||||||
VALUE result = Qfalse;
|
VALUE result = Qfalse;
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, rb_block_given_p() ? any_iter_i : any_i, (VALUE)&result);
|
rb_block_call(obj, id_each, 0, 0, rb_block_given_p() ? any_iter_i : any_i, (VALUE)&result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -681,7 +767,7 @@ enum_one(VALUE obj)
|
||||||
{
|
{
|
||||||
VALUE result = Qundef;
|
VALUE result = Qundef;
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, rb_block_given_p() ? one_iter_i : one_i, (VALUE)&result);
|
rb_block_call(obj, id_each, 0, 0, rb_block_given_p() ? one_iter_i : one_i, (VALUE)&result);
|
||||||
if (result == Qundef) return Qfalse;
|
if (result == Qundef) return Qfalse;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -726,7 +812,7 @@ enum_none(VALUE obj)
|
||||||
{
|
{
|
||||||
VALUE result = Qtrue;
|
VALUE result = Qtrue;
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, rb_block_given_p() ? none_iter_i : none_i, (VALUE)&result);
|
rb_block_call(obj, id_each, 0, 0, rb_block_given_p() ? none_iter_i : none_i, (VALUE)&result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -784,7 +870,7 @@ enum_min(VALUE obj)
|
||||||
{
|
{
|
||||||
VALUE result = Qundef;
|
VALUE result = Qundef;
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, rb_block_given_p() ? min_ii : min_i, (VALUE)&result);
|
rb_block_call(obj, id_each, 0, 0, rb_block_given_p() ? min_ii : min_i, (VALUE)&result);
|
||||||
if (result == Qundef) return Qnil;
|
if (result == Qundef) return Qnil;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -842,7 +928,7 @@ enum_max(VALUE obj)
|
||||||
{
|
{
|
||||||
VALUE result = Qundef;
|
VALUE result = Qundef;
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, rb_block_given_p() ? max_ii : max_i, (VALUE)&result);
|
rb_block_call(obj, id_each, 0, 0, rb_block_given_p() ? max_ii : max_i, (VALUE)&result);
|
||||||
if (result == Qundef) return Qnil;
|
if (result == Qundef) return Qnil;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -884,7 +970,7 @@ enum_min_by(VALUE obj)
|
||||||
|
|
||||||
memo[0] = Qundef;
|
memo[0] = Qundef;
|
||||||
memo[1] = Qnil;
|
memo[1] = Qnil;
|
||||||
rb_iterate(rb_each, obj, min_by_i, (VALUE)memo);
|
rb_block_call(obj, id_each, 0, 0, min_by_i, (VALUE)memo);
|
||||||
return memo[1];
|
return memo[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -925,7 +1011,7 @@ enum_max_by(VALUE obj)
|
||||||
|
|
||||||
memo[0] = Qundef;
|
memo[0] = Qundef;
|
||||||
memo[1] = Qnil;
|
memo[1] = Qnil;
|
||||||
rb_iterate(rb_each, obj, max_by_i, (VALUE)memo);
|
rb_block_call(obj, id_each, 0, 0, max_by_i, (VALUE)memo);
|
||||||
return memo[1];
|
return memo[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -959,7 +1045,7 @@ enum_member(VALUE obj, VALUE val)
|
||||||
|
|
||||||
memo[0] = val;
|
memo[0] = val;
|
||||||
memo[1] = Qfalse;
|
memo[1] = Qfalse;
|
||||||
rb_iterate(rb_each, obj, member_i, (VALUE)memo);
|
rb_block_call(obj, id_each, 0, 0, member_i, (VALUE)memo);
|
||||||
return memo[1];
|
return memo[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -993,7 +1079,7 @@ enum_each_with_index(VALUE obj)
|
||||||
|
|
||||||
RETURN_ENUMERATOR(obj, 0, 0);
|
RETURN_ENUMERATOR(obj, 0, 0);
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, each_with_index_i, (VALUE)&memo);
|
rb_block_call(obj, id_each, 0, 0, each_with_index_i, (VALUE)&memo);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1057,7 +1143,7 @@ enum_zip(int argc, VALUE *argv, VALUE obj)
|
||||||
memo[0] = result;
|
memo[0] = result;
|
||||||
memo[1] = rb_ary_new4(argc, argv);
|
memo[1] = rb_ary_new4(argc, argv);
|
||||||
memo[2] = 0;
|
memo[2] = 0;
|
||||||
rb_iterate(rb_each, obj, zip_i, (VALUE)memo);
|
rb_block_call(obj, id_each, 0, 0, zip_i, (VALUE)memo);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1094,6 +1180,8 @@ Init_Enumerable(void)
|
||||||
rb_define_method(rb_mEnumerable,"map", enum_collect, 0);
|
rb_define_method(rb_mEnumerable,"map", enum_collect, 0);
|
||||||
rb_define_method(rb_mEnumerable,"inject", enum_inject, -1);
|
rb_define_method(rb_mEnumerable,"inject", enum_inject, -1);
|
||||||
rb_define_method(rb_mEnumerable,"partition", enum_partition, 0);
|
rb_define_method(rb_mEnumerable,"partition", enum_partition, 0);
|
||||||
|
rb_define_method(rb_mEnumerable,"group_by", enum_group_by, 0);
|
||||||
|
rb_define_method(rb_mEnumerable,"first", enum_first, -1);
|
||||||
rb_define_method(rb_mEnumerable,"all?", enum_all, 0);
|
rb_define_method(rb_mEnumerable,"all?", enum_all, 0);
|
||||||
rb_define_method(rb_mEnumerable,"any?", enum_any, 0);
|
rb_define_method(rb_mEnumerable,"any?", enum_any, 0);
|
||||||
rb_define_method(rb_mEnumerable,"one?", enum_one, 0);
|
rb_define_method(rb_mEnumerable,"one?", enum_one, 0);
|
||||||
|
|
42
enumerator.c
42
enumerator.c
|
@ -32,18 +32,6 @@ proc_call(VALUE proc, VALUE args)
|
||||||
return rb_proc_call(proc, args);
|
return rb_proc_call(proc, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
|
||||||
method_call(VALUE method, VALUE args)
|
|
||||||
{
|
|
||||||
int argc = 0;
|
|
||||||
VALUE *argv = 0;
|
|
||||||
if (args) {
|
|
||||||
argc = RARRAY(args)->len;
|
|
||||||
argv = RARRAY(args)->ptr;
|
|
||||||
}
|
|
||||||
return rb_method_call(argc, argv, method);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct enumerator {
|
struct enumerator {
|
||||||
VALUE method;
|
VALUE method;
|
||||||
VALUE proc;
|
VALUE proc;
|
||||||
|
@ -168,7 +156,7 @@ enum_each_slice(VALUE obj, VALUE n)
|
||||||
args[0] = rb_ary_new2(size);
|
args[0] = rb_ary_new2(size);
|
||||||
args[1] = (VALUE)size;
|
args[1] = (VALUE)size;
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, each_slice_i, (VALUE)args);
|
rb_block_call(obj, rb_intern("each"), 0, 0, each_slice_i, (VALUE)args);
|
||||||
|
|
||||||
ary = args[0];
|
ary = args[0];
|
||||||
if (RARRAY(ary)->len > 0) rb_yield(ary);
|
if (RARRAY(ary)->len > 0) rb_yield(ary);
|
||||||
|
@ -235,7 +223,7 @@ enum_each_cons(VALUE obj, VALUE n)
|
||||||
args[0] = rb_ary_new2(size);
|
args[0] = rb_ary_new2(size);
|
||||||
args[1] = (VALUE)size;
|
args[1] = (VALUE)size;
|
||||||
|
|
||||||
rb_iterate(rb_each, obj, each_cons_i, (VALUE)args);
|
rb_block_call(obj, rb_intern("each"), 0, 0, each_cons_i, (VALUE)args);
|
||||||
|
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
@ -315,14 +303,6 @@ rb_enumeratorize(VALUE obj, VALUE meth, int argc, VALUE *argv)
|
||||||
return enumerator_init(enumerator_allocate(rb_cEnumerator), obj, meth, argc, argv);
|
return enumerator_init(enumerator_allocate(rb_cEnumerator), obj, meth, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
|
||||||
enumerator_iter(VALUE memo)
|
|
||||||
{
|
|
||||||
struct enumerator *e = (struct enumerator *)memo;
|
|
||||||
|
|
||||||
return method_call(e->method, e->args);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* enum.each {...}
|
* enum.each {...}
|
||||||
|
@ -335,8 +315,14 @@ static VALUE
|
||||||
enumerator_each(VALUE obj)
|
enumerator_each(VALUE obj)
|
||||||
{
|
{
|
||||||
struct enumerator *e = enumerator_ptr(obj);
|
struct enumerator *e = enumerator_ptr(obj);
|
||||||
|
int argc = 0;
|
||||||
|
VALUE *argv = 0;
|
||||||
|
|
||||||
return rb_iterate(enumerator_iter, (VALUE)e, e->iter, (VALUE)e);
|
if (e->args) {
|
||||||
|
argc = RARRAY(e->args)->len;
|
||||||
|
argv = RARRAY(e->args)->ptr;
|
||||||
|
}
|
||||||
|
return rb_block_call(e->method, rb_intern("call"), argc, argv, e->iter, (VALUE)e);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
@ -360,8 +346,16 @@ enumerator_with_index(VALUE obj)
|
||||||
{
|
{
|
||||||
struct enumerator *e = enumerator_ptr(obj);
|
struct enumerator *e = enumerator_ptr(obj);
|
||||||
VALUE memo = 0;
|
VALUE memo = 0;
|
||||||
|
int argc = 0;
|
||||||
|
VALUE *argv = 0;
|
||||||
|
|
||||||
return rb_iterate(enumerator_iter, (VALUE)e,
|
if (e->args) {
|
||||||
|
argc = RARRAY(e->args)->len;
|
||||||
|
argv = RARRAY(e->args)->ptr;
|
||||||
|
}
|
||||||
|
return rb_block_call(e->method, rb_intern("call"), argc, argv, e->iter, (VALUE)e);
|
||||||
|
|
||||||
|
return rb_block_call(e->method, rb_intern("call"), argc, argv,
|
||||||
enumerator_with_index_i, (VALUE)&memo);
|
enumerator_with_index_i, (VALUE)&memo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
9
env.h
9
env.h
|
@ -22,7 +22,7 @@ RUBY_EXTERN struct FRAME {
|
||||||
struct FRAME *prev;
|
struct FRAME *prev;
|
||||||
struct FRAME *tmp;
|
struct FRAME *tmp;
|
||||||
struct RNode *node;
|
struct RNode *node;
|
||||||
int iter;
|
struct BLOCK *block;
|
||||||
int flags;
|
int flags;
|
||||||
unsigned long uniq;
|
unsigned long uniq;
|
||||||
} *ruby_frame;
|
} *ruby_frame;
|
||||||
|
@ -45,8 +45,8 @@ RUBY_EXTERN struct SCOPE {
|
||||||
#define SCOPE_DONT_RECYCLE 4
|
#define SCOPE_DONT_RECYCLE 4
|
||||||
|
|
||||||
RUBY_EXTERN int ruby_in_eval;
|
RUBY_EXTERN int ruby_in_eval;
|
||||||
|
VALUE ruby_current_class_object(void);
|
||||||
RUBY_EXTERN VALUE ruby_class;
|
#define ruby_class ruby_current_class_object()
|
||||||
|
|
||||||
struct RVarmap {
|
struct RVarmap {
|
||||||
struct RBasic super;
|
struct RBasic super;
|
||||||
|
@ -72,7 +72,6 @@ struct BLOCK {
|
||||||
struct SCOPE *scope;
|
struct SCOPE *scope;
|
||||||
VALUE klass;
|
VALUE klass;
|
||||||
struct RNode *cref;
|
struct RNode *cref;
|
||||||
int iter;
|
|
||||||
int vmode;
|
int vmode;
|
||||||
int flags;
|
int flags;
|
||||||
int uniq;
|
int uniq;
|
||||||
|
@ -80,8 +79,6 @@ struct BLOCK {
|
||||||
VALUE orig_thread;
|
VALUE orig_thread;
|
||||||
VALUE wrapper;
|
VALUE wrapper;
|
||||||
VALUE block_obj;
|
VALUE block_obj;
|
||||||
struct BLOCK *outer;
|
|
||||||
struct BLOCK *prev;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BLOCK_D_SCOPE 1
|
#define BLOCK_D_SCOPE 1
|
||||||
|
|
2
error.c
2
error.c
|
@ -961,7 +961,7 @@ Init_Exception(void)
|
||||||
rb_eIndexError = rb_define_class("IndexError", rb_eStandardError);
|
rb_eIndexError = rb_define_class("IndexError", rb_eStandardError);
|
||||||
rb_eKeyError = rb_define_class("KeyError", rb_eIndexError);
|
rb_eKeyError = rb_define_class("KeyError", rb_eIndexError);
|
||||||
rb_eRangeError = rb_define_class("RangeError", rb_eStandardError);
|
rb_eRangeError = rb_define_class("RangeError", rb_eStandardError);
|
||||||
rb_eNameError = rb_define_class("NameError", rb_eStandardError);
|
rb_eNameError = rb_define_class("NameError", rb_eException);
|
||||||
rb_define_method(rb_eNameError, "initialize", name_err_initialize, -1);
|
rb_define_method(rb_eNameError, "initialize", name_err_initialize, -1);
|
||||||
rb_define_method(rb_eNameError, "name", name_err_name, 0);
|
rb_define_method(rb_eNameError, "name", name_err_name, 0);
|
||||||
rb_define_method(rb_eNameError, "to_s", name_err_to_s, 0);
|
rb_define_method(rb_eNameError, "to_s", name_err_to_s, 0);
|
||||||
|
|
|
@ -426,20 +426,10 @@ fdbm_invert(obj)
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE each_pair _((VALUE));
|
static VALUE fdbm_store(VALUE,VALUE,VALUE);
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
each_pair(obj)
|
update_i(VALUE pair, VALUE dbm)
|
||||||
VALUE obj;
|
|
||||||
{
|
|
||||||
return rb_funcall(obj, rb_intern("each_pair"), 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE fdbm_store _((VALUE,VALUE,VALUE));
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
update_i(pair, dbm)
|
|
||||||
VALUE pair, dbm;
|
|
||||||
{
|
{
|
||||||
Check_Type(pair, T_ARRAY);
|
Check_Type(pair, T_ARRAY);
|
||||||
if (RARRAY(pair)->len < 2) {
|
if (RARRAY(pair)->len < 2) {
|
||||||
|
@ -450,19 +440,17 @@ update_i(pair, dbm)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
fdbm_update(obj, other)
|
fdbm_update(VALUE obj, VALUE other)
|
||||||
VALUE obj, other;
|
|
||||||
{
|
{
|
||||||
rb_iterate(each_pair, other, update_i, obj);
|
rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
fdbm_replace(obj, other)
|
fdbm_replace(VALUE obj, VALUE other)
|
||||||
VALUE obj, other;
|
|
||||||
{
|
{
|
||||||
fdbm_clear(obj);
|
fdbm_clear(obj);
|
||||||
rb_iterate(each_pair, other, update_i, obj);
|
rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -530,13 +530,6 @@ fgdbm_invert(obj)
|
||||||
|
|
||||||
static VALUE each_pair _((VALUE));
|
static VALUE each_pair _((VALUE));
|
||||||
|
|
||||||
static VALUE
|
|
||||||
each_pair(obj)
|
|
||||||
VALUE obj;
|
|
||||||
{
|
|
||||||
return rb_funcall(obj, rb_intern("each_pair"), 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE fgdbm_store _((VALUE,VALUE,VALUE));
|
static VALUE fgdbm_store _((VALUE,VALUE,VALUE));
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
@ -555,7 +548,7 @@ static VALUE
|
||||||
fgdbm_update(obj, other)
|
fgdbm_update(obj, other)
|
||||||
VALUE obj, other;
|
VALUE obj, other;
|
||||||
{
|
{
|
||||||
rb_iterate(each_pair, other, update_i, obj);
|
rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -564,7 +557,7 @@ fgdbm_replace(obj, other)
|
||||||
VALUE obj, other;
|
VALUE obj, other;
|
||||||
{
|
{
|
||||||
fgdbm_clear(obj);
|
fgdbm_clear(obj);
|
||||||
rb_iterate(each_pair, other, update_i, obj);
|
rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -522,7 +522,7 @@ get_iconv_opt(struct rb_iconv_opt_t *opt, VALUE options)
|
||||||
opt->transliterate = Qundef;
|
opt->transliterate = Qundef;
|
||||||
opt->discard_ilseq = Qundef;
|
opt->discard_ilseq = Qundef;
|
||||||
if (!NIL_P(options)) {
|
if (!NIL_P(options)) {
|
||||||
rb_iterate(rb_each, options, get_iconv_opt_i, (VALUE)opt);
|
rb_block_call(options, rb_intern("each"), 0, 0, get_iconv_opt_i, (VALUE)opt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -678,7 +678,7 @@ static VALUE
|
||||||
join_der(VALUE enumerable)
|
join_der(VALUE enumerable)
|
||||||
{
|
{
|
||||||
VALUE str = rb_str_new(0, 0);
|
VALUE str = rb_str_new(0, 0);
|
||||||
rb_iterate(rb_each, enumerable, join_der_i, str);
|
rb_block_call(enumerable, rb_intern("each"), 0, 0, join_der_i, str);
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -246,7 +246,7 @@ static VALUE
|
||||||
ossl_config_set_section(VALUE self, VALUE section, VALUE hash)
|
ossl_config_set_section(VALUE self, VALUE section, VALUE hash)
|
||||||
{
|
{
|
||||||
VALUE arg[2] = { self, section };
|
VALUE arg[2] = { self, section };
|
||||||
rb_iterate(rb_each, hash, set_conf_section_i, (VALUE)arg);
|
rb_block_call(hash, rb_intern("each"), 0, 0, set_conf_section_i, (VALUE)arg);
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -583,7 +583,7 @@ ossl_pkcs7_set_certificates(VALUE self, VALUE ary)
|
||||||
|
|
||||||
certs = pkcs7_get_certs_or_crls(self, 1);
|
certs = pkcs7_get_certs_or_crls(self, 1);
|
||||||
while((cert = sk_X509_pop(certs))) X509_free(cert);
|
while((cert = sk_X509_pop(certs))) X509_free(cert);
|
||||||
rb_iterate(rb_each, ary, ossl_pkcs7_set_certs_i, self);
|
rb_block_call(ary, rb_intern("each"), 0, 0, ossl_pkcs7_set_certs_i, self);
|
||||||
|
|
||||||
return ary;
|
return ary;
|
||||||
}
|
}
|
||||||
|
@ -623,7 +623,7 @@ ossl_pkcs7_set_crls(VALUE self, VALUE ary)
|
||||||
|
|
||||||
crls = pkcs7_get_certs_or_crls(self, 0);
|
crls = pkcs7_get_certs_or_crls(self, 0);
|
||||||
while((crl = sk_X509_CRL_pop(crls))) X509_CRL_free(crl);
|
while((crl = sk_X509_CRL_pop(crls))) X509_CRL_free(crl);
|
||||||
rb_iterate(rb_each, ary, ossl_pkcs7_set_crls_i, self);
|
rb_block_call(ary, rb_intern("each"), 0, 0, ossl_pkcs7_set_crls_i, self);
|
||||||
|
|
||||||
return ary;
|
return ary;
|
||||||
}
|
}
|
||||||
|
|
|
@ -324,7 +324,7 @@ ossl_sslctx_setup(VALUE self)
|
||||||
|
|
||||||
val = ossl_sslctx_get_extra_cert(self);
|
val = ossl_sslctx_get_extra_cert(self);
|
||||||
if(!NIL_P(val)){
|
if(!NIL_P(val)){
|
||||||
rb_iterate(rb_each, val, ossl_sslctx_add_extra_chain_cert_i, self);
|
rb_block_call(val, rb_intern("each"), 0, 0, ossl_sslctx_add_extra_chain_cert_i, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* private key may be bundled in certificate file. */
|
/* private key may be bundled in certificate file. */
|
||||||
|
|
|
@ -125,7 +125,7 @@ ossl_x509name_initialize(int argc, VALUE *argv, VALUE self)
|
||||||
VALUE args;
|
VALUE args;
|
||||||
if(NIL_P(template)) template = OBJECT_TYPE_TEMPLATE;
|
if(NIL_P(template)) template = OBJECT_TYPE_TEMPLATE;
|
||||||
args = rb_ary_new3(2, self, template);
|
args = rb_ary_new3(2, self, template);
|
||||||
rb_iterate(rb_each, tmp, ossl_x509name_init_i, args);
|
rb_block_call(tmp, rb_intern("each"), 0, 0, ossl_x509name_init_i, args);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
|
|
|
@ -406,13 +406,6 @@ fsdbm_invert(obj)
|
||||||
|
|
||||||
static VALUE each_pair _((VALUE));
|
static VALUE each_pair _((VALUE));
|
||||||
|
|
||||||
static VALUE
|
|
||||||
each_pair(obj)
|
|
||||||
VALUE obj;
|
|
||||||
{
|
|
||||||
return rb_funcall(obj, rb_intern("each_pair"), 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE fsdbm_store _((VALUE,VALUE,VALUE));
|
static VALUE fsdbm_store _((VALUE,VALUE,VALUE));
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
@ -431,7 +424,7 @@ static VALUE
|
||||||
fsdbm_update(obj, other)
|
fsdbm_update(obj, other)
|
||||||
VALUE obj, other;
|
VALUE obj, other;
|
||||||
{
|
{
|
||||||
rb_iterate(each_pair, other, update_i, obj);
|
rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,7 +433,7 @@ fsdbm_replace(obj, other)
|
||||||
VALUE obj, other;
|
VALUE obj, other;
|
||||||
{
|
{
|
||||||
fsdbm_clear(obj);
|
fsdbm_clear(obj);
|
||||||
rb_iterate(each_pair, other, update_i, obj);
|
rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
#endif
|
#endif
|
||||||
#include "sockport.h"
|
#include "sockport.h"
|
||||||
|
|
||||||
static int do_not_reverse_lookup = 1;
|
static int do_not_reverse_lookup = 0;
|
||||||
#define FMODE_NOREVLOOKUP 0x100
|
#define FMODE_NOREVLOOKUP 0x100
|
||||||
|
|
||||||
VALUE rb_cBasicSocket;
|
VALUE rb_cBasicSocket;
|
||||||
|
|
|
@ -571,7 +571,7 @@ yaml_org_handler( n, ref )
|
||||||
VALUE dup = rb_funcall( tmph, s_dup, 0 );
|
VALUE dup = rb_funcall( tmph, s_dup, 0 );
|
||||||
tmp = rb_ary_reverse( tmp );
|
tmp = rb_ary_reverse( tmp );
|
||||||
rb_ary_push( tmp, obj );
|
rb_ary_push( tmp, obj );
|
||||||
rb_iterate( rb_each, tmp, syck_merge_i, dup );
|
rb_block_call(tmp, rb_intern("each"), 0, 0, syck_merge_i, dup);
|
||||||
obj = dup;
|
obj = dup;
|
||||||
skip_aset = 1;
|
skip_aset = 1;
|
||||||
}
|
}
|
||||||
|
@ -1006,7 +1006,7 @@ syck_resolver_node_import( self, node )
|
||||||
VALUE dup = rb_funcall( end, s_dup, 0 );
|
VALUE dup = rb_funcall( end, s_dup, 0 );
|
||||||
v = rb_ary_reverse( v );
|
v = rb_ary_reverse( v );
|
||||||
rb_ary_push( v, obj );
|
rb_ary_push( v, obj );
|
||||||
rb_iterate( rb_each, v, syck_merge_i, dup );
|
rb_block_call(v, rb_intern("each"), 0, 0, syck_merge_i, dup);
|
||||||
obj = dup;
|
obj = dup;
|
||||||
skip_aset = 1;
|
skip_aset = 1;
|
||||||
}
|
}
|
||||||
|
@ -1175,7 +1175,7 @@ syck_resolver_transfer( self, type, val )
|
||||||
}
|
}
|
||||||
else if ( !NIL_P( obj ) && rb_obj_is_instance_of( val, rb_cHash ) )
|
else if ( !NIL_P( obj ) && rb_obj_is_instance_of( val, rb_cHash ) )
|
||||||
{
|
{
|
||||||
rb_iterate( rb_each, val, syck_set_ivars, obj );
|
rb_block_call(val, rb_intern("each"), 0, 0, syck_set_ivars, obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -2218,7 +2218,7 @@ ole_invoke(argc, argv, self, wFlags)
|
||||||
op.dp.cArgs = cNamedArgs + argc - 2;
|
op.dp.cArgs = cNamedArgs + argc - 2;
|
||||||
op.pNamedArgs = ALLOCA_N(OLECHAR*, cNamedArgs + 1);
|
op.pNamedArgs = ALLOCA_N(OLECHAR*, cNamedArgs + 1);
|
||||||
op.dp.rgvarg = ALLOCA_N(VARIANTARG, op.dp.cArgs);
|
op.dp.rgvarg = ALLOCA_N(VARIANTARG, op.dp.cArgs);
|
||||||
rb_iterate(rb_each, param, hash2named_arg, (VALUE)&op);
|
rb_block_call(param, rb_intern("each"), 0, 0, hash2named_arg, (VALUE)&op);
|
||||||
|
|
||||||
pDispID = ALLOCA_N(DISPID, cNamedArgs + 1);
|
pDispID = ALLOCA_N(DISPID, cNamedArgs + 1);
|
||||||
op.pNamedArgs[0] = ole_mb2wc(StringValuePtr(cmd), -1);
|
op.pNamedArgs[0] = ole_mb2wc(StringValuePtr(cmd), -1);
|
||||||
|
|
2
io.c
2
io.c
|
@ -5241,7 +5241,7 @@ argf_each_line(int argc, VALUE *argv, VALUE self)
|
||||||
if (TYPE(current_file) != T_FILE) {
|
if (TYPE(current_file) != T_FILE) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (!next_argv()) return argf;
|
if (!next_argv()) return argf;
|
||||||
rb_iterate(rb_each, current_file, rb_yield, 0);
|
rb_block_call(current_file, rb_intern("each"), 0, 0, rb_yield, 0);
|
||||||
next_p = 1;
|
next_p = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1457,8 +1457,8 @@ class OptionParser
|
||||||
: (({block}))
|
: (({block}))
|
||||||
yielded with the found value when succeeded.
|
yielded with the found value when succeeded.
|
||||||
=end #'#"#`#
|
=end #'#"#`#
|
||||||
def search(id, k)
|
def search(id, key)
|
||||||
visit(:search, id, k) do |k|
|
visit(:search, id, key) do |k|
|
||||||
return k unless block_given?
|
return k unless block_given?
|
||||||
return yield(k)
|
return yield(k)
|
||||||
end
|
end
|
||||||
|
|
2
node.h
2
node.h
|
@ -336,7 +336,7 @@ typedef struct RNode {
|
||||||
#define NEW_ERRINFO() NEW_NODE(NODE_ERRINFO,0,0,0)
|
#define NEW_ERRINFO() NEW_NODE(NODE_ERRINFO,0,0,0)
|
||||||
#define NEW_DEFINED(e) NEW_NODE(NODE_DEFINED,e,0,0)
|
#define NEW_DEFINED(e) NEW_NODE(NODE_DEFINED,e,0,0)
|
||||||
#define NEW_PREEXE(b) NEW_SCOPE(b)
|
#define NEW_PREEXE(b) NEW_SCOPE(b)
|
||||||
#define NEW_POSTEXE() NEW_NODE(NODE_POSTEXE,0,0,0)
|
#define NEW_POSTEXE(b) NEW_NODE(NODE_POSTEXE,0,b,0)
|
||||||
#define NEW_BMETHOD(b) NEW_NODE(NODE_BMETHOD,0,0,b)
|
#define NEW_BMETHOD(b) NEW_NODE(NODE_BMETHOD,0,0,b)
|
||||||
#define NEW_ATTRASGN(r,m,a) NEW_NODE(NODE_ATTRASGN,r,m,a)
|
#define NEW_ATTRASGN(r,m,a) NEW_NODE(NODE_ATTRASGN,r,m,a)
|
||||||
#define NEW_PRELUDE(p,b) NEW_NODE(NODE_PRELUDE,p,b,0)
|
#define NEW_PRELUDE(p,b) NEW_NODE(NODE_PRELUDE,p,b,0)
|
||||||
|
|
|
@ -2672,6 +2672,7 @@ fix_size(VALUE fix)
|
||||||
static VALUE
|
static VALUE
|
||||||
int_upto(VALUE from, VALUE to)
|
int_upto(VALUE from, VALUE to)
|
||||||
{
|
{
|
||||||
|
RETURN_ENUMERATOR(from, 1, &to);
|
||||||
if (FIXNUM_P(from) && FIXNUM_P(to)) {
|
if (FIXNUM_P(from) && FIXNUM_P(to)) {
|
||||||
long i, end;
|
long i, end;
|
||||||
|
|
||||||
|
@ -2710,6 +2711,7 @@ int_upto(VALUE from, VALUE to)
|
||||||
static VALUE
|
static VALUE
|
||||||
int_downto(VALUE from, VALUE to)
|
int_downto(VALUE from, VALUE to)
|
||||||
{
|
{
|
||||||
|
RETURN_ENUMERATOR(from, 1, &to);
|
||||||
if (FIXNUM_P(from) && FIXNUM_P(to)) {
|
if (FIXNUM_P(from) && FIXNUM_P(to)) {
|
||||||
long i, end;
|
long i, end;
|
||||||
|
|
||||||
|
@ -2749,6 +2751,7 @@ int_downto(VALUE from, VALUE to)
|
||||||
static VALUE
|
static VALUE
|
||||||
int_dotimes(VALUE num)
|
int_dotimes(VALUE num)
|
||||||
{
|
{
|
||||||
|
RETURN_ENUMERATOR(num, 0, 0);
|
||||||
if (FIXNUM_P(num)) {
|
if (FIXNUM_P(num)) {
|
||||||
long i, end;
|
long i, end;
|
||||||
|
|
||||||
|
|
2
parse.y
2
parse.y
|
@ -867,7 +867,7 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem
|
||||||
rb_warn("END in method; use at_exit");
|
rb_warn("END in method; use at_exit");
|
||||||
}
|
}
|
||||||
|
|
||||||
$$ = NEW_ITER(0, NEW_POSTEXE(), $3);
|
$$ = NEW_POSTEXE($3);
|
||||||
/*%
|
/*%
|
||||||
if (in_def || in_single) {
|
if (in_def || in_single) {
|
||||||
rb_warn0("END in method; use at_exit");
|
rb_warn0("END in method; use at_exit");
|
||||||
|
|
1
ruby.h
1
ruby.h
|
@ -575,6 +575,7 @@ VALUE rb_yield_splat(VALUE);
|
||||||
int rb_block_given_p(void);
|
int rb_block_given_p(void);
|
||||||
void rb_need_block(void);
|
void rb_need_block(void);
|
||||||
VALUE rb_iterate(VALUE(*)(VALUE),VALUE,VALUE(*)(ANYARGS),VALUE);
|
VALUE rb_iterate(VALUE(*)(VALUE),VALUE,VALUE(*)(ANYARGS),VALUE);
|
||||||
|
VALUE rb_iterate_method(VALUE,ID,VALUE,VALUE(*)(ANYARGS),VALUE);
|
||||||
VALUE rb_rescue(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE);
|
VALUE rb_rescue(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE);
|
||||||
VALUE rb_rescue2(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE,...);
|
VALUE rb_rescue2(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE,...);
|
||||||
VALUE rb_ensure(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE);
|
VALUE rb_ensure(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE);
|
||||||
|
|
8
struct.c
8
struct.c
|
@ -667,21 +667,15 @@ rb_struct_values_at(int argc, VALUE *argv, VALUE s)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* struct.select(fixnum, ... ) => array
|
|
||||||
* struct.select {|i| block } => array
|
* struct.select {|i| block } => array
|
||||||
*
|
*
|
||||||
* The first form returns an array containing the elements in
|
* Invokes the block passing in successive elements from
|
||||||
* <i>struct</i> corresponding to the given indices. The second
|
|
||||||
* form invokes the block passing in successive elements from
|
|
||||||
* <i>struct</i>, returning an array containing those elements
|
* <i>struct</i>, returning an array containing those elements
|
||||||
* for which the block returns a true value (equivalent to
|
* for which the block returns a true value (equivalent to
|
||||||
* <code>Enumerable#select</code>).
|
* <code>Enumerable#select</code>).
|
||||||
*
|
*
|
||||||
* Lots = Struct.new(:a, :b, :c, :d, :e, :f)
|
* Lots = Struct.new(:a, :b, :c, :d, :e, :f)
|
||||||
* l = Lots.new(11, 22, 33, 44, 55, 66)
|
* l = Lots.new(11, 22, 33, 44, 55, 66)
|
||||||
* l.select(1, 3, 5) #=> [22, 44, 66]
|
|
||||||
* l.select(0, 2, 4) #=> [11, 33, 55]
|
|
||||||
* l.select(-1, -3, -5) #=> [66, 44, 22]
|
|
||||||
* l.select {|v| (v % 2).zero? } #=> [22, 44, 66]
|
* l.select {|v| (v % 2).zero? } #=> [22, 44, 66]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,18 @@
|
||||||
module EnvUtil
|
module EnvUtil
|
||||||
def rubybin
|
def rubybin
|
||||||
|
unless ENV["RUBYOPT"]
|
||||||
|
|
||||||
|
end
|
||||||
if ruby = ENV["RUBY"]
|
if ruby = ENV["RUBY"]
|
||||||
return ruby
|
return ruby
|
||||||
end
|
end
|
||||||
ruby = "ruby"
|
ruby = "ruby"
|
||||||
|
rubyexe = ruby+".exe"
|
||||||
3.times do
|
3.times do
|
||||||
if File.exist? ruby or File.exist? ruby+".exe"
|
if File.exist? ruby and File.executable? ruby and !File.directory? ruby
|
||||||
|
return File.expand_path(ruby)
|
||||||
|
end
|
||||||
|
if File.exist? rubyexe and File.executable? rubyexe
|
||||||
return File.expand_path(ruby)
|
return File.expand_path(ruby)
|
||||||
end
|
end
|
||||||
ruby = File.join("..", ruby)
|
ruby = File.join("..", ruby)
|
||||||
|
|
|
@ -9,7 +9,11 @@ class WEBrick::TestFileHandler < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_res_body(res)
|
def get_res_body(res)
|
||||||
return res.body.read rescue res.body
|
if defined? res.body.read
|
||||||
|
res.body.read
|
||||||
|
else
|
||||||
|
res.body
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def make_range_request(range_spec)
|
def make_range_request(range_spec)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue