[svn:parrot] r49760 - branches/gsoc_nci/src/pmc

plobsing at svn.parrot.org plobsing at svn.parrot.org
Mon Nov 1 00:06:05 UTC 2010


Author: plobsing
Date: Mon Nov  1 00:06:05 2010
New Revision: 49760
URL: https://trac.parrot.org/parrot/changeset/49760

Log:
fix calculation of number of elements in values

Modified:
   branches/gsoc_nci/src/pmc/nci.pmc

Modified: branches/gsoc_nci/src/pmc/nci.pmc
==============================================================================
--- branches/gsoc_nci/src/pmc/nci.pmc	Sun Oct 31 16:27:16 2010	(r49759)
+++ branches/gsoc_nci/src/pmc/nci.pmc	Mon Nov  1 00:06:05 2010	(r49760)
@@ -492,18 +492,8 @@
         }
 
         {
-            size_t values_size = 0;
-
-            /* Add up the size of memory needed for the actual call */
-            for (i = 0; i < (size_t)nci_info->arity; i++) {
-                values_size += cif->arg_types[i]->size;
-            }
-
-            /* Allocate enough room for the values passed to the ffi function plus add some 
-               padding just to be sure we have enough space.  */
-            values = mem_internal_allocate_zeroed(values_size + 2 * sizeof(void*));
-            /* Middle man is used to contain  */
-            middle_man = mem_internal_allocate_n_zeroed_typed(nci_info->arity, void*);
+            values = mem_gc_allocate_n_zeroed_typed(interp, nci_info->arity, void *);
+            middle_man = mem_gc_allocate_n_zeroed_typed(interp, nci_info->arity, void *);
 
             /*
              *  Apply Argument Transformations
@@ -634,7 +624,7 @@
          *  This will allow for any type of datat to be returned.
          *  Including one day Structures
          */
-        return_data = mem_internal_allocate_zeroed(cif->rtype->size);
+        return_data = mem_sys_allocate(cif->rtype->size);
 
         ffi_call(cif, FFI_FN(func), return_data, values);
 
@@ -744,9 +734,9 @@
             }
         }
     
-        mem_sys_free(middle_man);
-        mem_sys_free(return_data);
-        mem_sys_free(values);
+        mem_gc_free(interp, middle_man);
+        mem_gc_free(interp, return_data);
+        mem_gc_free(interp, values);
 
         cont = INTERP->current_cont;
 


More information about the parrot-commits mailing list