B-DeparseTree
view release on metacpan or search on metacpan
lib/B/DeparseTree/P522.pm view on Meta::CPAN
PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE
PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED PMf_EXTENDED_MORE
PADNAMEt_OUTER
MDEREF_reload
MDEREF_AV_pop_rv2av_aelem
MDEREF_AV_gvsv_vivify_rv2av_aelem
MDEREF_AV_padsv_vivify_rv2av_aelem
MDEREF_AV_vivify_rv2av_aelem
MDEREF_AV_padav_aelem
MDEREF_AV_gvav_aelem
MDEREF_HV_pop_rv2hv_helem
MDEREF_HV_gvsv_vivify_rv2hv_helem
MDEREF_HV_padsv_vivify_rv2hv_helem
MDEREF_HV_vivify_rv2hv_helem
MDEREF_HV_padhv_helem
MDEREF_HV_gvhv_helem
MDEREF_ACTION_MASK
MDEREF_INDEX_none
MDEREF_INDEX_const
MDEREF_INDEX_padsv
MDEREF_INDEX_gvsv
MDEREF_INDEX_MASK
MDEREF_FLAG_last
MDEREF_SHIFT
);
use B::DeparseTree::PPfns;
use B::DeparseTree::SyntaxTree;
use B::DeparseTree::PP;
use B::Deparse;
# Copy unchanged functions from B::Deparse
*begin_is_use = *B::Deparse::begin_is_use;
*const_sv = *B::Deparse::const_sv;
*escape_extended_re = *B::Deparse::escape_extended_re;
*find_our_type = *B::Deparse::find_our_type;
*find_scope_st = *B::Deparse::find_scope_st;
*gv_name = *B::Deparse::gv_name;
*meth_rclass_sv = *B::Deparse::meth_rclass_sv;
*meth_sv = *B::Deparse::meth_sv;
*padany = *B::Deparse::padany;
*padname = *B::Deparse::padname;
*padname_sv = *B::Deparse::padname_sv;
*padval = *B::Deparse::padval;
*populate_curcvlex = *B::Deparse::populate_curcvlex;
*re_flags = *B::Deparse::re_flags;
*rv2gv_or_string = *B::Deparse::rv2gv_or_string;
*stash_variable = *B::Deparse::stash_variable;
*stash_variable_name = *B::Deparse::stash_variable_name;
*tr_chr = *B::Deparse::tr_chr;
use strict;
use vars qw/$AUTOLOAD/;
use warnings ();
require feature;
our $VERSION = '3.2.0';
BEGIN {
# List version-specific constants here.
# Easiest way to keep this code portable between version looks to
# be to fake up a dummy constant that will never actually be true.
foreach (qw(OPpSORT_INPLACE OPpSORT_DESCEND OPpITER_REVERSED OPpCONST_NOVER
OPpPAD_STATE PMf_SKIPWHITE RXf_SKIPWHITE
RXf_PMf_CHARSET RXf_PMf_KEEPCOPY CVf_ANONCONST
CVf_LOCKED OPpREVERSE_INPLACE OPpSUBSTR_REPL_FIRST
PMf_NONDESTRUCT OPpCONST_ARYBASE OPpEVAL_BYTES)) {
eval { import B $_ };
no strict 'refs';
*{$_} = sub () {0} unless *{$_}{CODE};
}
}
BEGIN { for (qw[ rv2sv aelem
rv2av rv2hv helem custom]) {
eval "sub OP_\U$_ () { " . opnumber($_) . "}"
}}
# pp_padany -- does not exist after parsing
sub AUTOLOAD {
if ($AUTOLOAD =~ s/^.*::pp_//) {
warn "unexpected OP_".
($_[1]->type == OP_CUSTOM ? "CUSTOM ($AUTOLOAD)" : uc $AUTOLOAD);
return "XXX";
} else {
Carp::confess "Undefined subroutine $AUTOLOAD called";
}
}
sub DESTROY {} # Do not AUTOLOAD
# The BEGIN {} is used here because otherwise this code isn't executed
# when you run B::Deparse on itself.
my %globalnames;
BEGIN { map($globalnames{$_}++, "SIG", "STDIN", "STDOUT", "STDERR", "INC",
"ENV", "ARGV", "ARGVOUT", "_"); }
my %feature_keywords = (
# keyword => 'feature',
state => 'state',
say => 'say',
given => 'switch',
when => 'switch',
default => 'switch',
break => 'switch',
evalbytes=>'evalbytes',
__SUB__ => '__SUB__',
fc => 'fc',
);
# keywords that are strong and also have a prototype
#
my %strong_proto_keywords = map { $_ => 1 } qw(
pos
prototype
scalar
study
undef
);
( run in 1.123 second using v1.01-cache-2.11-cpan-39bf76dae61 )