diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-04-24 05:58:34 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-04-24 05:58:34 +0000 |
| commit | 19938071cca47b3430a3848b9b137927b325b80b (patch) | |
| tree | 61eaa441c543a366db82d83f9c214b632f79ca63 /eval.c | |
| parent | 6c33a7d9fdd6c24cb2d4bce4307381e0f40179cf (diff) | |
| download | ruby-19938071cca47b3430a3848b9b137927b325b80b.tar.gz ruby-19938071cca47b3430a3848b9b137927b325b80b.tar.xz ruby-19938071cca47b3430a3848b9b137927b325b80b.zip | |
* eval.c (proc_to_proc): return self. [new]
* eval.c (block_pass): no need to convert if block is Proc.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@2407 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
| -rw-r--r-- | eval.c | 20 |
1 files changed, 15 insertions, 5 deletions
@@ -6585,6 +6585,13 @@ proc_to_s(self, other) } static VALUE +proc_to_proc(proc) + VALUE proc; +{ + return proc; +} + +static VALUE block_pass(self, node) VALUE self; NODE *node; @@ -6605,12 +6612,14 @@ block_pass(self, node) POP_ITER(); return result; } - b = rb_check_convert_type(block, T_DATA, "Proc", "to_proc"); - if (!rb_obj_is_proc(b)) { - rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc)", - rb_class2name(CLASS_OF(block))); + if (!rb_obj_is_proc(block)) { + b = rb_check_convert_type(block, T_DATA, "Proc", "to_proc"); + if (!rb_obj_is_proc(b)) { + rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc)", + rb_class2name(CLASS_OF(block))); + } + block = b; } - block = b; if (rb_safe_level() >= 1 && OBJ_TAINTED(block)) { if (rb_safe_level() > proc_get_safe_level(block)) { @@ -7081,6 +7090,7 @@ Init_Proc() rb_define_method(rb_cProc, "[]", proc_call, -2); rb_define_method(rb_cProc, "==", proc_eq, 1); rb_define_method(rb_cProc, "to_s", proc_to_s, 0); + rb_define_method(rb_cProc, "to_proc", proc_to_proc, 0); rb_define_global_function("proc", rb_f_lambda, 0); rb_define_global_function("lambda", rb_f_lambda, 0); rb_define_global_function("binding", rb_f_binding, 0); |
