From 186c8b592a8b5badfd42ff7295c5edb44ef1abdd Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 27 Nov 2001 10:00:35 +0000 Subject: * marshal.c (w_float): must distinguish -0.0 from 0.0. * gc.c (gc_mark_all): tweak mark order for little bit better scan. * gc.c (rb_gc_mark): ditto. * gc.c (rb_gc): ditto. * enum.c (sort_by_i): slight performance boost. * gc.c (gc_mark_rest): should call gc_mark_children(), not gc_mark(). * gc.c (rb_gc_mark): may cause infinite looop. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1861 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- array.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'array.c') diff --git a/array.c b/array.c index 9d5dcd768f..6a419d800e 100644 --- a/array.c +++ b/array.c @@ -1086,6 +1086,26 @@ rb_ary_sort(ary) return ary; } +static VALUE +sort_inplace(ary) + VALUE ary; +{ + qsort(RARRAY(ary)->ptr, RARRAY(ary)->len, sizeof(VALUE),sort_2); + return ary; +} + +VALUE +rb_ary_sort_inplace(ary) + VALUE ary; +{ + rb_ary_modify(ary); + if (RARRAY(ary)->len <= 1) return ary; + + FL_SET(ary, ARY_TMPLOCK); /* prohibit modification during sort */ + rb_ensure(sort_inplace, ary, sort_unlock, ary); + return ary; +} + static VALUE rb_ary_collect(ary) VALUE ary; @@ -1493,7 +1513,9 @@ rb_ary_cmp(ary, ary2) { long i, len; - ary2 = to_ary(ary2); + if (TYPE(ary2) != T_ARRAY) { + ary2 = to_ary(ary2); + } len = RARRAY(ary)->len; if (len > RARRAY(ary2)->len) { len = RARRAY(ary2)->len; -- cgit v1.2.3