This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
pad.h: Let PADNAME_PV return null
[perl5.git] / pad.h
diff --git a/pad.h b/pad.h
index 30895c9..a966e81 100644 (file)
--- a/pad.h
+++ b/pad.h
@@ -207,7 +207,8 @@ The C array of pad entries.
 The index of the last pad entry.
 
 =for apidoc Amx|char *|PADNAME_PV|PADNAME pn   
-The name stored in the pad name struct.
+The name stored in the pad name struct.  This returns NULL for a target or
+GV slot.
 
 =for apidoc Amx|STRLEN|PADNAME_LEN|PADNAME pn  
 The length of the name.
@@ -215,6 +216,10 @@ The length of the name.
 =for apidoc Amx|bool|PADNAME_UTF8|PADNAME pn
 Whether PADNAME_PV is in UTF8.
 
+=for apidoc Amx|SV *|PADNAME_SV|PADNAME pn
+Returns the pad name as an SV.  This is currently just C<pn>.  It will
+begin returning a new mortal SV if pad names ever stop being SVs.
+
 =for apidoc m|bool|PADNAME_isOUR|PADNAME pn
 Whether this is an "our" variable.
 
@@ -282,12 +287,13 @@ Restore the old pad saved into the local variable opad by PAD_SAVE_LOCAL()
 #define PAD_ARRAY(pad)         AvARRAY(pad)
 #define PAD_MAX(pad)           AvFILLp(pad)
 
-#define PADNAME_PV(pn)         SvPV_nolen(pn)
+#define PADNAME_PV(pn)         (SvPOKp(pn) ? SvPVX(pn) : NULL)
 #define PADNAME_LEN(pn)                SvCUR(pn)
 #define PADNAME_UTF8(pn)       !!SvUTF8(pn)
+#define PADNAME_SV(pn)         pn
 #define PADNAME_isOUR(pn)      !!SvPAD_OUR(pn)
-#define PADNAME_OURSTASH       SvOURSTASH(pn)
-#define PADNAME_OUTER          !!SvFAKE(pn)
+#define PADNAME_OURSTASH(pn)   SvOURSTASH(pn)
+#define PADNAME_OUTER(pn)      !!SvFAKE(pn)
 #define PADNAME_TYPE(pn)       (SvPAD_TYPED(pn) ? SvSTASH(pn) : NULL)