perl 5.003_01: perl.h
Perl 5 Porters [Fri, 26 Jul 1996 20:42:41 +0000 (20:42 +0000)]
Update NeXT support
Make HIDEMYMALLOC the default
Add home-grown calloc() to MYMALLOC #defines
Drop long long support under UTS
Add new distinct GV type
Add Plan9 support
Use variable BIN_SH to find shell
Allow redirection of output usually sent to stderr, so it can be
  handled separately from normal output
Don't log memory allocations until we've got an interpreter set up
Don't doubly define DEBUGGING_MSTATS
Add globals and macros for improved signal handling, duplicate "my",
  strict untie, and debugger updates
Rename some globals to avoid collisions with system headers

perl.h

diff --git a/perl.h b/perl.h
index bfb9210..60b11f1 100644 (file)
--- a/perl.h
+++ b/perl.h
 #endif
 
 #include <stdio.h>
+
 #ifdef USE_NEXT_CTYPE
+
+#if NX_CURRENT_COMPILER_RELEASE >= 400
+#include <objc/NXCType.h>
+#else /*  NX_CURRENT_COMPILER_RELEASE < 400 */
 #include <appkit/NXCType.h>
-#else
+#endif /*  NX_CURRENT_COMPILER_RELEASE >= 400 */
+
+#else /* !USE_NEXT_CTYPE */
 #include <ctype.h>
-#endif
+#endif /* USE_NEXT_CTYPE */
 
 #ifdef I_LOCALE
 #include <locale.h>
    proto.h instead.  I guess.  The patch had no explanation.
 */
 #ifdef MYMALLOC
-#   ifdef HIDEMYMALLOC
+#   ifndef DONT_HIDEMYMALLOC
 #      define malloc Mymalloc
 #      define realloc Myremalloc
 #      define free Myfree
+#      define calloc Mycalloc
 #   endif
 #   define safemalloc malloc
 #   define saferealloc realloc
 #   define safefree free
+#   define safecalloc calloc
 #endif
 
 #define MEM_SIZE Size_t
 #   define SLOPPYDIVIDE
 #endif
 
-#if defined(cray) || defined(convex) || defined (uts) || BYTEORDER > 0xffff
+#if defined(cray) || defined(convex) || BYTEORDER > 0xffff
 #   define HAS_QUAD
 #endif
 
 #   ifdef cray
 #      define Quad_t int
 #   else
-#      if defined(convex) || defined (uts)
+#      if defined(convex)
 #          define Quad_t long long
 #      else
 #          define Quad_t long
@@ -542,7 +551,7 @@ typedef struct hv HV;
 typedef struct cv CV;
 typedef struct regexp REGEXP;
 typedef struct gp GP;
-typedef struct sv GV;
+typedef struct gv GV;
 typedef struct io IO;
 typedef struct context CONTEXT;
 typedef struct block BLOCK;
@@ -581,10 +590,18 @@ typedef I32 (*filter_t) _((int, SV *, int));
 # if defined(VMS)
 #   include "vmsish.h"
 # else
-#   include "unixish.h"
+#   if defined(PLAN9)
+#     include "./plan9/plan9ish.h"
+#   else
+#     include "unixish.h"
+#   endif
 # endif
 #endif
 
+#ifndef SH_PATH                        /* May be a variable. */
+#   define SH_PATH BIN_SH
+#endif
+
 #ifndef HAS_PAUSE
 #define pause() sleep((32767<<16)+32767)
 #endif
@@ -730,6 +747,9 @@ Gid_t getegid _((void));
 #endif
 
 #ifdef DEBUGGING
+#ifndef Perl_debug_log
+#define Perl_debug_log stderr
+#endif
 #define YYDEBUG 1
 #define DEB(a)                         a
 #define DEBUG(a)   if (debug)          a
@@ -740,7 +760,7 @@ Gid_t getegid _((void));
 #define DEBUG_o(a) if (debug & 16)     a
 #define DEBUG_c(a) if (debug & 32)     a
 #define DEBUG_P(a) if (debug & 64)     a
-#define DEBUG_m(a) if (debug & 128)    a
+#define DEBUG_m(a) if (curinterp && debug & 128)       a
 #define DEBUG_f(a) if (debug & 256)    a
 #define DEBUG_r(a) if (debug & 512)    a
 #define DEBUG_x(a) if (debug & 1024)   a
@@ -854,7 +874,9 @@ I32 unlnk _((char*));
 #  define register
 # endif
 # ifdef MYMALLOC
-# define DEBUGGING_MSTATS
+#  ifndef DEBUGGING_MSTATS
+#   define DEBUGGING_MSTATS
+#  endif
 # endif
 # define PAD_SV(po) pad_sv(po)
 #else
@@ -867,9 +889,18 @@ I32 unlnk _((char*));
 
 /* global state */
 EXT PerlInterpreter *  curinterp;      /* currently running interpreter */
-#ifndef VMS  /* VMS doesn't use environ array */
+/* VMS doesn't use environ array and NeXT has problems with crt0.o globals */
+#if !defined(VMS) && !(defined(NeXT) && defined(__DYNAMIC__))
 extern char ** environ;        /* environment variables supplied via exec */
-#endif
+#else
+#  if defined(NeXT) && defined(__DYNAMIC__)
+
+#  include <mach-o/dyld.h>
+EXT char *** environ_pointer;
+#  define environ (*environ_pointer)
+#  endif
+#endif /* environ processing */
+
 EXT int                uid;            /* current real user id */
 EXT int                euid;           /* current effective user id */
 EXT int                gid;            /* current real group id */
@@ -989,9 +1020,13 @@ EXT SV            sv_yes;
 #ifdef DOINIT
 EXT char *sig_name[] = { SIG_NAME };
 EXT int   sig_num[]  = { SIG_NUM };
+EXT SV * psig_ptr[sizeof(sig_num)/sizeof(*sig_num)];
+EXT SV  * psig_name[sizeof(sig_num)/sizeof(*sig_num)];
 #else
 EXT char *sig_name[];
 EXT int   sig_num[];
+EXT SV  * psig_ptr[];
+EXT SV  * psig_name[];
 #endif
 
 #ifdef DOINIT
@@ -1148,6 +1183,7 @@ EXT CV *  compcv;         /* currently compiling subroutine */
 EXT AV *       comppad;        /* storage for lexically scoped temporaries */
 EXT AV *       comppad_name;   /* variable names for "my" variables */
 EXT I32                comppad_name_fill;/* last "introduced" variable offset */
+EXT I32                comppad_name_floor;/* start of vars in innermost block */
 EXT I32                min_intro_pending;/* start of vars to introduce */
 EXT I32                max_intro_pending;/* end of vars to introduce */
 EXT I32                padix;          /* max used index in current "register" pad */
@@ -1174,6 +1210,7 @@ EXT U32           hints;          /* various compilation flags */
 #define HINT_BLOCK_SCOPE       0x00000100
 #define HINT_STRICT_SUBS       0x00000200
 #define HINT_STRICT_VARS       0x00000400
+#define HINT_STRICT_UNTIE      0x00000800
 
 /**************************************************************************/
 /* This regexp stuff is global since it always happens within 1 expr eval */
@@ -1313,8 +1350,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 *      Ipad;           /* storage for lexically scoped temporaries */
-IEXT AV *      Ipadname;       /* variable names for "my" variables */
+IEXT HV *      Istrtab;        /* shared string table */
 
 /* memory management */
 IEXT SV **     Itmps_stack;
@@ -1360,6 +1396,7 @@ IEXT OP * Ieval_start;
 
 /* runtime control stuff */
 IEXT COP * VOL Icurcop IINIT(&compiling);
+IEXT COP *     Icurcopdb IINIT(NULL);
 IEXT line_t    Icopline IINIT(NOLINE);
 IEXT CONTEXT * Icxstack;
 IEXT I32       Icxstack_ix IINIT(-1);
@@ -1368,7 +1405,7 @@ IEXT Sigjmp_buf   Itop_env;
 IEXT I32       Irunlevel;
 
 /* stack stuff */
-IEXT AV *      Istack;         /* THE STACK */
+IEXT AV *      Icurstack;              /* THE STACK */
 IEXT AV *      Imainstack;     /* the stack when nothing funny is happening */
 IEXT SV **     Imystack_base;  /* stack->array_ary */
 IEXT SV **     Imystack_sp;    /* stack pointer now */
@@ -1458,8 +1495,10 @@ EXT MGVTBL vtbl_envelem =        {0,     magic_setenv,
                                        0,      magic_clearenv,
                                                        0};
 EXT MGVTBL vtbl_sig =  {0,     0,               0, 0, 0};
-EXT MGVTBL vtbl_sigelem =      {0,     magic_setsig,
-                                       0,      0,      0};
+EXT MGVTBL vtbl_sigelem =      {magic_getsig,
+                                       magic_setsig,
+                                       0,      magic_clearsig,
+                                                       0};
 EXT MGVTBL vtbl_pack = {0,     0,      0,      magic_wipepack,
                                                        0};
 EXT MGVTBL vtbl_packelem =     {magic_getpack,