summaryrefslogtreecommitdiff
path: root/hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'hash.c')
-rw-r--r--hash.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/hash.c b/hash.c
index 77f7e3e6e2..4e3cf9974a 100644
--- a/hash.c
+++ b/hash.c
@@ -476,6 +476,13 @@ rb_hash_delete_if(hash)
return hash;
}
+static VALUE
+rb_hash_reject(hash)
+ VALUE hash;
+{
+ return rb_hash_delete_if(rb_hash_dup(hash));
+}
+
static int
clear_i(key, value, dummy)
VALUE key, value, dummy;
@@ -1211,6 +1218,12 @@ env_delete_if()
}
static VALUE
+env_reject()
+{
+ return rb_hash_delete_if(env_to_hash());
+}
+
+static VALUE
env_to_s()
{
return rb_str_new2("ENV");
@@ -1331,8 +1344,7 @@ env_indexes(argc, argv)
}
static VALUE
-env_to_hash(obj)
- VALUE obj;
+env_to_hash()
{
char **env;
VALUE hash = rb_hash_new();
@@ -1397,6 +1409,7 @@ Init_Hash()
rb_define_method(rb_cHash,"delete", rb_hash_delete, 1);
rb_define_method(rb_cHash,"delete_if", rb_hash_delete_if, 0);
rb_define_method(rb_cHash,"reject!", rb_hash_delete_if, 0);
+ rb_define_method(rb_cHash,"reject", rb_hash_reject, 0);
rb_define_method(rb_cHash,"clear", rb_hash_clear, 0);
rb_define_method(rb_cHash,"invert", rb_hash_invert, 0);
rb_define_method(rb_cHash,"update", rb_hash_update, 1);
@@ -1423,6 +1436,7 @@ Init_Hash()
rb_define_singleton_method(envtbl,"delete", env_delete_m, 1);
rb_define_singleton_method(envtbl,"delete_if", env_delete_if, 0);
rb_define_singleton_method(envtbl,"reject!", env_delete_if, 0);
+ rb_define_singleton_method(envtbl,"reject", env_reject, 0);
rb_define_singleton_method(envtbl,"to_s", env_to_s, 0);
rb_define_singleton_method(envtbl,"rehash", env_none, 0);
rb_define_singleton_method(envtbl,"to_a", env_to_a, 0);