From 284565992f487937080230d3ae2b5afae4c8ac3f Mon Sep 17 00:00:00 2001 From: ko1 Date: Wed, 30 May 2007 05:56:13 +0000 Subject: * cont.c (cont_capture): store all local variables in heap ([ruby-dev:30832]). * vm.c (th_stack_to_heap): added. * test/ruby/test_continuation.rb: add a test for above. * eval_intern.h (th_get_ruby_level_cfp): fix to clean code. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12415 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- cont.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'cont.c') diff --git a/cont.c b/cont.c index 786f00835b..9f1efac8b8 100644 --- a/cont.c +++ b/cont.c @@ -120,11 +120,17 @@ cont_new(VALUE klass) return cont; } +void th_stack_to_heap(rb_thread_t *th); + static VALUE cont_capture(volatile int *stat) { - rb_context_t *cont = cont_new(rb_cCont); - rb_thread_t *th = &cont->saved_thread; + rb_context_t *cont; + rb_thread_t *th; + + th_stack_to_heap(GET_THREAD()); + cont = cont_new(rb_cCont); + th = &cont->saved_thread; cont->vm_stack = ALLOC_N(VALUE, th->stack_size); MEMCPY(cont->vm_stack, th->stack, VALUE, th->stack_size); -- cgit v1.2.3