summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/array.c13
-rw-r--r--test/t/array.rb4
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