aboutsummaryrefslogtreecommitdiffstats
path: root/eval_proc.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-01-16 03:06:01 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-01-16 03:06:01 +0000
commit7eb928624f84135634075ea575d6f10d759f2263 (patch)
tree78f4c48ed4d1b7b3116d0bba7c8f6f60362fbc69 /eval_proc.c
parentd2907d42bea13a670d5fb52c32e8761fa57efff1 (diff)
downloadruby-7eb928624f84135634075ea575d6f10d759f2263.tar.gz
* eval_proc.c (rb_proc_new): added.
* string.c (sym_to_proc): supported. * vm.c (invoke_block, th_invoke_yield, th_invoke_proc): fix to support rb_proc_new. * yarvcore.c: add a test code. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11536 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval_proc.c')
-rw-r--r--eval_proc.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/eval_proc.c b/eval_proc.c
index 3ff3e3b1de..a53415294f 100644
--- a/eval_proc.c
+++ b/eval_proc.c
@@ -1023,6 +1023,18 @@ bmcall(VALUE args, VALUE method)
return rb_method_call(RARRAY_LEN(a), RARRAY_PTR(a), method);
}
+VALUE
+rb_proc_new(
+ VALUE (*func)(ANYARGS), /* VALUE yieldarg[, VALUE procarg] */
+ VALUE val)
+{
+ yarv_proc_t *proc;
+ VALUE procval = rb_iterate((VALUE(*)(VALUE))mproc, 0, func, val);
+ GetProcPtr(procval, proc);
+ ((NODE*)proc->block.iseq)->u3.state = 1;
+ return procval;
+}
+
/*
* call-seq:
* meth.to_proc => prc