Applied, all tests passing.

--Josh

At 20:31 on 03/29/2002 EST, Michel J Lambert <[EMAIL PROTECTED]> wrote:

> > It won't go in cleanly any more:
> 
> How about the below patch?
> 
> Mike Lambert
> 
> 
> Index: stacks.c
> ===================================================================
> RCS file: /cvs/public/parrot/stacks.c,v
> retrieving revision 1.26
> diff -u -r1.26 stacks.c
> --- stacks.c  29 Mar 2002 20:14:42 -0000      1.26
> +++ stacks.c  30 Mar 2002 01:15:31 -0000
> @@ -149,7 +149,21 @@
>             void *thing, Stack_entry_type type, Stack_cleanup_method
> cleanup)
>  {
>      Stack_chunk *chunk = stack_base->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(Stack_chunk));
> +        new_chunk->used = 0;
> +        new_chunk->next = stack_base;
> +        new_chunk->prev = chunk;
> +        chunk->next = new_chunk;
> +        stack_base->prev = new_chunk;
> +        chunk = new_chunk;
> +    }
> +
> +    entry = &chunk->entry[chunk->used];
> 
>      /* Remember the type */
>      entry->entry_type = type;
> @@ -184,17 +198,8 @@
>                                 "Invalid stack_entry_type!\n");
>              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(Stack_chunk));
> -        new_chunk->used  = 0;
> -        new_chunk->next  = stack_base;
> -        new_chunk->prev  = chunk;
> -        chunk->next      = new_chunk;
> -        stack_base->prev = new_chunk;
> -    }
> +
> +    chunk->used++;
>  }
> 
>  /* Pop off an entry and return a pointer to the contents */
> @@ -222,7 +227,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) {
> @@ -234,9 +242,6 @@
>      if (entry->flags & STACK_ENTRY_CLEANUP_FLAG) {
>          (*entry->cleanup)(entry);
>      }
> -
> -    /* Now decrement the SP */
> -    chunk->used--;
> 
>      /* Sometimes the caller doesn't care what the value was */
>      if (where == NULL) {
> 
> 
> 
> 


Reply via email to