From c490cf86043f35517eb008301889314bca08797c Mon Sep 17 00:00:00 2001 From: eban Date: Mon, 13 Sep 2004 10:29:43 +0000 Subject: * eval.c (blk_copy_prev): need frame_dup(). [ruby-dev:24103] git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@6901 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ eval.c | 49 +++++++++++++++++++++++++------------------------ 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5861c32d0..3ddc66a1f 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 94060c8d5..040284f4b 100644 --- a/eval.c +++ b/eval.c @@ -7755,6 +7755,30 @@ blk_free(data) } } +static void +frame_dup(frame) + struct FRAME *frame; +{ + VALUE *argv; + struct FRAME *tmp; + + for (;;) { + if (frame->argc > 0) { + argv = ALLOC_N(VALUE, frame->argc); + MEMCPY(argv, frame->argv, VALUE, frame->argc); + frame->argv = argv; + frame->flags |= FRAME_MALLOC; + } + 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; @@ -7771,6 +7795,7 @@ blk_copy_prev(block) tmp->frame.flags |= FRAME_MALLOC; } 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; @@ -7782,30 +7807,6 @@ blk_copy_prev(block) } } -static void -frame_dup(frame) - struct FRAME *frame; -{ - VALUE *argv; - struct FRAME *tmp; - - for (;;) { - if (frame->argc > 0) { - argv = ALLOC_N(VALUE, frame->argc); - MEMCPY(argv, frame->argv, VALUE, frame->argc); - frame->argv = argv; - frame->flags |= FRAME_MALLOC; - } - 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