#undef NO_EMBED
#define NO_EMBED
#undef MULTIPLICITY
-#undef HIDEMYMALLOC
-#undef EMBEDMYMALLOC
#undef USE_STDIO
#define USE_STDIO
#endif /* PERL_FOR_X2P */
#include <ctype.h>
#endif /* USE_NEXT_CTYPE */
-#ifdef I_LOCALE
-#include <locale.h>
-#endif
-
#ifdef METHOD /* Defined by OSF/1 v3.0 by ctype.h */
#undef METHOD
#endif
+#ifdef I_LOCALE
+# include <locale.h>
+#endif
+
+#if !defined(NO_LOCALE) && defined(HAS_SETLOCALE)
+# define USE_LOCALE
+# if !defined(NO_LOCALE_COLLATE) && defined(LC_COLLATE) \
+ && defined(HAS_STRXFRM)
+# define USE_LOCALE_COLLATE
+# endif
+# if !defined(NO_LOCALE_CTYPE) && defined(LC_CTYPE)
+# define USE_LOCALE_CTYPE
+# endif
+# if !defined(NO_LOCALE_NUMERIC) && defined(LC_NUMERIC)
+# define USE_LOCALE_NUMERIC
+# endif
+#endif /* !NO_LOCALE && HAS_SETLOCALE */
+
#include <setjmp.h>
#ifdef I_SYS_PARAM
/* Use all the "standard" definitions? */
#if defined(STANDARD_C) && defined(I_STDLIB)
# include <stdlib.h>
-#endif /* STANDARD_C */
+#endif
/* This comes after <stdlib.h> so we don't try to change the standard
* library prototypes; we'll use our own in proto.h instead. */
#define MEM_SIZE Size_t
+#if defined(STANDARD_C) && defined(I_STDDEF)
+# include <stddef.h>
+# define OFFSETOF(s,m) offsetof(s,m)
+#else
+# define OFFSETOF(s,m) (Size_t)(&(((s *)0)->m))
+#endif
+
#if defined(I_STRING) || defined(__cplusplus)
# include <string.h>
#else
#define strrchr rindex
#endif
-#if defined(mips) && defined(ultrix) && !defined(__STDC__)
-# undef HAS_MEMCMP
-#endif
-
#ifdef I_MEMORY
# include <memory.h>
#endif
# endif
#endif /* HAS_MEMSET */
-#ifdef HAS_MEMCMP
-# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
-# ifndef memcmp
- extern int memcmp _((char*, char*, int));
-# endif
-# endif
-#else
-# ifndef memcmp
-# define memcmp my_memcmp
-# endif
-#endif /* HAS_MEMCMP */
-
#if !defined(HAS_MEMMOVE) && !defined(memmove)
# if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
# define memmove(d,s,l) bcopy(s,d,l)
# endif
#endif
+#if defined(mips) && defined(ultrix) && !defined(__STDC__)
+# undef HAS_MEMCMP
+#endif
+
+#if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP)
+# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
+# ifndef memcmp
+ extern int memcmp _((char*, char*, int));
+# endif
+# endif
+# ifdef BUGGY_MSC
+ # pragma function(memcmp)
+# endif
+#else
+# ifndef memcmp
+# define memcmp my_memcmp
+# endif
+#endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */
+
+#ifndef HAS_BCMP
+# ifndef bcmp
+# define bcmp(s1,s2,l) memcmp(s1,s2,l)
+# endif
+#endif /* !HAS_BCMP */
+
#ifdef I_NETINET_IN
# include <netinet/in.h>
#endif
typedef struct xrv XRV;
typedef struct xpv XPV;
typedef struct xpviv XPVIV;
+typedef struct xpvuv XPVUV;
typedef struct xpvnv XPVNV;
typedef struct xpvmg XPVMG;
typedef struct xpvlv XPVLV;
# endif
#endif
+typedef Signal_t (*Sighandler_t) _((int));
+
+#ifdef HAS_SIGACTION
+typedef struct sigaction Sigsave_t;
+#else
+typedef Sighandler_t Sigsave_t;
+#endif
+
#define SCAN_DEF 0
#define SCAN_TR 1
#define SCAN_REPL 2
EXT U32 * profiledata;
EXT int maxo INIT(MAXO);/* Number of ops */
EXT char * osname; /* operating system */
+EXT char * sh_path INIT(SH_PATH); /* full path of shell */
EXT XPV* xiv_arenaroot; /* list of allocated xiv areas */
EXT IV ** xiv_root; /* free xiv list--shared by interpreters */
/* temp space */
EXT SV * Sv;
-EXT HE He;
EXT XPV * Xpv;
EXT char buf[2048]; /* should be longer than PATH_MAX */
EXT char tokenbuf[256];
/* fast case folding tables */
#ifdef DOINIT
-EXT const unsigned char fold[] = {
+EXTCONST unsigned char fold[] = {
0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23,
EXT I32 lex_fakebrack; /* outer bracket is mere delimiter */
EXT I32 lex_casemods; /* casemod count */
EXT I32 lex_dojoin; /* doing an array interpolation */
-EXT I32 lex_endscope; /* maybe end of scope; defer lexical vars */
EXT I32 lex_starts; /* how many interps done on level */
EXT SV * lex_stuff; /* runtime pattern from m// or s/// */
EXT SV * lex_repl; /* runtime replacement from s/// */
IEXT PerlIO * Ie_fp;
IEXT U32 Iperldb;
/* This value may be raised by extensions for testing purposes */
-IEXT int Iperl_destruct_level; /* 0=none, 1=full, 2=full with checks */
+IEXT int Iperl_destruct_level IINIT(1); /* 0=none, 1=full, 2=full with checks */
/* magical thingies */
IEXT Time_t Ibasetime; /* $^T */
0, 0, 0};
EXT MGVTBL vtbl_vec = {0, magic_setvec,
0, 0, 0};
+EXT MGVTBL vtbl_vivary = {0, magic_setvivary,
+ 0, 0, magic_freevivary};
EXT MGVTBL vtbl_pos = {magic_getpos,
magic_setpos,
0, 0, 0};
magic_setuvar,
0, 0, 0};
-#ifdef LC_COLLATE
+#ifdef USE_LOCALE_COLLATE
EXT MGVTBL vtbl_collxfrm = {0,
magic_setcollxfrm,
0, 0, 0};
EXT MGVTBL vtbl_taint;
EXT MGVTBL vtbl_substr;
EXT MGVTBL vtbl_vec;
+EXT MGVTBL vtbl_vivary;
EXT MGVTBL vtbl_pos;
EXT MGVTBL vtbl_bm;
EXT MGVTBL vtbl_fm;
EXT MGVTBL vtbl_uvar;
-#ifdef HAS_STRXFRM
+#ifdef USE_LOCALE_COLLATE
EXT MGVTBL vtbl_collxfrm;
#endif
copy_amg, neg_amg
};
#endif /* OVERLOAD */
-
-#ifdef LC_COLLATE
+
+#ifdef USE_LOCALE_COLLATE
EXT U32 collation_ix; /* Collation generation index */
EXT char * collation_name; /* Name of current collation */
EXT bool collation_standard INIT(TRUE); /* Assume simple collation */
EXT Size_t collxfrm_base; /* Basic overhead in *xfrm() */
EXT Size_t collxfrm_mult INIT(2); /* Expansion factor in *xfrm() */
-#endif /* LC_COLLATE */
+#endif /* USE_LOCALE_COLLATE */
-#ifdef LC_NUMERIC
+#ifdef USE_LOCALE_NUMERIC
EXT char * numeric_name; /* Name of current numeric locale */
EXT bool numeric_standard INIT(TRUE); /* Assume simple numerics */
EXT bool numeric_local INIT(TRUE); /* Assume local numerics */
-#define NUMERIC_STANDARD() \
- STMT_START { if (! numeric_standard) perl_numeric_standard(); } STMT_END
-#define NUMERIC_LOCAL() \
- STMT_START { if (! numeric_local) perl_numeric_local(); } STMT_END
+#define SET_NUMERIC_STANDARD() \
+ STMT_START { \
+ if (! numeric_standard) \
+ perl_set_numeric_standard(); \
+ } STMT_END
+
+#define SET_NUMERIC_LOCAL() \
+ STMT_START { \
+ if (! numeric_local) \
+ perl_set_numeric_local(); \
+ } STMT_END
-#else /* !LC_NUMERIC */
+#else /* !USE_LOCALE_NUMERIC */
-#define NUMERIC_STANDARD() /**/
-#define NUMERIC_LOCAL() /**/
+#define SET_NUMERIC_STANDARD() /**/
+#define SET_NUMERIC_LOCAL() /**/
-#endif /* !LC_NUMERIC */
+#endif /* !USE_LOCALE_NUMERIC */
#if !defined(PERLIO_IS_STDIO) && defined(HAS_ATTRIBUTE)
/*