Author: jkeenan Date: Sun Dec 28 07:16:46 2008 New Revision: 34493 Modified: trunk/src/jit.c trunk/src/list.c trunk/src/pmc/role.pmc
Log: Applying cage-cleaning patch submitted in Trac #95. jimmy++. Modified: trunk/src/jit.c ============================================================================== --- trunk/src/jit.c (original) +++ trunk/src/jit.c Sun Dec 28 07:16:46 2008 @@ -366,10 +366,8 @@ else if (flags & KEY_string_FLAG) typ = 2; - if (n < NUM_REGISTERS) { - if (!ru[typ].reg_count[n]++) - ru[typ].reg_dir[n] |= PARROT_ARGDIR_IN; - } + if (n < NUM_REGISTERS & !ru[typ].reg_count[n]++) + ru[typ].reg_dir[n] |= PARROT_ARGDIR_IN; } key = key_next(interp, key); } Modified: trunk/src/list.c ============================================================================== --- trunk/src/list.c (original) +++ trunk/src/list.c Sun Dec 28 07:16:46 2008 @@ -652,30 +652,33 @@ int do_sparse = (INTVAL)idx - (INTVAL)list->cap >= 10 * MAX_ITEMS; if (list->item_type == enum_type_sized) { - items = list->items_per_chunk; - size = items * list->item_size; + do_sparse = 0; + items = list->items_per_chunk; + size = items * list->item_size; + list->grow_policy = items == MAX_ITEMS ? enum_grow_fixed : enum_grow_mixed; - do_sparse = 0; } else if (do_sparse) { PARROT_ASSERT(where); /* don't add sparse chunk at start of list */ if (!list->n_chunks) { - list->grow_policy = enum_grow_fixed; - /* if wee need more, the next allocation will allocate the rest */ - items = MAX_ITEMS; - size = items * list->item_size; do_sparse = 0; + items = MAX_ITEMS; + + /* if we need more, the next allocation will allocate the rest */ + size = items * list->item_size; + list->grow_policy = enum_grow_fixed; } else { + /* allocate a dummy chunk holding many items virtually */ + size = list->item_size; items = idx - list->cap - 1; + /* round down this function will then be called again, to add the * final real chunk, with the rest of the needed size */ items &= ~(MAX_ITEMS - 1); list->grow_policy = enum_grow_mixed; - /* allocate a dummy chunk holding many items virtually */ - size = list->item_size; } } /* initial size for empty lists grow_policy is not yet known or was @@ -752,9 +755,10 @@ if (where) { /* at end */ if (chunk) chunk->next = new_chunk; - list->last = new_chunk; if (!list->first) list->first = new_chunk; + + list->last = new_chunk; } else { new_chunk->next = chunk; Modified: trunk/src/pmc/role.pmc ============================================================================== --- trunk/src/pmc/role.pmc (original) +++ trunk/src/pmc/role.pmc Sun Dec 28 07:16:46 2008 @@ -296,8 +296,8 @@ */ VTABLE void add_attribute(STRING *name, PMC *type) { - Parrot_Role_attributes * const role = PARROT_ROLE(SELF); - PMC * const new_attribute = pmc_new(interp, enum_class_Hash); + Parrot_Role_attributes * const role = PARROT_ROLE(SELF); + PMC * const new_attribute = pmc_new(interp, enum_class_Hash); /* Set name and type. */ VTABLE_set_string_keyed_str(interp, new_attribute, CONST_STRING(interp, "name"), name); @@ -486,7 +486,7 @@ VTABLE STRING *get_string() { Parrot_Role_attributes * const role = PARROT_ROLE(SELF); - PMC * const _namespace = role->_namespace; + PMC * const _namespace = role->_namespace; if (!PMC_IS_NULL(_namespace)) { /* Call the 'get_name' method on the role's associated namespace @@ -586,7 +586,7 @@ METHOD name(STRING *name :optional, int got_name :opt_flag) { Parrot_Role_attributes *role = PARROT_ROLE(SELF); - STRING *ret_name = NULL; + STRING *ret_name = NULL; if (got_name) { /* We'll build a hash just containing the name, then give this to @@ -613,8 +613,8 @@ */ METHOD get_namespace() { - Parrot_Role_attributes *role = PARROT_ROLE(SELF); - PMC *ret_namespace = role->_namespace; + Parrot_Role_attributes *role = PARROT_ROLE(SELF); + PMC *ret_namespace = role->_namespace; RETURN(PMC *ret_namespace); }