{
dVAR;
OPCODE type;
- PADOFFSET refcnt;
if (!o || o->op_static)
return;
+ type = o->op_type;
if (o->op_private & OPpREFCOUNTED) {
- switch (o->op_type) {
+ switch (type) {
case OP_LEAVESUB:
case OP_LEAVESUBLV:
case OP_LEAVEEVAL:
case OP_LEAVE:
case OP_SCOPE:
case OP_LEAVEWRITE:
+ {
+ PADOFFSET refcnt;
OP_REFCNT_LOCK;
refcnt = OpREFCNT_dec(o);
OP_REFCNT_UNLOCK;
if (refcnt)
return;
+ }
break;
default:
break;
op_free(kid);
}
}
- type = o->op_type;
if (type == OP_NULL)
type = (OPCODE)o->op_targ;
SvREFCNT_dec(cop->cop_warnings);
if (! specialCopIO(cop->cop_io)) {
#ifdef USE_ITHREADS
-#if 0
- STRLEN len;
- char *s = SvPV(cop->cop_io,len);
- Perl_warn(aTHX_ "io='%.*s'",(int) len,s); /* ??? --jhi */
-#endif
+ /*EMPTY*/
#else
SvREFCNT_dec(cop->cop_io);
#endif
Perl_op_refcnt_lock(pTHX)
{
dVAR;
+ PERL_UNUSED_CONTEXT;
OP_REFCNT_LOCK;
}
Perl_op_refcnt_unlock(pTHX)
{
dVAR;
+ PERL_UNUSED_CONTEXT;
OP_REFCNT_UNLOCK;
}
else {
if (ckWARN(WARN_VOID)) {
useless = "a constant";
+ if (o->op_private & OPpCONST_ARYBASE)
+ useless = 0;
/* don't warn on optimised away booleans, eg
* use constant Foo, 5; Foo || print; */
if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
PL_modcount++;
return o;
case OP_CONST:
- if (!(o->op_private & (OPpCONST_ARYBASE)))
+ if (!(o->op_private & OPpCONST_ARYBASE))
goto nomod;
localize = 0;
if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
* are OP_CONST. We need to push the OP_CONST values.
*/
if (o->op_type == OP_CONST)
- rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
+ rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
else {
assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
rop = NULL;
if (o->op_type == OP_CONST)
rop = append_elem(OP_LIST, rop,
newSVOP(OP_CONST, o->op_flags,
- SvREFCNT_inc(cSVOPo->op_sv)));
+ SvREFCNT_inc_NN(cSVOPo->op_sv)));
}
}
return rop;
/* Don't force the C<use> if we don't need it. */
SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
if (svp && *svp != &PL_sv_undef)
- ; /* already in %INC */
+ /*EMPTY*/; /* already in %INC */
else
Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
newSVpvs(ATTRSMODULE), NULL);
OP *
Perl_sawparens(pTHX_ OP *o)
{
+ PERL_UNUSED_CONTEXT;
if (o)
o->op_flags |= OPf_PARENS;
return o;
{
dVAR;
const I32 offset = pad_findmy("$_");
- if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
+ if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
}
else {
#if 0
list(o);
#else
- ;
+ /*EMPTY*/;
#endif
else {
if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
pad_swipe(o->op_targ, FALSE);
else if (SvTEMP(sv)) { /* grab mortal temp? */
- (void)SvREFCNT_inc(sv);
+ SvREFCNT_inc_simple_void(sv);
SvTEMP_off(sv);
}
op_free(o);
o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
o->op_opt = 0; /* needs to be revisited in peep() */
curop = ((UNOP*)o)->op_first;
- ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
+ ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
op_free(curop);
linklist(o);
return list(o);
Safefree(cPVOPo->op_pv);
cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
SvREFCNT_dec(listsv);
- if (transv)
- SvREFCNT_dec(transv);
+ SvREFCNT_dec(transv);
if (!del && havefinal && rlen)
(void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
if (grows)
o->op_private |= OPpTRANS_GROWS;
- if (tsave)
- Safefree(tsave);
- if (rsave)
- Safefree(rsave);
+ Safefree(tsave);
+ Safefree(rsave);
op_free(expr);
op_free(repl);
sv_setiv(repointer,0);
} else {
SV * const repointer = newSViv(0);
- av_push(PL_regex_padav,SvREFCNT_inc(repointer));
+ av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
pmop->op_pmoffset = av_len(PL_regex_padav);
PL_regex_pad = AvARRAY(PL_regex_padav);
}
repl_has_vars = 1;
}
else if (curop->op_type == OP_PUSHRE)
- ; /* Okay here, dangerous in newASSIGNOP */
+ /*EMPTY*/; /* Okay here, dangerous in newASSIGNOP */
else
break;
}
#ifdef USE_ITHREADS
if (gv)
GvIN_PAD_on(gv);
- return newPADOP(type, flags, SvREFCNT_inc(gv));
+ return newPADOP(type, flags, SvREFCNT_inc_simple(gv));
#else
- return newSVOP(type, flags, SvREFCNT_inc(gv));
+ return newSVOP(type, flags, SvREFCNT_inc_simple(gv));
#endif
}
if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
if (curop->op_type == OP_GV) {
GV *gv = cGVOPx_gv(curop);
- if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
+ if (gv == PL_defgv
+ || (int)GvASSIGN_GENERATION(gv) == PL_generation)
break;
- SvCUR_set(gv, PL_generation);
+ GvASSIGN_GENERATION_set(gv, PL_generation);
}
else if (curop->op_type == OP_PADSV ||
curop->op_type == OP_PADAV ||
#else
GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
#endif
- if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
+ if (gv == PL_defgv
+ || (int)GvASSIGN_GENERATION(gv) == PL_generation)
break;
- SvCUR_set(gv, PL_generation);
+ GvASSIGN_GENERATION_set(gv, PL_generation);
+ GvASSIGN_GENERATION_set(gv, PL_generation);
}
}
else
if (PL_eval_start)
PL_eval_start = 0;
else {
+ op_free(o);
o = newSVOP(OP_CONST, 0, newSViv(PL_compiling.cop_arybase));
+ o->op_private |= OPpCONST_ARYBASE;
}
}
return o;
}
else {
const I32 offset = pad_findmy("$_");
- if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
+ if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
sv = newGVOP(OP_GV, 0, PL_defgv);
}
else {
{
dVAR;
#ifdef USE_ITHREADS
- if (CvFILE(cv) && !CvXSUB(cv)) {
+ if (CvFILE(cv) && !CvISXSUB(cv)) {
/* for XSUBs CvFILE point directly to static memory; __FILE__ */
Safefree(CvFILE(cv));
}
CvFILE(cv) = 0;
#endif
- if (!CvXSUB(cv) && CvROOT(cv)) {
- if (CvDEPTH(cv))
+ if (!CvISXSUB(cv) && CvROOT(cv)) {
+ if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
Perl_croak(aTHX_ "Can't undef active subroutine");
ENTER;
SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
CvCONST_off(cv);
}
- if (CvXSUB(cv)) {
- CvXSUB(cv) = 0;
+ if (CvISXSUB(cv) && CvXSUB(cv)) {
+ CvXSUB(cv) = NULL;
}
/* delete all flags except WEAKOUTSIDE */
CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
SV *
Perl_cv_const_sv(pTHX_ CV *cv)
{
+ PERL_UNUSED_CONTEXT;
if (!cv)
return NULL;
if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
}
}
if (const_sv) {
- (void)SvREFCNT_inc(const_sv);
+ SvREFCNT_inc_void_NN(const_sv);
if (cv) {
assert(!CvROOT(cv) && !CvCONST(cv));
sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
CvXSUBANY(cv).any_ptr = const_sv;
CvXSUB(cv) = const_sv_xsub;
CvCONST_on(cv);
+ CvISXSUB_on(cv);
}
else {
GvCV(gv) = NULL;
(void)gv_fetchfile(filename);
CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
an external constant string */
+ CvISXSUB_on(cv);
CvXSUB(cv) = subaddr;
if (name) {
Perl_ck_concat(pTHX_ OP *o)
{
const OP * const kid = cUNOPo->op_first;
+ PERL_UNUSED_CONTEXT;
if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
!(kUNOP->op_first->op_flags & OPf_MOD))
o->op_flags |= OPf_STACKED;
kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
GvIN_PAD_on(gv);
- PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc(gv));
+ PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
#else
- kid->op_sv = SvREFCNT_inc(gv);
+ kid->op_sv = SvREFCNT_inc_simple_NN(gv);
#endif
kid->op_private = 0;
kid->op_ppaddr = PL_ppaddr[OP_GV];
const I32 type = o->op_type;
if (o->op_flags & OPf_REF) {
- /* nothing */
+ /*EMPTY*/;
}
else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
SVOP * const kid = (SVOP*)cUNOPo->op_first;
gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
GvCV(gv) = GvCV(glob_gv);
- (void)SvREFCNT_inc((SV*)GvCV(gv));
+ SvREFCNT_inc_void((SV*)GvCV(gv));
GvIMPORTED_CV_on(gv);
LEAVE;
}
gwop->op_other = LINKLIST(kid);
kid->op_next = (OP*)gwop;
offset = pad_findmy("$_");
- if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
+ if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
o->op_private = gwop->op_private = 0;
gwop->op_targ = pad_alloc(type, SVs_PADTMP);
}
dVAR;
if (o->op_type != OP_QR && PL_compcv) {
const I32 offset = pad_findmy("$_");
- if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS(offset) & SVpad_OUR)) {
+ if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
o->op_targ = offset;
o->op_private |= OPpTARGET_MY;
}
OP *
Perl_ck_null(pTHX_ OP *o)
{
+ PERL_UNUSED_CONTEXT;
return o;
}
OP *
Perl_ck_svconst(pTHX_ OP *o)
{
+ PERL_UNUSED_CONTEXT;
SvREADONLY_on(cSVOPo->op_sv);
return o;
}
if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
break;
lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
- if (!(SvFLAGS(lexname) & SVpad_TYPED))
+ if (!SvPAD_TYPED(lexname))
break;
fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
if (!fields || !GvHV(*fields))
}
lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
- if (!(SvFLAGS(lexname) & SVpad_TYPED))
+ if (!SvPAD_TYPED(lexname))
break;
fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
if (!fields || !GvHV(*fields))
dVAR;
dXSARGS;
if (items != 0) {
+ /*EMPTY*/;
#if 0
Perl_croak(aTHX_ "usage: %s::%s()",
HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));