diff --git a/C.xs b/C.xs index 504705aff..f30d8800e 100644 --- a/C.xs +++ b/C.xs @@ -674,6 +674,14 @@ PadnameGEN(padn) OUTPUT: RETVAL +bool +PadnameIsUndef(padn) + B::PADNAME padn + CODE: + RETVAL = padn == &PL_padname_undef ? TRUE : FALSE; + OUTPUT: + RETVAL + MODULE = B PACKAGE = B::INVLIST PREFIX = Invlist int diff --git a/lib/B/C/OverLoad/B/PADNAME.pm b/lib/B/C/OverLoad/B/PADNAME.pm index dd07914eb..ebb71115f 100644 --- a/lib/B/C/OverLoad/B/PADNAME.pm +++ b/lib/B/C/OverLoad/B/PADNAME.pm @@ -13,15 +13,17 @@ our $MAX_PADNAME_LENGTH = 1; sub do_save { my ( $pn, $fullname ) = @_; + return q[&PL_padname_undef] if $pn->IsUndef; + my ( $ix, $sym ) = padnamesect()->reserve($pn); padnamesect()->debug( $fullname, $pn ); my $refcnt = $pn->REFCNT; + my $pv = $pn->PVX; - my $pv = $pn->PVX; my $xpadn_str = cstring($pv) || '{0}'; - my $xpadn_pv = $ix ? sprintf( "((char*)%s)+STRUCT_OFFSET(struct padname_with_str, xpadn_str[0])", $sym ) : 'NULL'; + my $xpadn_pv = sprintf( "((char*)%s)+STRUCT_OFFSET(struct padname_with_str, xpadn_str[0])", $sym ); # Track the largest padname length to determine the size of the struct. my $xpadn_len = $pn->LEN;