[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