This project is closed and read-only.
Feature #420 ยป hash-set-default-proc-1.8.7.patch
| 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;
|
||
|
{
|
||