support optional crypt() with PERL_OBJECT
[p5sagit/p5-mst-13.2.git] / pp_ctl.c
index fb990b9..8d4b7f7 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -26,9 +26,9 @@
 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
 
 #ifdef PERL_OBJECT
-#define CALLOP this->*op
+#define CALLOP this->*PL_op
 #else
-#define CALLOP *op
+#define CALLOP *PL_op
 static OP *docatch _((OP *o));
 static OP *dofindlabel _((OP *o, char *label, OP **opstack, OP **oplimit));
 static void doparseform _((SV *sv));
@@ -108,7 +108,7 @@ PP(pp_regcomp)
                ReREFCNT_dec(pm->op_pmregexp);
                pm->op_pmregexp = Null(REGEXP*);        /* crucial if regcomp aborts */
            }
-           if (op->op_flags & OPf_SPECIAL)
+           if (PL_op->op_flags & OPf_SPECIAL)
                PL_reginterp_cnt = I32_MAX; /* Mark as safe.  */
 
            pm->op_pmflags = pm->op_pmpermflags;        /* reset case sensitivity */
@@ -134,7 +134,7 @@ PP(pp_regcomp)
 
     if (pm->op_pmflags & PMf_KEEP) {
        pm->op_private &= ~OPpRUNTIME;  /* no point compiling again */
-       cLOGOP->op_first->op_next = op->op_next;
+       cLOGOP->op_first->op_next = PL_op->op_next;
     }
     RETURN;
 }
@@ -568,7 +568,7 @@ PP(pp_grepstart)
        (void)POPMARK;
        if (GIMME_V == G_SCALAR)
            XPUSHs(&PL_sv_no);
-       RETURNOP(op->op_next->op_next);
+       RETURNOP(PL_op->op_next->op_next);
     }
     PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
     pp_pushmark(ARGS);                         /* push dst */
@@ -590,9 +590,9 @@ PP(pp_grepstart)
     DEFSV = src;
 
     PUTBACK;
-    if (op->op_type == OP_MAPSTART)
+    if (PL_op->op_type == OP_MAPSTART)
        pp_pushmark(ARGS);                      /* push top */
-    return ((LOGOP*)op->op_next)->op_other;
+    return ((LOGOP*)PL_op->op_next)->op_other;
 }
 
 PP(pp_mapstart)
@@ -673,7 +673,7 @@ PP(pp_sort)
     GV *gv;
     CV *cv;
     I32 gimme = GIMME;
-    OP* nextop = op->op_next;
+    OP* nextop = PL_op->op_next;
 
     if (gimme != G_ARRAY) {
        SP = MARK;
@@ -682,8 +682,8 @@ PP(pp_sort)
 
     ENTER;
     SAVEPPTR(PL_sortcop);
-    if (op->op_flags & OPf_STACKED) {
-       if (op->op_flags & OPf_SPECIAL) {
+    if (PL_op->op_flags & OPf_STACKED) {
+       if (PL_op->op_flags & OPf_SPECIAL) {
            OP *kid = cLISTOP->op_first->op_sibling;    /* pass pushmark */
            kid = kUNOP->op_first;                      /* pass rv2gv */
            kid = kUNOP->op_first;                      /* pass leave */
@@ -753,7 +753,7 @@ PP(pp_sort)
            SAVESPTR(GvSV(PL_secondgv));
 
            PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
-           if (!(op->op_flags & OPf_SPECIAL)) {
+           if (!(PL_op->op_flags & OPf_SPECIAL)) {
                bool hasargs = FALSE;
                cx->cx_type = CXt_SUB;
                cx->blk_gimme = G_SCALAR;
@@ -773,7 +773,7 @@ PP(pp_sort)
        if (max > 1) {
            MEXTEND(SP, 20);    /* Can't afford stack realloc on signal. */
            qsortsv(ORIGMARK+1, max,
-                   (op->op_private & OPpLOCALE)
+                   (PL_op->op_private & OPpLOCALE)
                    ? FUNC_NAME_TO_PTR(sv_cmp_locale)
                    : FUNC_NAME_TO_PTR(sv_cmp));
        }
@@ -789,7 +789,7 @@ PP(pp_range)
 {
     if (GIMME == G_ARRAY)
        return cCONDOP->op_true;
-    return SvTRUEx(PAD_SV(op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
+    return SvTRUEx(PAD_SV(PL_op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
 }
 
 PP(pp_flip)
@@ -801,13 +801,13 @@ PP(pp_flip)
     }
     else {
        dTOPss;
-       SV *targ = PAD_SV(op->op_targ);
+       SV *targ = PAD_SV(PL_op->op_targ);
 
-       if ((op->op_private & OPpFLIP_LINENUM)
+       if ((PL_op->op_private & OPpFLIP_LINENUM)
          ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
          : SvTRUE(sv) ) {
            sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
-           if (op->op_flags & OPf_SPECIAL) {
+           if (PL_op->op_flags & OPf_SPECIAL) {
                sv_setiv(targ, 1);
                SETs(targ);
                RETURN;
@@ -856,6 +856,7 @@ PP(pp_flop)
            char *tmps = SvPV(final, len);
 
            sv = sv_mortalcopy(left);
+           SvPV_force(sv,PL_na);
            while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
                XPUSHs(sv);
                if (strEQ(SvPVX(sv),tmps))
@@ -869,7 +870,7 @@ PP(pp_flop)
        dTOPss;
        SV *targ = PAD_SV(cUNOP->op_first->op_targ);
        sv_inc(targ);
-       if ((op->op_private & OPpFLIP_LINENUM)
+       if ((PL_op->op_private & OPpFLIP_LINENUM)
          ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
          : SvTRUE(sv) ) {
            sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
@@ -895,19 +896,19 @@ dopoptolabel(char *label)
        switch (cx->cx_type) {
        case CXt_SUBST:
            if (PL_dowarn)
-               warn("Exiting substitution via %s", op_name[op->op_type]);
+               warn("Exiting substitution via %s", op_name[PL_op->op_type]);
            break;
        case CXt_SUB:
            if (PL_dowarn)
-               warn("Exiting subroutine via %s", op_name[op->op_type]);
+               warn("Exiting subroutine via %s", op_name[PL_op->op_type]);
            break;
        case CXt_EVAL:
            if (PL_dowarn)
-               warn("Exiting eval via %s", op_name[op->op_type]);
+               warn("Exiting eval via %s", op_name[PL_op->op_type]);
            break;
        case CXt_NULL:
            if (PL_dowarn)
-               warn("Exiting pseudo-block via %s", op_name[op->op_type]);
+               warn("Exiting pseudo-block via %s", op_name[PL_op->op_type]);
            return -1;
        case CXt_LOOP:
            if (!cx->blk_loop.label ||
@@ -1011,19 +1012,19 @@ dopoptoloop(I32 startingblock)
        switch (cx->cx_type) {
        case CXt_SUBST:
            if (PL_dowarn)
-               warn("Exiting substitution via %s", op_name[op->op_type]);
+               warn("Exiting substitution via %s", op_name[PL_op->op_type]);
            break;
        case CXt_SUB:
            if (PL_dowarn)
-               warn("Exiting subroutine via %s", op_name[op->op_type]);
+               warn("Exiting subroutine via %s", op_name[PL_op->op_type]);
            break;
        case CXt_EVAL:
            if (PL_dowarn)
-               warn("Exiting eval via %s", op_name[op->op_type]);
+               warn("Exiting eval via %s", op_name[PL_op->op_type]);
            break;
        case CXt_NULL:
            if (PL_dowarn)
-               warn("Exiting pseudo-block via %s", op_name[op->op_type]);
+               warn("Exiting pseudo-block via %s", op_name[PL_op->op_type]);
            return -1;
        case CXt_LOOP:
            DEBUG_l( deb("(Found loop #%ld)\n", (long)i));
@@ -1293,7 +1294,7 @@ sortcv(SV *a, SV *b)
     GvSV(PL_firstgv) = a;
     GvSV(PL_secondgv) = b;
     PL_stack_sp = PL_stack_base;
-    op = PL_sortcop;
+    PL_op = PL_sortcop;
     CALLRUNOPS();
     if (PL_stack_sp != PL_stack_base + 1)
        croak("Sort subroutine didn't return single value");
@@ -1328,12 +1329,12 @@ PP(pp_lineseq)
 
 PP(pp_dbstate)
 {
-    PL_curcop = (COP*)op;
+    PL_curcop = (COP*)PL_op;
     TAINT_NOT;         /* Each statement is presumed innocent */
     PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
     FREETMPS;
 
-    if (op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
+    if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
     {
        djSP;
        register CV *cv;
@@ -1359,7 +1360,7 @@ PP(pp_dbstate)
        hasargs = 0;
        SPAGAIN;
 
-       push_return(op->op_next);
+       push_return(PL_op->op_next);
        PUSHBLOCK(cx, CXt_SUB, SP);
        PUSHSUB(cx);
        CvDEPTH(cv)++;
@@ -1388,12 +1389,12 @@ PP(pp_enteriter)
     SAVETMPS;
 
 #ifdef USE_THREADS
-    if (op->op_flags & OPf_SPECIAL)
-       svp = save_threadsv(op->op_targ);       /* per-thread variable */
+    if (PL_op->op_flags & OPf_SPECIAL)
+       svp = save_threadsv(PL_op->op_targ);    /* per-thread variable */
     else
 #endif /* USE_THREADS */
-    if (op->op_targ) {
-       svp = &PL_curpad[op->op_targ];          /* "my" variable */
+    if (PL_op->op_targ) {
+       svp = &PL_curpad[PL_op->op_targ];               /* "my" variable */
        SAVESPTR(*svp);
     }
     else {
@@ -1406,7 +1407,7 @@ PP(pp_enteriter)
 
     PUSHBLOCK(cx, CXt_LOOP, SP);
     PUSHLOOP(cx, svp, MARK);
-    if (op->op_flags & OPf_STACKED) {
+    if (PL_op->op_flags & OPf_STACKED) {
        cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
        if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
            dPOPss;
@@ -1591,7 +1592,7 @@ PP(pp_last)
     PMOP *newpm;
     SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
 
-    if (op->op_flags & OPf_SPECIAL) {
+    if (PL_op->op_flags & OPf_SPECIAL) {
        cxix = dopoptoloop(cxstack_ix);
        if (cxix < 0)
            DIE("Can't \"last\" outside a block");
@@ -1664,7 +1665,7 @@ PP(pp_next)
     register PERL_CONTEXT *cx;
     I32 oldsave;
 
-    if (op->op_flags & OPf_SPECIAL) {
+    if (PL_op->op_flags & OPf_SPECIAL) {
        cxix = dopoptoloop(cxstack_ix);
        if (cxix < 0)
            DIE("Can't \"next\" outside a block");
@@ -1689,7 +1690,7 @@ PP(pp_redo)
     register PERL_CONTEXT *cx;
     I32 oldsave;
 
-    if (op->op_flags & OPf_SPECIAL) {
+    if (PL_op->op_flags & OPf_SPECIAL) {
        cxix = dopoptoloop(cxstack_ix);
        if (cxix < 0)
            DIE("Can't \"redo\" outside a block");
@@ -1766,10 +1767,10 @@ PP(pp_goto)
 #define GOTO_DEPTH 64
     OP *enterops[GOTO_DEPTH];
     char *label;
-    int do_dump = (op->op_type == OP_DUMP);
+    int do_dump = (PL_op->op_type == OP_DUMP);
 
     label = 0;
-    if (op->op_flags & OPf_STACKED) {
+    if (PL_op->op_flags & OPf_STACKED) {
        SV *sv = POPs;
 
        /* This egregious kludge implements goto &subroutine */
@@ -1820,7 +1821,7 @@ PP(pp_goto)
                AV* av;
                int i;
 #ifdef USE_THREADS
-               av = (AV*)curpad[0];
+               av = (AV*)PL_curpad[0];
 #else
                av = GvAV(PL_defgv);
 #endif
@@ -1926,7 +1927,7 @@ PP(pp_goto)
                }
 #ifdef USE_THREADS
                if (!cx->blk_sub.hasargs) {
-                   AV* av = (AV*)curpad[0];
+                   AV* av = (AV*)PL_curpad[0];
                    
                    items = AvFILLp(av) + 1;
                    if (items) {
@@ -2003,7 +2004,7 @@ PP(pp_goto)
        else
            label = SvPV(sv,PL_na);
     }
-    else if (op->op_flags & OPf_SPECIAL) {
+    else if (PL_op->op_flags & OPf_SPECIAL) {
        if (! do_dump)
            DIE("goto must have label");
     }
@@ -2073,23 +2074,23 @@ PP(pp_goto)
        /* push wanted frames */
 
        if (*enterops && enterops[1]) {
-           OP *oldop = op;
+           OP *oldop = PL_op;
            for (ix = 1; enterops[ix]; ix++) {
-               op = enterops[ix];
+               PL_op = enterops[ix];
                /* Eventually we may want to stack the needed arguments
                 * for each op.  For now, we punt on the hard ones. */
-               if (op->op_type == OP_ENTERITER)
+               if (PL_op->op_type == OP_ENTERITER)
                    DIE("Can't \"goto\" into the middle of a foreach loop",
                        label);
                (CALLOP->op_ppaddr)(ARGS);
            }
-           op = oldop;
+           PL_op = oldop;
        }
     }
 
     if (do_dump) {
 #ifdef VMS
-       if (!retop) retop = main_start;
+       if (!retop) retop = PL_main_start;
 #endif
        PL_restartop = retop;
        PL_do_undump = TRUE;
@@ -2143,8 +2144,8 @@ PP(pp_nswitch)
        match = 0;
     else if (match > cCOP->uop.scop.scop_max)
        match = cCOP->uop.scop.scop_max;
-    op = cCOP->uop.scop.scop_next[match];
-    RETURNOP(op);
+    PL_op = cCOP->uop.scop.scop_next[match];
+    RETURNOP(PL_op);
 }
 
 PP(pp_cswitch)
@@ -2152,18 +2153,18 @@ PP(pp_cswitch)
     djSP;
     register I32 match;
 
-    if (multiline)
-       op = op->op_next;                       /* can't assume anything */
+    if (PL_multiline)
+       PL_op = PL_op->op_next;                 /* can't assume anything */
     else {
-       match = *(SvPVx(GvSV(cCOP->cop_gv), na)) & 255;
+       match = *(SvPVx(GvSV(cCOP->cop_gv), PL_na)) & 255;
        match -= cCOP->uop.scop.scop_offset;
        if (match < 0)
            match = 0;
        else if (match > cCOP->uop.scop.scop_max)
            match = cCOP->uop.scop.scop_max;
-       op = cCOP->uop.scop.scop_next[match];
+       PL_op = cCOP->uop.scop.scop_next[match];
     }
-    RETURNOP(op);
+    RETURNOP(PL_op);
 }
 #endif
 
@@ -2198,10 +2199,10 @@ docatch(OP *o)
 {
     dTHR;
     int ret;
-    OP *oldop = op;
+    OP *oldop = PL_op;
     dJMPENV;
 
-    op = o;
+    PL_op = o;
 #ifdef DEBUGGING
     assert(CATCH_GET == TRUE);
     DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, PL_top_env));
@@ -2210,7 +2211,7 @@ docatch(OP *o)
     switch (ret) {
     default:                           /* topmost level handles it */
        JMPENV_POP;
-       op = oldop;
+       PL_op = oldop;
        JMPENV_JUMP(ret);
        /* NOTREACHED */
     case 3:
@@ -2218,7 +2219,7 @@ docatch(OP *o)
            PerlIO_printf(PerlIO_stderr(), "panic: restartop\n");
            break;
        }
-       op = PL_restartop;
+       PL_op = PL_restartop;
        PL_restartop = 0;
        /* FALL THROUGH */
     case 0:
@@ -2226,7 +2227,7 @@ docatch(OP *o)
        break;
     }
     JMPENV_POP;
-    op = oldop;
+    PL_op = oldop;
     return Nullop;
 }
 
@@ -2242,7 +2243,7 @@ sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
     I32 gimme = 0;   /* SUSPECT - INITIALZE TO WHAT?  NI-S */
     I32 optype;
     OP dummy;
-    OP *oop = op, *rop;
+    OP *oop = PL_op, *rop;
     char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
     char *safestr;
 
@@ -2251,6 +2252,10 @@ sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
     SAVETMPS;
     /* switch to eval mode */
 
+    if (PL_curcop == &PL_compiling) {
+       SAVESPTR(PL_compiling.cop_stash);
+       PL_compiling.cop_stash = PL_curstash;
+    }
     SAVESPTR(PL_compiling.cop_filegv);
     SAVEI16(PL_compiling.cop_line);
     sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
@@ -2265,17 +2270,17 @@ sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
     SAVEDELETE(PL_defstash, safestr, strlen(safestr));
     SAVEHINTS();
 #ifdef OP_IN_REGISTER
-    opsave = op;
+    PL_opsave = op;
 #else
-    SAVEPPTR(op);
+    SAVEPPTR(PL_op);
 #endif
     PL_hints = 0;
 
-    op = &dummy;
-    op->op_type = 0;                   /* Avoid uninit warning. */
-    op->op_flags = 0;                  /* Avoid uninit warning. */
+    PL_op = &dummy;
+    PL_op->op_type = 0;                        /* Avoid uninit warning. */
+    PL_op->op_flags = 0;                       /* Avoid uninit warning. */
     PUSHBLOCK(cx, CXt_EVAL, SP);
-    PUSHEVAL(cx, 0, compiling.cop_filegv);
+    PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
     rop = doeval(G_SCALAR, startop);
     POPBLOCK(cx,PL_curpm);
     POPEVAL(cx);
@@ -2286,7 +2291,7 @@ sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
     *avp = (AV*)SvREFCNT_inc(PL_comppad);
     LEAVE;
 #ifdef OP_IN_REGISTER
-    op = opsave;
+    op = PL_opsave;
 #endif
     return rop;
 }
@@ -2296,7 +2301,7 @@ STATIC OP *
 doeval(int gimme, OP** startop)
 {
     dSP;
-    OP *saveop = op;
+    OP *saveop = PL_op;
     HV *newstash;
     CV *caller;
     AV* comppadlist;
@@ -2317,7 +2322,7 @@ doeval(int gimme, OP** startop)
     SAVEI32(PL_max_intro_pending);
 
     caller = PL_compcv;
-    for (i = cxstack_ix - 1; i >= 0; i--) {
+    for (i = cxstack_ix; i >= 0; i--) {
        PERL_CONTEXT *cx = &cxstack[i];
        if (cx->cx_type == CXt_EVAL)
            break;
@@ -2332,9 +2337,9 @@ doeval(int gimme, OP** startop)
     sv_upgrade((SV *)PL_compcv, SVt_PVCV);
     CvUNIQUE_on(PL_compcv);
 #ifdef USE_THREADS
-    CvOWNER(compcv) = 0;
-    New(666, CvMUTEXP(compcv), 1, perl_mutex);
-    MUTEX_INIT(CvMUTEXP(compcv));
+    CvOWNER(PL_compcv) = 0;
+    New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
+    MUTEX_INIT(CvMUTEXP(PL_compcv));
 #endif /* USE_THREADS */
 
     PL_comppad = newAV();
@@ -2345,9 +2350,9 @@ doeval(int gimme, OP** startop)
     PL_min_intro_pending = 0;
     PL_padix = 0;
 #ifdef USE_THREADS
-    av_store(comppad_name, 0, newSVpv("@_", 2));
-    curpad[0] = (SV*)newAV();
-    SvPADMY_on(curpad[0]);     /* XXX Needed? */
+    av_store(PL_comppad_name, 0, newSVpv("@_", 2));
+    PL_curpad[0] = (SV*)newAV();
+    SvPADMY_on(PL_curpad[0]);  /* XXX Needed? */
 #endif /* USE_THREADS */
 
     comppadlist = newAV();
@@ -2390,7 +2395,7 @@ doeval(int gimme, OP** startop)
        PERL_CONTEXT *cx;
        I32 optype = 0;                 /* Might be reset by POPEVAL. */
 
-       op = saveop;
+       PL_op = saveop;
        if (PL_eval_root) {
            op_free(PL_eval_root);
            PL_eval_root = Nullop;
@@ -2416,10 +2421,10 @@ doeval(int gimme, OP** startop)
        SvREFCNT_dec(PL_rs);
        PL_rs = SvREFCNT_inc(PL_nrs);
 #ifdef USE_THREADS
-       MUTEX_LOCK(&eval_mutex);
-       eval_owner = 0;
-       COND_SIGNAL(&eval_cond);
-       MUTEX_UNLOCK(&eval_mutex);
+       MUTEX_LOCK(&PL_eval_mutex);
+       PL_eval_owner = 0;
+       COND_SIGNAL(&PL_eval_cond);
+       MUTEX_UNLOCK(&PL_eval_mutex);
 #endif /* USE_THREADS */
        RETPUSHUNDEF;
     }
@@ -2457,12 +2462,12 @@ doeval(int gimme, OP** startop)
 
     CvDEPTH(PL_compcv) = 1;
     SP = PL_stack_base + POPMARK;              /* pop original mark */
-    op = saveop;                       /* The caller may need it. */
+    PL_op = saveop;                    /* The caller may need it. */
 #ifdef USE_THREADS
-    MUTEX_LOCK(&eval_mutex);
-    eval_owner = 0;
-    COND_SIGNAL(&eval_cond);
-    MUTEX_UNLOCK(&eval_mutex);
+    MUTEX_LOCK(&PL_eval_mutex);
+    PL_eval_owner = 0;
+    COND_SIGNAL(&PL_eval_cond);
+    MUTEX_UNLOCK(&PL_eval_mutex);
 #endif /* USE_THREADS */
 
     RETURNOP(PL_eval_start);
@@ -2493,7 +2498,7 @@ PP(pp_require)
     if (!(name && len > 0 && *name))
        DIE("Null filename used");
     TAINT_PROPER("require");
-    if (op->op_type == OP_REQUIRE &&
+    if (PL_op->op_type == OP_REQUIRE &&
       (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
       *svp != &PL_sv_undef)
        RETPUSHYES;
@@ -2553,7 +2558,7 @@ PP(pp_require)
     PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
     SvREFCNT_dec(namesv);
     if (!tryrsfp) {
-       if (op->op_type == OP_REQUIRE) {
+       if (PL_op->op_type == OP_REQUIRE) {
            SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
            SV *dirmsgsv = NEWSV(0, 0);
            AV *ar = GvAVn(PL_incgv);
@@ -2596,20 +2601,20 @@ PP(pp_require)
  
     /* switch to eval mode */
 
-    push_return(op->op_next);
+    push_return(PL_op->op_next);
     PUSHBLOCK(cx, CXt_EVAL, SP);
-    PUSHEVAL(cx, name, compiling.cop_filegv);
+    PUSHEVAL(cx, name, PL_compiling.cop_filegv);
 
     PL_compiling.cop_line = 0;
 
     PUTBACK;
 #ifdef USE_THREADS
-    MUTEX_LOCK(&eval_mutex);
-    if (eval_owner && eval_owner != thr)
-       while (eval_owner)
-           COND_WAIT(&eval_cond, &eval_mutex);
-    eval_owner = thr;
-    MUTEX_UNLOCK(&eval_mutex);
+    MUTEX_LOCK(&PL_eval_mutex);
+    if (PL_eval_owner && PL_eval_owner != thr)
+       while (PL_eval_owner)
+           COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
+    PL_eval_owner = thr;
+    MUTEX_UNLOCK(&PL_eval_mutex);
 #endif /* USE_THREADS */
     return DOCATCH(doeval(G_SCALAR, NULL));
 }
@@ -2652,11 +2657,11 @@ PP(pp_entereval)
     safestr = savepv(tmpbuf);
     SAVEDELETE(PL_defstash, safestr, strlen(safestr));
     SAVEHINTS();
-    PL_hints = op->op_targ;
+    PL_hints = PL_op->op_targ;
 
-    push_return(op->op_next);
+    push_return(PL_op->op_next);
     PUSHBLOCK(cx, CXt_EVAL, SP);
-    PUSHEVAL(cx, 0, compiling.cop_filegv);
+    PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
 
     /* prepare to compile string */
 
@@ -2664,16 +2669,16 @@ PP(pp_entereval)
        save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
     PUTBACK;
 #ifdef USE_THREADS
-    MUTEX_LOCK(&eval_mutex);
-    if (eval_owner && eval_owner != thr)
-       while (eval_owner)
-           COND_WAIT(&eval_cond, &eval_mutex);
-    eval_owner = thr;
-    MUTEX_UNLOCK(&eval_mutex);
+    MUTEX_LOCK(&PL_eval_mutex);
+    if (PL_eval_owner && PL_eval_owner != thr)
+       while (PL_eval_owner)
+           COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
+    PL_eval_owner = thr;
+    MUTEX_UNLOCK(&PL_eval_mutex);
 #endif /* USE_THREADS */
     ret = doeval(gimme, NULL);
     if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
-       && ret != op->op_next) {        /* Successive compilation. */
+       && ret != PL_op->op_next) {     /* Successive compilation. */
        strcpy(safestr, "_<(eval )");   /* Anything fake and short. */
     }
     return DOCATCH(ret);
@@ -2688,7 +2693,7 @@ PP(pp_leaveeval)
     I32 gimme;
     register PERL_CONTEXT *cx;
     OP *retop;
-    U8 save_flags = op -> op_flags;
+    U8 save_flags = PL_op -> op_flags;
     I32 optype;
 
     POPBLOCK(cx,newpm);
@@ -2788,12 +2793,12 @@ PP(pp_entertry)
     push_return(cLOGOP->op_other->op_next);
     PUSHBLOCK(cx, CXt_EVAL, SP);
     PUSHEVAL(cx, 0, 0);
-    PL_eval_root = op;         /* Only needed so that goto works right. */
+    PL_eval_root = PL_op;              /* Only needed so that goto works right. */
 
     PL_in_eval = 1;
     sv_setpv(ERRSV,"");
     PUTBACK;
-    return DOCATCH(op->op_next);
+    return DOCATCH(PL_op->op_next);
 }
 
 PP(pp_leavetry)