From 30d7c60cfd124cb86e9691f1d87f3478957afd4d Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Mon, 3 Dec 2012 23:35:21 +0900 Subject: Array#[]= should return assigning value; close #584 --- src/array.c | 13 +++++-------- test/t/array.rb | 4 ++-- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/array.c b/src/array.c index ea461e029..d4f5d1c5e 100644 --- a/src/array.c +++ b/src/array.c @@ -719,24 +719,21 @@ mrb_ary_aset(mrb_state *mrb, mrb_value self) mrb_get_args(mrb, "*", &argv, &argc); switch(argc) { case 2: - if (mrb_fixnum_p(argv[0])) { - mrb_ary_set(mrb, self, mrb_fixnum(argv[0]), argv[1]); - } - else { + if (!mrb_fixnum_p(argv[0])) { /* Should we support Range object for 1st arg ? */ mrb_raise(mrb, E_TYPE_ERROR, "expected Fixnum for 1st argument"); } - break; + mrb_ary_set(mrb, self, mrb_fixnum(argv[0]), argv[1]); + return argv[1]; case 3: mrb_ary_splice(mrb, self, mrb_fixnum(argv[0]), mrb_fixnum(argv[1]), argv[2]); - break; + return argv[2]; default: mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments"); + return mrb_nil_value(); } - - return self; } mrb_value diff --git a/test/t/array.rb b/test/t/array.rb index 560faf8e7..90fa85c7f 100644 --- a/test/t/array.rb +++ b/test/t/array.rb @@ -74,8 +74,8 @@ assert('Array#[]=', '15.2.12.5.5') do e3 = e1 end - [1,2,3].[]=(1,4) == [1, 4, 3] and - [1,2,3].[]=(1,2,3) == [1, 3] and + [1,2,3].[]=(1,4) == 4 and + [1,2,3].[]=(1,2,3) == 3 and e2.class == ArgumentError and e3.class == ArgumentError end -- cgit v1.2.3