[svn:parrot] r43254 - in branches/pmc_freeze_cleanup: include/parrot src

plobsing at svn.parrot.org plobsing at svn.parrot.org
Sat Dec 26 22:06:48 UTC 2009


Author: plobsing
Date: Sat Dec 26 22:06:47 2009
New Revision: 43254
URL: https://trac.parrot.org/parrot/changeset/43254

Log:
death to visit_info.thaw_result

Modified:
   branches/pmc_freeze_cleanup/include/parrot/pmc_freeze.h
   branches/pmc_freeze_cleanup/src/pmc_freeze.c

Modified: branches/pmc_freeze_cleanup/include/parrot/pmc_freeze.h
==============================================================================
--- branches/pmc_freeze_cleanup/include/parrot/pmc_freeze.h	Sat Dec 26 21:41:28 2009	(r43253)
+++ branches/pmc_freeze_cleanup/include/parrot/pmc_freeze.h	Sat Dec 26 22:06:47 2009	(r43254)
@@ -65,9 +65,8 @@
     UINTVAL             id;             /* freze ID of PMC */
     void               *extra;          /* PMC specific */
     INTVAL              extra_flags;    /* concerning to extra */
-    PMC                *thaw_result;    /* 1st thawed */
-    struct PackFile *pf;
-    const image_funcs *vtable;
+    struct PackFile    *pf;
+    const image_funcs  *vtable;
     struct _visit_info *image_io;       /* dummy backwards-compat pointer. */
 } visit_info;
 

Modified: branches/pmc_freeze_cleanup/src/pmc_freeze.c
==============================================================================
--- branches/pmc_freeze_cleanup/src/pmc_freeze.c	Sat Dec 26 21:41:28 2009	(r43253)
+++ branches/pmc_freeze_cleanup/src/pmc_freeze.c	Sat Dec 26 22:06:47 2009	(r43254)
@@ -621,7 +621,6 @@
     info->id_list     = pmc_new(interp, enum_class_Array);
     info->id          = 0;
     info->extra_flags = EXTRA_IS_NULL;
-    info->thaw_result = NULL;
 
     visit_loop_todo_list(interp, pmc, info);
     PackFile_destroy(interp, info->pf);
@@ -767,11 +766,7 @@
 
     if (!id) {
         /* got a NULL PMC */
-        pmc = PMCNULL;
-        if (!info->thaw_result)
-            info->thaw_result = pmc;
-        else
-            *info->thaw_ptr = pmc;
+        *info->thaw_ptr = PMCNULL;
         return;
     }
 
@@ -818,11 +813,7 @@
         info->extra_flags = 0;
     }
 
-    if (!info->thaw_result)
-        info->thaw_result = pmc;
-    else
-        *info->thaw_ptr = pmc;
-
+    *info->thaw_ptr = pmc;
 
     Parrot_pmc_array_assign(interp, (List *)PMC_data(info->id_list), id, pmc, enum_type_PMC);
 
@@ -944,7 +935,6 @@
     PMC        **list_item;
     List        *finish_list    = NULL;
     List * const todo           = (List *)PMC_data(info->todo);
-    int          finished_first = 0;
     const int    thawing        = info->what == VISIT_THAW_CONSTANTS
                                || info->what == VISIT_THAW_NORMAL;
     int          i;
@@ -975,8 +965,6 @@
         VTABLE_visit(interp, current, info);
 
         if (thawing) {
-            if (current == info->thaw_result)
-                finished_first = 1;
             if (current->vtable->thawfinish != interp->vtables[enum_class_default]->thawfinish)
                 Parrot_pmc_array_unshift(interp, finish_list, current, enum_type_PMC);
         }
@@ -991,11 +979,7 @@
         }
 
         /* on thawing call thawfinish for each processed PMC */
-        if (!finished_first)
-            Parrot_pmc_array_unshift(interp, finish_list, info->thaw_result, enum_type_PMC);
-
         n = Parrot_pmc_array_length(interp, finish_list);
-
         for (i = 0; i < n ; ++i) {
             current = *(PMC**)Parrot_pmc_array_get(interp, finish_list, i, enum_type_PMC);
             if (!PMC_IS_NULL(current))
@@ -1061,8 +1045,9 @@
 run_thaw(PARROT_INTERP, ARGIN(STRING* input), visit_enum_type what)
 {
     ASSERT_ARGS(run_thaw)
-    visit_info    info;
-    int           gc_block = 0;
+    visit_info  info;
+    int         gc_block = 0;
+    PMC        *result;
 
     /*
      * if we are thawing a lot of PMCs, it's cheaper to do
@@ -1081,6 +1066,7 @@
         gc_block = 1;
     }
 
+    info.thaw_ptr = &result;
     visit_info_init(interp, &info, what, input, PMCNULL);
     BYTECODE_SHIFT_OK(&info);
 
@@ -1089,7 +1075,7 @@
         Parrot_unblock_GC_sweep(interp);
     }
 
-    return info.thaw_result;
+    return result;
 }
 
 


More information about the parrot-commits mailing list