mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 ec475ab32d
			
		
	
	
		ec475ab32d
		
	
	
	
	
		
			
			* proc.c (rb_proc_alloc): inline and move to vm.c (rb_proc_wrap): new wrapper function used by rb_proc_alloc (proc_dup): simplify alloc + copy + wrap operation [ruby-core:64994] * vm.c (rb_proc_alloc): new inline function (rb_vm_make_proc): call rb_proc_alloc * vm_core.h: remove rb_proc_alloc, add rb_proc_wrap * benchmark/bm_vm2_newlambda.rb: short test to show difference First we allocate and populate an rb_proc_t struct inline to avoid unnecessary zeroing of the large struct. Inlining speeds up callers as this takes many parameters to ensure correctness. We then call the new rb_proc_wrap function to create the object. rb_proc_wrap - wraps a rb_proc_t pointer as a Ruby object, but we only use it inside rb_proc_alloc. We must call this before the compiler may clobber VALUE parameters passed to rb_proc_alloc. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47562 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			5 lines
		
	
	
	
		
			68 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			5 lines
		
	
	
	
		
			68 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| i = 0
 | |
| while i<6_000_000 # benchmark loop 2
 | |
|   i += 1
 | |
|   lambda {}
 | |
| end
 |