summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-10-10 07:03:36 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-10-10 07:03:36 +0000
commit1ce6f065b519284a5ad7135a6db77fcbe1aa778a (patch)
tree79c663a365cc039f46e51658f288538eade86658 /array.c
parentef45458e9405c57ab4f59f648c4001ea4df30489 (diff)
matz
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@990 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r--array.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/array.c b/array.c
index 09c3a0489d..4cd5689838 100644
--- a/array.c
+++ b/array.c
@@ -278,6 +278,9 @@ rb_ary_push_m(argc, argv, ary)
VALUE *argv;
VALUE ary;
{
+ if (argc == 0) {
+ rb_raise(rb_eArgError, "wrong # of arguments(at least 1)");
+ }
if (argc > 0) {
long len = RARRAY(ary)->len;
@@ -903,9 +906,8 @@ rb_ary_reverse(ary)
while (p1 < p2) {
tmp = *p1;
- *p1 = *p2;
- *p2 = tmp;
- p1++; p2--;
+ *p1++ = *p2;
+ *p2-- = tmp;
}
return ary;
@@ -1236,8 +1238,7 @@ rb_ary_plus(x, y)
{
VALUE z;
- Check_Type(y, T_ARRAY);
-
+ y = to_ary(y);
z = rb_ary_new2(RARRAY(x)->len + RARRAY(y)->len);
MEMCPY(RARRAY(z)->ptr, RARRAY(x)->ptr, VALUE, RARRAY(x)->len);
MEMCPY(RARRAY(z)->ptr+RARRAY(x)->len, RARRAY(y)->ptr, VALUE, RARRAY(y)->len);
@@ -1249,9 +1250,10 @@ VALUE
rb_ary_concat(x, y)
VALUE x, y;
{
- Check_Type(y, T_ARRAY);
-
- rb_ary_push_m(RARRAY(y)->len, RARRAY(y)->ptr, x);
+ y = to_ary(y);
+ if (RARRAY(y)->len > 0) {
+ rb_ary_push_m(RARRAY(y)->len, RARRAY(y)->ptr, x);
+ }
return x;
}