Changes to perlfaq8 "How do I find out if I'm running interactively
[p5sagit/p5-mst-13.2.git] / perl.h
diff --git a/perl.h b/perl.h
index 53a2291..5145e10 100644 (file)
--- a/perl.h
+++ b/perl.h
 #    define MULTIPLICITY
 #  endif
 #  define tTHX PerlInterpreter*
-#  define pTHX register tTHX my_perl PERL_UNUSED_DECL
+#  define pTHX  register tTHX my_perl PERL_UNUSED_DECL
 #  define aTHX my_perl
 #  ifdef PERL_GLOBAL_STRUCT
 #    define dTHXa(a)   dVAR; pTHX = (tTHX)a
 #define CALLREG_INTUIT_STRING CALL_FPTR(PL_regint_string)
 #define CALLREGFREE CALL_FPTR(PL_regfree)
 
-/* XXX The PERL_UNUSED_DECL suffix is unfortunately rather inflexible:
- * it assumes that in all compilers the way to suppress an "unused"
- * warning is to have a suffix.  In some compilers that might be a
- * a compiler pragma, e.g. #pragma unused(varname). */
+/*
+ * Because of backward compatibility reasons the PERL_UNUSED_DECL
+ * cannot be changed from postfix to PERL_UNUSED_DECL(x).  Sigh.
+ *
+ * Note that there are C compilers such as MetroWerks CodeWarrior
+ * which do not have an "inlined" way (like the gcc __attribute__) of
+ * marking unused variables (they need e.g. a #pragma) and therefore
+ * cpp macros like PERL_UNUSED_DECL cannot work for this purpose, even
+ * if it were PERL_UNUSED_DECL(x), which it cannot be (see above).
+ *
+ */
 
 #if defined(__SYMBIAN32__) && defined(__GNUC__)
 #  ifdef __cplusplus
  * but we cannot quite get rid of, such as "ax" in PPCODE+noargs xsubs
  */
 #ifndef PERL_UNUSED_ARG
-#  ifdef lint
+#  if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */
 #    include <note.h>
 #    define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x))
 #  else
@@ -838,7 +845,7 @@ int usleep(unsigned int);
 #  include "embed.h"
 #  ifndef PERL_MAD
 #    undef op_getmad
-#    define op_getmad(arg,pegop,slot) /**/
+#    define op_getmad(arg,pegop,slot) /*EMPTY*/
 #  endif
 #endif
 
@@ -2327,7 +2334,7 @@ typedef struct clone_params CLONE_PARAMS;
 #   include "embed.h"
 #  ifndef PERL_MAD
 #    undef op_getmad
-#    define op_getmad(arg,pegop,slot) /**/
+#    define op_getmad(arg,pegop,slot) /*EMPTY*/
 #  endif
 #   define ISHISH "vms"
 #endif
@@ -2361,7 +2368,7 @@ typedef struct clone_params CLONE_PARAMS;
 #   include "embed.h"
 #  ifndef PERL_MAD
 #    undef op_getmad
-#    define op_getmad(arg,pegop,slot) /**/
+#    define op_getmad(arg,pegop,slot) /*EMPTY*/
 #  endif
 #   define ISHISH "symbian"
 #endif
@@ -3105,27 +3112,14 @@ struct nexttoken {
 #include "cv.h"
 #include "opnames.h"
 #include "op.h"
+#include "hv.h"
 #include "cop.h"
 #include "av.h"
-#include "hv.h"
 #include "mg.h"
 #include "scope.h"
 #include "warnings.h"
 #include "utf8.h"
 
-/* Current curly descriptor */
-typedef struct curcur CURCUR;
-struct curcur {
-    int                parenfloor;     /* how far back to strip paren data */
-    int                cur;            /* how many instances of scan we've matched */
-    int                min;            /* the minimal number of scans to match */
-    int                max;            /* the maximal number of scans to match */
-    int                minmod;         /* whether to work our way up or down */
-    regnode *  scan;           /* the thing to match */
-    regnode *  next;           /* what has to match after it */
-    char *     lastloc;        /* where we started matching this scan */
-    CURCUR *   oldcc;          /* current curly before we started this one */
-};
 
 typedef struct _sublex_info SUBLEXINFO;
 struct _sublex_info {
@@ -3141,8 +3135,6 @@ typedef struct magic_state MGS;   /* struct magic_state defined in mg.c */
 struct scan_data_t;            /* Used in S_* functions in regcomp.c */
 struct regnode_charclass_class;        /* Used in S_* functions in regcomp.c */
 
-typedef I32 CHECKPOINT;
-
 /* Keep next first in this structure, because sv_free_arenas take
    advantage of this to share code between the pte arenas and the SV
    body arenas  */
@@ -3509,6 +3501,8 @@ Gid_t getegid (void);
 #define PERL_MAGIC_envelem       'e' /* %ENV hash element */
 #define PERL_MAGIC_fm            'f' /* Formline ('compiled' format) */
 #define PERL_MAGIC_regex_global          'g' /* m//g target / study()ed string */
+#define PERL_MAGIC_hints         'H' /* %^H hash */
+#define PERL_MAGIC_hintselem     'h' /* %^H hash element */
 #define PERL_MAGIC_isa           'I' /* @ISA array */
 #define PERL_MAGIC_isaelem       'i' /* @ISA array element */
 #define PERL_MAGIC_nkeys         'k' /* scalar(keys()) lvalue */
@@ -4161,7 +4155,8 @@ enum {            /* pass one of these to get_vtbl */
     want_vtbl_backref,
     want_vtbl_utf8,
     want_vtbl_symtab,
-    want_vtbl_arylen_p
+    want_vtbl_arylen_p,
+    want_vtbl_hintselem
 };
 
                                /* Note: the lowest 8 bits are reserved for
@@ -4197,7 +4192,7 @@ enum {            /* pass one of these to get_vtbl */
 #define HINT_ASSERTING          0x01000000
 #define HINT_ASSERTIONSSEEN     0x02000000
 
-/* The following are stored in $sort::hints, not in PL_hints */
+/* The following are stored in $^H{sort}, not in PL_hints */
 #define HINT_SORT_SORT_BITS    0x000000FF /* allow 256 different ones */
 #define HINT_SORT_QUICKSORT    0x00000001
 #define HINT_SORT_MERGESORT    0x00000002
@@ -4376,7 +4371,7 @@ END_EXTERN_C
 #  include "embed.h"
 #  ifndef PERL_MAD
 #    undef op_getmad
-#    define op_getmad(arg,pegop,slot) /**/
+#    define op_getmad(arg,pegop,slot) /*EMPTY*/
 #  endif
 #endif
 
@@ -4441,6 +4436,7 @@ MGVTBL_SET(
     NULL
 );
 
+/* For now, hints magic will also use vtbl_sig, because it is all NULL  */
 MGVTBL_SET(
     PL_vtbl_sig,
     NULL,
@@ -4793,6 +4789,18 @@ MGVTBL_SET(
 );
 #endif
 
+MGVTBL_SET(
+    PL_vtbl_hintselem,
+    NULL,
+    MEMBER_TO_FPTR(Perl_magic_sethint),
+    NULL,
+    MEMBER_TO_FPTR(Perl_magic_clearhint),
+    NULL,
+    NULL,
+    NULL,
+    NULL
+);
+
 
 enum {
   fallback_amg,        abs_amg,
@@ -4985,7 +4993,7 @@ typedef struct am_table_short AMTS;
 #define SET_NUMERIC_LOCAL() \
        set_numeric_local();
 
-#define IN_LOCALE_RUNTIME      (PL_curcop->op_private & HINT_LOCALE)
+#define IN_LOCALE_RUNTIME      (CopHINTS_get(PL_curcop) & HINT_LOCALE)
 #define IN_LOCALE_COMPILETIME  (PL_hints & HINT_LOCALE)
 
 #define IN_LOCALE \
@@ -5075,7 +5083,7 @@ typedef struct am_table_short AMTS;
 #   define Strtoul(s, e, b)    strchr((s), '-') ? ULONG_MAX : (unsigned long)strtol((s), (e), (b))
 #endif
 #ifndef Atoul
-#   define Atoul(s)    Strtoul(s, (char **)NULL, 10)
+#   define Atoul(s)    Strtoul(s, NULL, 10)
 #endif
 
 
@@ -5436,6 +5444,7 @@ extern void moncontrol(int);
 #define PERL_UNICODE_ARGV_FLAG                 0x0020
 #define PERL_UNICODE_LOCALE_FLAG               0x0040
 #define PERL_UNICODE_WIDESYSCALLS_FLAG         0x0080 /* for Sarathy */
+#define PERL_UNICODE_UTF8CACHEASSERT_FLAG      0x0100
 
 #define PERL_UNICODE_STD_FLAG          \
        (PERL_UNICODE_STDIN_FLAG        | \
@@ -5451,7 +5460,7 @@ extern void moncontrol(int);
         PERL_UNICODE_INOUT_FLAG        | \
         PERL_UNICODE_LOCALE_FLAG)
 
-#define PERL_UNICODE_ALL_FLAGS                 0x00ff
+#define PERL_UNICODE_ALL_FLAGS                 0x01ff
 
 #define PERL_UNICODE_STDIN                     'I'
 #define PERL_UNICODE_STDOUT                    'O'
@@ -5463,6 +5472,7 @@ extern void moncontrol(int);
 #define PERL_UNICODE_ARGV                      'A'
 #define PERL_UNICODE_LOCALE                    'L'
 #define PERL_UNICODE_WIDESYSCALLS              'W'
+#define PERL_UNICODE_UTF8CACHEASSERT           'a'
 
 #define PERL_SIGNALS_UNSAFE_FLAG       0x0001