The following was applied by Dan, but from what I can tell, seems to have
become unapplied since.
Mike Lambert
Bryan C. Warnock wrote:
> Date: Fri, 22 Mar 2002 01:47:02 -0500
> From: Bryan C. Warnock <[EMAIL PROTECTED]>
> To: [EMAIL PROTECTED]
> Subject: [PATCH] stacks.c
>
> Defer allocation as long as possible. Make logic parallel.
>
> Index: stacks.c
> ===================================================================
> RCS file: /home/perlcvs/parrot/stacks.c,v
> retrieving revision 1.23
> diff -u -r1.23 stacks.c
> --- stacks.c 8 Mar 2002 03:04:03 -0000 1.23
> +++ stacks.c 22 Mar 2002 06:45:39 -0000
> @@ -108,7 +108,21 @@
> void *thing, INTVAL type, stack_cleanup_method_t cleanup)
> {
> Stack_Chunk chunk = stack->prev;
> - Stack_Entry entry = &chunk->entry[chunk->used];
> + Stack_Entry entry;
> +
> + /* Do we need a new chunk? */
> + if (chunk->used == STACK_CHUNK_DEPTH) {
> + /* Need to add a new chunk */
> + Stack_Chunk new_chunk = mem_allocate_aligned(sizeof(*new_chunk));
> + new_chunk->used = 0;
> + new_chunk->next = stack;
> + new_chunk->prev = chunk;
> + chunk->next = new_chunk;
> + stack->prev = new_chunk;
> + chunk = new_chunk;
> + }
> +
> + entry = &chunk->entry[chunk->used];
>
> /* Remember the type */
> entry->entry_type = type;
> @@ -139,16 +153,7 @@
> break;
> }
>
> - /* Register the new entry */
> - if (++chunk->used == STACK_CHUNK_DEPTH) {
> - /* Need to add a new chunk */
> - Stack_Chunk new_chunk = mem_allocate_aligned(sizeof(*new_chunk));
> - new_chunk->used = 0;
> - new_chunk->next = stack;
> - new_chunk->prev = chunk;
> - chunk->next = new_chunk;
> - stack->prev = new_chunk;
> - }
> + chunk->used++;
> }
>
> /* Pop off an entry and return a pointer to the contents */
> @@ -176,7 +181,10 @@
> internal_exception(ERROR_STACK_EMPTY, "No entries on stack!\n");
> }
>
> - entry = &chunk->entry[chunk->used - 1];
> + /* Now decrement the SP */
> + chunk->used--;
> +
> + entry = &chunk->entry[chunk->used];
>
> /* Types of 0 mean we don't care */
> if (type && entry->entry_type != type) {
> @@ -189,8 +197,6 @@
> (*entry->cleanup) (entry);
> }
>
> - /* Now decrement the SP */
> - chunk->used--;
>
> /* Sometimes the caller doesn't care what the value was */
> if (where == NULL)
> --
> Bryan C. Warnock
> [EMAIL PROTECTED]
>
>