The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes 04
Declare.xs 627
MANIFEST 10
META.json 22
META.yml 22
lib/Devel/Declare/Context/Simple.pm 11
lib/Devel/Declare/MethodInstaller/Simple.pm 11
lib/Devel/Declare.pm 11
maint/Makefile.include 90
maint/bump-version 440
10 files changed (This is a version diff) 6738
@@ -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;
-}