Code cleanup.
[ruby-eet.git] / ext / ext.c
index 12b850014f25ae4aa0fa5d8c023793583c7c91fb..d88367fc74162828afaf1f306572f4f94da57079 100644 (file)
--- a/ext/ext.c
+++ b/ext/ext.c
@@ -1,5 +1,5 @@
 /*
- * $Id: ext.c 68 2005-06-29 16:50:47Z tilman $
+ * $Id: ext.c 70 2005-07-15 20:31:58Z tilman $
  *
  * Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
  *
@@ -533,8 +533,6 @@ static int
 for_each_prop (VALUE tag, VALUE arg, VALUE stream)
 {
        VALUE value, type, tmp;
-       struct RArray *chunks;
-       long i;
 
        if (rb_obj_is_kind_of (arg, rb_cArray) == Qfalse)
                rb_raise (ePropError, "hash value is not an array");
@@ -546,11 +544,7 @@ for_each_prop (VALUE tag, VALUE arg, VALUE stream)
        type = rb_ary_entry (arg, 1);
        tmp = rb_funcall (value, id_to_eet_chunks, 2, tag, type);
 
-       Check_Type (tmp, T_ARRAY);
-       chunks = RARRAY (tmp);
-
-       for (i = 0; i < chunks->len; i++)
-               rb_ary_push (stream, chunks->ptr[i]);
+       rb_ary_concat (stream, tmp);
 
        return ST_CONTINUE;
 }
@@ -598,6 +592,9 @@ c_to_eet (VALUE self)
 
        args[0] = name;
        args[1] = rb_funcall (stream, id_serialize, 0);
+
+       rb_ary_clear (stream); /* give the GC a hand... */
+
        chunk = rb_class_new_instance (2, args, cChunk);
 
        return rb_funcall (chunk, id_serialize, 0);