Removed `to_ary` conversion method.

parent 5bbcea9b
...@@ -199,6 +199,7 @@ MRB_API void mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val ...@@ -199,6 +199,7 @@ MRB_API void mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val
* @param other The array to replace it with. * @param other The array to replace it with.
*/ */
MRB_API void mrb_ary_replace(mrb_state *mrb, mrb_value self, mrb_value other); MRB_API void mrb_ary_replace(mrb_state *mrb, mrb_value self, mrb_value other);
MRB_API mrb_value mrb_ensure_array_type(mrb_state *mrb, mrb_value self);
MRB_API mrb_value mrb_check_array_type(mrb_state *mrb, mrb_value self); MRB_API mrb_value mrb_check_array_type(mrb_state *mrb, mrb_value self);
/* /*
......
...@@ -772,16 +772,6 @@ class Array ...@@ -772,16 +772,6 @@ class Array
nil nil
end end
##
# call-seq:
# ary.to_ary -> ary
#
# Returns +self+.
#
def to_ary
self
end
## ##
# call-seq: # call-seq:
# ary.dig(idx, ...) -> object # ary.dig(idx, ...) -> object
......
...@@ -331,27 +331,11 @@ assert('Array#to_h') do ...@@ -331,27 +331,11 @@ assert('Array#to_h') do
assert_raise(ArgumentError) { [[1]].to_h } assert_raise(ArgumentError) { [[1]].to_h }
end end
assert('Array#to_h (Modified)') do
class A
def to_ary
$a.clear
nil
end
end
$a = [A.new]
assert_raise(TypeError) { $a.to_h }
end
assert("Array#index (block)") do assert("Array#index (block)") do
assert_nil (1..10).to_a.index { |i| i % 5 == 0 and i % 7 == 0 } assert_nil (1..10).to_a.index { |i| i % 5 == 0 and i % 7 == 0 }
assert_equal 34, (1..100).to_a.index { |i| i % 5 == 0 and i % 7 == 0 } assert_equal 34, (1..100).to_a.index { |i| i % 5 == 0 and i % 7 == 0 }
end end
assert("Array#to_ary") do
assert_equal [], [].to_ary
assert_equal [1,2,3], [1,2,3].to_ary
end
assert("Array#dig") do assert("Array#dig") do
h = [[[1]], 0] h = [[[1]], 0]
assert_equal(1, h.dig(0, 0, 0)) assert_equal(1, h.dig(0, 0, 0))
......
...@@ -624,9 +624,7 @@ module Enumerable ...@@ -624,9 +624,7 @@ module Enumerable
# use Enumerator to use infinite sequence # use Enumerator to use infinite sequence
def zip(*args, &block) def zip(*args, &block)
args = args.map do |a| args = args.map do |a|
if a.respond_to?(:to_ary) if a.respond_to?(:each)
a.to_ary.to_enum(:each)
elsif a.respond_to?(:each)
a.to_enum(:each) a.to_enum(:each)
else else
raise TypeError, "wrong argument type #{a.class} (must respond to :each)" raise TypeError, "wrong argument type #{a.class} (must respond to :each)"
......
...@@ -161,9 +161,7 @@ mrb_f_string(mrb_state *mrb, mrb_value self) ...@@ -161,9 +161,7 @@ mrb_f_string(mrb_state *mrb, mrb_value self)
* call-seq: * call-seq:
* Array(arg) -> array * Array(arg) -> array
* *
* Returns +arg+ as an Array. * Returns +arg+ as an Array using to_a method.
*
* First tries to call Array#to_ary on +arg+, then Array#to_a.
* *
* Array(1..5) #=> [1, 2, 3, 4, 5] * Array(1..5) #=> [1, 2, 3, 4, 5]
* *
...@@ -174,10 +172,7 @@ mrb_f_array(mrb_state *mrb, mrb_value self) ...@@ -174,10 +172,7 @@ mrb_f_array(mrb_state *mrb, mrb_value self)
mrb_value arg, tmp; mrb_value arg, tmp;
mrb_get_args(mrb, "o", &arg); mrb_get_args(mrb, "o", &arg);
tmp = mrb_check_convert_type(mrb, arg, MRB_TT_ARRAY, "Array", "to_ary");
if (mrb_nil_p(tmp)) {
tmp = mrb_check_convert_type(mrb, arg, MRB_TT_ARRAY, "Array", "to_a"); tmp = mrb_check_convert_type(mrb, arg, MRB_TT_ARRAY, "Array", "to_a");
}
if (mrb_nil_p(tmp)) { if (mrb_nil_p(tmp)) {
return mrb_ary_new_from_values(mrb, 1, &arg); return mrb_ary_new_from_values(mrb, 1, &arg);
} }
......
...@@ -1058,7 +1058,7 @@ mrb_ary_rindex_m(mrb_state *mrb, mrb_value self) ...@@ -1058,7 +1058,7 @@ mrb_ary_rindex_m(mrb_state *mrb, mrb_value self)
MRB_API mrb_value MRB_API mrb_value
mrb_ary_splat(mrb_state *mrb, mrb_value v) mrb_ary_splat(mrb_state *mrb, mrb_value v)
{ {
mrb_value a, recv_class; mrb_value a;
if (mrb_array_p(v)) { if (mrb_array_p(v)) {
return v; return v;
...@@ -1069,22 +1069,11 @@ mrb_ary_splat(mrb_state *mrb, mrb_value v) ...@@ -1069,22 +1069,11 @@ mrb_ary_splat(mrb_state *mrb, mrb_value v)
} }
a = mrb_funcall(mrb, v, "to_a", 0); a = mrb_funcall(mrb, v, "to_a", 0);
if (mrb_array_p(a)) { if (mrb_nil_p(a)) {
return a;
}
else if (mrb_nil_p(a)) {
return mrb_ary_new_from_values(mrb, 1, &v); return mrb_ary_new_from_values(mrb, 1, &v);
} }
else { mrb_ensure_array_type(mrb, a);
recv_class = mrb_obj_value(mrb_obj_class(mrb, v)); return a;
mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %S to Array (%S#to_a gives %S)",
recv_class,
recv_class,
mrb_obj_value(mrb_obj_class(mrb, a))
);
/* not reached */
return mrb_undef_value();
}
} }
static mrb_value static mrb_value
...@@ -1122,12 +1111,6 @@ mrb_ary_empty_p(mrb_state *mrb, mrb_value self) ...@@ -1122,12 +1111,6 @@ mrb_ary_empty_p(mrb_state *mrb, mrb_value self)
return mrb_bool_value(ARY_LEN(a) == 0); return mrb_bool_value(ARY_LEN(a) == 0);
} }
MRB_API mrb_value
mrb_check_array_type(mrb_state *mrb, mrb_value ary)
{
return mrb_check_convert_type(mrb, ary, MRB_TT_ARRAY, "Array", "to_ary");
}
MRB_API mrb_value MRB_API mrb_value
mrb_ary_entry(mrb_value ary, mrb_int offset) mrb_ary_entry(mrb_value ary, mrb_int offset)
{ {
...@@ -1181,7 +1164,7 @@ join_ary(mrb_state *mrb, mrb_value ary, mrb_value sep, mrb_value list) ...@@ -1181,7 +1164,7 @@ join_ary(mrb_state *mrb, mrb_value ary, mrb_value sep, mrb_value list)
val = tmp; val = tmp;
goto str_join; goto str_join;
} }
tmp = mrb_check_convert_type(mrb, val, MRB_TT_ARRAY, "Array", "to_ary"); tmp = mrb_check_array_type(mrb, val);
if (!mrb_nil_p(tmp)) { if (!mrb_nil_p(tmp)) {
val = tmp; val = tmp;
goto ary_join; goto ary_join;
......
...@@ -520,7 +520,8 @@ to_str(mrb_state *mrb, mrb_value val) ...@@ -520,7 +520,8 @@ to_str(mrb_state *mrb, mrb_value val)
static mrb_value static mrb_value
to_ary(mrb_state *mrb, mrb_value val) to_ary(mrb_state *mrb, mrb_value val)
{ {
return check_type(mrb, val, MRB_TT_ARRAY, "Array", "to_ary"); CHECK_TYPE(mrb, val, MRB_TT_ARRAY, "Array");
return val;
} }
static mrb_value static mrb_value
......
...@@ -606,6 +606,23 @@ mrb_check_string_type(mrb_state *mrb, mrb_value str) ...@@ -606,6 +606,23 @@ mrb_check_string_type(mrb_state *mrb, mrb_value str)
return str; return str;
} }
MRB_API mrb_value
mrb_ensure_array_type(mrb_state *mrb, mrb_value ary)
{
if (!mrb_array_p(ary)) {
mrb_raisef(mrb, E_TYPE_ERROR, "%S cannot be converted to Array",
inspect_type(mrb, ary));
}
return ary;
}
MRB_API mrb_value
mrb_check_array_type(mrb_state *mrb, mrb_value ary)
{
if (!mrb_array_p(ary)) return mrb_nil_value();
return ary;
}
MRB_API mrb_value MRB_API mrb_value
mrb_inspect(mrb_state *mrb, mrb_value obj) mrb_inspect(mrb_state *mrb, mrb_value obj)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment