diff options
author | Paul "LeoNerd" Evans <leonerd@leonerd.org.uk> | 2022-07-05 11:39:36 +0100 |
---|---|---|
committer | Paul Evans <leonerd@leonerd.org.uk> | 2022-07-05 13:57:12 +0100 |
commit | 792bf4bab089d68ffc6344f65e675d4117390c15 (patch) | |
tree | c57c2dd382b32bf141933caac333d36e35e66a14 | |
parent | cc6fbaaa94dda35975cfd69338f19db9603392e2 (diff) | |
download | perl-792bf4bab089d68ffc6344f65e675d4117390c15.tar.gz |
Neaten the PADNAME flag constants
Rename the `PADNAMEt_*` constants to `PADNAMEf_*`, as they're supposed
to represent bitflags, not a type enumeration.
Also updated the `B` and `B::Deparse` modules to make use of the new modern
names (and avoid the old `SVpad_*` flags).
Also added `PADNAMEt_*` back-compat defines, guarded by `#ifndef PERL_CORE`
so as not to permit their use accidentally within perl core.
-rw-r--r-- | ext/B/B.pm | 2 | ||||
-rw-r--r-- | ext/B/B.xs | 2 | ||||
-rw-r--r-- | ext/B/Makefile.PL | 2 | ||||
-rw-r--r-- | lib/B/Deparse.pm | 26 | ||||
-rw-r--r-- | op.c | 2 | ||||
-rw-r--r-- | pad.c | 6 | ||||
-rw-r--r-- | pad.h | 37 |
7 files changed, 42 insertions, 35 deletions
diff --git a/ext/B/B.pm b/ext/B/B.pm index 6f18681292..1c0f304bf0 100644 --- a/ext/B/B.pm +++ b/ext/B/B.pm @@ -20,7 +20,7 @@ sub import { # walkoptree comes from B.xs BEGIN { - $B::VERSION = '1.84'; + $B::VERSION = '1.85'; @B::EXPORT_OK = (); # Our BOOT code needs $VERSION set, and will append to @EXPORT_OK. diff --git a/ext/B/B.xs b/ext/B/B.xs index 90424213a8..c317ed43f2 100644 --- a/ext/B/B.xs +++ b/ext/B/B.xs @@ -2351,7 +2351,7 @@ PadnameFLAGS(pn) RETVAL = PadnameFLAGS(pn); /* backward-compatibility hack, which should be removed if the flags field becomes large enough to hold SVf_FAKE (and - PADNAMEt_OUTER should be renumbered to match SVf_FAKE) */ + PADNAMEf_OUTER should be renumbered to match SVf_FAKE) */ STATIC_ASSERT_STMT(SVf_FAKE >= 1<<(sizeof(PadnameFLAGS((B__PADNAME)NULL)) * 8)); if (PadnameOUTER(pn)) RETVAL |= SVf_FAKE; diff --git a/ext/B/Makefile.PL b/ext/B/Makefile.PL index 1b30ffd08f..0ff4f4e2e6 100644 --- a/ext/B/Makefile.PL +++ b/ext/B/Makefile.PL @@ -30,7 +30,7 @@ foreach my $tuple (['cop.h'], ['op.h'], ['opcode.h', 'OPp'], ['op_reg_common.h','(?:(?:RXf_)?PMf_)'], - ['pad.h','PADNAMEt_'], + ['pad.h','PADNAMEf_'], ['regexp.h','RXf_'], ['sv.h', 'SV(?:[fps]|pad)_'], ) { diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm index fbd12e73b7..bb1affe81e 100644 --- a/lib/B/Deparse.pm +++ b/lib/B/Deparse.pm @@ -23,12 +23,12 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring OPpCONCAT_NESTED OPpMULTICONCAT_APPEND OPpMULTICONCAT_STRINGIFY OPpMULTICONCAT_FAKE OPpTRUEBOOL OPpINDEX_BOOLNEG OPpDEFER_FINALLY - SVf_IOK SVf_NOK SVf_ROK SVf_POK SVpad_OUR SVf_FAKE SVs_RMG SVs_SMG - SVs_PADTMP SVpad_TYPED + SVf_IOK SVf_NOK SVf_ROK SVf_POK SVf_FAKE SVs_RMG SVs_SMG + SVs_PADTMP CVf_METHOD CVf_LVALUE PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED PMf_EXTENDED_MORE - PADNAMEt_OUTER + PADNAMEf_OUTER PADNAMEf_OUR PADNAMEf_TYPED MDEREF_reload MDEREF_AV_pop_rv2av_aelem MDEREF_AV_gvsv_vivify_rv2av_aelem @@ -449,7 +449,7 @@ sub next_todo { my $flags = $name->FLAGS; my $category = !$cv || $seq <= $name->COP_SEQ_RANGE_LOW - ? $self->keyword($flags & SVpad_OUR + ? $self->keyword($flags & PADNAMEf_OUR ? "our" : $flags & SVpad_STATE ? "state" @@ -1120,8 +1120,8 @@ sub pad_subs { if (defined $name && $name =~ /^&./) { my $low = $_->COP_SEQ_RANGE_LOW; my $flags = $_->FLAGS; - my $outer = $flags & PADNAMEt_OUTER; - if ($flags & SVpad_OUR) { + my $outer = $flags & PADNAMEf_OUTER; + if ($flags & PADNAMEf_OUR) { push @todo, [$low, undef, 0, $_] # [seq, no cv, not format, padname] unless $outer; @@ -1134,7 +1134,7 @@ sub pad_subs { my $flags = $flags; my $cv = $cv; my $name = $_; - while ($flags & PADNAMEt_OUTER && class ($protocv) ne 'CV') + while ($flags & PADNAMEf_OUTER && class ($protocv) ne 'CV') { $cv = $cv->OUTSIDE; next PADENTRY if class($cv) eq 'SPECIAL'; # XXX freed? @@ -1151,7 +1151,7 @@ sub pad_subs { my $other = $protocv->PADLIST; $$other && $other->outid == $padlist->id; }; - if ($flags & PADNAMEt_OUTER) { + if ($flags & PADNAMEf_OUTER) { next unless $defined_in_this_sub; push @todo, [$protocv->OUTSIDE_SEQ, $protocv, 0, $_]; next; @@ -1560,7 +1560,7 @@ sub find_our_type { my $seq = $self->{'curcop'} ? $self->{'curcop'}->cop_seq : 0; for my $a (@{$self->{'curcvlex'}{"o$name"}}) { my ($st, undef, $padname) = @$a; - if ($st >= $seq && $padname->FLAGS & SVpad_TYPED) { + if ($st >= $seq && $padname->FLAGS & PADNAMEf_TYPED) { return $padname->SvSTASH->NAME; } } @@ -1646,7 +1646,7 @@ sub maybe_my { # because enteriter ops do not carry the flag. my $my = $self->keyword($padname->FLAGS & SVpad_STATE ? "state" : "my"); - if ($padname->FLAGS & SVpad_TYPED) { + if ($padname->FLAGS & PADNAMEf_TYPED) { $my .= ' ' . $padname->SvSTASH->NAME; } if ($need_parens) { @@ -1986,7 +1986,7 @@ sub populate_curcvlex { : ($ns[$i]->COP_SEQ_RANGE_LOW, $ns[$i]->COP_SEQ_RANGE_HIGH); push @{$self->{'curcvlex'}{ - ($ns[$i]->FLAGS & SVpad_OUR ? 'o' : 'm') . $name + ($ns[$i]->FLAGS & PADNAMEf_OUR ? 'o' : 'm') . $name }}, [$seq_st, $seq_en, $ns[$i]]; } } @@ -3693,7 +3693,7 @@ sub maybe_var_attr { return unless $loppriv & OPpLVAL_INTRO; my $padname = $self->padname_sv($lop->targ); - my $thisclass = ($padname->FLAGS & SVpad_TYPED) + my $thisclass = ($padname->FLAGS & PADNAMEf_TYPED) ? $padname->SvSTASH->NAME : 'main'; # all pad vars must be in the same class @@ -3812,7 +3812,7 @@ sub pp_list { $local = "my"; } my $padname = $self->padname_sv($lop->targ); - if ($padname->FLAGS & SVpad_TYPED) { + if ($padname->FLAGS & PADNAMEf_TYPED) { $newtype = $padname->SvSTASH->NAME; } } elsif ($lopname =~ /^(?:gv|rv2)([ash])v$/ @@ -9683,7 +9683,7 @@ S_op_const_sv(pTHX_ const OP *o, CV *cv, bool allow_lex) SAVEFREESV(sv); } else if (allow_lex && type == OP_PADSV) { - if (PAD_COMPNAME_FLAGS(o->op_targ) & PADNAMEt_OUTER) + if (PAD_COMPNAME_FLAGS(o->op_targ) & PADNAMEf_OUTER) { sv = &PL_sv_undef; /* an arbitrary non-null value */ padsv = TRUE; @@ -2753,9 +2753,9 @@ Perl_newPADNAMEpvn(const char *s, STRLEN len) Constructs and returns a new pad name. Only use this function for names that refer to outer lexicals. (See also L</newPADNAMEpvn>.) C<outer> is the outer pad name that this one mirrors. The returned pad name has the -C<PADNAMEt_OUTER> flag already set. +C<PADNAMEf_OUTER> flag already set. -=for apidoc Amnh||PADNAMEt_OUTER +=for apidoc Amnh||PADNAMEf_OUTER =cut */ @@ -2771,7 +2771,7 @@ Perl_newPADNAMEouter(PADNAME *outer) /* Not PadnameREFCNT(outer), because ‘outer’ may itself close over another entry. The original pad name owns the buffer. */ PadnameREFCNT(PADNAME_FROM_PV(PadnamePV(outer)))++; - PadnameFLAGS(pn) = PADNAMEt_OUTER; + PadnameFLAGS(pn) = PADNAMEf_OUTER; PadnameLEN(pn) = PadnameLEN(outer); return pn; } @@ -323,31 +323,38 @@ Restore the old pad saved into the local variable C<opad> by C<PAD_SAVE_LOCAL()> #define PadnameREFCNT_dec(pn) Perl_padname_free(aTHX_ pn) #define PadnameOURSTASH_set(pn,s) (PadnameOURSTASH(pn) = (s)) #define PadnameTYPE_set(pn,s) (PadnameTYPE(pn) = (s)) -#define PadnameOUTER(pn) (PadnameFLAGS(pn) & PADNAMEt_OUTER) -#define PadnameIsSTATE(pn) (PadnameFLAGS(pn) & PADNAMEt_STATE) -#define PadnameLVALUE(pn) (PadnameFLAGS(pn) & PADNAMEt_LVALUE) +#define PadnameOUTER(pn) (PadnameFLAGS(pn) & PADNAMEf_OUTER) +#define PadnameIsSTATE(pn) (PadnameFLAGS(pn) & PADNAMEf_STATE) +#define PadnameLVALUE(pn) (PadnameFLAGS(pn) & PADNAMEf_LVALUE) -#define PadnameLVALUE_on(pn) (PadnameFLAGS(pn) |= PADNAMEt_LVALUE) -#define PadnameIsSTATE_on(pn) (PadnameFLAGS(pn) |= PADNAMEt_STATE) +#define PadnameLVALUE_on(pn) (PadnameFLAGS(pn) |= PADNAMEf_LVALUE) +#define PadnameIsSTATE_on(pn) (PadnameFLAGS(pn) |= PADNAMEf_STATE) -#define PADNAMEt_OUTER 1 /* outer lexical var */ -#define PADNAMEt_STATE 2 /* state var */ -#define PADNAMEt_LVALUE 4 /* used as lvalue */ -#define PADNAMEt_TYPED 8 /* for B; unused by core */ -#define PADNAMEt_OUR 16 /* for B; unused by core */ +#define PADNAMEf_OUTER 0x01 /* outer lexical var */ +#define PADNAMEf_STATE 0x02 /* state var */ +#define PADNAMEf_LVALUE 0x04 /* used as lvalue */ +#define PADNAMEf_TYPED 0x08 /* for B; unused by core */ +#define PADNAMEf_OUR 0x10 /* for B; unused by core */ /* backward compatibility */ #define SvPAD_STATE PadnameIsSTATE #define SvPAD_TYPED(pn) cBOOL(PadnameTYPE(pn)) #define SvPAD_OUR(pn) cBOOL(PadnameOURSTASH(pn)) #define SvPAD_STATE_on PadnameIsSTATE_on -#define SvPAD_TYPED_on(pn) (PadnameFLAGS(pn) |= PADNAMEt_TYPED) -#define SvPAD_OUR_on(pn) (PadnameFLAGS(pn) |= PADNAMEt_OUR) +#define SvPAD_TYPED_on(pn) (PadnameFLAGS(pn) |= PADNAMEf_TYPED) +#define SvPAD_OUR_on(pn) (PadnameFLAGS(pn) |= PADNAMEf_OUR) #define SvOURSTASH PadnameOURSTASH #define SvOURSTASH_set PadnameOURSTASH_set -#define SVpad_STATE PADNAMEt_STATE -#define SVpad_TYPED PADNAMEt_TYPED -#define SVpad_OUR PADNAMEt_OUR +#define SVpad_STATE PADNAMEf_STATE +#define SVpad_TYPED PADNAMEf_TYPED +#define SVpad_OUR PADNAMEf_OUR +#ifndef PERL_CORE +# define PADNAMEt_OUTER PADNAMEf_OUTER +# define PADNAMEt_STATE PADNAMEf_STATE +# define PADNAMEt_LVALUE PADNAMEf_LVALUE +# define PADNAMEt_TYPED PADNAMEf_TYPED +# define PADNAMEt_OUR PADNAMEf_OUR +#endif #ifdef DEBUGGING # define PAD_SV(po) pad_sv(po) |