[#42735] [Ruby 1.9-Feature#4147][Open] Array#sample で重みを指定したい — Yoji Ojima <redmine@...>

Feature #4147: Array#sample で重みを指定したい

52 messages 2010/12/10
[#42791] [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい — Shyouhei Urabe <redmine@...> 2010/12/18

チケット #4147 が更新されました。 (by Shyouhei Urabe)

[#42800] Re: [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい — Masaya TARUI <tarui@...> 2010/12/19

> じゃあ反対ないので実装はともかく、この仕様は基本入れる方向で考えましょう。反対の人は意思表示お早めに。

[#42763] [Ruby 1.9-Bug#4159][Open] test_block_variables(TestRipper::ParserEvents) が失敗する — Kouhei Yanagita <redmine@...>

Bug #4159: test_block_variables(TestRipper::ParserEvents) が失敗する

8 messages 2010/12/14

[#42894] [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Shyouhei Urabe <redmine@...>

Feature #4207: これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには

24 messages 2010/12/26
[#42935] Re: [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Kenta Murata <muraken@...> 2011/01/04

むらたです。

[#42936] Re: [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Kenta Murata <muraken@...> 2011/01/05

むらたです。

[ruby-dev:42790] Re: [ruby-changes:18222] Ruby:r30243 (trunk): * compile.c (setup_args), vm.c (invoke_block_from_c),

From: SASADA Koichi <ko1@...>
Date: 2010-12-18 09:21:23 UTC
List: ruby-dev #42790
 ささだです.

 これはさっきの最適化のために入れた変更だと思うんですが,trivial な最適
化のために恒常的なチェックを加える(遅くする)のは反対です.

(2010/12/18 16:02), nobu wrote:
> nobu	2010-12-18 16:02:35 +0900 (Sat, 18 Dec 2010)
> 
>   New Revision: 30243
> 
>   http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30243
> 
>   Log:
>     * compile.c (setup_args), vm.c (invoke_block_from_c),
>       vm_insnhelper.c (caller_setup_args): fix of r30241. lambda block
>       shoud check argument number.
> 
>   Modified files:
>     trunk/ChangeLog
>     trunk/compile.c
>     trunk/test/ruby/test_lambda.rb
>     trunk/vm.c
>     trunk/vm_core.h
>     trunk/vm_insnhelper.c
> 
> Index: ChangeLog
> ===================================================================
> --- ChangeLog	(revision 30242)
> +++ ChangeLog	(revision 30243)
> @@ -1,3 +1,9 @@
> +Sat Dec 18 16:02:27 2010  Nobuyoshi Nakada  <nobu@ruby-lang.org>
> +
> +	* compile.c (setup_args), vm.c (invoke_block_from_c),
> +	  vm_insnhelper.c (caller_setup_args): fix of r30241. lambda block
> +	  shoud check argument number.
> +
>  Sat Dec 18 14:42:29 2010  Tanaka Akira  <akr@fsij.org>
>  
>  	* load.c: parenthesize macro arguments.
> Index: vm_core.h
> ===================================================================
> --- vm_core.h	(revision 30242)
> +++ vm_core.h	(revision 30243)
> @@ -550,6 +550,7 @@
>  #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_BLOCK_LAMBDA_BIT   (0x01 << 9)
>  
>  enum vm_special_object_type {
>      VM_SPECIAL_OBJECT_VMCORE = 1,
> Index: compile.c
> ===================================================================
> --- compile.c	(revision 30242)
> +++ compile.c	(revision 30243)
> @@ -2899,6 +2899,7 @@
>  	if (block && nd_type(argn->nd_body) == NODE_LAMBDA) {
>  	    NODE *lambda = argn->nd_body;
>  	    *block = NEW_CHILD_ISEQVAL(lambda->nd_body, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, nd_line(lambda));
> +	    *flag |= VM_CALL_BLOCK_LAMBDA_BIT;
>  	}
>  	else {
>  	    COMPILE(arg_block, "block", argn->nd_body);
> Index: vm.c
> ===================================================================
> --- vm.c	(revision 30242)
> +++ vm.c	(revision 30243)
> @@ -531,7 +531,10 @@
>  	const rb_control_frame_t *cfp;
>  	rb_control_frame_t *ncfp;
>  	int i, opt_pc, arg_size = iseq->arg_size;
> -	int type = block_proc_is_lambda(block->proc) ?
> +	int type =
> +	    block->proc == Qtrue ? VM_FRAME_MAGIC_LAMBDA :
> +	    block->proc == Qfalse ? VM_FRAME_MAGIC_BLOCK :
> +	    block_proc_is_lambda(block->proc) ?
>  	  VM_FRAME_MAGIC_LAMBDA : VM_FRAME_MAGIC_BLOCK;
>  
>  	rb_vm_set_finish_env(th);
> Index: vm_insnhelper.c
> ===================================================================
> --- vm_insnhelper.c	(revision 30242)
> +++ vm_insnhelper.c	(revision 30243)
> @@ -265,7 +265,7 @@
>  	else if (blockiseq) {
>  	    blockptr = RUBY_VM_GET_BLOCK_PTR_IN_CFP(cfp);
>  	    blockptr->iseq = blockiseq;
> -	    blockptr->proc = 0;
> +	    blockptr->proc = (flag & VM_CALL_BLOCK_LAMBDA_BIT) ? Qtrue : Qfalse;
>  	    *block = blockptr;
>  	}
>      }
> Index: test/ruby/test_lambda.rb
> ===================================================================
> --- test/ruby/test_lambda.rb	(revision 30242)
> +++ test/ruby/test_lambda.rb	(revision 30243)
> @@ -29,6 +29,7 @@
>      a = 0
>      2.times(&->(_){ a += 1 })
>      assert_equal(a, 2)
> +    assert_raise(ArgumentError) {1.times(&->(){ a += 1 })}
>    end
>  
>    def test_call_rest_args
> 
> --
> ML: ruby-changes@quickml.atdot.net
> Info: http://www.atdot.net/~ko1/quickml/


-- 
// SASADA Koichi at atdot dot net

In This Thread

Prev Next