diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-06-29 14:05:40 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-06-29 14:05:40 +0000 |
commit | 4df2cb80531c7cd4b10b0dea26f4687c4f74ff30 (patch) | |
tree | 80aa6c44314c4854b4ac8d2f2a288bce08e0cd96 /eval.c | |
parent | d7ac2f0cd22999401c6057e7c05c87f474e22306 (diff) | |
download | ruby-4df2cb80531c7cd4b10b0dea26f4687c4f74ff30.tar.gz |
* parse.y: use ARGSPUSH instead of ARGSCAT to prevent too much
splat expansion.
* eval.c (when_check): need to handle ARGSPUSH as well.
* eval.c (block_orphan): lambda and proc from method are always
orphan.
* gc.c (gc_mark_children): proper marking for NODE_BLOCK_PASS and
NODE_LAMBDA.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10431 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -2711,6 +2711,9 @@ when_check(NODE *tag, VALUE val, VALUE self) case NODE_ARGSCAT: if (when_check(tag->nd_head, val, self)) return Qtrue; return when_check(tag->nd_body, val, self); + case NODE_ARGSPUSH: + if (when_check(tag->nd_head, val, self)) return Qtrue; + if (when_cond(val, rb_eval(self, tag->nd_body))) return Qtrue; default: if (when_cond(val, rb_eval(self, tag))) return Qtrue; break; @@ -8352,6 +8355,9 @@ proc_lambda(void) static int block_orphan(struct BLOCK *data) { + if (data->flags & (BLOCK_LAMBDA|BLOCK_FROM_METHOD)) { + return 1; + } if (data->scope->flags & SCOPE_NOSTACK) { return 1; } |