X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/956dfca8c907877d52b97e2ad0d2d29d5d1d8442..5a9c3bf448373ee0812df85d750f6234ee11c9c4:/cv.h?ds=sidebyside diff --git a/cv.h b/cv.h index 89e471c..dac83fa 100644 --- a/cv.h +++ b/cv.h @@ -234,7 +234,17 @@ CvNAME_HEK(CV *sv) ? ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_hek : 0; } -/* This lowers the refernce count of the previous value, but does *not* + +/* helper for the common pattern: + CvNAMED(sv) ? CvNAME_HEK((CV *)sv) : GvNAME_HEK(CvGV(sv)) +*/ +#define CvGvNAME_HEK(sv) ( \ + CvNAMED((CV*)sv) ? \ + ((XPVCV*)MUTABLE_PTR(SvANY((SV*)sv)))->xcv_gv_u.xcv_hek\ + : GvNAME_HEK(CvGV( (SV*) sv)) \ + ) + +/* This lowers the reference count of the previous value, but does *not* increment the reference count of the new value. */ #define CvNAME_HEK_set(cv, hek) ( \ CvNAME_HEK((CV *)(cv)) \ @@ -264,7 +274,7 @@ There is a further complication with non-closure anonymous subs (i.e. those that do not refer to any lexicals outside that sub). In this case, the anonymous prototype is shared rather than being cloned. This has the consequence that the parent may be freed while there are still active -children, eg +children, I, BEGIN { $a = sub { eval '$x' } } @@ -310,11 +320,5 @@ typedef OP *(*Perl_call_checker)(pTHX_ OP *, GV *, SV *); #endif /* - * Local variables: - * c-indentation-style: bsd - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - * * ex: set ts=8 sts=4 sw=4 et: */