# endif
#endif
-#define pVAR register struct perl_vars* my_vars PERL_UNUSED_DECL
+#define pVAR register struct perl_vars* const my_vars PERL_UNUSED_DECL
#ifdef PERL_GLOBAL_STRUCT
# define dVAR pVAR = (struct perl_vars*)PERL_GET_VARS()
#endif
#ifndef PERL_UNUSED_DECL
-# ifdef HASATTRIBUTE_UNUSED
+# if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
# define PERL_UNUSED_DECL __attribute__unused__
# else
# define PERL_UNUSED_DECL
# define PERL_UNUSED_VAR(x) ((void)x)
#endif
+#ifdef USE_ITHREADS
+# define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
+#else
+# define PERL_UNUSED_CONTEXT
+#endif
+
#define NOOP (void)0
#define dNOOP extern int Perl___notused PERL_UNUSED_DECL
/* We no longer default to creating a new SV for GvSV.
Do this before embed. */
#ifndef PERL_CREATE_GVSV
-#define PERL_DONT_CREATE_GVSV
+# ifndef PERL_DONT_CREATE_GVSV
+# define PERL_DONT_CREATE_GVSV
+# endif
#endif
#if !defined(HAS_WAITPID) && !defined(HAS_WAIT4) || defined(HAS_WAITPID_RUNTIME)
*/
#if !defined(PERL_FOR_X2P) && !(defined(WIN32)||defined(VMS))
# include "embed.h"
+# ifndef PERL_MAD
+# undef op_getmad
+# define op_getmad(arg,pegop,slot) /**/
+# endif
#endif
#define MEM_SIZE Size_t
typedef MEM_SIZE STRLEN;
+#ifdef PERL_MAD
+typedef struct token TOKEN;
+typedef struct madprop MADPROP;
+typedef struct nexttoken NEXTTOKE;
+#endif
typedef struct op OP;
typedef struct cop COP;
typedef struct unop UNOP;
#if defined(VMS)
# include "vmsish.h"
# include "embed.h"
+# ifndef PERL_MAD
+# undef op_getmad
+# define op_getmad(arg,pegop,slot) /**/
+# endif
# define ISHISH "vms"
#endif
#ifdef __SYMBIAN32__
# include "symbian/symbianish.h"
# include "embed.h"
+# ifndef PERL_MAD
+# undef op_getmad
+# define op_getmad(arg,pegop,slot) /**/
+# endif
# define ISHISH "symbian"
#endif
appropriate to call return. In either case, include the lint directive.
*/
#ifdef HASATTRIBUTE_NORETURN
-# define NORETURN_FUNCTION_END /* NOT REACHED */
+# define NORETURN_FUNCTION_END /* NOTREACHED */
#else
-# define NORETURN_FUNCTION_END /* NOT REACHED */ return 0
+# define NORETURN_FUNCTION_END /* NOTREACHED */ return 0
+#endif
+
+#ifdef HAS_BUILTIN_EXPECT
+# define EXPECT(expr,val) __builtin_expect(expr,val)
+#else
+# define EXPECT(expr,val) (expr)
+#endif
+#define LIKELY(cond) EXPECT(cond,1)
+#define UNLIKELY(cond) EXPECT(cond,0)
+#ifdef HAS_BUILTIN_CHOOSE_EXPR
+/* placeholder */
#endif
/* Some unistd.h's give a prototype for pause() even though
# define USE_HASH_SEED
#endif
+/* Win32 defines a type 'WORD' in windef.h. This conflicts with the enumerator
+ * 'WORD' defined in perly.h. The yytokentype enum is only a debugging aid, so
+ * it's not really needed.
+ */
+#if defined(WIN32)
+# define YYTOKENTYPE
+#endif
+#include "perly.h"
+
+#ifdef PERL_MAD
+struct nexttoken {
+ YYSTYPE next_val; /* value of next token, if any */
+ I32 next_type; /* type of next token */
+ MADPROP *next_mad; /* everything else about that token */
+};
+#endif
+
#include "regexp.h"
#include "sv.h"
#include "util.h"
#define PERL_MAGIC_substr 'x' /* substr() lvalue */
#define PERL_MAGIC_defelem 'y' /* Shadow "foreach" iterator variable /
smart parameter vivification */
-#define PERL_MAGIC_glob '*' /* GV (typeglob) */
#define PERL_MAGIC_arylen '#' /* Array length ($#ary) */
#define PERL_MAGIC_pos '.' /* pos() lvalue */
#define PERL_MAGIC_backref '<' /* for weak ref data */
#endif
#endif
-/* Win32 defines a type 'WORD' in windef.h. This conflicts with the enumerator
- * 'WORD' defined in perly.h. The yytokentype enum is only a debugging aid, so
- * it's not really needed.
- */
-#if defined(WIN32)
-# define YYTOKENTYPE
-#endif
-#include "perly.h"
-
#define LEX_NOTPARSING 11 /* borrowed from toke.c */
typedef enum {
#if !defined(PERL_FOR_X2P)
# include "embedvar.h"
#endif
+#ifndef PERL_MAD
+# undef PL_madskills
+# undef PL_xmlfp
+# define PL_madskills 0
+# define PL_xmlfp 0
+#endif
/* Now include all the 'global' variables
* If we don't have threads or multiple interpreters
#if defined(WIN32)
/* Now all the config stuff is setup we can include embed.h */
# include "embed.h"
+# ifndef PERL_MAD
+# undef op_getmad
+# define op_getmad(arg,pegop,slot) /**/
+# endif
#endif
#ifndef PERL_GLOBAL_STRUCT
START_EXTERN_C
#ifdef DOINIT
-# define MGVTBL_SET(var,a,b,c,d,e,f,g) EXT MGVTBL var = {a,b,c,d,e,f,g}
-# define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g) EXT MGVTBL var = {(int (*)(pTHX_ SV *, MAGIC *))a,b,c,d,e,f,g} /* Like MGVTBL_SET but with the get magic having a const MG* */
+# define MGVTBL_SET(var,a,b,c,d,e,f,g,h) EXT MGVTBL var = {a,b,c,d,e,f,g,h}
+/* Like MGVTBL_SET but with the get magic having a const MG* */
+# define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g,h) EXT MGVTBL var \
+ = {(int (*)(pTHX_ SV *, MAGIC *))a,b,c,d,e,f,g,h}
#else
-# define MGVTBL_SET(var,a,b,c,d,e,f,g) EXT MGVTBL var
-# define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g) EXT MGVTBL var
+# define MGVTBL_SET(var,a,b,c,d,e,f,g,h) EXT MGVTBL var
+# define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g,h) EXT MGVTBL var
#endif
MGVTBL_SET(
NULL,
NULL,
NULL,
+ NULL,
NULL
);
MEMBER_TO_FPTR(Perl_magic_clear_all_env),
NULL,
NULL,
+ NULL,
NULL
);
MEMBER_TO_FPTR(Perl_magic_clearenv),
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
#ifdef PERL_MICRO
MGVTBL_SET(
PL_vtbl_sigelem,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
);
#else
MEMBER_TO_FPTR(Perl_magic_clearsig),
NULL,
NULL,
+ NULL,
NULL
);
#endif
MEMBER_TO_FPTR(Perl_magic_wipepack),
NULL,
NULL,
+ NULL,
NULL
);
MEMBER_TO_FPTR(Perl_magic_clearpack),
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
MEMBER_TO_FPTR(Perl_magic_setisa),
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
MEMBER_TO_FPTR(Perl_magic_freearylen_p),
NULL,
- NULL
-);
-
-MGVTBL_SET(
- PL_vtbl_glob,
- MEMBER_TO_FPTR(Perl_magic_getglob),
- MEMBER_TO_FPTR(Perl_magic_setglob),
- NULL,
- NULL,
- NULL,
NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
MEMBER_TO_FPTR(Perl_magic_freeregexp),
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
NULL,
MEMBER_TO_FPTR(Perl_magic_setamagic),
NULL,
+ NULL,
NULL
);
NULL,
MEMBER_TO_FPTR(Perl_magic_setamagic),
NULL,
+ NULL,
NULL
);
NULL,
MEMBER_TO_FPTR(Perl_magic_killbackrefs),
NULL,
+ NULL,
NULL
);
NULL,
MEMBER_TO_FPTR(Perl_magic_freeovrld),
NULL,
+ NULL,
NULL
);
NULL,
NULL,
NULL,
+ NULL,
NULL
);
#ifdef USE_LOCALE_COLLATE
NULL,
NULL,
NULL,
+ NULL,
NULL
);
#endif