This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
runops becomes a funtion pointer and sv_bless3 created
[perl5.git] / perl.h
diff --git a/perl.h b/perl.h
index 64d47ac..70d9a63 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -62,6 +62,7 @@ register struct op *op asm(stringify(OP_IN_REGISTER));
 
 #define NOOP (void)0
 
+#define WITH_THR(s) do { dTHR; s; } while (0)
 #ifdef USE_THREADS
 #ifdef FAKE_THREADS
 #include "fakethr.h"
@@ -69,6 +70,7 @@ register struct op *op asm(stringify(OP_IN_REGISTER));
 #include <pthread.h>
 typedef pthread_mutex_t perl_mutex;
 typedef pthread_cond_t perl_cond;
+typedef pthread_key_t perl_key;
 #endif /* FAKE_THREADS */
 #endif /* USE_THREADS */
 
@@ -859,9 +861,9 @@ typedef pthread_cond_t perl_cond;
 
 #endif
 
-/* Digital UNIX defines CONTEXT when pthreads is in use */
-#ifdef CONTEXT
-#  undef CONTEXT
+/* Digital UNIX defines a typedef CONTEXT when pthreads is in use */ 
+#if defined(__osf__)
+#  define CONTEXT PERL_CONTEXT
 #endif
 
 typedef MEM_SIZE STRLEN;
@@ -1312,8 +1314,10 @@ typedef Sighandler_t Sigsave_t;
 #  endif
 # endif
 # define PAD_SV(po) pad_sv(po)
+# define RUNOPS_DEFAULT runops_debug
 #else
 # define PAD_SV(po) curpad[po]
+# define RUNOPS_DEFAULT runops_standard
 #endif
 
 /****************/
@@ -1323,7 +1327,7 @@ typedef Sighandler_t Sigsave_t;
 /* global state */
 EXT PerlInterpreter *  curinterp;      /* currently running interpreter */
 #ifdef USE_THREADS
-EXT pthread_key_t      thr_key;        /* For per-thread struct thread ptr */
+EXT perl_key           thr_key;        /* For per-thread struct thread ptr */
 EXT perl_mutex         sv_mutex;       /* Mutex for allocating SVs in sv.c */
 EXT perl_mutex         malloc_mutex;   /* Mutex for malloc */
 EXT perl_mutex         eval_mutex;     /* Mutex for doeval */
@@ -1332,6 +1336,9 @@ EXT struct thread *       eval_owner;     /* Owner thread for doeval */
 EXT int                        nthreads;       /* Number of threads currently */
 EXT perl_mutex         nthreads_mutex; /* Mutex for nthreads */
 EXT perl_cond          nthreads_cond;  /* Condition variable for nthreads */
+#ifdef FAKE_THREADS
+EXT struct thread *    thr;            /* Currently executing (fake) thread */
+#endif
 #endif /* USE_THREADS */
 
 /* VMS doesn't use environ array and NeXT has problems with crt0.o globals */
@@ -1387,6 +1394,7 @@ EXT OP *  opsave;         /* save current op register across longjmps */
 #else
 EXT OP *       op;             /* current op--when not in a global register */
 #endif
+EXT int                (*runops) _((void)) INIT(RUNOPS_DEFAULT);
 EXT I32 *      scopestack;     /* blocks we've entered */
 EXT I32                scopestack_ix;
 EXT I32                scopestack_max;
@@ -1846,7 +1854,7 @@ IEXT HV * Idebstash;      /* symbol table for perldb package */
 IEXT SV *      Icurstname;     /* name of current package */
 IEXT AV *      Ibeginav;       /* names of BEGIN subroutines */
 IEXT AV *      Iendav;         /* names of END subroutines */
-IEXT AV *      Irestartav;     /* names of RESTART subroutines */
+IEXT AV *      Iinitav;        /* names of INIT subroutines */
 IEXT HV *      Istrtab;        /* shared string table */
 
 /* memory management */
@@ -1904,9 +1912,11 @@ IEXT I32 Irunlevel;
 /* stack stuff */
 IEXT AV *      Icurstack;              /* THE STACK */
 IEXT AV *      Imainstack;     /* the stack when nothing funny is happening */
+#if 0
 IEXT SV **     Imystack_base;  /* stack->array_ary */
 IEXT SV **     Imystack_sp;    /* stack pointer now */
 IEXT SV **     Imystack_max;   /* stack->array_ary + stack->array_max */
+#endif
 
 /* format accumulators */
 IEXT SV *      Iformtarget;