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

bacek at svn.parrot.org bacek at svn.parrot.org
Tue Feb 9 14:20:46 UTC 2010


Author: bacek
Date: Tue Feb  9 14:20:46 2010
New Revision: 43817
URL: https://trac.parrot.org/parrot/changeset/43817

Log:
Encapsulate pmc_needs_early_collection

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 14:20:26 2010	(r43816)
+++ branches/gc_encapsulate_part2/src/gc/api.c	Tue Feb  9 14:20:46 2010	(r43817)
@@ -978,8 +978,7 @@
 Parrot_gc_pmc_needs_early_collection(PARROT_INTERP, ARGMOD(PMC *pmc))
 {
     ASSERT_ARGS(Parrot_gc_pmc_needs_early_collection)
-    PObj_needs_early_gc_SET(pmc);
-    ++interp->mem_pools->num_early_gc_PMCs;
+    interp->gc_sys->pmc_needs_early_collection(interp, pmc);
 }
 
 /*

Modified: branches/gc_encapsulate_part2/src/gc/gc_ms.c
==============================================================================
--- branches/gc_encapsulate_part2/src/gc/gc_ms.c	Tue Feb  9 14:20:26 2010	(r43816)
+++ branches/gc_encapsulate_part2/src/gc/gc_ms.c	Tue Feb  9 14:20:46 2010	(r43817)
@@ -317,7 +317,9 @@
 
     interp->gc_sys->do_gc_mark              = gc_ms_mark_and_sweep;
     interp->gc_sys->compact_string_pool     = gc_ms_compact_memory_pool;
-    interp->gc_sys->mark_special            = gc_ms_mark_special;
+
+    interp->gc_sys->mark_special                = gc_ms_mark_special;
+    interp->gc_sys->pmc_needs_early_collection  = gc_ms_pmc_needs_early_collection;
 
     interp->gc_sys->allocate_pmc_header     = gc_ms_allocate_pmc_header;
     interp->gc_sys->free_pmc_header         = gc_ms_free_pmc_header;
@@ -507,6 +509,24 @@
 
 /*
 
+=item C<void gc_ms_pmc_needs_early_collection(PARROT_INTERP, PMC *pmc)>
+
+Mark a PMC as needing timely destruction
+
+=cut
+
+*/
+
+void
+gc_ms_pmc_needs_early_collection(PARROT_INTERP, ARGMOD(PMC *pmc))
+{
+    ASSERT_ARGS(gc_ms_pmc_needs_early_collection)
+    PObj_needs_early_gc_SET(pmc);
+    ++interp->mem_pools->num_early_gc_PMCs;
+}
+
+/*
+
 =item C<static void gc_ms_finalize_memory_pools(PARROT_INTERP, Memory_Pools *
 const mem_pools)>
 

Modified: branches/gc_encapsulate_part2/src/gc/gc_private.h
==============================================================================
--- branches/gc_encapsulate_part2/src/gc/gc_private.h	Tue Feb  9 14:20:26 2010	(r43816)
+++ branches/gc_encapsulate_part2/src/gc/gc_private.h	Tue Feb  9 14:20:46 2010	(r43817)
@@ -105,7 +105,9 @@
 
     void (*do_gc_mark)(PARROT_INTERP, UINTVAL flags);
     void (*compact_string_pool)(PARROT_INTERP);
+
     void (*mark_special)(PARROT_INTERP, PMC *);
+    void (*pmc_needs_early_collection)(PARROT_INTERP, PMC *);
 
     void (*init_pool)(PARROT_INTERP, struct Fixed_Size_Pool *);
 
@@ -631,6 +633,11 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*pmc);
 
+void gc_ms_pmc_needs_early_collection(PARROT_INTERP, ARGMOD(PMC *pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*pmc);
+
 void Parrot_gc_ms_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
@@ -651,6 +658,10 @@
 #define ASSERT_ARGS_gc_ms_free_pmc_attributes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))
+#define ASSERT_ARGS_gc_ms_pmc_needs_early_collection \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_Parrot_gc_ms_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */


More information about the parrot-commits mailing list