diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-01-17 08:37:53 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-01-17 08:37:53 +0000 |
| commit | b81d16184cbe7e6e5bef3625d9f078452524b5c5 (patch) | |
| tree | 6a421d3818dd390cf8f6b2c5544726a8950e1401 /eval.c | |
| parent | f20019402f80300e55418d9c24719f13d77c309c (diff) | |
| download | ruby-b81d16184cbe7e6e5bef3625d9f078452524b5c5.tar.gz ruby-b81d16184cbe7e6e5bef3625d9f078452524b5c5.tar.xz ruby-b81d16184cbe7e6e5bef3625d9f078452524b5c5.zip | |
2000-01-17
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@606 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
| -rw-r--r-- | eval.c | 18 |
1 files changed, 15 insertions, 3 deletions
@@ -239,6 +239,7 @@ search_method(klass, id, origin) { NODE *body; + if (!klass) return 0; while (!st_lookup(RCLASS(klass)->m_tbl, id, &body)) { klass = RCLASS(klass)->super; if (!klass) return 0; @@ -2284,6 +2285,11 @@ rb_eval(self, node) rb_eval(self, node->nd_body)); break; + case NODE_ARGSPUSH: + result = rb_ary_push(rb_eval(self, node->nd_head), + rb_eval(self, node->nd_body)); + break; + case NODE_CALL: { VALUE recv; @@ -3333,10 +3339,13 @@ rb_yield_0(val, self, klass, acheck) !FL_TEST(ruby_dyna_vars, DVAR_DONT_RECYCLE)) { struct RVarmap *vars = ruby_dyna_vars; - do { + while (vars && vars->id != 0) { rb_gc_force_recycle((VALUE)vars); vars = vars->next; - } while (vars && vars->id != 0); + } + if (ruby_dyna_vars->id == 0) { + rb_gc_force_recycle((VALUE)ruby_dyna_vars); + } } POP_VARS(); ruby_block = block; @@ -3379,7 +3388,10 @@ massign(self, node, val, check) if (val) { if (TYPE(val) != T_ARRAY) { - val = rb_Array(val); + if (NIL_P(val)) + val = rb_ary_new2(0); + else + val = rb_ary_new3(1, val); } len = RARRAY(val)->len; for (i=0; list && i<len; i++) { |
