[svn:parrot] r48918 - trunk/src/gc
chromatic at svn.parrot.org
chromatic at svn.parrot.org
Fri Sep 10 21:39:41 UTC 2010
Author: chromatic
Date: Fri Sep 10 21:39:41 2010
New Revision: 48918
URL: https://trac.parrot.org/parrot/changeset/48918
Log:
[GC] Made system tracer use precise type marking.
Modified:
trunk/src/gc/system.c
Modified: trunk/src/gc/system.c
==============================================================================
--- trunk/src/gc/system.c Fri Sep 10 20:06:27 2010 (r48917)
+++ trunk/src/gc/system.c Fri Sep 10 21:39:41 2010 (r48918)
@@ -453,8 +453,8 @@
prefix = mask & buffer_min;
for (cur_var_ptr = hi_var_ptr;
- (ptrdiff_t)cur_var_ptr < (ptrdiff_t)lo_var_ptr;
- cur_var_ptr = (size_t)((ptrdiff_t)cur_var_ptr + sizeof (void *))) {
+ (ptrdiff_t)cur_var_ptr < (ptrdiff_t)lo_var_ptr;
+ cur_var_ptr = (size_t)((ptrdiff_t)cur_var_ptr + sizeof (void *))) {
const size_t ptr = *(size_t *)cur_var_ptr;
/* Do a quick approximate range check by bit-masking */
@@ -463,14 +463,14 @@
* guaranteed to be live pmcs/buffers, and could very well have
* had their bufstart/vtable destroyed due to the linked list of
* free headers... */
- if ((pmc_min <= ptr) && (ptr < pmc_max) && is_pmc_ptr(mem_pools, (void *)ptr)) {
- Parrot_gc_mark_PObj_alive(interp, (PObj *)ptr);
+ if ((pmc_min <= ptr)
+ && (ptr < pmc_max)
+ && is_pmc_ptr(mem_pools, (void *)ptr)) {
+ Parrot_gc_mark_PMC_alive(interp, (PMC *)ptr);
}
- else if ((buffer_min <= ptr) && (ptr < buffer_max) &&
- is_buffer_ptr(mem_pools, (void *)ptr)) {
- /* ...and since Parrot_gc_mark_PObj_alive doesn't care about bufstart, it
- * doesn't really matter if it sets a flag */
- Parrot_gc_mark_PObj_alive(interp, (PObj *)ptr);
+ else if ((buffer_min <= ptr) && (ptr < buffer_max)
+ && is_buffer_ptr(mem_pools, (void *)ptr)) {
+ Parrot_gc_mark_STRING_alive(interp, (STRING *)ptr);
}
}
}
More information about the parrot-commits
mailing list