@@ -1,5 +1,9 @@
Revision history for Devel-Declare
+0.006017 - 2014-09-25
+ - fix for changes in 5.21.4 (Avoid creating GVs when subs are declared),
+ RT#99102, Father Chrysostomos
+
0.006016 - 2014-03-31
- fixed syntax error in a test
@@ -283,11 +283,26 @@ static void call_done_declare(pTHX) {
static int dd_handle_const(pTHX_ char *name);
+#ifdef CV_NAME_NOTQUAL /* 5.21.5 */
+# define Gv_or_CvNAME(g) (isGV(g) \
+ ? GvNAME(g) \
+ : SvPV_nolen(cv_name((CV *)SvRV(g), NULL, CV_NAME_NOTQUAL)))
+#elif defined(CvNAMED) /* 5.21.4 */
+# define Gv_or_CvNAME(g) (isGV(g) \
+ ? GvNAME(g) \
+ : CvNAMED(SvRV(g)) \
+ ? HEK_KEY(CvNAME_HEK((CV *)SvRV(g))) \
+ : GvNAME(CvGV(SvRV(g))))
+#else
+# define Gv_or_CvNAME(g) GvNAME(g)
+#endif
+
/* replacement PL_check rv2cv entry */
STATIC OP *dd_ck_rv2cv(pTHX_ OP *o, void *user_data) {
OP* kid;
int dd_flags;
+ char *gvname;
PERL_UNUSED_VAR(user_data);
@@ -304,11 +319,17 @@ STATIC OP *dd_ck_rv2cv(pTHX_ OP *o, void *user_data) {
if (kid->op_type != OP_GV) /* not a GV so ignore */
return o;
+ if (!isGV(kGVOP_gv)
+ && (!SvROK(kGVOP_gv) || SvTYPE(SvRV(kGVOP_gv)) != SVt_PVCV))
+ return o;
+
+ gvname = Gv_or_CvNAME(kGVOP_gv);
+
if (DD_DEBUG_TRACE) {
- printf("Checking GV %s -> %s\n", HvNAME(GvSTASH(kGVOP_gv)), GvNAME(kGVOP_gv));
+ printf("Checking GV %s -> %s\n", HvNAME(GvSTASH(kGVOP_gv)), gvname);
}
- dd_flags = dd_is_declarator(aTHX_ GvNAME(kGVOP_gv));
+ dd_flags = dd_is_declarator(aTHX_ gvname);
if (dd_flags == -1)
return o;
@@ -320,23 +341,23 @@ STATIC OP *dd_ck_rv2cv(pTHX_ OP *o, void *user_data) {
#if DD_CONST_VIA_RV2CV
if (PL_expect != XOPERATOR) {
- if (!dd_handle_const(aTHX_ GvNAME(kGVOP_gv)))
+ if (!dd_handle_const(aTHX_ Gv_or_CvNAME(kGVOP_gv)))
return o;
CopLINE(PL_curcop) = PL_copline;
/* The parser behaviour that we're simulating depends on what comes
after the declarator. */
- if (*skipspace(PL_bufptr + strlen(GvNAME(kGVOP_gv))) != '(') {
+ if (*skipspace(PL_bufptr + strlen(gvname)) != '(') {
if (in_declare) {
call_done_declare(aTHX);
} else {
- dd_linestr_callback(aTHX_ "rv2cv", GvNAME(kGVOP_gv));
+ dd_linestr_callback(aTHX_ "rv2cv", gvname);
}
}
return o;
}
#endif /* DD_CONST_VIA_RV2CV */
- dd_linestr_callback(aTHX_ "rv2cv", GvNAME(kGVOP_gv));
+ dd_linestr_callback(aTHX_ "rv2cv", gvname);
return o;
}
@@ -3,7 +3,6 @@ Declare.xs
lib/Devel/Declare.pm
lib/Devel/Declare/Context/Simple.pm
lib/Devel/Declare/MethodInstaller/Simple.pm
-maint/bump-version
maint/Makefile.include
maint/Makefile.PL.include
Makefile.PL
@@ -4,7 +4,7 @@
"Matt S Trout - <mst@shadowcat.co.uk> - original author"
],
"dynamic_config" : 0,
- "generated_by" : "ExtUtils::MakeMaker version 6.94, CPAN::Meta::Converter version 2.140640",
+ "generated_by" : "ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.142060",
"license" : [
"perl_5"
],
@@ -55,5 +55,5 @@
"web" : "http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit/Devel-Declare.git"
}
},
- "version" : "0.006016"
+ "version" : "0.006017"
}
@@ -10,7 +10,7 @@ configure_requires:
B::Hooks::OP::Check: '0.19'
ExtUtils::Depends: '0.302'
dynamic_config: 0
-generated_by: 'ExtUtils::MakeMaker version 6.94, CPAN::Meta::Converter version 2.140640'
+generated_by: 'ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.142060'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -29,4 +29,4 @@ requires:
resources:
bugtracker: https://rt.cpan.org/Public/Dist/Display.html?Name=Devel-Declare
repository: git://git.shadowcat.co.uk/p5sagit/Devel-Declare.git
-version: '0.006016'
+version: '0.006017'
@@ -6,7 +6,7 @@ use Devel::Declare ();
use B::Hooks::EndOfScope;
use Carp qw/confess/;
-our $VERSION = '0.006016';
+our $VERSION = '0.006017';
sub new {
my $class = shift;
@@ -7,7 +7,7 @@ use Sub::Name;
use strict;
use warnings;
-our $VERSION = '0.006016';
+our $VERSION = '0.006017';
sub install_methodhandler {
my $class = shift;
@@ -5,7 +5,7 @@ use strict;
use warnings;
use 5.008001;
-our $VERSION = '0.006016';
+our $VERSION = '0.006017';
use constant DECLARE_NAME => 1;
use constant DECLARE_PROTO => 2;
@@ -1,11 +1,2 @@
-bump:
- maint/bump-version
- rm Makefile
-bumpminor:
- maint/bump-version minor
- rm Makefile
-bumpmajor:
- maint/bump-version major
- rm Makefile
upload: $(DISTVNAME).tar$(SUFFIX)
cpan-upload $<
@@ -1,44 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use warnings FATAL => 'all';
-use autodie;
-
-chomp(my $LATEST = qx(grep '^[0-9]' Changes | head -1 | awk '{print \$1}'));
-
-my @parts = split /\./, $LATEST;
-if (@parts == 2) {
- @parts[1,2] = $parts[1] =~ /(\d{1,3})(\d{1,3})/;
-}
-
-my $OLD_DECIMAL = sprintf('%i.%03i%03i', @parts);
-
-my %bump_part = (major => 0, minor => 1, bugfix => 2);
-
-my $bump_this = $bump_part{$ARGV[0]||'bugfix'};
-
-die "no idea which part to bump - $ARGV[0] means nothing to me"
- unless defined($bump_this);
-
-my @new_parts = @parts;
-
-$new_parts[$bump_this]++;
-
-my $NEW_DECIMAL = sprintf('%i.%03i%03i', @new_parts);
-
-warn "Bumping $OLD_DECIMAL -> $NEW_DECIMAL\n";
-
-for my $PM_FILE (qw(
- lib/Devel/Declare.pm
- lib/Devel/Declare/Context/Simple.pm
- lib/Devel/Declare/MethodInstaller/Simple.pm
-)) {
- my $file = do { local (@ARGV, $/) = ($PM_FILE); <> };
-
- $file =~ s/(?<=\$VERSION = ')${\quotemeta $OLD_DECIMAL}/${NEW_DECIMAL}/
- or die "unable to bump version number in $PM_FILE";
-
- open my $out, '>', $PM_FILE;
-
- print $out $file;
-}