X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=ext%2Fext.c;h=d88367fc74162828afaf1f306572f4f94da57079;hb=b1caf93615078a76dc4c83589d0234ddfa99f9c2;hp=12b850014f25ae4aa0fa5d8c023793583c7c91fb;hpb=aea59ebcf8fdcc7acf839ff9322c697326d224ba;p=ruby-eet.git diff --git a/ext/ext.c b/ext/ext.c index 12b8500..d88367f 100644 --- 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);