diff options
author | eban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-09-13 10:20:36 +0000 |
---|---|---|
committer | eban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-09-13 10:20:36 +0000 |
commit | f3721195a939a36457d0fbbe1991b4b9e93f199a (patch) | |
tree | 4b4d6da239a02ab88c5d9485f36136a1eaa9b504 /eval.c | |
parent | 7945cd59785dadaf910346c9f5ce3731d1c86885 (diff) | |
download | ruby-f3721195a939a36457d0fbbe1991b4b9e93f199a.tar.gz |
* eval.c (blk_copy_prev): need frame_dup(). [ruby-dev:24103]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6900 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 35 |
1 files changed, 18 insertions, 17 deletions
@@ -7739,6 +7739,23 @@ blk_free(data) } static void +frame_dup(frame) + struct FRAME *frame; +{ + VALUE *argv; + struct FRAME *tmp; + + for (;;) { + frame->tmp = 0; /* should not preserve tmp */ + if (!frame->prev) break; + tmp = ALLOC(struct FRAME); + *tmp = *frame->prev; + frame->prev = tmp; + frame = tmp; + } +} + +static void blk_copy_prev(block) struct BLOCK *block; { @@ -7749,6 +7766,7 @@ blk_copy_prev(block) tmp = ALLOC_N(struct BLOCK, 1); MEMCPY(tmp, block->prev, struct BLOCK, 1); scope_dup(tmp->scope); + frame_dup(&tmp->frame); for (vars = tmp->dyna_vars; vars; vars = vars->next) { if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break; @@ -7760,23 +7778,6 @@ blk_copy_prev(block) } } -static void -frame_dup(frame) - struct FRAME *frame; -{ - VALUE *argv; - struct FRAME *tmp; - - for (;;) { - frame->tmp = 0; /* should not preserve tmp */ - if (!frame->prev) break; - tmp = ALLOC(struct FRAME); - *tmp = *frame->prev; - frame->prev = tmp; - frame = tmp; - } -} - /* * MISSING: documentation |