[svn:parrot] r43430 - branches/gc_encapsulate/src/gc
bacek at svn.parrot.org
bacek at svn.parrot.org
Tue Jan 12 14:01:00 UTC 2010
Author: bacek
Date: Tue Jan 12 14:00:59 2010
New Revision: 43430
URL: https://trac.parrot.org/parrot/changeset/43430
Log:
Implement allocation/deallocation of PMC and STRING in GC MS.
Modified:
branches/gc_encapsulate/src/gc/gc_ms.c
Modified: branches/gc_encapsulate/src/gc/gc_ms.c
==============================================================================
--- branches/gc_encapsulate/src/gc/gc_ms.c Tue Jan 12 14:00:37 2010 (r43429)
+++ branches/gc_encapsulate/src/gc/gc_ms.c Tue Jan 12 14:00:59 2010 (r43430)
@@ -158,10 +158,11 @@
{
ASSERT_ARGS(Parrot_gc_ms_init)
+ Memory_Pools *mem_pools = mem_allocate_zeroed_typed(Memory_Pools);
GC_Subsystem *gc = interp->gc_sys;
+
gc->do_gc_mark = gc_ms_mark_and_sweep;
gc->finalize_gc_system = NULL;
- gc->init_pool = gc_ms_pool_init;
gc->allocate_pmc_header = gc_ms_allocate_pmc_header;
gc->free_pmc_header = gc_ms_free_pmc_header;
@@ -170,7 +171,16 @@
gc->allocate_attributes = gc_ms_allocate_attributes;
gc->free_attributes = gc_ms_free_attributes;
+ mem_pools->num_sized = 0;
+ mem_pools->num_attribs = 0;
+ mem_pools->attrib_pools = NULL;
+ mem_pools->sized_header_pools = NULL;
+
+ initialize_var_size_pools(interp, mem_pools);
+ initialize_fixed_size_pools(interp, mem_pools);
+ Parrot_gc_initialize_fixed_size_pools(interp, mem_pools, GC_NUM_INITIAL_FIXED_SIZE_POOLS);
+ gc->gc_private = mem_pools;
}
/*
@@ -300,13 +310,24 @@
gc_ms_allocate_pmc_header(PARROT_INTERP, UINTVAL flags)
{
ASSERT_ARGS(gc_ms_allocate_pmc_header)
- return NULL;
+ Memory_Pools *mem_pools = (Memory_Pools*)interp->gc_sys->gc_private;
+ Fixed_Size_Pool * const pool = flags & PObj_constant_FLAG
+ ? mem_pools->constant_pmc_pool
+ : mem_pools->pmc_pool;
+
+ return (PMC *)pool->get_free_object(interp, pool);
}
static void
gc_ms_free_pmc_header(PARROT_INTERP, ARGFREE(PMC *pmc))
{
ASSERT_ARGS(gc_ms_free_pmc_header)
+ Memory_Pools *mem_pools = (Memory_Pools*)interp->gc_sys->gc_private;
+ Fixed_Size_Pool * const pool = flags & PObj_constant_FLAG
+ ? mem_pools->constant_pmc_pool
+ : mem_pools->pmc_pool;
+ pool->add_free_object(interp, pool, (PObj *)pmc);
+ pool->num_free_objects++;
}
@@ -315,13 +336,25 @@
gc_ms_allocate_string_header(PARROT_INTERP, UINTVAL flags)
{
ASSERT_ARGS(gc_ms_allocate_string_header)
- return NULL;
+ Memory_Pools *mem_pools = (Memory_Pools*)interp->gc_sys->gc_private;
+ Fixed_Size_Pool * const pool = flags & PObj_constant_FLAG
+ ? mem_pools->constant_string_header_pool
+ : mem_pools->string_header_pool;
+ return pool->get_free_object(interp, pool);
}
static void
gc_ms_free_string_header(PARROT_INTERP, ARGFREE(STRING *string))
{
ASSERT_ARGS(gc_ms_free_string_header)
+ if (!PObj_constant_TEST(s)) {
+ Memory_Pools *mem_pools = (Memory_Pools*)interp->gc_sys->gc_private;
+ Fixed_Size_Pool * const pool = flags & PObj_constant_FLAG
+ ? mem_pools->constant_string_header_pool
+ : mem_pools->string_header_pool;
+ pool->add_free_object(interp, pool, (PObj *)pmc);
+ pool->num_free_objects++;
+ }
}
More information about the parrot-commits
mailing list