summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-03-02 03:21:31 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-03-02 03:21:31 +0000
commit6c0cc67bb22435d3c8233777258fe917f72c842a (patch)
treeeb907e9d068f6f2c6002ab1b92cd78d3326674aa /eval.c
parenteaf373d6026c20a7b6c5e263fc9f0e8ca81d3b8c (diff)
* eval.c (rb_eval): [EXPERIMENTAL] NODE_LAMBDA implemented.
[ruby-dev:25780] * node.h (NODE_LAMBDA): for literal Proc object. * parse.y (expr): interpret mere do...end block as proc object. * parse.y (primary): ditto, for brace block. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8044 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/eval.c b/eval.c
index 860ec0ab12..fae1ffce7d 100644
--- a/eval.c
+++ b/eval.c
@@ -2941,6 +2941,7 @@ rb_eval(self, n)
case NODE_ITER:
case NODE_FOR:
+ case NODE_LAMBDA:
{
PUSH_TAG(PROT_LOOP);
PUSH_BLOCK(node->nd_var, node->nd_body);
@@ -2952,6 +2953,10 @@ rb_eval(self, n)
if (nd_type(node) == NODE_ITER) {
result = rb_eval(self, node->nd_iter);
}
+ else if (nd_type(node) == NODE_LAMBDA) {
+ ruby_iter->iter = ruby_frame->iter = ITER_CUR;
+ result = rb_block_proc();
+ }
else {
VALUE recv;