#ifdef USE_OP_MASK
/*
* In the following definition, the ", (OP *) op" is just to make the compiler
- * think the expression is of the right type: croak actually does a longjmp.
+ * think the expression is of the right type: croak actually does a Siglongjmp.
*/
#define CHECKOP(type,op) \
((op_mask && op_mask[type]) \
SvFLAGS(sv) |= SVf_FAKE;
}
av_store(comppad, newoff, SvREFCNT_inc(oldsv));
- SvFLAGS(compcv) |= SVpcv_CLONE;
+ CvCLONE_on(compcv);
return newoff;
}
}
curop = LINKLIST(o);
o->op_next = 0;
op = curop;
- run();
+ runops();
sv = *(stack_sp--);
if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
pad_swipe(o->op_targ);
for (curop = ((UNOP*)o)->op_first; curop; curop = curop->op_sibling) {
if (curop->op_type == OP_CONST) {
if (SvIOK(((SVOP*)curop)->op_sv)) {
- if (SvIVX(((SVOP*)curop)->op_sv) < 0 && vars++)
+ if (SvIVX(((SVOP*)curop)->op_sv) <= 0 && vars++)
return o; /* negatives truncate wrong way, alas */
continue;
}
if (curop->op_type == OP_PADSV || curop->op_type == OP_RV2SV) {
if (vars++)
return o;
- if (o->op_type >= OP_LT && o->op_type <= OP_NCMP)
- continue; /* allow $i < 10000 to integerize */
+ if (((o->op_type == OP_LT || o->op_type == OP_GE) &&
+ curop == ((BINOP*)o)->op_first ) ||
+ ((o->op_type == OP_GT || o->op_type == OP_LE) &&
+ curop == ((BINOP*)o)->op_last ))
+ {
+ /* Allow "$i < 100" and variants to integerize */
+ continue;
+ }
}
return o;
}
op = curop = LINKLIST(o);
o->op_next = 0;
pp_pushmark();
- run();
+ runops();
op = curop;
pp_anonlist();
tmps_floor = oldtmps_floor;
tmpop->op_sibling = Nullop; /* don't free split */
right->op_next = tmpop->op_next; /* fix starting loc */
op_free(op); /* blow off assign */
+ right->op_flags &= ~(OPf_KNOW|OPf_LIST);
+ /* "I don't know and I don't care." */
return right;
}
}
if (perldb && curstash != debstash) {
SV **svp = av_fetch(GvAV(curcop->cop_filegv),(I32)cop->cop_line, FALSE);
if (svp && *svp != &sv_undef && !SvIOK(*svp)) {
- SvIVX(*svp) = 1;
(void)SvIOK_on(*svp);
+ SvIVX(*svp) = 1;
SvSTASH(*svp) = (HV*)cop;
}
}
SAVESPTR(curpad);
curpad = 0;
- if (!(SvFLAGS(cv) & SVpcv_CLONED))
+ if (!CvCLONED(cv))
op_free(CvROOT(cv));
CvROOT(cv) = Nullop;
LEAVE;
cv = compcv = (CV*)NEWSV(1104,0);
sv_upgrade((SV *)cv, SVt_PVCV);
- SvFLAGS(cv) |= SVpcv_CLONED;
+ CvCLONED_on(cv);
CvFILEGV(cv) = CvFILEGV(proto);
CvGV(cv) = SvREFCNT_inc(CvGV(proto));
if (cv = GvCV(gv)) {
if (GvCVGEN(gv))
cv = 0; /* just a cached method */
- else if (CvROOT(cv) || CvXSUB(cv) || GvFLAGS(gv) & GVf_IMPORTED) {
+ else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
if (dowarn) { /* already defined (or promised)? */
line_t oldline = curcop->cop_line;
LEAVE_SCOPE(floor);
if (!op) {
GvCV(gv) = 0; /* Will remember in SVOP instead. */
- SvFLAGS(cv) |= SVpcv_ANON;
+ CvANON_on(cv);
}
return cv;
}
char *filename;
{
CV* cv = newXS(name, (void(*)())subaddr, filename);
- CvOLDSTYLE(cv) = TRUE;
+ CvOLDSTYLE_on(cv);
CvXSUBANY(cv).any_i32 = ix;
return cv;
}
}
if (!name) {
GvCV(gv) = 0; /* Will remember elsewhere instead. */
- SvFLAGS(cv) |= SVpcv_ANON;
+ CvANON_on(cv);
}
return cv;
}
else
name = "STDOUT";
gv = gv_fetchpv(name,TRUE, SVt_PVFM);
- SvMULTI_on(gv);
+ GvMULTI_on(gv);
if (cv = GvFORM(gv)) {
if (dowarn) {
line_t oldline = curcop->cop_line;