mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Array#[]= should return assigning value; close #584
This commit is contained in:
+5
-8
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user