[svn:parrot] r43803 - branches/gc_encapsulate_part2/src/gc

bacek at svn.parrot.org bacek at svn.parrot.org
Tue Feb 9 10:43:46 UTC 2010


Author: bacek
Date: Tue Feb  9 10:43:45 2010
New Revision: 43803
URL: https://trac.parrot.org/parrot/changeset/43803

Log:
Encapsulate free_pmc_header

Modified:
   branches/gc_encapsulate_part2/src/gc/api.c
   branches/gc_encapsulate_part2/src/gc/gc_ms.c
   branches/gc_encapsulate_part2/src/gc/gc_private.h

Modified: branches/gc_encapsulate_part2/src/gc/api.c
==============================================================================
--- branches/gc_encapsulate_part2/src/gc/api.c	Tue Feb  9 10:43:25 2010	(r43802)
+++ branches/gc_encapsulate_part2/src/gc/api.c	Tue Feb  9 10:43:45 2010	(r43803)
@@ -409,14 +409,7 @@
 Parrot_gc_free_pmc_header(PARROT_INTERP, ARGMOD(PMC *pmc))
 {
     ASSERT_ARGS(Parrot_gc_free_pmc_header)
-    Fixed_Size_Pool * const pool = (PObj_constant_TEST(pmc)) ?
-        interp->mem_pools->constant_pmc_pool : interp->mem_pools->pmc_pool;
-
-    Parrot_pmc_destroy(interp, pmc);
-
-    PObj_flags_SETTO((PObj *)pmc, PObj_on_free_list_FLAG);
-    pool->add_free_object(interp, interp->mem_pools, pool, (PObj *)pmc);
-    pool->num_free_objects++;
+    interp->gc_sys->free_pmc_header(interp, pmc);
 }
 
 /*

Modified: branches/gc_encapsulate_part2/src/gc/gc_ms.c
==============================================================================
--- branches/gc_encapsulate_part2/src/gc/gc_ms.c	Tue Feb  9 10:43:25 2010	(r43802)
+++ branches/gc_encapsulate_part2/src/gc/gc_ms.c	Tue Feb  9 10:43:45 2010	(r43803)
@@ -48,6 +48,11 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+static void gc_ms_free_pmc_header(PARROT_INTERP, ARGMOD(PMC *pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*pmc);
+
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static void * gc_ms_get_free_object(PARROT_INTERP,
@@ -102,6 +107,9 @@
 #define ASSERT_ARGS_gc_ms_finalize __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools))
+#define ASSERT_ARGS_gc_ms_free_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_gc_ms_get_free_object __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
@@ -157,6 +165,7 @@
     interp->gc_sys->init_pool          = gc_ms_pool_init;
 
     interp->gc_sys->allocate_pmc_header = gc_ms_allocate_pmc_header;
+    interp->gc_sys->free_pmc_header     = gc_ms_free_pmc_header;
 
     initialize_var_size_pools(interp, interp->mem_pools);
     initialize_fixed_size_pools(interp, interp->mem_pools);
@@ -288,6 +297,29 @@
 
 /*
 
+=item C<static void gc_ms_free_pmc_header(PARROT_INTERP, PMC *pmc)>
+
+Return PMC header into pool.
+
+=cut
+
+*/
+static void
+gc_ms_free_pmc_header(PARROT_INTERP, ARGMOD(PMC *pmc))
+{
+    ASSERT_ARGS(gc_ms_free_pmc_header)
+    Fixed_Size_Pool * const pool = (PObj_constant_TEST(pmc)) ?
+        interp->mem_pools->constant_pmc_pool : interp->mem_pools->pmc_pool;
+
+    Parrot_pmc_destroy(interp, pmc);
+
+    PObj_flags_SETTO((PObj *)pmc, PObj_on_free_list_FLAG);
+    pool->add_free_object(interp, interp->mem_pools, pool, (PObj *)pmc);
+    pool->num_free_objects++;
+}
+
+/*
+
 =item C<static int gc_ms_trace_active_PMCs(PARROT_INTERP, Parrot_gc_trace_type
 trace)>
 

Modified: branches/gc_encapsulate_part2/src/gc/gc_private.h
==============================================================================
--- branches/gc_encapsulate_part2/src/gc/gc_private.h	Tue Feb  9 10:43:25 2010	(r43802)
+++ branches/gc_encapsulate_part2/src/gc/gc_private.h	Tue Feb  9 10:43:45 2010	(r43803)
@@ -106,6 +106,7 @@
 
 
     PMC* (*allocate_pmc_header)(PARROT_INTERP, UINTVAL flags);
+    void (*free_pmc_header)(PARROT_INTERP, PMC *);
 
     /*Function hooks that GC systems can CHOOSE to provide if they need them
      *These will be called via the GC API functions Parrot_gc_func_name


More information about the parrot-commits mailing list