Project

General

Profile

Feature #420 ยป hash-set-default-proc-1.8.7.patch

Patch to implement Hash#default_proc= against svn branch ruby_1_8_7@18504 - oblomov (Giuseppe Bilotta), 08/12/2008 08:41 AM

View differences:

hash.c (working copy)
return Qnil;
}
extern VALUE rb_obj_is_proc(VALUE);
/*
* call-seq:
* hsh.default_proc = proc_obj => proc_obj
*
* Sets the default proc to be executed on each key lookup.
*
* h.default_proc = proc do |hash, key|
* hash[key] = key + key
* end
* h[2] #=> 4
* h["cat"] #=> "catcat"
*/
static VALUE
rb_hash_set_default_proc(hash, proc)
VALUE hash, proc;
{
rb_hash_modify(hash);
if (!rb_obj_is_proc(proc)) {
rb_raise(rb_eTypeError, "default_proc must be Proc");
}
RHASH(hash)->ifnone = proc;
FL_SET(hash, HASH_PROC_DEFAULT);
return proc;
}
static int
index_i(key, value, args)
VALUE key, value;
......
rb_define_method(rb_cHash,"default", rb_hash_default, -1);
rb_define_method(rb_cHash,"default=", rb_hash_set_default, 1);
rb_define_method(rb_cHash,"default_proc", rb_hash_default_proc, 0);
rb_define_method(rb_cHash,"default_proc=", rb_hash_set_default_proc, 1);
rb_define_method(rb_cHash,"index", rb_hash_index, 1);
rb_define_method(rb_cHash,"indexes", rb_hash_indexes, -1);
rb_define_method(rb_cHash,"indices", rb_hash_indexes, -1);
eval.c (working copy)
static void blk_free();
static VALUE
VALUE
rb_obj_is_proc(proc)
VALUE proc;
{
    (1-1/1)