summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--eval.c7
2 files changed, 9 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 3c619ef293..52b099ce3a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Dec 4 14:54:52 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * eval.c (proc_invoke): use volatile `tmp' rather than `args'.
+ [ruby-core:03882]
+
Sat Dec 4 14:28:56 2004 Dave Thomas <dave@pragprog.com>
* lib/rdoc/code_objects.rb (RDoc::Context::Section::set_comment):
diff --git a/eval.c b/eval.c
index 020ed33cd4..b6d074d151 100644
--- a/eval.c
+++ b/eval.c
@@ -8139,6 +8139,7 @@ proc_invoke(proc, args, self, klass)
volatile int safe = ruby_safe_level;
volatile VALUE old_wrapper = ruby_wrapper;
volatile int pcall, avalue = Qtrue;
+ volatile VALUE tmp = args;
if (rb_block_given_p() && ruby_frame->last_func) {
if (klass != ruby_frame->last_class)
@@ -8163,9 +8164,9 @@ proc_invoke(proc, args, self, klass)
_block = *data;
if (self != Qundef) _block.frame.self = self;
if (klass) _block.frame.last_class = klass;
- _block.frame.argc = RARRAY(args)->len;
- _block.frame.argv = ALLOCA_N(VALUE, RARRAY(args)->len);
- MEMCPY(_block.frame.argv, RARRAY(args)->ptr, VALUE, RARRAY(args)->len);
+ _block.frame.argc = RARRAY(tmp)->len;
+ _block.frame.argv = ALLOCA_N(VALUE, RARRAY(tmp)->len);
+ MEMCPY(_block.frame.argv, RARRAY(tmp)->ptr, VALUE, RARRAY(tmp)->len);
_block.frame.flags = FRAME_ALLOCA;
ruby_block = &_block;