From 4d034eaa0a073925002a45f5ada69fdd77d66d24 Mon Sep 17 00:00:00 2001 From: eban Date: Mon, 13 Sep 2004 10:20:36 +0000 Subject: * eval.c (blk_copy_prev): need frame_dup(). [ruby-dev:24103] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@6900 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ eval.c | 35 ++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index c996c5ad3..7f14df485 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Mon Sep 13 19:16:33 2004 WATANABE Hirofumi + + * eval.c (blk_copy_prev): need frame_dup(). [ruby-dev:24103] + Mon Sep 13 16:23:27 2004 Hidetoshi NAGAI * ext/tk/lib/multi-tk.rb: MultiTkIp.new_master and new_slave accept diff --git a/eval.c b/eval.c index 7efec7e57..d4b9589b2 100644 --- a/eval.c +++ b/eval.c @@ -7738,6 +7738,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 -- cgit