|
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 |
}
|