The patch below my sig adds a new_stack() function to take care of the
allocation and setup of "generic" stacks.  It's called like:

        new_stack(interpreter, &base, &top);

This in preparation for my third regex patch, which I should have ready
in a few days.

--Brent Dax
[EMAIL PROTECTED]
Configure pumpking for Perl 6

"Nothing important happened today."
    --George III of England's diary entry for 4-Jul-1776


--- ..\..\parrot-cvs\parrot\include\parrot\stacks.h     Thu Jan  3 14:18:52
2002
+++ include\parrot\stacks.h     Thu Jan  3 14:13:04 2002
@@ -38,6 +38,8 @@
   struct Stack_Entry entry[STACK_CHUNK_DEPTH];
 };

+void new_stack(struct Parrot_Interp *, struct StackChunk **, struct
Stack_Entry **);
+
 INTVAL stack_depth(struct Parrot_Interp *,struct StackChunk *chunk);
 struct Stack_Entry *stack_entry(struct Parrot_Interp *, struct
StackChunk *chunk,INTVAL);
 void rotate_entries(struct Parrot_Interp *, struct StackChunk *, struct
Stack_Entry *, INTVAL);
--- ..\..\parrot-cvs\parrot\stacks.c    Thu Jan  3 14:18:08 2002
+++ stacks.c    Thu Jan  3 14:25:40 2002
@@ -12,6 +12,17 @@

 #include "parrot/parrot.h"

+void
+new_stack(struct Parrot_Interp *interpreter, struct StackChunk **base,
struct Stack_Entry **top) {
+       (*base)=mem_allocate_aligned(sizeof(struct StackChunk));
+       (*top)=&((*base)->entry[0]);
+
+       (*base)->used=0;
+       (*base)->free=STACK_CHUNK_DEPTH;
+       (*base)->next=NULL;
+       (*base)->prev=NULL;
+}
+
 INTVAL
 stack_depth(struct Parrot_Interp *interpreter, struct StackChunk
*chunk) {
   INTVAL               depth;
--- ..\..\parrot-cvs\parrot\interpreter.c       Thu Jan  3 14:18:06 2002
+++ interpreter.c       Thu Jan  3 14:15:48 2002
@@ -471,31 +471,15 @@
     Parrot_clear_p(interpreter);

     /* Need a user stack */
-    interpreter->user_stack_base =
-            mem_allocate_aligned(sizeof(struct StackChunk));
-    interpreter->user_stack_top =
&interpreter->user_stack_base->entry[0];
-    /* Unlike the registers, we start with zero used */
-    interpreter->user_stack_base->used = 0;
-    interpreter->user_stack_base->free = STACK_CHUNK_DEPTH;
-    interpreter->user_stack_base->next = NULL;
-    interpreter->user_stack_base->prev = NULL;
+       new_stack(interpreter, &interpreter->user_stack_base,
&interpreter->user_stack_top);

     /* And a control stack */
-    interpreter->control_stack_base =
-            mem_allocate_aligned(sizeof(struct StackChunk));
-    interpreter->control_stack_top =
-            &interpreter->control_stack_base->entry[0];
-    /* Unlike the registers, we start with zero used */
-    interpreter->control_stack_base->used = 0;
-    interpreter->control_stack_base->free = STACK_CHUNK_DEPTH;
-    interpreter->control_stack_base->next = NULL;
-    interpreter->control_stack_base->prev = NULL;
+       new_stack(interpreter, &interpreter->control_stack_base,
&interpreter->control_stack_top);

     /* Need an empty stash */
     interpreter->perl_stash = mem_allocate_new_stash();

     /* Load the core op func and info tables */
-
     interpreter->op_lib        = PARROT_CORE_OPLIB_INIT();
     interpreter->op_count      = interpreter->op_lib->op_count;
     interpreter->op_func_table = interpreter->op_lib->op_func_table;

Reply via email to