Skip to content
  • Koichi Sasada's avatar
    5ee9513a
    Lazy Proc allocation for block parameters · 5ee9513a
    Koichi Sasada authored
    [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
    5ee9513a
    Lazy Proc allocation for block parameters
    Koichi Sasada authored
    [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
Loading