Project

General

Profile

« Previous | Next » 

Revision 5ee9513a

Added by ko1 (Koichi Sasada) over 6 years ago

Lazy Proc allocation for block parameters
[Feature #14045]

  • insns.def (getblockparam, setblockparam): add special access
    instructions for block parameters.
    getblockparam checks VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM and
    if it is not set this instruction creates a Proc object from
    a given blcok and set VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM.
    setblockparam is similar to setlocal, but set
    VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM.

  • compile.c: use get/setblockparm instead get/setlocal instructions.
    Note that they are used for method local block parameters (def m(&b)),
    not for block local method parameters (iter{|&b|).

  • proc.c (get_local_variable_ptr): creates Proc object for
    Binding#local_variable_get/set.

  • safe.c (safe_setter): we need to create Proc objects for postponed
    block parameters when $SAFE is changed.

  • vm_args.c (args_setup_block_parameter): used only for block local blcok
    parameters.

  • vm_args.c (vm_caller_setup_arg_block): if called with
    VM_CALL_ARGS_BLOCKARG_BLOCKPARAM flag then passed block values should be
    a block handler.

  • test/ruby/test_optimization.rb: add tests.

  • benchmark/bm_vm1_blockparam*: added.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60397 b2dd03c8-39d4-4d8f-98ff-823fe69b080e