mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* 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
This commit is contained in:
		
							parent
							
								
									426fcba891
								
							
						
					
					
						commit
						284565992f
					
				
					 5 changed files with 45 additions and 10 deletions
				
			
		
							
								
								
									
										10
									
								
								cont.c
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue