[svn:parrot] r48490 - in trunk/src: . pmc

plobsing at svn.parrot.org plobsing at svn.parrot.org
Sat Aug 14 19:14:37 UTC 2010


Author: plobsing
Date: Sat Aug 14 19:14:36 2010
New Revision: 48490
URL: https://trac.parrot.org/parrot/changeset/48490

Log:
use PObj_custom_destroy_FLAG as marker for destroying pf in ImageIO
also eliminate use of ImageIO.init_pmc

Modified:
   trunk/src/pmc/imageio.pmc
   trunk/src/pmc_freeze.c

Modified: trunk/src/pmc/imageio.pmc
==============================================================================
--- trunk/src/pmc/imageio.pmc	Sat Aug 14 09:13:56 2010	(r48489)
+++ trunk/src/pmc/imageio.pmc	Sat Aug 14 19:14:36 2010	(r48490)
@@ -384,32 +384,8 @@
             Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
 
         PObj_flag_CLEAR(private1, SELF);
-        PObj_flag_CLEAR(private2, SELF);
 
-        PObj_custom_mark_destroy_SETALL(SELF);
-    }
-
-
-/*
-
-=item C<void init_pmc(PMC *pmc)>
-
-Initializes the PMC with a pre-existing C<PackFile_ConstTable>.
-
-=cut
-
-*/
-    VTABLE void init_pmc(PMC *pmc) {
-        PARROT_IMAGEIO(SELF)->seen   = PMCNULL;
-        PARROT_IMAGEIO(SELF)->pf     = PackFile_new(INTERP, 0);
-        PARROT_IMAGEIO(SELF)->pf_ct  =
-            (PackFile_ConstTable *)VTABLE_get_pointer(INTERP, pmc);
-        PARROT_IMAGEIO(SELF)->todo   =
-            Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
-
-        PObj_flag_SET(private1, SELF);
-
-        PObj_custom_mark_destroy_SETALL(SELF);
+        PObj_custom_mark_SET(SELF);
     }
 
 
@@ -423,8 +399,7 @@
 
 */
     VTABLE void destroy() {
-        if (!PObj_flag_TEST(private2, SELF) && PARROT_IMAGEIO(SELF)->pf)
-            PackFile_destroy(INTERP, PARROT_IMAGEIO(SELF)->pf);
+        PackFile_destroy(INTERP, PARROT_IMAGEIO(SELF)->pf);
         PARROT_IMAGEIO(SELF)->pf = NULL;
     }
 
@@ -718,18 +693,18 @@
 
     VTABLE void set_pmc(PMC *p)
     {
-        const UINTVAL header_length =
-            GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
-
         PARROT_IMAGEIO(SELF)->what  = VISIT_FREEZE_NORMAL;
 
         create_buffer(INTERP, p, SELF);
         if (PObj_flag_TEST(private1, SELF)) {
-            PObj_flag_SET(private2, SELF);
             PARROT_IMAGEIO(SELF)->pf = PARROT_IMAGEIO(SELF)->pf_ct->base.pf;
         }
         else {
-            PARROT_IMAGEIO(SELF)->pf   = PackFile_new(INTERP, 0);
+            const UINTVAL header_length =
+                GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
+
+            PARROT_IMAGEIO(SELF)->pf = PackFile_new(INTERP, 0);
+            PObj_custom_destroy_SET(SELF);
 
             ensure_buffer_size(INTERP, SELF, header_length);
             mem_sys_memcopy(GET_VISIT_CURSOR(SELF),
@@ -747,9 +722,6 @@
 
     VTABLE void set_string_native(STRING *image) {
         PMC          *unused;
-        const UINTVAL header_length =
-             GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
-
         PARROT_IMAGEIO(SELF)->what   = VISIT_THAW_NORMAL;
         PARROT_IMAGEIO(SELF)->buffer = (Buffer *)image;
 
@@ -760,13 +732,15 @@
         PARROT_IMAGEIO(SELF)->input_length = image->strlen;
 
         if (PObj_flag_TEST(private1, SELF)) {
-            PObj_flag_SET(private2, SELF);
             PARROT_IMAGEIO(SELF)->pf = PARROT_IMAGEIO(SELF)->pf_ct->base.pf;
         }
         else {
+            const UINTVAL header_length =
+                 GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
             int unpacked_length;
 
             PARROT_IMAGEIO(SELF)->pf   = PackFile_new(INTERP, 0);
+            PObj_custom_destroy_SET(SELF);
 
             PARROT_IMAGEIO(SELF)->pf->options |= PFOPT_PMC_FREEZE_ONLY;
             unpacked_length = PackFile_unpack(INTERP, PARROT_IMAGEIO(SELF)->pf,

Modified: trunk/src/pmc_freeze.c
==============================================================================
--- trunk/src/pmc_freeze.c	Sat Aug 14 09:13:56 2010	(r48489)
+++ trunk/src/pmc_freeze.c	Sat Aug 14 19:14:36 2010	(r48490)
@@ -79,13 +79,11 @@
 {
     ASSERT_ARGS(Parrot_freeze_pbc)
     PMC *visitor;
-    PMC * const pf_pmc = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
     DECL_CONST_CAST;
 
-    VTABLE_set_pointer(interp, pf_pmc,
+    visitor  = Parrot_pmc_new(interp, enum_class_ImageIO);
+    VTABLE_set_pointer(interp, visitor,
         PARROT_const_cast(void *, (const void *)pf));
-
-    visitor  = Parrot_pmc_new_init(interp, enum_class_ImageIO, pf_pmc);
     VTABLE_set_pmc(interp, visitor, pmc);
 
     return VTABLE_get_string(interp, visitor);


More information about the parrot-commits mailing list