[svn:parrot] r45991 - trunk/src/pmc

NotFound at svn.parrot.org NotFound at svn.parrot.org
Sat Apr 24 17:56:52 UTC 2010


Author: NotFound
Date: Sat Apr 24 17:56:52 2010
New Revision: 45991
URL: https://trac.parrot.org/parrot/changeset/45991

Log:
clean FPA.clone

Modified:
   trunk/src/pmc/fixedfloatarray.pmc

Modified: trunk/src/pmc/fixedfloatarray.pmc
==============================================================================
--- trunk/src/pmc/fixedfloatarray.pmc	Sat Apr 24 17:35:47 2010	(r45990)
+++ trunk/src/pmc/fixedfloatarray.pmc	Sat Apr 24 17:56:52 2010	(r45991)
@@ -80,24 +80,22 @@
 */
 
     VTABLE PMC *clone() {
-        INTVAL    size;
-        FLOATVAL *self_float_array, *dest_float_array;
-        size_t mem_size;
-        PMC   * const dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+        FLOATVAL *self_float_array;
+        PMC * const dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
         GET_ATTR_float_array(INTERP, SELF, self_float_array);
-
-        if (!self_float_array)
-            return dest;
-
-        GET_ATTR_size(INTERP, SELF, size);
-        SET_ATTR_size(INTERP, dest, size);
-        mem_size          = size * sizeof (FLOATVAL);
-
-        dest_float_array  = (FLOATVAL*)Parrot_gc_allocate_memory_chunk(INTERP, mem_size);
-        mem_sys_memcopy(dest_float_array, self_float_array, mem_size);
-        SET_ATTR_float_array(INTERP, dest, dest_float_array);
-        PObj_custom_destroy_SET(dest);
-
+        if (self_float_array) {
+            INTVAL size;
+            GET_ATTR_size(INTERP, SELF, size);
+            {
+                FLOATVAL * const dest_float_array = mem_gc_allocate_n_typed(INTERP,
+                        size, FLOATVAL);
+                mem_copy_n_typed(dest_float_array, self_float_array,
+                        size, FLOATVAL);
+                SET_ATTR_float_array(INTERP, dest, dest_float_array);
+            }
+            SET_ATTR_size(INTERP, dest, size);
+            PObj_custom_destroy_SET(dest);
+        }
         return dest;
     }
 


More information about the parrot-commits mailing list