From: SASADA Koichi Date: 2010-08-25T03:23:06+09:00 Subject: [ruby-dev:42130] Re: [Feature:trunk] argument delegation  ささだです.  あまりに暑くて目が覚めました. (2010/08/25 0:30), Yusuke ENDOH wrote: > --- a/vm_core.h > +++ b/vm_core.h > @@ -544,6 +544,7 @@ typedef struct { > #define VM_CALL_TAILRECURSION_BIT (0x01 << 6) > #define VM_CALL_SUPER_BIT (0x01 << 7) > #define VM_CALL_OPT_SEND_BIT (0x01 << 8) > +#define VM_CALL_ARGS_BLOCKTRGH_BIT (0x01 << 9) > > #define VM_SPECIAL_OBJECT_VMCORE 0x01 > #define VM_SPECIAL_OBJECT_CBASE 0x02 > diff --git a/vm_insnhelper.c b/vm_insnhelper.c > index 985a2fb..2a127d7 100644 > --- a/vm_insnhelper.c > +++ b/vm_insnhelper.c > @@ -261,6 +261,10 @@ caller_setup_args(const rb_thread_t *th, > rb_control_frame_t *cfp, VALUE flag, > *block = blockptr; > } > } > + else if (flag & VM_CALL_ARGS_BLOCKTRGH_BIT) { > + rb_control_frame_t *reg_cfp = cfp; > + *block = GET_BLOCK_PTR(); > + } > else if (blockiseq) { > blockptr = RUBY_VM_GET_BLOCK_PTR_IN_CFP(cfp); > blockptr->iseq = blockiseq; >  できれば,VM_CALL_ARGS_BLOCKTRGH_BIT を増やすんじゃなく て,VM_CALL_ARGS_BLOCKARG_BIT だけど,blockiseq かなんかの値を特殊にし ておくとか,そういう実装にしてもらえるといいんじゃないかと思います. (命令オペランドのバリエーションが減った方が色々うれしい) -- // SASADA Koichi at atdot dot net