diff --git a/src/interpret.c b/src/interpret.c
index c424aff8fabebaeb9135d5d8621ecd71248098d4..4d34d31ee120eef57c557dab1a34b9e6e66fa09d 100644
--- a/src/interpret.c
+++ b/src/interpret.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: interpret.c,v 1.155 2000/06/20 23:31:25 hubbe Exp $");
+RCSID("$Id: interpret.c,v 1.156 2000/07/07 00:54:54 hubbe Exp $");
 #include "interpret.h"
 #include "object.h"
 #include "program.h"
@@ -59,56 +59,44 @@ RCSID("$Id: interpret.c,v 1.155 2000/06/20 23:31:25 hubbe Exp $");
 #define TRACE_LEN (100 + t_flag * 10)
 
 
-/* sp points to first unused value on stack
+/* Pike_sp points to first unused value on stack
  * (much simpler than letting it point at the last used value.)
  */
-struct svalue *sp;     /* Current position */
-struct svalue *evaluator_stack; /* Start of stack */
+struct Pike_interpreter Pike_interpreter;
 int stack_size = EVALUATOR_STACK_SIZE;
-int evaluator_stack_malloced = 0;
-char *stack_top;
+
 
 /* mark stack, used to store markers into the normal stack */
-struct svalue **mark_sp; /* Current position */
-struct svalue **mark_stack; /* Start of stack */
 int mark_stack_malloced = 0;
 
-#ifdef PROFILING
-#ifdef HAVE_GETHRTIME
-long long accounted_time =0;
-long long time_base =0;
-#endif
-#endif
-
 void push_sp_mark(void)
 {
-  if(mark_sp == mark_stack + stack_size)
+  if(Pike_interpreter.mark_sp == Pike_interpreter.mark_stack + stack_size)
     error("No more mark stack!\n");
-  *mark_sp++=sp;
+  *Pike_interpreter.mark_sp++=Pike_sp;
 }
 int pop_sp_mark(void)
 {
 #ifdef PIKE_DEBUG
-  if(mark_sp < mark_stack)
+  if(Pike_interpreter.mark_sp < Pike_interpreter.mark_stack)
     fatal("Mark stack underflow!\n");
 #endif
-  return sp - *--mark_sp;
+  return Pike_sp - *--Pike_interpreter.mark_sp;
 }
 
-struct pike_frame *fp; /* pike_frame pointer */
 
 #ifdef PIKE_DEBUG
 static void gc_check_stack_callback(struct callback *foo, void *bar, void *gazonk)
 {
   struct pike_frame *f;
-  debug_gc_xmark_svalues(evaluator_stack,sp-evaluator_stack-1," on current interpreter stack");
+  debug_gc_xmark_svalues(Pike_interpreter.evaluator_stack,Pike_sp-Pike_interpreter.evaluator_stack-1," on current interpreter stack");
 
-  for(f=fp;f;f=f->next)
+  for(f=Pike_fp;f;f=f->next)
   {
     if(f->context.parent)
-      gc_external_mark2(f->context.parent,0," in fp->context.parent on current stack");
-    gc_external_mark2(f->current_object,0," in fp->current_object on current stack");
-    gc_external_mark2(f->context.prog,0," in fp->context.prog on current stack");
+      gc_external_mark2(f->context.parent,0," in Pike_fp->context.parent on current stack");
+    gc_external_mark2(f->current_object,0," in Pike_fp->current_object on current stack");
+    gc_external_mark2(f->context.prog,0," in Pike_fp->context.prog on current stack");
   }
 
 }
@@ -142,8 +130,8 @@ void init_interpreter(void)
       if(fd >= 0) break;
       if(errno != EINTR)
       {
-	evaluator_stack=0;
-	mark_stack=0;
+	Pike_interpreter.evaluator_stack=0;
+	Pike_interpreter.mark_stack=0;
 	goto use_malloc;
       }
     }
@@ -154,33 +142,33 @@ void init_interpreter(void)
 
 #define MMALLOC(X,Y) (Y *)mmap(0,X*sizeof(Y),PROT_READ|PROT_WRITE, MAP_NORESERVE | MAP_PRIVATE | MAP_ANONYMOUS, fd, 0)
 
-  evaluator_stack_malloced=0;
+  Pike_interpreter.evaluator_stack_malloced=0;
   mark_stack_malloced=0;
-  evaluator_stack=MMALLOC(stack_size,struct svalue);
-  mark_stack=MMALLOC(stack_size, struct svalue *);
-  if((char *)MAP_FAILED == (char *)evaluator_stack) evaluator_stack=0;
-  if((char *)MAP_FAILED == (char *)mark_stack) mark_stack=0;
+  Pike_interpreter.evaluator_stack=MMALLOC(stack_size,struct svalue);
+  Pike_interpreter.mark_stack=MMALLOC(stack_size, struct svalue *);
+  if((char *)MAP_FAILED == (char *)Pike_interpreter.evaluator_stack) Pike_interpreter.evaluator_stack=0;
+  if((char *)MAP_FAILED == (char *)Pike_interpreter.mark_stack) Pike_interpreter.mark_stack=0;
 #else
-  evaluator_stack=0;
-  mark_stack=0;
+  Pike_interpreter.evaluator_stack=0;
+  Pike_interpreter.mark_stack=0;
 #endif
 
 use_malloc:
-  if(!evaluator_stack)
+  if(!Pike_interpreter.evaluator_stack)
   {
-    evaluator_stack=(struct svalue *)xalloc(stack_size*sizeof(struct svalue));
-    evaluator_stack_malloced=1;
+    Pike_interpreter.evaluator_stack=(struct svalue *)xalloc(stack_size*sizeof(struct svalue));
+    Pike_interpreter.evaluator_stack_malloced=1;
   }
 
-  if(!mark_stack)
+  if(!Pike_interpreter.mark_stack)
   {
-    mark_stack=(struct svalue **)xalloc(stack_size*sizeof(struct svalue *));
+    Pike_interpreter.mark_stack=(struct svalue **)xalloc(stack_size*sizeof(struct svalue *));
     mark_stack_malloced=1;
   }
 
-  sp=evaluator_stack;
-  mark_sp=mark_stack;
-  fp=0;
+  Pike_sp=Pike_interpreter.evaluator_stack;
+  Pike_interpreter.mark_sp=Pike_interpreter.mark_stack;
+  Pike_fp=0;
 
 #ifdef PIKE_DEBUG
   {
@@ -194,8 +182,8 @@ use_malloc:
 #endif
 #ifdef PROFILING
 #ifdef HAVE_GETHRTIME
-  time_base = gethrtime();
-  accounted_time =0;
+  Pike_interpreter.time_base = gethrtime();
+  Pike_interpreter.accounted_time =0;
 #endif
 #endif
 }
@@ -389,7 +377,7 @@ void print_return_value(void)
     char *s;
 	
     init_buf();
-    describe_svalue(sp-1,0,0);
+    describe_svalue(Pike_sp-1,0,0);
     s=simple_free_buf();
     if((long)strlen(s) > (long)TRACE_LEN)
     {
@@ -435,11 +423,11 @@ break
 #define LOOP(ID, INC, OP2, OP4)					\
 CASE(ID)							\
 {								\
-  union anything *i=get_pointer_if_this_type(sp-2, T_INT);	\
+  union anything *i=get_pointer_if_this_type(Pike_sp-2, T_INT);	\
   if(i && !AUTO_BIGNUM_LOOP_TEST(i->integer,INC))		\
   {								\
     i->integer += INC;						\
-    if(i->integer OP2 sp[-3].u.integer)				\
+    if(i->integer OP2 Pike_sp[-3].u.integer)				\
     {								\
       pc+=EXTRACT_INT(pc);					\
       fast_check_threads_etc(8);				\
@@ -447,11 +435,11 @@ CASE(ID)							\
       pc+=sizeof(INT32);					\
     }                                                           \
   }else{							\
-    lvalue_to_svalue_no_free(sp,sp-2); sp++;			\
+    lvalue_to_svalue_no_free(Pike_sp,Pike_sp-2); Pike_sp++;			\
     push_int(INC);						\
     f_add(2);							\
-    assign_lvalue(sp-3,sp-1);					\
-    if(OP4 ( sp-1, sp-4 ))					\
+    assign_lvalue(Pike_sp-3,Pike_sp-1);					\
+    if(OP4 ( Pike_sp-1, Pike_sp-4 ))					\
     {								\
       pc+=EXTRACT_INT(pc);					\
       fast_check_threads_etc(8);				\
@@ -465,7 +453,7 @@ CASE(ID)							\
 
 #define CJUMP(X,Y) \
 CASE(X); \
-if(Y(sp-2,sp-1)) { \
+if(Y(Pike_sp-2,Pike_sp-1)) { \
   DOJUMP(); \
 }else{ \
   pc+=sizeof(INT32); \
@@ -479,8 +467,8 @@ break
  */
 void reset_evaluator(void)
 {
-  fp=0;
-  pop_n_elems(sp - evaluator_stack);
+  Pike_fp=0;
+  pop_n_elems(Pike_sp - Pike_interpreter.evaluator_stack);
 }
 
 #ifdef PIKE_DEBUG
@@ -525,7 +513,7 @@ void dump_backlog(void)
 #ifdef _REENTRANT
       if(thread != backlog[e].thread_id)
       {
-	fprintf(stderr,"[Thread swap, thread_id=%p]\n",backlog[e].thread_id);
+	fprintf(stderr,"[Thread swap, Pike_interpreter.thread_id=%p]\n",backlog[e].thread_id);
 	thread = backlog[e].thread_id;
       }
 #endif
@@ -595,7 +583,7 @@ static void trace_return_value(void)
   
   init_buf();
   my_strcat("Return: ");
-  describe_svalue(sp-1,0,0);
+  describe_svalue(Pike_sp-1,0,0);
   s=simple_free_buf();
   if((long)strlen(s) > (long)TRACE_LEN)
   {
@@ -616,7 +604,7 @@ static void do_trace_call(INT32 args)
   for(e=0;e<args;e++)
   {
     if(e) my_strcat(",");
-    describe_svalue(sp-args+e,0,0);
+    describe_svalue(Pike_sp-args+e,0,0);
   }
   my_strcat(")"); 
   s=simple_free_buf();
@@ -627,10 +615,10 @@ static void do_trace_call(INT32 args)
     s[TRACE_LEN-2]='.';
     s[TRACE_LEN-2]='.';
   }
-  if(fp && fp->pc)
+  if(Pike_fp && Pike_fp->pc)
   {
     char *f;
-    file=get_line(fp->pc,fp->context.prog,&linep);
+    file=get_line(Pike_fp->pc,Pike_fp->context.prog,&linep);
     while((f=STRCHR(file,'/'))) file=f+1;
   }else{
     linep=0;
@@ -685,19 +673,19 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
   struct object *o;
   struct pike_frame *scope=0;
   int fun, tailrecurse=-1;
-  struct svalue *save_sp=sp-args;
+  struct svalue *save_sp=Pike_sp-args;
 
 #ifdef PROFILING
 #ifdef HAVE_GETHRTIME
-  long long children_base = accounted_time;
-  long long start_time = gethrtime() - time_base;
+  long long children_base = Pike_interpreter.accounted_time;
+  long long start_time = gethrtime() - Pike_interpreter.time_base;
   unsigned INT32 self_time_base;
   if(start_time < 0)
   {
-    fatal("gethrtime() shrunk\n start_time=%ld\n gethrtime()=%ld\n time_base=%ld\n",
+    fatal("gethrtime() shrunk\n start_time=%ld\n gethrtime()=%ld\n Pike_interpreter.time_base=%ld\n",
 	  (long)(start_time/100000), 
 	  (long)(gethrtime()/100000), 
-	  (long)(time_base/100000));
+	  (long)(Pike_interpreter.time_base/100000));
   }
 #endif
 #endif
@@ -709,12 +697,12 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 
       CHECK_INTERPRETER_LOCK();
 
-      if( thread_id && !th_equal( OBJ2THREAD(thread_id)->id, self) )
+      if( Pike_interpreter.thread_id && !th_equal( OBJ2THREAD(Pike_interpreter.thread_id)->id, self) )
 	fatal("Current thread is wrong.\n");
 	
-      if(thread_for_id(th_self()) != thread_id)
-	fatal("thread_for_id() (or thread_id) failed in mega_apply! "
-	      "%p != %p\n", thread_for_id(self), thread_id);
+      if(thread_for_id(th_self()) != Pike_interpreter.thread_id)
+	fatal("thread_for_id() (or Pike_interpreter.thread_id) failed in mega_apply! "
+	      "%p != %p\n", thread_for_id(self), Pike_interpreter.thread_id);
     }
 #endif
 
@@ -723,17 +711,17 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
   case APPLY_STACK:
   apply_stack:
     if(!args)
-      PIKE_ERROR("`()", "Too few arguments.\n", sp, 0);
+      PIKE_ERROR("`()", "Too few arguments.\n", Pike_sp, 0);
     args--;
-    if(sp-save_sp-args > (args<<2) + 32)
+    if(Pike_sp-save_sp-args > (args<<2) + 32)
     {
       /* The test above assures these two areas
        * are not overlapping
        */
-      assign_svalues(save_sp, sp-args-1, args+1, BIT_MIXED);
-      pop_n_elems(sp-save_sp-args-1);
+      assign_svalues(save_sp, Pike_sp-args-1, args+1, BIT_MIXED);
+      pop_n_elems(Pike_sp-save_sp-args-1);
     }
-    arg1=(void *)(sp-args-1);
+    arg1=(void *)(Pike_sp-args-1);
 
   case APPLY_SVALUE:
   apply_svalue:
@@ -743,7 +731,7 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
     {
     case T_INT:
       if (!s->u.integer) {
-	PIKE_ERROR("0", "Attempt to call the NULL-value\n", sp, args);
+	PIKE_ERROR("0", "Attempt to call the NULL-value\n", Pike_sp, args);
       } else {
 	error("Attempt to call the value %d\n", s->u.integer);
       }
@@ -764,7 +752,7 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
       if(s->subtype == FUNCTION_BUILTIN)
       {
 #ifdef PIKE_DEBUG
-	struct svalue *expected_stack = sp-args;
+	struct svalue *expected_stack = Pike_sp-args;
 	if(t_flag>1)
 	{
 	  init_buf();
@@ -775,18 +763,18 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 	(*(s->u.efun->function))(args);
 
 #ifdef PIKE_DEBUG
-	if(sp != expected_stack + !s->u.efun->may_return_void)
+	if(Pike_sp != expected_stack + !s->u.efun->may_return_void)
 	{
-	  if(sp < expected_stack)
+	  if(Pike_sp < expected_stack)
 	    fatal("Function popped too many arguments: %s\n",
 		  s->u.efun->name->str);
-	  if(sp>expected_stack+1)
+	  if(Pike_sp>expected_stack+1)
 	    fatal("Function left droppings on stack: %s\n",
 		  s->u.efun->name->str);
-	  if(sp == expected_stack && !s->u.efun->may_return_void)
+	  if(Pike_sp == expected_stack && !s->u.efun->may_return_void)
 	    fatal("Non-void function returned without return value on stack: %s %d\n",
 		  s->u.efun->name->str,s->u.efun->may_return_void);
-	  if(sp==expected_stack+1 && s->u.efun->may_return_void)
+	  if(Pike_sp==expected_stack+1 && s->u.efun->may_return_void)
 	    fatal("Void function returned with a value on the stack: %s %d\n",
 		  s->u.efun->name->str, s->u.efun->may_return_void);
 	}
@@ -852,7 +840,7 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
       fatal("Apply lfun on illegal value!\n");
 #endif
     if(!o->prog)
-      PIKE_ERROR("destructed object", "Apply on destructed object.\n", sp, args);
+      PIKE_ERROR("destructed object", "Apply on destructed object.\n", Pike_sp, args);
     fun=FIND_LFUN(o->prog,fun);
     goto apply_low;
   
@@ -872,7 +860,7 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
       
       if(fun<0)
       {
-	pop_n_elems(sp-save_sp);
+	pop_n_elems(Pike_sp-save_sp);
 	push_int(0);
 	return;
       }
@@ -889,7 +877,7 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
       p=o->prog;
       if(!p)
 	PIKE_ERROR("destructed object->function",
-	      "Cannot call functions in destructed objects.\n", sp, args);
+	      "Cannot call functions in destructed objects.\n", Pike_sp, args);
 
 #ifdef PIKE_SECURITY
       CHECK_DATA_SECURITY_OR_ERROR(o, SECURITY_BIT_CALL,
@@ -923,7 +911,7 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
       new_frame=alloc_pike_frame();
       debug_malloc_touch(new_frame);
 
-      new_frame->next = fp;
+      new_frame->next = Pike_fp;
       new_frame->current_object = o;
       new_frame->context = p->inherits[ ref->inherit_offset ];
 
@@ -954,7 +942,7 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 #endif
 
 
-      new_frame->locals = sp - args;
+      new_frame->locals = Pike_sp - args;
       new_frame->expendible = new_frame->locals;
       new_frame->args = args;
       new_frame->fun = fun;
@@ -978,14 +966,14 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 	do_trace_call(args);
       }
       
-      fp = new_frame;
+      Pike_fp = new_frame;
       
 #ifdef PROFILING
       function->num_calls++;
 #endif
   
       if(function->func.offset == -1)
-	generic_error(NULL, sp, args,
+	generic_error(NULL, Pike_sp, args,
 		      "Calling undefined function.\n");
       
       tailrecurse=-1;
@@ -999,8 +987,8 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
       switch(function->identifier_flags & (IDENTIFIER_FUNCTION | IDENTIFIER_CONSTANT))
       {
       case IDENTIFIER_C_FUNCTION:
-	debug_malloc_touch(fp);
-	fp->num_args=args;
+	debug_malloc_touch(Pike_fp);
+	Pike_fp->num_args=args;
 	new_frame->num_locals=args;
 	check_threads_etc();
 	(*function->func.c_fun)(args);
@@ -1008,9 +996,9 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 	
       case IDENTIFIER_CONSTANT:
       {
-	struct svalue *s=&(fp->context.prog->
+	struct svalue *s=&(Pike_fp->context.prog->
 			   constants[function->func.offset].sval);
-	debug_malloc_touch(fp);
+	debug_malloc_touch(Pike_fp);
 	if(s->type == T_PROGRAM)
 	{
 	  struct object *tmp;
@@ -1027,19 +1015,19 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
       
       case 0:
       {
-	debug_malloc_touch(fp);
+	debug_malloc_touch(Pike_fp);
 	debug_malloc_touch(o);
-	if(sp-save_sp-args<=0)
+	if(Pike_sp-save_sp-args<=0)
 	{
 	  /* Create an extra svalue for tail recursion style call */
-	  sp++;
-	  MEMMOVE(sp-args,sp-args-1,sizeof(struct svalue)*args);
-	  sp[-args-1].type=T_INT;
+	  Pike_sp++;
+	  MEMMOVE(Pike_sp-args,Pike_sp-args-1,sizeof(struct svalue)*args);
+	  Pike_sp[-args-1].type=T_INT;
 	}else{
-	  free_svalue(sp-args-1);
-	  sp[-args-1].type=T_INT;
+	  free_svalue(Pike_sp-args-1);
+	  Pike_sp[-args-1].type=T_INT;
 	}
-	low_object_index_no_free(sp-args-1,o,fun);
+	low_object_index_no_free(Pike_sp-args-1,o,fun);
 	tailrecurse=args+1;
 	break;
       }
@@ -1055,7 +1043,7 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 	  fatal("Pike code called within gc.\n");
 #endif
 
-	debug_malloc_touch(fp);
+	debug_malloc_touch(Pike_fp);
 	pc=new_frame->context.prog->program + function->func.offset;
 	
 	num_locals=EXTRACT_UCHAR(pc++);
@@ -1067,8 +1055,8 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 	/* adjust arguments on stack */
 	if(args < num_args) /* push zeros */
 	{
-	  clear_svalues_undefined(sp, num_args-args);
-	  sp += num_args-args;
+	  clear_svalues_undefined(Pike_sp, num_args-args);
+	  Pike_sp += num_args-args;
 	  args += num_args-args;
 	}
 	
@@ -1084,9 +1072,10 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 	    args=num_args;
 	  }
 	}
-	
-	clear_svalues(sp, num_locals - args);
-	sp += num_locals - args;
+
+	if(num_locals > args)
+	  clear_svalues(Pike_sp, num_locals - args);
+	Pike_sp += num_locals - args;
 #ifdef PIKE_DEBUG
 	if(num_locals < num_args)
 	  fatal("Wrong number of arguments or locals in function def.\n");
@@ -1097,16 +1086,16 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 	check_threads_etc();
 
 	{
-	  struct svalue **save_mark_sp=mark_sp;
+	  struct svalue **save_mark_sp=Pike_interpreter.mark_sp;
 	  tailrecurse=eval_instruction(pc);
-	  mark_sp=save_mark_sp;
+	  Pike_interpreter.mark_sp=save_mark_sp;
 #ifdef PIKE_DEBUG
-	  if(mark_sp < save_mark_sp)
+	  if(Pike_interpreter.mark_sp < save_mark_sp)
 	    fatal("Popped below save_mark_sp!\n");
 #endif
 	}
 #ifdef PIKE_DEBUG
-	if(sp<evaluator_stack)
+	if(Pike_sp<Pike_interpreter.evaluator_stack)
 	  fatal("Stack error (also simple).\n");
 #endif
 	break;
@@ -1117,19 +1106,19 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 #ifdef HAVE_GETHRTIME
       {
 	long long time_passed, time_in_children, self_time;
-	time_in_children=  accounted_time - children_base;
-	time_passed = gethrtime() - time_base - start_time;
+	time_in_children=  Pike_interpreter.accounted_time - children_base;
+	time_passed = gethrtime() - Pike_interpreter.time_base - start_time;
 	self_time=time_passed - time_in_children;
-	accounted_time+=self_time;
+	Pike_interpreter.accounted_time+=self_time;
 #ifdef PIKE_DEBUG
-	if(self_time < 0 || children_base <0 || accounted_time <0)
-	  fatal("Time is negative\n  self_time=%ld\n  time_passed=%ld\n  time_in_children=%ld\n  children_base=%ld\n  accounted_time=%ld!\n  time_base=%ld\n  start_time=%ld\n",
+	if(self_time < 0 || children_base <0 || Pike_interpreter.accounted_time <0)
+	  fatal("Time is negative\n  self_time=%ld\n  time_passed=%ld\n  time_in_children=%ld\n  children_base=%ld\n  Pike_interpreter.accounted_time=%ld!\n  Pike_interpreter.time_base=%ld\n  start_time=%ld\n",
 		(long)(self_time/100000),
 		(long)(time_passed/100000),
 		(long)(time_in_children/100000),
 		(long)(children_base/100000),
-		(long)(accounted_time/100000),
-		(long)(time_base/100000),
+		(long)(Pike_interpreter.accounted_time/100000),
+		(long)(Pike_interpreter.time_base/100000),
 		(long)(start_time/100000)
 		);
 #endif
@@ -1140,22 +1129,22 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 #endif
 
 #if 0
-      if(sp - new_frame->locals > 1)
+      if(Pike_sp - new_frame->locals > 1)
       {
-	pop_n_elems(sp - new_frame->locals -1);
-      }else if(sp - new_frame->locals < 1){
+	pop_n_elems(Pike_sp - new_frame->locals -1);
+      }else if(Pike_sp - new_frame->locals < 1){
 #ifdef PIKE_DEBUG
-	if(sp - new_frame->locals<0) fatal("Frame underflow.\n");
+	if(Pike_sp - new_frame->locals<0) fatal("Frame underflow.\n");
 #endif
-	sp->u.integer = 0;
-	sp->subtype=NUMBER_NUMBER;
-	sp->type = T_INT;
-	sp++;
+	Pike_sp->u.integer = 0;
+	Pike_sp->subtype=NUMBER_NUMBER;
+	Pike_sp->type = T_INT;
+	Pike_sp++;
       }
 #endif
 
 #ifdef PIKE_DEBUG
-      if(fp!=new_frame)
+      if(Pike_fp!=new_frame)
 	fatal("Frame stack out of whack!\n");
 #endif
       
@@ -1170,13 +1159,13 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
     }
   }
 
-  if(save_sp+1 < sp)
+  if(save_sp+1 < Pike_sp)
   {
-    assign_svalue(save_sp,sp-1);
-    pop_n_elems(sp-save_sp-1);
+    assign_svalue(save_sp,Pike_sp-1);
+    pop_n_elems(Pike_sp-save_sp-1);
   }
 
-  if(save_sp+1 > sp)
+  if(save_sp+1 > Pike_sp)
   {
     if(type != APPLY_SVALUE)
       push_int(0);
@@ -1188,18 +1177,18 @@ void mega_apply2(enum apply_type type, INT32 args, void *arg1, void *arg2)
 #ifdef PIKE_SECURITY
 static void restore_creds(struct object *creds)
 {
-  if(current_creds)
-    free_object(current_creds);
-  current_creds = creds;
+  if(Pike_interpreter.current_creds)
+    free_object(Pike_interpreter.current_creds);
+  Pike_interpreter.current_creds = creds;
 }
 
 void mega_apply(enum apply_type type, INT32 args, void *arg1, void *arg2)
 {
   ONERROR tmp;
-  if(current_creds)
-    add_ref(current_creds);
+  if(Pike_interpreter.current_creds)
+    add_ref(Pike_interpreter.current_creds);
 
-  SET_ONERROR(tmp, restore_creds, current_creds);
+  SET_ONERROR(tmp, restore_creds, Pike_interpreter.current_creds);
   mega_apply2(type, args, arg1, arg2);
   CALL_AND_UNSET_ONERROR(tmp);
 }
@@ -1213,27 +1202,27 @@ void mega_apply(enum apply_type type, INT32 args, void *arg1, void *arg2)
 static int o_catch(unsigned char *pc)
 {
   JMP_BUF tmp;
-  struct svalue *expendible=fp->expendible;
-  debug_malloc_touch(fp);
+  struct svalue *expendible=Pike_fp->expendible;
+  debug_malloc_touch(Pike_fp);
   if(SETJMP(tmp))
   {
-    *sp=throw_value;
+    *Pike_sp=throw_value;
     throw_value.type=T_INT;
-    sp++;
+    Pike_sp++;
     UNSETJMP(tmp);
-    fp->expendible=expendible;
+    Pike_fp->expendible=expendible;
     return 0;
   }else{
-    struct svalue **save_mark_sp=mark_sp;
+    struct svalue **save_mark_sp=Pike_interpreter.mark_sp;
     int x;
-    fp->expendible=fp->locals + fp->num_locals;
+    Pike_fp->expendible=Pike_fp->locals + Pike_fp->num_locals;
     x=eval_instruction(pc);
 #ifdef PIKE_DEBUG
-    if(mark_sp < save_mark_sp)
-      fatal("mark sp underflow in catch.\n");
+    if(Pike_interpreter.mark_sp < save_mark_sp)
+      fatal("mark Pike_sp underflow in catch.\n");
 #endif
-    mark_sp=save_mark_sp;
-    fp->expendible=expendible;
+    Pike_interpreter.mark_sp=save_mark_sp;
+    Pike_fp->expendible=expendible;
     if(x!=-1) mega_apply(APPLY_STACK, x, 0,0);
     UNSETJMP(tmp);
     return 1;
@@ -1251,10 +1240,10 @@ int apply_low_safe_and_stupid(struct object *o, INT32 offset)
   struct pike_frame *new_frame=alloc_pike_frame();
   int ret;
 
-  new_frame->next = fp;
+  new_frame->next = Pike_fp;
   new_frame->current_object = o;
   new_frame->context=o->prog->inherits[0];
-  new_frame->locals = evaluator_stack;
+  new_frame->locals = Pike_interpreter.evaluator_stack;
   new_frame->expendible=new_frame->locals;
   new_frame->args = 0;
   new_frame->num_args=0;
@@ -1263,7 +1252,7 @@ int apply_low_safe_and_stupid(struct object *o, INT32 offset)
   new_frame->pc = 0;
   new_frame->current_storage=o->storage;
   new_frame->context.parent=0;
-  fp = new_frame;
+  Pike_fp = new_frame;
 
   add_ref(new_frame->current_object);
   add_ref(new_frame->context.prog);
@@ -1272,13 +1261,13 @@ int apply_low_safe_and_stupid(struct object *o, INT32 offset)
   {
     ret=1;
   }else{
-    struct svalue **save_mark_sp=mark_sp;
+    struct svalue **save_mark_sp=Pike_interpreter.mark_sp;
     int tmp=eval_instruction(o->prog->program + offset);
-    mark_sp=save_mark_sp;
+    Pike_interpreter.mark_sp=save_mark_sp;
     if(tmp!=-1) mega_apply(APPLY_STACK, tmp, 0,0);
     
 #ifdef PIKE_DEBUG
-    if(sp<evaluator_stack)
+    if(Pike_sp<Pike_interpreter.evaluator_stack)
       fatal("Stack error (simple).\n");
 #endif
     ret=0;
@@ -1294,7 +1283,7 @@ void safe_apply_low(struct object *o,int fun,int args)
 {
   JMP_BUF recovery;
 
-  sp-=args;
+  Pike_sp-=args;
   free_svalue(& throw_value);
   throw_value.type=T_INT;
   if(SETJMP(recovery))
@@ -1308,7 +1297,7 @@ void safe_apply_low(struct object *o,int fun,int args)
 	/* We silently ignore errors if we are already describing one.. */
 	inside=1;
 	SET_ONERROR(tmp,exit_on_error,"Error in handle_error in master object!");
-	assign_svalue_no_free(sp++, & throw_value);
+	assign_svalue_no_free(Pike_sp++, & throw_value);
 	APPLY_MASTER("handle_error", 1);
 	pop_stack();
 	UNSET_ONERROR(tmp);
@@ -1316,22 +1305,22 @@ void safe_apply_low(struct object *o,int fun,int args)
       }
     }
       
-    sp->u.integer = 0;
-    sp->subtype=NUMBER_NUMBER;
-    sp->type = T_INT;
-    sp++;
+    Pike_sp->u.integer = 0;
+    Pike_sp->subtype=NUMBER_NUMBER;
+    Pike_sp->type = T_INT;
+    Pike_sp++;
   }else{
-    INT32 expected_stack = sp - evaluator_stack + 1;
-    sp+=args;
+    INT32 expected_stack = Pike_sp - Pike_interpreter.evaluator_stack + 1;
+    Pike_sp+=args;
     apply_low(o,fun,args);
-    if(sp - evaluator_stack > expected_stack)
-      pop_n_elems(sp - evaluator_stack - expected_stack);
-    if(sp - evaluator_stack < expected_stack)
+    if(Pike_sp - Pike_interpreter.evaluator_stack > expected_stack)
+      pop_n_elems(Pike_sp - Pike_interpreter.evaluator_stack - expected_stack);
+    if(Pike_sp - Pike_interpreter.evaluator_stack < expected_stack)
     {
-      sp->u.integer = 0;
-      sp->subtype=NUMBER_NUMBER;
-      sp->type = T_INT;
-      sp++;
+      Pike_sp->u.integer = 0;
+      Pike_sp->subtype=NUMBER_NUMBER;
+      Pike_sp->type = T_INT;
+      Pike_sp++;
     }
   }
   UNSETJMP(recovery);
@@ -1353,7 +1342,7 @@ void apply_lfun(struct object *o, int fun, int args)
     fatal("Apply lfun on illegal value!\n");
 #endif
   if(!o->prog)
-    PIKE_ERROR("destructed object", "Apply on destructed object.\n", sp, args);
+    PIKE_ERROR("destructed object", "Apply on destructed object.\n", Pike_sp, args);
 
   apply_low(o, (int)FIND_LFUN(o->prog,fun), args);
 }
@@ -1378,19 +1367,19 @@ void apply_svalue(struct svalue *s, INT32 args)
     pop_n_elems(args);
     push_int(0);
   }else{
-    INT32 expected_stack=sp-args+1 - evaluator_stack;
+    INT32 expected_stack=Pike_sp-args+1 - Pike_interpreter.evaluator_stack;
 
     strict_apply_svalue(s,args);
-    if(sp > (expected_stack + evaluator_stack))
+    if(Pike_sp > (expected_stack + Pike_interpreter.evaluator_stack))
     {
-      pop_n_elems(sp-(expected_stack + evaluator_stack));
+      pop_n_elems(Pike_sp-(expected_stack + Pike_interpreter.evaluator_stack));
     }
-    else if(sp < (expected_stack + evaluator_stack))
+    else if(Pike_sp < (expected_stack + Pike_interpreter.evaluator_stack))
     {
       push_int(0);
     }
 #ifdef PIKE_DEBUG
-    if(sp < (expected_stack + evaluator_stack))
+    if(Pike_sp < (expected_stack + Pike_interpreter.evaluator_stack))
       fatal("Stack underflow!\n");
 #endif
   }
@@ -1404,21 +1393,21 @@ void slow_check_stack(void)
 
   debug_check_stack();
 
-  if(sp > &(evaluator_stack[stack_size]))
+  if(Pike_sp > &(Pike_interpreter.evaluator_stack[stack_size]))
     fatal("Svalue stack overflow. "
 	  "(%d entries on stack, stack_size is %d entries)\n",
-	  sp-evaluator_stack,stack_size);
+	  Pike_sp-Pike_interpreter.evaluator_stack,stack_size);
 
-  if(mark_sp > &(mark_stack[stack_size]))
+  if(Pike_interpreter.mark_sp > &(Pike_interpreter.mark_stack[stack_size]))
     fatal("Mark stack overflow.\n");
 
-  if(mark_sp < mark_stack)
+  if(Pike_interpreter.mark_sp < Pike_interpreter.mark_stack)
     fatal("Mark stack underflow.\n");
 
-  for(s=evaluator_stack;s<sp;s++) check_svalue(s);
+  for(s=Pike_interpreter.evaluator_stack;s<Pike_sp;s++) check_svalue(s);
 
-  s=evaluator_stack;
-  for(m=mark_stack;m<mark_sp;m++)
+  s=Pike_interpreter.evaluator_stack;
+  for(m=Pike_interpreter.mark_stack;m<Pike_interpreter.mark_sp;m++)
   {
     if(*m < s)
       fatal("Mark stack failure.\n");
@@ -1426,15 +1415,15 @@ void slow_check_stack(void)
     s=*m;
   }
 
-  if(s > &(evaluator_stack[stack_size]))
+  if(s > &(Pike_interpreter.evaluator_stack[stack_size]))
     fatal("Mark stack exceeds svalue stack\n");
 
-  for(f=fp;f;f=f->next)
+  for(f=Pike_fp;f;f=f->next)
   {
     if(f->locals)
     {
-      if(f->locals < evaluator_stack ||
-	f->locals > &(evaluator_stack[stack_size]))
+      if(f->locals < Pike_interpreter.evaluator_stack ||
+	f->locals > &(Pike_interpreter.evaluator_stack[stack_size]))
       fatal("Local variable pointer points to Finsp�ng.\n");
 
       if(f->args < 0 || f->args > stack_size)
@@ -1450,7 +1439,7 @@ void cleanup_interpret(void)
   int e;
 #endif
 
-  while(fp)
+  while(Pike_fp)
     POP_PIKE_FRAME();
 
 #ifdef PIKE_DEBUG
@@ -1466,25 +1455,25 @@ void cleanup_interpret(void)
   reset_evaluator();
 
 #ifdef USE_MMAP_FOR_STACK
-  if(!evaluator_stack_malloced)
+  if(!Pike_interpreter.evaluator_stack_malloced)
   {
-    munmap((char *)evaluator_stack, stack_size*sizeof(struct svalue));
-    evaluator_stack=0;
+    munmap((char *)Pike_interpreter.evaluator_stack, stack_size*sizeof(struct svalue));
+    Pike_interpreter.evaluator_stack=0;
   }
   if(!mark_stack_malloced)
   {
-    munmap((char *)mark_stack, stack_size*sizeof(struct svalue *));
-    mark_stack=0;
+    munmap((char *)Pike_interpreter.mark_stack, stack_size*sizeof(struct svalue *));
+    Pike_interpreter.mark_stack=0;
   }
 #endif
 
-  if(evaluator_stack) free((char *)evaluator_stack);
-  if(mark_stack) free((char *)mark_stack);
+  if(Pike_interpreter.evaluator_stack) free((char *)Pike_interpreter.evaluator_stack);
+  if(Pike_interpreter.mark_stack) free((char *)Pike_interpreter.mark_stack);
 
-  mark_stack=0;
-  evaluator_stack=0;
+  Pike_interpreter.mark_stack=0;
+  Pike_interpreter.evaluator_stack=0;
   mark_stack_malloced=0;
-  evaluator_stack_malloced=0;
+  Pike_interpreter.evaluator_stack_malloced=0;
 }
 
 void really_clean_up_interpret(void)
diff --git a/src/interpret.h b/src/interpret.h
index 81a0e33f6716ac206299c274c3b7fac995e0e8dd..669e3609fa8fc263f994c4c089b183d3ad8c4220 100644
--- a/src/interpret.h
+++ b/src/interpret.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: interpret.h,v 1.45 2000/07/07 00:21:48 hubbe Exp $
+ * $Id: interpret.h,v 1.46 2000/07/07 00:51:40 hubbe Exp $
  */
 #ifndef INTERPRET_H
 #define INTERPRET_H
@@ -24,7 +24,9 @@ struct Pike_interpreter {
   int evaluator_stack_malloced;
   int mark_stack_malloced;
   JMP_BUF *recoveries;
+#ifdef PIKE_THREADS
   struct object * thread_id;
+#endif
   char *stack_top;
   DO_IF_SECURITY(struct object *current_creds;)
 
@@ -246,7 +248,9 @@ extern struct Pike_interpreter Pike_interpreter;
 
 #define Pike_sp Pike_interpreter.stack_pointer
 #define Pike_fp Pike_interpreter.frame_pointer
-
+#ifdef PIKE_THREADS
+#define Pike_thread_id Pike_interpreter.thread_id
+#endif
 
 #ifndef NO_PIKE_SHORTHAND
 
diff --git a/src/interpreter.h b/src/interpreter.h
index eeaa672761fb449e86f60f6034f4e1a26c19ee46..ec9d81c891f7bcfb57fd251c9cebf788f376917f 100644
--- a/src/interpreter.h
+++ b/src/interpreter.h
@@ -37,8 +37,11 @@ static int eval_instruction(unsigned char *pc)
     {
 #ifdef _REENTRANT
       CHECK_INTERPRETER_LOCK();
-      if(d_flag>1 && thread_for_id(th_self()) != thread_id)
-        fatal("thread_for_id() (or thread_id) failed in interpreter.h! %p != %p\n",thread_for_id(th_self()),thread_id);
+      if(OBJ2THREAD(Pike_interpreter.thread_id)->state.thread_id != Pike_interpreter.thread_id)
+	fatal("Arglebargle glop glyf, thread swap problem!\n");
+
+      if(d_flag>1 && thread_for_id(th_self()) != Pike_interpreter.thread_id)
+        fatal("thread_for_id() (or Pike_interpreter.thread_id) failed in interpreter.h! %p != %p\n",thread_for_id(th_self()),Pike_interpreter.thread_id);
 #endif
 
       Pike_sp[0].type=99; /* an invalid type */
@@ -46,25 +49,32 @@ static int eval_instruction(unsigned char *pc)
       Pike_sp[2].type=99;
       Pike_sp[3].type=99;
       
-      if(Pike_sp<Pike_evaluator_stack || Pike_mark_sp < Pike_mark_stack || Pike_fp->locals>Pike_sp)
-	fatal("Stack error (generic) sp=%p/%p mark_sp=%p/%p locals=%p.\n",
+      if(Pike_sp<Pike_interpreter.evaluator_stack || Pike_interpreter.mark_sp < Pike_interpreter.mark_stack || Pike_fp->locals>Pike_sp)
+	fatal("Stack error (generic) Pike_sp=%p/%p Pike_interpreter.mark_sp=%p/%p locals=%p.\n",
 	      Pike_sp,
-	      Pike_evaluator_stack,
-	      Pike_mark_sp,
-	      Pike_mark_stack,
+	      Pike_interpreter.evaluator_stack,
+	      Pike_interpreter.mark_sp,
+	      Pike_interpreter.mark_stack,
 	      Pike_fp->locals);
       
-      if(Pike_sp > Pike_evaluator_stack+Pike_stack_size)
-	fatal("Stack error (overflow).\n");
+      if(Pike_interpreter.mark_sp > Pike_interpreter.mark_stack+Pike_stack_size)
+	fatal("Mark Stack error (overflow).\n");
+
+
+      if(Pike_interpreter.mark_sp < Pike_interpreter.mark_stack)
+	fatal("Mark Stack error (underflow).\n");
+
+      if(Pike_sp > Pike_interpreter.evaluator_stack+Pike_stack_size)
+	fatal("stack error (overflow).\n");
       
       if(/* Pike_fp->fun>=0 && */ Pike_fp->current_object->prog &&
 	 Pike_fp->locals+Pike_fp->num_locals > Pike_sp)
 	fatal("Stack error (stupid!).\n");
 
-      if(recoveries && Pike_sp-Pike_evaluator_stack < recoveries->Pike_sp)
+      if(Pike_interpreter.recoveries && Pike_sp-Pike_interpreter.evaluator_stack < Pike_interpreter.recoveries->stack_pointer)
 	fatal("Stack error (underflow).\n");
 
-      if(Pike_mark_sp > Pike_mark_stack && Pike_mark_sp[-1] > Pike_sp)
+      if(Pike_interpreter.mark_sp > Pike_interpreter.mark_stack && Pike_interpreter.mark_sp[-1] > Pike_sp)
 	fatal("Stack error (underflow?)\n");
       
       if(d_flag > 9) do_debug();
@@ -79,10 +89,10 @@ static int eval_instruction(unsigned char *pc)
       add_ref(Pike_fp->context.prog);
       backlog[backlogp].instruction=instr;
       backlog[backlogp].pc=pc;
-      backlog[backlogp].stack = sp - evaluator_stack;
-      backlog[backlogp].mark_stack = mark_sp - mark_stack;
+      backlog[backlogp].stack = Pike_sp - Pike_interpreter.evaluator_stack;
+      backlog[backlogp].mark_stack = Pike_interpreter.mark_sp - Pike_interpreter.mark_stack;
 #ifdef _REENTRANT
-      backlog[backlogp].thread_id=thread_id;
+      backlog[backlogp].thread_id=Pike_interpreter.thread_id;
 #endif
 
       debug_malloc_touch(Pike_fp->current_object);
@@ -114,8 +124,8 @@ static int eval_instruction(unsigned char *pc)
 	      file,(long)linep,
 	      (long)(pc-Pike_fp->context.prog->program-1),
 	      get_f_name(instr + F_OFFSET),
-	      (long)(Pike_sp-Pike_evaluator_stack),
-	      (long)(Pike_mark_sp-Pike_mark_stack));
+	      (long)(Pike_sp-Pike_interpreter.evaluator_stack),
+	      (long)(Pike_interpreter.mark_sp-Pike_interpreter.mark_stack));
     }
 
     if(instr + F_OFFSET < F_MAX_OPCODE) 
diff --git a/src/language.yacc b/src/language.yacc
index cf3f91ddb7dc07d55adf78ebba53edbb0146180a..155ba32da38e8056c6d3ae44cf43f9373faa45a9 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -109,7 +109,7 @@
 /* This is the grammar definition of Pike. */
 
 #include "global.h"
-RCSID("$Id: language.yacc,v 1.194 2000/06/29 00:08:15 hubbe Exp $");
+RCSID("$Id: language.yacc,v 1.195 2000/07/07 00:53:21 hubbe Exp $");
 #ifdef HAVE_MEMORY_H
 #include <memory.h>
 #endif
@@ -372,13 +372,13 @@ low_program_ref: string_constant
       SAFE_APPLY_MASTER("handle_inherit", 2);
     }
 
-    if(sp[-1].type != T_PROGRAM)
+    if(Pike_sp[-1].type != T_PROGRAM)
       my_yyerror("Couldn't cast string \"%s\" to program",
 		 $1->u.sval.u.string->str);
     free_node($1);
-    $$=mksvaluenode(sp-1);
+    $$=mksvaluenode(Pike_sp-1);
     if($$->name) free_string($$->name);
-    add_ref( $$->name=sp[-2].u.string );
+    add_ref( $$->name=Pike_sp[-2].u.string );
     pop_stack();
   }
   | idents
@@ -408,7 +408,7 @@ inheritance: modifiers TOK_INHERIT low_program_ref optional_rename_inherit ';'
     }
     if(!(Pike_compiler->new_program->flags & PROGRAM_PASS_1_DONE))
     {
-      struct pike_string *s=sp[-1].u.string;
+      struct pike_string *s=Pike_sp[-1].u.string;
       if($4) s=$4->u.sval.u.string;
       compiler_do_inherit($3,$1,s);
     }
@@ -443,7 +443,7 @@ import: TOK_IMPORT idents ';'
   {
     resolv_constant($2);
     free_node($2);
-    use_module(sp-1);
+    use_module(Pike_sp-1);
     pop_stack();
   }
   | TOK_IMPORT string ';'
@@ -457,7 +457,7 @@ import: TOK_IMPORT idents ';'
     } else {
       SAFE_APPLY_MASTER("handle_import", 2);
     }
-    use_module(sp-1);
+    use_module(Pike_sp-1);
     pop_stack();
   }
   | TOK_IMPORT error ';' { yyerrok; }
@@ -498,7 +498,7 @@ constant_name: TOK_IDENTIFIER '=' safe_expr0
 	  yyerror("Error in constant definition.");
 	}else{
 	  pop_n_elems(tmp-1);
-	  add_constant($1->u.sval.u.string, sp-1,
+	  add_constant($1->u.sval.u.string, Pike_sp-1,
 		       current_modifiers & ~ID_EXTERN);
 	  pop_stack();
 	}
@@ -708,7 +708,7 @@ def: modifiers type_or_error optional_stars TOK_IDENTIFIER push_compiler_frame0
 		  check_node_hash($<n>9)->u.sval.u.string,
 		  $1);
 #ifdef PIKE_DEBUG
-      if(recoveries && sp-evaluator_stack < recoveries->sp)
+      if(Pike_interpreter.recoveries && Pike_sp-Pike_interpreter.evaluator_stack < Pike_interpreter.recoveries->stack_pointer)
 	fatal("Stack error (underflow)\n");
 
       if(Pike_compiler->compiler_pass == 1 && f!=Pike_compiler->compiler_frame->current_function_number)
@@ -1000,15 +1000,15 @@ identifier_type: idents
   { 
     resolv_constant($1);
 
-    if (sp[-1].type == T_TYPE) {
+    if (Pike_sp[-1].type == T_TYPE) {
       /* "typedef" */
-      push_finished_type(sp[-1].u.string);
+      push_finished_type(Pike_sp[-1].u.string);
     } else {
       /* object type */
       struct program *p = NULL;
 
-      if (sp[-1].type == T_OBJECT) {
-	if(!sp[-1].u.object->prog)
+      if (Pike_sp[-1].type == T_OBJECT) {
+	if(!Pike_sp[-1].u.object->prog)
 	{
 	  pop_stack();
 	  push_int(0);
@@ -1019,9 +1019,9 @@ identifier_type: idents
 	}
       }
 
-      switch(sp[-1].type) {
+      switch(Pike_sp[-1].type) {
       case T_FUNCTION:
-	if((p = program_from_function(sp-1)))
+	if((p = program_from_function(Pike_sp-1)))
 	  break;
       
       default:
@@ -1032,7 +1032,7 @@ identifier_type: idents
 	break;
 	
       case T_PROGRAM:
-	p = sp[-1].u.program;
+	p = Pike_sp[-1].u.program;
 	break;
       }
 
@@ -1137,19 +1137,19 @@ opt_object_type:  /* Empty */ { push_type_int(0); push_type(0); }
   | '(' program_ref ')'
   {
     /* NOTE: On entry, there are two items on the stack:
-     *   sp-2:	Name of the program reference (string).
-     *   sp-1:	The resolved program (program|function|zero).
+     *   Pike_sp-2:	Name of the program reference (string).
+     *   Pike_sp-1:	The resolved program (program|function|zero).
      */
-    struct program *p=program_from_svalue(sp-1);
+    struct program *p=program_from_svalue(Pike_sp-1);
     if(p)
     {
       push_type_int(p->id);
     }else{
       if (Pike_compiler->compiler_pass!=1) {
-	if ((sp[-2].type == T_STRING) && (sp[-2].u.string->len > 0) &&
-	    (sp[-2].u.string->len < 256)) {
+	if ((Pike_sp[-2].type == T_STRING) && (Pike_sp[-2].u.string->len > 0) &&
+	    (Pike_sp[-2].u.string->len < 256)) {
 	  my_yyerror("Not a valid program specifier: '%s'",
-		     sp[-2].u.string->str);
+		     Pike_sp[-2].u.string->str);
 	} else {
 	  yyerror("Not a valid program specifier.");
 	}
@@ -2290,10 +2290,10 @@ idents2: idents
 	funp.id_flags |= ID_HIDDEN;
 	i = -1;
 	for(d = 0; d < (int)Pike_compiler->new_program->num_identifier_references; d++) {
-	  struct reference *fp;
-	  fp = Pike_compiler->new_program->identifier_references + d;
+	  struct reference *refp;
+	  refp = Pike_compiler->new_program->identifier_references + d;
 
-	  if(!MEMCMP((char *)fp,(char *)&funp,sizeof funp)) {
+	  if(!MEMCMP((char *)refp,(char *)&funp,sizeof funp)) {
 	    i = d;
 	    break;
 	  }
@@ -2346,7 +2346,7 @@ idents: low_idents
     } else {
       SAFE_APPLY_MASTER("handle_import", 2);
     }
-    tmp=mkconstantsvaluenode(sp-1);
+    tmp=mkconstantsvaluenode(Pike_sp-1);
     pop_stack();
     $$=index_node(tmp, ".", $2->u.sval.u.string);
     free_node(tmp);
@@ -2366,9 +2366,8 @@ inherit_specifier: TOK_IDENTIFIER TOK_COLON_COLON
 
     for (inherit_depth = -1; inherit_depth < compilation_depth;
 	 inherit_depth++, inherit_state = inherit_state->previous) {
-      if (e = find_inherit(inherit_state->new_program, $1->u.sval.u.string)) {
+      if ((e = find_inherit(inherit_state->new_program, $1->u.sval.u.string)))
 	break;
-      }
     }
     if (!e) {
       my_yyerror("No such inherit %s.", $1->u.sval.u.string->str);
@@ -2835,7 +2834,7 @@ void yyerror(char *str)
   extern int cumulative_parse_error;
 
 #ifdef PIKE_DEBUG
-  if(recoveries && sp-evaluator_stack < recoveries->sp)
+  if(Pike_interpreter.recoveries && Pike_sp-Pike_interpreter.evaluator_stack < Pike_interpreter.recoveries->stack_pointer)
     fatal("Stack error (underflow)\n");
 #endif