Clean up and document API for hashes
[p5sagit/p5-mst-13.2.git] / perl.h
diff --git a/perl.h b/perl.h
index f91179a..5028b17 100644 (file)
--- a/perl.h
+++ b/perl.h
 #   endif
 #endif
 
-#define STATUS_POSIX           statusvalue
-#define STATUS_POSIX_SET(n)    (statusvalue = (n))
-
 #ifdef VMS
 #   define STATUS_NATIVE       statusvalue_vms
 #   define STATUS_NATIVE_EXPORT \
-       ((I32)statusvalue_vms == -1 ? 4 : statusvalue_vms)
+       ((I32)statusvalue_vms == -1 ? 44 : statusvalue_vms)
 #   define STATUS_NATIVE_SET(n)                                                \
        STMT_START {                                                    \
            statusvalue_vms = (n);                                      \
            else                                                        \
                statusvalue = (statusvalue_vms & STS$M_SEVERITY) << 8;  \
        } STMT_END
+#   define STATUS_POSIX        statusvalue
+#   ifdef VMSISH_STATUS
+#      define STATUS_CURRENT   (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
+#   else
+#      define STATUS_CURRENT   STATUS_POSIX
+#   endif
+#   define STATUS_POSIX_SET(n)                         \
+       STMT_START {                                    \
+           statusvalue = (n);                          \
+           if (statusvalue != -1) {                    \
+               statusvalue &= 0xFFFF;                  \
+               statusvalue_vms = statusvalue ? 44 : 1; \
+           }                                           \
+           else statusvalue_vms = -1;                  \
+       } STMT_END
 #   define STATUS_ALL_SUCCESS  (statusvalue = 0, statusvalue_vms = 1)
-#   define STATUS_ALL_FAILURE  (statusvalue = 1, statusvalue_vms = 4)
+#   define STATUS_ALL_FAILURE  (statusvalue = 1, statusvalue_vms = 44)
 #else
 #   define STATUS_NATIVE       STATUS_POSIX
 #   define STATUS_NATIVE_EXPORT        STATUS_POSIX
 #   define STATUS_NATIVE_SET   STATUS_POSIX_SET
-#   define STATUS_ALL_SUCCESS  STATUS_POSIX_SET(0)
-#   define STATUS_ALL_FAILURE  STATUS_POSIX_SET(1)
+#   define STATUS_POSIX                statusvalue
+#   define STATUS_POSIX_SET(n)         \
+       STMT_START {                    \
+           statusvalue = (n);          \
+           if (statusvalue != -1)      \
+               statusvalue &= 0xFFFF;  \
+       } STMT_END
+#   define STATUS_CURRENT STATUS_POSIX
+#   define STATUS_ALL_SUCCESS  (statusvalue = 0)
+#   define STATUS_ALL_FAILURE  (statusvalue = 1)
 #endif
 
 #ifdef I_SYS_IOCTL
 #   ifdef convex
 #      define Quad_t long long
 #   else
-#      if defined(VMS) && defined(__ALPHA)
-#          define Quad_t __int64
-#      else
-#          if BYTEORDER > 0xFFFF
-#              define Quad_t long
-#          endif
+#      if BYTEORDER > 0xFFFF
+#          define Quad_t long
 #      endif
 #   endif
 #endif
@@ -1712,9 +1728,9 @@ IEXT STRLEN       Iorslen;
 IEXT char *    Iofmt;                  /* $# */
 IEXT I32       Imaxsysfd IINIT(MAXSYSFD); /* top fd to pass to subprocesses */
 IEXT int       Imultiline;             /* $*--do strings hold >1 line? */
-IEXT U32       Istatusvalue;           /* $? */
+IEXT I32       Istatusvalue;           /* $? */
 #ifdef VMS
-IEXT U32       Istatusvalue_vms;       /* $^S */
+IEXT U32       Istatusvalue_vms;
 #endif
 
 IEXT struct stat Istatcache;           /* _ */
@@ -1811,6 +1827,7 @@ IEXT I32  Icxstack_ix IINIT(-1);
 IEXT I32       Icxstack_max IINIT(128);
 IEXT Sigjmp_buf        Itop_env;
 IEXT I32       Irunlevel;
+IEXT bool      Imustcatch;     /* doeval() must be caught locally */
 
 /* stack stuff */
 IEXT AV *      Icurstack;              /* THE STACK */