Project

General

Profile

« Previous | Next » 

Revision ec475ab3

Added by Eric Wong almost 11 years ago

proc.c (rb_proc_alloc): inline and move to vm.c

  • 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