mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Removed to_hash conversion method.
This commit is contained in:
@@ -27,9 +27,9 @@ class Hash
|
||||
length = object.length
|
||||
if length == 1
|
||||
o = object[0]
|
||||
if o.respond_to?(:to_hash)
|
||||
if Hash === o
|
||||
h = self.new
|
||||
object[0].to_hash.each { |k, v| h[k] = v }
|
||||
o.each { |k, v| h[k] = v }
|
||||
return h
|
||||
elsif o.respond_to?(:to_a)
|
||||
h = self.new
|
||||
@@ -82,7 +82,7 @@ class Hash
|
||||
#
|
||||
|
||||
def merge!(other, &block)
|
||||
raise TypeError, "can't convert argument into Hash" unless other.respond_to?(:to_hash)
|
||||
raise TypeError, "Hash required (#{other.class} given)" unless Hash === other
|
||||
if block
|
||||
other.each_key{|k|
|
||||
self[k] = (self.has_key?(k))? block.call(k, self[k], other[k]): other[k]
|
||||
@@ -310,11 +310,7 @@ class Hash
|
||||
# h1 < h1 #=> false
|
||||
#
|
||||
def <(hash)
|
||||
begin
|
||||
hash = hash.to_hash
|
||||
rescue NoMethodError
|
||||
raise TypeError, "can't convert #{hash.class} to Hash"
|
||||
end
|
||||
raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash
|
||||
size < hash.size and all? {|key, val|
|
||||
hash.key?(key) and hash[key] == val
|
||||
}
|
||||
@@ -334,11 +330,7 @@ class Hash
|
||||
# h1 <= h1 #=> true
|
||||
#
|
||||
def <=(hash)
|
||||
begin
|
||||
hash = hash.to_hash
|
||||
rescue NoMethodError
|
||||
raise TypeError, "can't convert #{hash.class} to Hash"
|
||||
end
|
||||
raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash
|
||||
size <= hash.size and all? {|key, val|
|
||||
hash.key?(key) and hash[key] == val
|
||||
}
|
||||
@@ -358,11 +350,7 @@ class Hash
|
||||
# h1 > h1 #=> false
|
||||
#
|
||||
def >(hash)
|
||||
begin
|
||||
hash = hash.to_hash
|
||||
rescue NoMethodError
|
||||
raise TypeError, "can't convert #{hash.class} to Hash"
|
||||
end
|
||||
raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash
|
||||
size > hash.size and hash.all? {|key, val|
|
||||
key?(key) and self[key] == val
|
||||
}
|
||||
@@ -382,11 +370,7 @@ class Hash
|
||||
# h1 >= h1 #=> true
|
||||
#
|
||||
def >=(hash)
|
||||
begin
|
||||
hash = hash.to_hash
|
||||
rescue NoMethodError
|
||||
raise TypeError, "can't convert #{hash.class} to Hash"
|
||||
end
|
||||
raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash
|
||||
size >= hash.size and hash.all? {|key, val|
|
||||
key?(key) and self[key] == val
|
||||
}
|
||||
|
||||
@@ -184,9 +184,9 @@ mrb_f_array(mrb_state *mrb, mrb_value self)
|
||||
* call-seq:
|
||||
* Hash(arg) -> hash
|
||||
*
|
||||
* Converts <i>arg</i> to a <code>Hash</code> by calling
|
||||
* <i>arg</i><code>.to_hash</code>. Returns an empty <code>Hash</code> when
|
||||
* <i>arg</i> is <tt>nil</tt> or <tt>[]</tt>.
|
||||
* Returns a <code>Hash</code> if <i>arg</i> is a <code>Hash</code>.
|
||||
* Returns an empty <code>Hash</code> when <i>arg</i> is <tt>nil</tt>
|
||||
* or <tt>[]</tt>.
|
||||
*
|
||||
* Hash([]) #=> {}
|
||||
* Hash(nil) #=> {}
|
||||
@@ -197,21 +197,13 @@ mrb_f_array(mrb_state *mrb, mrb_value self)
|
||||
static mrb_value
|
||||
mrb_f_hash(mrb_state *mrb, mrb_value self)
|
||||
{
|
||||
mrb_value arg, tmp;
|
||||
mrb_value arg;
|
||||
|
||||
mrb_get_args(mrb, "o", &arg);
|
||||
if (mrb_nil_p(arg)) {
|
||||
if (mrb_nil_p(arg) || (mrb_array_p(arg) && RARRAY_LEN(arg) == 0)) {
|
||||
return mrb_hash_new(mrb);
|
||||
}
|
||||
tmp = mrb_check_convert_type(mrb, arg, MRB_TT_HASH, "Hash", "to_hash");
|
||||
if (mrb_nil_p(tmp)) {
|
||||
if (mrb_array_p(arg) && RARRAY_LEN(arg) == 0) {
|
||||
return mrb_hash_new(mrb);
|
||||
}
|
||||
mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %S into Hash",
|
||||
mrb_str_new_cstr(mrb, mrb_obj_classname(mrb, arg)));
|
||||
}
|
||||
return tmp;
|
||||
return mrb_ensure_hash_type(mrb, arg);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -233,7 +233,7 @@ get_hash(mrb_state *mrb, mrb_value *hash, mrb_int argc, const mrb_value *argv)
|
||||
if (argc != 2) {
|
||||
mrb_raise(mrb, E_ARGUMENT_ERROR, "one hash required");
|
||||
}
|
||||
tmp = mrb_check_convert_type(mrb, argv[1], MRB_TT_HASH, "Hash", "to_hash");
|
||||
tmp = mrb_check_hash_type(mrb, argv[1]);
|
||||
if (mrb_nil_p(tmp)) {
|
||||
mrb_raise(mrb, E_ARGUMENT_ERROR, "one hash required");
|
||||
}
|
||||
|
||||
+4
-10
@@ -12,9 +12,7 @@ class Hash
|
||||
# ISO 15.2.13.4.1
|
||||
def ==(hash)
|
||||
return true if self.equal?(hash)
|
||||
begin
|
||||
hash = hash.to_hash
|
||||
rescue NoMethodError
|
||||
unless Hash === hash
|
||||
return false
|
||||
end
|
||||
return false if self.size != hash.size
|
||||
@@ -32,9 +30,7 @@ class Hash
|
||||
# ISO 15.2.13.4.32 (x)
|
||||
def eql?(hash)
|
||||
return true if self.equal?(hash)
|
||||
begin
|
||||
hash = hash.to_hash
|
||||
rescue NoMethodError
|
||||
unless Hash === hash
|
||||
return false
|
||||
end
|
||||
return false if self.size != hash.size
|
||||
@@ -153,9 +149,8 @@ class Hash
|
||||
#
|
||||
# ISO 15.2.13.4.23
|
||||
def replace(hash)
|
||||
raise TypeError, "can't convert argument into Hash" unless hash.respond_to?(:to_hash)
|
||||
raise TypeError, "Hash required (#{hash.class} given)" unless Hash === hash
|
||||
self.clear
|
||||
hash = hash.to_hash
|
||||
hash.each_key{|k|
|
||||
self[k] = hash[k]
|
||||
}
|
||||
@@ -178,8 +173,7 @@ class Hash
|
||||
#
|
||||
# ISO 15.2.13.4.22
|
||||
def merge(other, &block)
|
||||
raise TypeError, "can't convert argument into Hash" unless other.respond_to?(:to_hash)
|
||||
other = other.to_hash
|
||||
raise TypeError, "Hash required (#{other.class} given)" unless Hash === other
|
||||
h = self.dup
|
||||
if block
|
||||
other.each_key{|k|
|
||||
|
||||
+2
-13
@@ -492,18 +492,6 @@ mrb_notimplement_m(mrb_state *mrb, mrb_value self)
|
||||
return mrb_nil_value();
|
||||
}
|
||||
|
||||
static mrb_value
|
||||
check_type(mrb_state *mrb, mrb_value val, enum mrb_vtype t, const char *c, const char *m)
|
||||
{
|
||||
mrb_value tmp;
|
||||
|
||||
tmp = mrb_check_convert_type(mrb, val, t, c, m);
|
||||
if (mrb_nil_p(tmp)) {
|
||||
mrb_raisef(mrb, E_TYPE_ERROR, "expected %S", mrb_str_new_cstr(mrb, c));
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
#define CHECK_TYPE(mrb, val, t, c) do { \
|
||||
if (mrb_type(val) != (t)) {\
|
||||
mrb_raisef(mrb, E_TYPE_ERROR, "expected %S", mrb_str_new_lit(mrb, c));\
|
||||
@@ -527,7 +515,8 @@ to_ary(mrb_state *mrb, mrb_value val)
|
||||
static mrb_value
|
||||
to_hash(mrb_state *mrb, mrb_value val)
|
||||
{
|
||||
return check_type(mrb, val, MRB_TT_HASH, "Hash", "to_hash");
|
||||
CHECK_TYPE(mrb, val, MRB_TT_HASH, "Hash");
|
||||
return val;
|
||||
}
|
||||
|
||||
#define to_sym(mrb, ss) mrb_obj_to_sym(mrb, ss)
|
||||
|
||||
-28
@@ -738,18 +738,6 @@ mrb_hash_set(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value val)
|
||||
return;
|
||||
}
|
||||
|
||||
MRB_API mrb_value
|
||||
mrb_ensure_hash_type(mrb_state *mrb, mrb_value hash)
|
||||
{
|
||||
return mrb_convert_type(mrb, hash, MRB_TT_HASH, "Hash", "to_hash");
|
||||
}
|
||||
|
||||
MRB_API mrb_value
|
||||
mrb_check_hash_type(mrb_state *mrb, mrb_value hash)
|
||||
{
|
||||
return mrb_check_convert_type(mrb, hash, MRB_TT_HASH, "Hash", "to_hash");
|
||||
}
|
||||
|
||||
static void
|
||||
mrb_hash_modify(mrb_state *mrb, mrb_value hash)
|
||||
{
|
||||
@@ -1189,20 +1177,6 @@ mrb_hash_empty_m(mrb_state *mrb, mrb_value self)
|
||||
return mrb_bool_value(mrb_hash_empty_p(mrb, self));
|
||||
}
|
||||
|
||||
/* 15.2.13.4.29 (x)*/
|
||||
/*
|
||||
* call-seq:
|
||||
* hsh.to_hash => hsh
|
||||
*
|
||||
* Returns +self+.
|
||||
*/
|
||||
|
||||
static mrb_value
|
||||
mrb_hash_to_hash(mrb_state *mrb, mrb_value hash)
|
||||
{
|
||||
return hash;
|
||||
}
|
||||
|
||||
static int
|
||||
hash_keys_i(mrb_state *mrb, mrb_value key, mrb_value val, void *p)
|
||||
{
|
||||
@@ -1439,6 +1413,4 @@ mrb_init_hash(mrb_state *mrb)
|
||||
mrb_define_method(mrb, h, "value?", mrb_hash_has_value, MRB_ARGS_REQ(1)); /* 15.2.13.4.27 */
|
||||
mrb_define_method(mrb, h, "values", mrb_hash_values, MRB_ARGS_NONE()); /* 15.2.13.4.28 */
|
||||
mrb_define_method(mrb, h, "rehash", mrb_hash_rehash, MRB_ARGS_NONE());
|
||||
|
||||
mrb_define_method(mrb, h, "to_hash", mrb_hash_to_hash, MRB_ARGS_NONE()); /* 15.2.13.4.29 (x)*/
|
||||
}
|
||||
|
||||
@@ -623,6 +623,23 @@ mrb_check_array_type(mrb_state *mrb, mrb_value ary)
|
||||
return ary;
|
||||
}
|
||||
|
||||
MRB_API mrb_value
|
||||
mrb_ensure_hash_type(mrb_state *mrb, mrb_value hash)
|
||||
{
|
||||
if (!mrb_hash_p(hash)) {
|
||||
mrb_raisef(mrb, E_TYPE_ERROR, "%S cannot be converted to Hash",
|
||||
inspect_type(mrb, hash));
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
MRB_API mrb_value
|
||||
mrb_check_hash_type(mrb_state *mrb, mrb_value hash)
|
||||
{
|
||||
if (!mrb_hash_p(hash)) return mrb_nil_value();
|
||||
return hash;
|
||||
}
|
||||
|
||||
MRB_API mrb_value
|
||||
mrb_inspect(mrb_state *mrb, mrb_value obj)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user