summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2015-01-18 16:37:03 -0800
committerFather Chrysostomos <sprout@cpan.org>2015-01-19 20:34:04 -0800
commitb77472f98ff245a83a062d4af8169d2fcbe089e6 (patch)
treecc7c1a1c7c69116ccc85c3b7522e8bbdf55f82f1 /lib
parent956dfca8c907877d52b97e2ad0d2d29d5d1d8442 (diff)
downloadperl-b77472f98ff245a83a062d4af8169d2fcbe089e6.tar.gz
Add :const anon sub attribute
Diffstat (limited to 'lib')
-rw-r--r--lib/B/Deparse.pm8
-rw-r--r--lib/B/Op_private.pm1
2 files changed, 7 insertions, 2 deletions
diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm
index c496c8ae88..740192dfb5 100644
--- a/lib/B/Deparse.pm
+++ b/lib/B/Deparse.pm
@@ -58,7 +58,7 @@ BEGIN {
# 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
+ RXf_PMf_CHARSET RXf_PMf_KEEPCOPY CVf_ANONCONST
CVf_LOCKED OPpREVERSE_INPLACE OPpSUBSTR_REPL_FIRST
PMf_NONDESTRUCT OPpCONST_ARYBASE OPpEVAL_BYTES
OPpLVREF_TYPE OPpLVREF_SV OPpLVREF_AV OPpLVREF_HV
@@ -1213,11 +1213,12 @@ Carp::confess("SPECIAL in deparse_sub") if $cv->isa("B::SPECIAL");
if ($cv->FLAGS & SVf_POK) {
$proto = "(". $cv->PV . ") ";
}
- if ($cv->CvFLAGS & (CVf_METHOD|CVf_LOCKED|CVf_LVALUE)) {
+ if ($cv->CvFLAGS & (CVf_METHOD|CVf_LOCKED|CVf_LVALUE|CVf_ANONCONST)) {
$proto .= ": ";
$proto .= "lvalue " if $cv->CvFLAGS & CVf_LVALUE;
$proto .= "locked " if $cv->CvFLAGS & CVf_LOCKED;
$proto .= "method " if $cv->CvFLAGS & CVf_METHOD;
+ $proto .= "const " if $cv->CvFLAGS & CVf_ANONCONST;
}
local($self->{'curcv'}) = $cv;
@@ -2587,6 +2588,9 @@ sub pp_refgen {
my $kid = $op->first;
if ($kid->name eq "null") {
my $anoncode = $kid = $kid->first;
+ if ($anoncode->name eq "anonconst") {
+ $anoncode = $anoncode->first->first->sibling;
+ }
if ($anoncode->name eq "anoncode"
or !null($anoncode = $kid->sibling) and
$anoncode->name eq "anoncode") {
diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm
index 32f8e20e6b..9a48b96036 100644
--- a/lib/B/Op_private.pm
+++ b/lib/B/Op_private.pm
@@ -240,6 +240,7 @@ $bits{akeys}{0} = $bf[0];
$bits{alarm}{0} = $bf[0];
$bits{and}{0} = $bf[0];
$bits{andassign}{0} = $bf[0];
+$bits{anonconst}{0} = $bf[0];
@{$bits{anonhash}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]);
@{$bits{anonlist}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]);
@{$bits{atan2}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]);