[macruby-changes] [3440] MacRuby/trunk/array.c

source_changes at macosforge.org source_changes at macosforge.org
Sat Feb 6 21:48:55 PST 2010


Revision: 3440
          http://trac.macosforge.org/projects/ruby/changeset/3440
Author:   lsansonetti at apple.com
Date:     2010-02-06 21:48:53 -0800 (Sat, 06 Feb 2010)
Log Message:
-----------
fixed #flatten on NSDictionaries

Modified Paths:
--------------
    MacRuby/trunk/array.c

Modified: MacRuby/trunk/array.c
===================================================================
--- MacRuby/trunk/array.c	2010-02-07 04:58:45 UTC (rev 3439)
+++ MacRuby/trunk/array.c	2010-02-07 05:48:53 UTC (rev 3440)
@@ -2627,6 +2627,24 @@
     return LONG2NUM(n);
 }
 
+/*
+ *  call-seq:
+ *     array.flatten! -> array or nil
+ *     array.flatten!(level) -> array or nil
+ *  
+ *  Flattens _self_ in place.
+ *  Returns <code>nil</code> if no modifications were made (i.e.,
+ *  <i>array</i> contains no subarrays.)  If the optional <i>level</i>
+ *  argument determines the level of recursion to flatten.
+ *     
+ *     a = [ 1, 2, [3, [4, 5] ] ]
+ *     a.flatten!   #=> [1, 2, 3, 4, 5]
+ *     a.flatten!   #=> nil
+ *     a            #=> [1, 2, 3, 4, 5]
+ *     a = [ 1, 2, [3, [4, 5] ] ]
+ *     a.flatten!(1) #=> [1, 2, 3, [4, 5]]
+ */
+
 static VALUE
 flatten(VALUE ary, int level, int *modified)
 {
@@ -2636,7 +2654,11 @@
     st_data_t id;
 
     stack = rb_ary_new();
-    result = rary_alloc(rb_class_of(ary), 0);
+    VALUE klass = rb_class_of(ary);
+    if (!rb_klass_is_rary(klass)) {
+	klass = rb_cRubyArray;
+    }
+    result = rary_alloc(klass, 0);
     rary_reserve(result, RARRAY_LEN(ary));
     memo = st_init_numtable();
     st_insert(memo, (st_data_t)ary, (st_data_t)Qtrue);
@@ -2678,24 +2700,6 @@
     return result;
 }
 
-/*
- *  call-seq:
- *     array.flatten! -> array or nil
- *     array.flatten!(level) -> array or nil
- *  
- *  Flattens _self_ in place.
- *  Returns <code>nil</code> if no modifications were made (i.e.,
- *  <i>array</i> contains no subarrays.)  If the optional <i>level</i>
- *  argument determines the level of recursion to flatten.
- *     
- *     a = [ 1, 2, [3, [4, 5] ] ]
- *     a.flatten!   #=> [1, 2, 3, 4, 5]
- *     a.flatten!   #=> nil
- *     a            #=> [1, 2, 3, 4, 5]
- *     a = [ 1, 2, [3, [4, 5] ] ]
- *     a.flatten!(1) #=> [1, 2, 3, [4, 5]]
- */
-
 // Defined on NSArray.
 VALUE
 rary_flatten_bang(VALUE ary, SEL sel, int argc, VALUE *argv)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100206/ea6eada2/attachment.html>


More information about the macruby-changes mailing list