Blame parts/inc/variables

Packit 7d6a7d
################################################################################
Packit 7d6a7d
##
Packit 7d6a7d
##  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
Packit 7d6a7d
##  Version 2.x, Copyright (C) 2001, Paul Marquess.
Packit 7d6a7d
##  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
Packit 7d6a7d
##
Packit 7d6a7d
##  This program is free software; you can redistribute it and/or
Packit 7d6a7d
##  modify it under the same terms as Perl itself.
Packit 7d6a7d
##
Packit 7d6a7d
################################################################################
Packit 7d6a7d
Packit 7d6a7d
=provides
Packit 7d6a7d
Packit 7d6a7d
PL_ppaddr
Packit 7d6a7d
PL_no_modify
Packit 7d6a7d
PL_DBsignal
Packit 7d6a7d
PL_DBsingle
Packit 7d6a7d
PL_DBsub
Packit 7d6a7d
PL_DBtrace
Packit 7d6a7d
PL_Sv
Packit 7d6a7d
PL_bufend
Packit 7d6a7d
PL_bufptr
Packit 7d6a7d
PL_compiling
Packit 7d6a7d
PL_copline
Packit 7d6a7d
PL_curcop
Packit 7d6a7d
PL_curstash
Packit 7d6a7d
PL_debstash
Packit 7d6a7d
PL_defgv
Packit 7d6a7d
PL_diehook
Packit 7d6a7d
PL_dirty
Packit 7d6a7d
PL_dowarn
Packit 7d6a7d
PL_errgv
Packit 7d6a7d
PL_error_count
Packit 7d6a7d
PL_expect
Packit 7d6a7d
PL_hexdigit
Packit 7d6a7d
PL_hints
Packit 7d6a7d
PL_in_my
Packit 7d6a7d
PL_in_my_stash
Packit 7d6a7d
PL_laststatval
Packit 7d6a7d
PL_lex_state
Packit 7d6a7d
PL_lex_stuff
Packit 7d6a7d
PL_linestr
Packit 7d6a7d
PL_na
Packit 7d6a7d
PL_parser
Packit 7d6a7d
PL_perl_destruct_level
Packit 7d6a7d
PL_perldb
Packit 7d6a7d
PL_rsfp_filters
Packit 7d6a7d
PL_rsfp
Packit 7d6a7d
PL_stack_base
Packit 7d6a7d
PL_stack_sp
Packit 7d6a7d
PL_statcache
Packit 7d6a7d
PL_stdingv
Packit 7d6a7d
PL_sv_arenaroot
Packit 7d6a7d
PL_sv_no
Packit 7d6a7d
PL_sv_undef
Packit 7d6a7d
PL_sv_yes
Packit 7d6a7d
PL_tainted
Packit 7d6a7d
PL_tainting
Packit 7d6a7d
PL_tokenbuf
Packit 7d6a7d
PL_signals
Packit 7d6a7d
PERL_SIGNALS_UNSAFE_FLAG
Packit 7d6a7d
Packit 7d6a7d
=implementation
Packit 7d6a7d
Packit 7d6a7d
#ifndef PERL_SIGNALS_UNSAFE_FLAG
Packit 7d6a7d
Packit 7d6a7d
#define PERL_SIGNALS_UNSAFE_FLAG 0x0001
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION < 5.8.0 }
Packit 7d6a7d
#  define D_PPP_PERL_SIGNALS_INIT   PERL_SIGNALS_UNSAFE_FLAG
Packit 7d6a7d
#else
Packit 7d6a7d
#  define D_PPP_PERL_SIGNALS_INIT   0
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
__NEED_VAR__ U32 PL_signals = D_PPP_PERL_SIGNALS_INIT;
Packit 7d6a7d
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
/* Hint: PL_ppaddr
Packit 7d6a7d
 * Calling an op via PL_ppaddr requires passing a context argument
Packit 7d6a7d
 * for threaded builds. Since the context argument is different for
Packit 7d6a7d
 * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will
Packit 7d6a7d
 * automatically be defined as the correct argument.
Packit 7d6a7d
 */
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION <= 5.005_05 }
Packit 7d6a7d
/* Replace: 1 */
Packit 7d6a7d
#  define PL_ppaddr                 ppaddr
Packit 7d6a7d
#  define PL_no_modify              no_modify
Packit 7d6a7d
/* Replace: 0 */
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION <= 5.004_05 }
Packit 7d6a7d
/* Replace: 1 */
Packit 7d6a7d
#  define PL_DBsignal               DBsignal
Packit 7d6a7d
#  define PL_DBsingle               DBsingle
Packit 7d6a7d
#  define PL_DBsub                  DBsub
Packit 7d6a7d
#  define PL_DBtrace                DBtrace
Packit 7d6a7d
#  define PL_Sv                     Sv
Packit 7d6a7d
#  define PL_bufend                 bufend
Packit 7d6a7d
#  define PL_bufptr                 bufptr
Packit 7d6a7d
#  define PL_compiling              compiling
Packit 7d6a7d
#  define PL_copline                copline
Packit 7d6a7d
#  define PL_curcop                 curcop
Packit 7d6a7d
#  define PL_curstash               curstash
Packit 7d6a7d
#  define PL_debstash               debstash
Packit 7d6a7d
#  define PL_defgv                  defgv
Packit 7d6a7d
#  define PL_diehook                diehook
Packit 7d6a7d
#  define PL_dirty                  dirty
Packit 7d6a7d
#  define PL_dowarn                 dowarn
Packit 7d6a7d
#  define PL_errgv                  errgv
Packit 7d6a7d
#  define PL_error_count            error_count
Packit 7d6a7d
#  define PL_expect                 expect
Packit 7d6a7d
#  define PL_hexdigit               hexdigit
Packit 7d6a7d
#  define PL_hints                  hints
Packit 7d6a7d
#  define PL_in_my                  in_my
Packit 7d6a7d
#  define PL_laststatval            laststatval
Packit 7d6a7d
#  define PL_lex_state              lex_state
Packit 7d6a7d
#  define PL_lex_stuff              lex_stuff
Packit 7d6a7d
#  define PL_linestr                linestr
Packit 7d6a7d
#  define PL_na                     na
Packit 7d6a7d
#  define PL_perl_destruct_level    perl_destruct_level
Packit 7d6a7d
#  define PL_perldb                 perldb
Packit 7d6a7d
#  define PL_rsfp_filters           rsfp_filters
Packit 7d6a7d
#  define PL_rsfp                   rsfp
Packit 7d6a7d
#  define PL_stack_base             stack_base
Packit 7d6a7d
#  define PL_stack_sp               stack_sp
Packit 7d6a7d
#  define PL_statcache              statcache
Packit 7d6a7d
#  define PL_stdingv                stdingv
Packit 7d6a7d
#  define PL_sv_arenaroot           sv_arenaroot
Packit 7d6a7d
#  define PL_sv_no                  sv_no
Packit 7d6a7d
#  define PL_sv_undef               sv_undef
Packit 7d6a7d
#  define PL_sv_yes                 sv_yes
Packit 7d6a7d
#  define PL_tainted                tainted
Packit 7d6a7d
#  define PL_tainting               tainting
Packit 7d6a7d
#  define PL_tokenbuf               tokenbuf
Packit 7d6a7d
/* Replace: 0 */
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
/* Warning: PL_parser
Packit 7d6a7d
 * For perl versions earlier than 5.9.5, this is an always
Packit 7d6a7d
 * non-NULL dummy. Also, it cannot be dereferenced. Don't
Packit 7d6a7d
 * use it if you can avoid is and unless you absolutely know
Packit 7d6a7d
 * what you're doing.
Packit 7d6a7d
 * If you always check that PL_parser is non-NULL, you can
Packit 7d6a7d
 * define DPPP_PL_parser_NO_DUMMY to avoid the creation of
Packit 7d6a7d
 * a dummy parser structure.
Packit 7d6a7d
 */
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION >= 5.9.5 }
Packit 7d6a7d
# ifdef DPPP_PL_parser_NO_DUMMY
Packit 7d6a7d
#  define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
Packit 7d6a7d
                (croak("panic: PL_parser == NULL in %s:%d", \
Packit 7d6a7d
                       __FILE__, __LINE__), (yy_parser *) NULL))->var)
Packit 7d6a7d
# else
Packit 7d6a7d
#  ifdef DPPP_PL_parser_NO_DUMMY_WARNING
Packit 7d6a7d
#   define D_PPP_parser_dummy_warning(var)
Packit 7d6a7d
#  else
Packit 7d6a7d
#   define D_PPP_parser_dummy_warning(var) \
Packit 7d6a7d
             warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__),
Packit 7d6a7d
#  endif
Packit 7d6a7d
#  define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
Packit 7d6a7d
                (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var)
Packit 7d6a7d
__NEED_DUMMY_VAR__ yy_parser PL_parser;
Packit 7d6a7d
# endif
Packit 7d6a7d
Packit 7d6a7d
/* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */
Packit 7d6a7d
/* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf
Packit 7d6a7d
 * Do not use this variable unless you know exactly what you're
Packit 7d6a7d
 * doing. It is internal to the perl parser and may change or even
Packit 7d6a7d
 * be removed in the future. As of perl 5.9.5, you have to check
Packit 7d6a7d
 * for (PL_parser != NULL) for this variable to have any effect.
Packit 7d6a7d
 * An always non-NULL PL_parser dummy is provided for earlier
Packit 7d6a7d
 * perl versions.
Packit 7d6a7d
 * If PL_parser is NULL when you try to access this variable, a
Packit 7d6a7d
 * dummy is being accessed instead and a warning is issued unless
Packit 7d6a7d
 * you define DPPP_PL_parser_NO_DUMMY_WARNING.
Packit 7d6a7d
 * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access
Packit 7d6a7d
 * this variable will croak with a panic message.
Packit 7d6a7d
 */
Packit 7d6a7d
Packit 7d6a7d
# define PL_expect         D_PPP_my_PL_parser_var(expect)
Packit 7d6a7d
# define PL_copline        D_PPP_my_PL_parser_var(copline)
Packit 7d6a7d
# define PL_rsfp           D_PPP_my_PL_parser_var(rsfp)
Packit 7d6a7d
# define PL_rsfp_filters   D_PPP_my_PL_parser_var(rsfp_filters)
Packit 7d6a7d
# define PL_linestr        D_PPP_my_PL_parser_var(linestr)
Packit 7d6a7d
# define PL_bufptr         D_PPP_my_PL_parser_var(bufptr)
Packit 7d6a7d
# define PL_bufend         D_PPP_my_PL_parser_var(bufend)
Packit 7d6a7d
# define PL_lex_state      D_PPP_my_PL_parser_var(lex_state)
Packit 7d6a7d
# define PL_lex_stuff      D_PPP_my_PL_parser_var(lex_stuff)
Packit 7d6a7d
# define PL_tokenbuf       D_PPP_my_PL_parser_var(tokenbuf)
Packit 7d6a7d
# define PL_in_my          D_PPP_my_PL_parser_var(in_my)
Packit 7d6a7d
# define PL_in_my_stash    D_PPP_my_PL_parser_var(in_my_stash)
Packit 7d6a7d
# define PL_error_count    D_PPP_my_PL_parser_var(error_count)
Packit 7d6a7d
Packit 7d6a7d
Packit 7d6a7d
#else
Packit 7d6a7d
Packit 7d6a7d
/* ensure that PL_parser != NULL and cannot be dereferenced */
Packit 7d6a7d
# define PL_parser         ((void *) 1)
Packit 7d6a7d
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
=xsinit
Packit 7d6a7d
Packit 7d6a7d
#define NEED_PL_signals
Packit 7d6a7d
#define NEED_PL_parser
Packit 7d6a7d
#define DPPP_PL_parser_NO_DUMMY_WARNING
Packit 7d6a7d
Packit 7d6a7d
=xsmisc
Packit 7d6a7d
Packit 7d6a7d
U32 get_PL_signals_1(void)
Packit 7d6a7d
{
Packit 7d6a7d
#ifdef PERL_NO_GET_CONTEXT
Packit 7d6a7d
  dTHX;
Packit 7d6a7d
#endif
Packit 7d6a7d
  return PL_signals;
Packit 7d6a7d
}
Packit 7d6a7d
Packit 7d6a7d
extern U32 get_PL_signals_2(void);
Packit 7d6a7d
extern U32 get_PL_signals_3(void);
Packit 7d6a7d
int no_dummy_parser_vars(int);
Packit 7d6a7d
int dummy_parser_warning(void);
Packit 7d6a7d
Packit 7d6a7d
/* No PTRSIZE IN 5.004 and below, so PTR2IV would warn and possibly misbehave */
Packit 7d6a7d
#if { VERSION > 5.004 }
Packit 7d6a7d
  #define ppp_TESTVAR(var)          STMT_START { mXPUSHi(PTR2IV(&var);; count++; } STMT_END
Packit 7d6a7d
#else
Packit 7d6a7d
  #define ppp_TESTVAR(var)          STMT_START { mXPUSHi(&var); count++; } STMT_END
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
#define ppp_PARSERVAR(type, var)  STMT_START {                   \
Packit 7d6a7d
                                    type volatile my_ ## var;    \
Packit 7d6a7d
                                    type volatile *my_p_ ## var; \
Packit 7d6a7d
                                    my_ ## var = var;            \
Packit 7d6a7d
                                    my_p_ ## var = &var;         \
Packit 7d6a7d
                                    var = my_ ## var;            \
Packit 7d6a7d
                                    var = *my_p_ ## var;         \
Packit 7d6a7d
                                    mXPUSHi(&var != NULL);       \
Packit 7d6a7d
                                    count++;                     \
Packit 7d6a7d
                                  } STMT_END
Packit 7d6a7d
Packit 7d6a7d
#define ppp_PARSERVAR_dummy       STMT_START {                   \
Packit 7d6a7d
                                    mXPUSHi(1);                  \
Packit 7d6a7d
                                    count++;                     \
Packit 7d6a7d
                                  } STMT_END
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION < 5.004 }
Packit 7d6a7d
# define ppp_rsfp_t FILE *
Packit 7d6a7d
#else
Packit 7d6a7d
# define ppp_rsfp_t PerlIO *
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION < 5.6.0 }
Packit 7d6a7d
# define ppp_expect_t expectation
Packit 7d6a7d
#elif { VERSION < 5.9.5 }
Packit 7d6a7d
# define ppp_expect_t int
Packit 7d6a7d
#else
Packit 7d6a7d
# define ppp_expect_t U8
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION < 5.9.5 }
Packit 7d6a7d
# define ppp_lex_state_t U32
Packit 7d6a7d
#else
Packit 7d6a7d
# define ppp_lex_state_t U8
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION < 5.6.0 }
Packit 7d6a7d
# define ppp_in_my_t bool
Packit 7d6a7d
#elif { VERSION < 5.9.5 }
Packit 7d6a7d
# define ppp_in_my_t I32
Packit 7d6a7d
#else
Packit 7d6a7d
# define ppp_in_my_t U16
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION < 5.9.5 }
Packit 7d6a7d
# define ppp_error_count_t I32
Packit 7d6a7d
#else
Packit 7d6a7d
# define ppp_error_count_t U8
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
=xsubs
Packit 7d6a7d
Packit 7d6a7d
int
Packit 7d6a7d
compare_PL_signals()
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                {
Packit 7d6a7d
                  U32 ref = get_PL_signals_1();
Packit 7d6a7d
                  RETVAL = ref == get_PL_signals_2() && ref == get_PL_signals_3();
Packit 7d6a7d
                }
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
SV *
Packit 7d6a7d
PL_sv_undef()
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                RETVAL = newSVsv(&PL_sv_undef);
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
SV *
Packit 7d6a7d
PL_sv_yes()
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                RETVAL = newSVsv(&PL_sv_yes);
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
SV *
Packit 7d6a7d
PL_sv_no()
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                RETVAL = newSVsv(&PL_sv_no);
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
int
Packit 7d6a7d
PL_na(string)
Packit 7d6a7d
        char *string
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                PL_na = strlen(string);
Packit 7d6a7d
                RETVAL = PL_na;
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
SV *
Packit 7d6a7d
PL_Sv()
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                PL_Sv = newSVpv("mhx", 0);
Packit 7d6a7d
                RETVAL = PL_Sv;
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
SV *
Packit 7d6a7d
PL_tokenbuf()
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                RETVAL = newSViv(PL_tokenbuf[0]);
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
SV *
Packit 7d6a7d
PL_parser()
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                RETVAL = newSViv(PL_parser != NULL);
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
SV *
Packit 7d6a7d
PL_hexdigit()
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                RETVAL = newSVpv((char *) PL_hexdigit, 0);
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
SV *
Packit 7d6a7d
PL_hints()
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                RETVAL = newSViv((IV) PL_hints);
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
void
Packit 7d6a7d
PL_ppaddr(string)
Packit 7d6a7d
        char *string
Packit 7d6a7d
        PPCODE:
Packit 7d6a7d
                PUSHMARK(SP);
Packit 7d6a7d
                mXPUSHs(newSVpv(string, 0));
Packit 7d6a7d
                PUTBACK;
Packit 7d6a7d
                ENTER;
Packit 7d6a7d
                (void)*(PL_ppaddr[OP_UC])(aTHXR);
Packit 7d6a7d
                SPAGAIN;
Packit 7d6a7d
                LEAVE;
Packit 7d6a7d
                XSRETURN(1);
Packit 7d6a7d
Packit 7d6a7d
void
Packit 7d6a7d
other_variables()
Packit 7d6a7d
        PREINIT:
Packit 7d6a7d
                int count = 0;
Packit 7d6a7d
        PPCODE:
Packit 7d6a7d
                ppp_TESTVAR(PL_DBsignal);
Packit 7d6a7d
                ppp_TESTVAR(PL_DBsingle);
Packit 7d6a7d
                ppp_TESTVAR(PL_DBsub);
Packit 7d6a7d
                ppp_TESTVAR(PL_DBtrace);
Packit 7d6a7d
                ppp_TESTVAR(PL_compiling);
Packit 7d6a7d
                ppp_TESTVAR(PL_curcop);
Packit 7d6a7d
                ppp_TESTVAR(PL_curstash);
Packit 7d6a7d
                ppp_TESTVAR(PL_debstash);
Packit 7d6a7d
                ppp_TESTVAR(PL_defgv);
Packit 7d6a7d
                ppp_TESTVAR(PL_diehook);
Packit 7d6a7d
#if { VERSION >= 5.13.7 }
Packit 7d6a7d
                /* can't get a pointer any longer */
Packit 7d6a7d
                mXPUSHi(PL_dirty ? 1 : 1);
Packit 7d6a7d
                count++;
Packit 7d6a7d
#else
Packit 7d6a7d
                ppp_TESTVAR(PL_dirty);
Packit 7d6a7d
#endif
Packit 7d6a7d
                ppp_TESTVAR(PL_dowarn);
Packit 7d6a7d
                ppp_TESTVAR(PL_errgv);
Packit 7d6a7d
                ppp_TESTVAR(PL_laststatval);
Packit 7d6a7d
                ppp_TESTVAR(PL_no_modify);
Packit 7d6a7d
                ppp_TESTVAR(PL_perl_destruct_level);
Packit 7d6a7d
                ppp_TESTVAR(PL_perldb);
Packit 7d6a7d
                ppp_TESTVAR(PL_stack_base);
Packit 7d6a7d
                ppp_TESTVAR(PL_stack_sp);
Packit 7d6a7d
                ppp_TESTVAR(PL_statcache);
Packit 7d6a7d
                ppp_TESTVAR(PL_stdingv);
Packit 7d6a7d
                ppp_TESTVAR(PL_sv_arenaroot);
Packit 7d6a7d
                ppp_TESTVAR(PL_tainted);
Packit 7d6a7d
                ppp_TESTVAR(PL_tainting);
Packit 7d6a7d
Packit 7d6a7d
                ppp_PARSERVAR(ppp_expect_t, PL_expect);
Packit 7d6a7d
                ppp_PARSERVAR(line_t, PL_copline);
Packit 7d6a7d
                ppp_PARSERVAR(ppp_rsfp_t, PL_rsfp);
Packit 7d6a7d
                ppp_PARSERVAR(AV *, PL_rsfp_filters);
Packit 7d6a7d
                ppp_PARSERVAR(SV *, PL_linestr);
Packit 7d6a7d
                ppp_PARSERVAR(char *, PL_bufptr);
Packit 7d6a7d
                ppp_PARSERVAR(char *, PL_bufend);
Packit 7d6a7d
                ppp_PARSERVAR(ppp_lex_state_t, PL_lex_state);
Packit 7d6a7d
                ppp_PARSERVAR(SV *, PL_lex_stuff);
Packit 7d6a7d
                ppp_PARSERVAR(ppp_error_count_t, PL_error_count);
Packit 7d6a7d
                ppp_PARSERVAR(ppp_in_my_t, PL_in_my);
Packit 7d6a7d
#if { VERSION >= 5.5.0 }
Packit 7d6a7d
                ppp_PARSERVAR(HV*, PL_in_my_stash);
Packit 7d6a7d
#else
Packit 7d6a7d
                ppp_PARSERVAR_dummy;
Packit 7d6a7d
#endif
Packit 7d6a7d
                XSRETURN(count);
Packit 7d6a7d
Packit 7d6a7d
int
Packit 7d6a7d
no_dummy_parser_vars(check)
Packit 7d6a7d
        int check
Packit 7d6a7d
Packit 7d6a7d
int
Packit 7d6a7d
dummy_parser_warning()
Packit 7d6a7d
Packit 7d6a7d
=tests plan => 52
Packit 7d6a7d
Packit 7d6a7d
ok(Devel::PPPort::compare_PL_signals());
Packit 7d6a7d
Packit 7d6a7d
ok(!defined(&Devel::PPPort::PL_sv_undef()));
Packit 7d6a7d
ok(&Devel::PPPort::PL_sv_yes());
Packit 7d6a7d
ok(!&Devel::PPPort::PL_sv_no());
Packit 7d6a7d
ok(&Devel::PPPort::PL_na("abcd"), 4);
Packit 7d6a7d
ok(&Devel::PPPort::PL_Sv(), "mhx");
Packit 7d6a7d
ok(defined &Devel::PPPort::PL_tokenbuf());
Packit 7d6a7d
ok($] >= 5.009005 || &Devel::PPPort::PL_parser());
Packit 7d6a7d
ok(&Devel::PPPort::PL_hexdigit() =~ /^[0-9a-zA-Z]+$/);
Packit 7d6a7d
ok(defined &Devel::PPPort::PL_hints());
Packit 7d6a7d
ok(&Devel::PPPort::PL_ppaddr("mhx"), "MHX");
Packit 7d6a7d
Packit 7d6a7d
for (&Devel::PPPort::other_variables()) {
Packit 7d6a7d
  ok($_ != 0);
Packit 7d6a7d
}
Packit 7d6a7d
Packit 7d6a7d
{
Packit 7d6a7d
  my @w;
Packit 7d6a7d
  my $fail = 0;
Packit 7d6a7d
  {
Packit 7d6a7d
    local $SIG{'__WARN__'} = sub { push @w, @_ };
Packit 7d6a7d
    ok(&Devel::PPPort::dummy_parser_warning());
Packit 7d6a7d
  }
Packit 7d6a7d
  if ($] >= 5.009005) {
Packit 7d6a7d
    ok(@w >= 0);
Packit 7d6a7d
    for (@w) {
Packit 7d6a7d
      print "# $_";
Packit 7d6a7d
      unless (/^warning: dummy PL_bufptr used in.*module3.*:\d+/i) {
Packit 7d6a7d
        warn $_;
Packit 7d6a7d
        $fail++;
Packit 7d6a7d
      }
Packit 7d6a7d
    }
Packit 7d6a7d
  }
Packit 7d6a7d
  else {
Packit 7d6a7d
    ok(@w == 0);
Packit 7d6a7d
  }
Packit 7d6a7d
  ok($fail, 0);
Packit 7d6a7d
}
Packit 7d6a7d
Packit 7d6a7d
ok(&Devel::PPPort::no_dummy_parser_vars(1) >= ($] < 5.009005 ? 1 : 0));
Packit 7d6a7d
Packit 7d6a7d
eval { &Devel::PPPort::no_dummy_parser_vars(0) };
Packit 7d6a7d
Packit 7d6a7d
if ($] < 5.009005) {
Packit 7d6a7d
  ok($@, '');
Packit 7d6a7d
}
Packit 7d6a7d
else {
Packit 7d6a7d
  if ($@) {
Packit 7d6a7d
    print "# $@";
Packit 7d6a7d
    ok($@ =~ /^panic: PL_parser == NULL in.*module2.*:\d+/i);
Packit 7d6a7d
  }
Packit 7d6a7d
  else {
Packit 7d6a7d
    ok(1);
Packit 7d6a7d
  }
Packit 7d6a7d
}