Fix gross win32 build issues
[p5sagit/p5-mst-13.2.git] / scope.c
diff --git a/scope.c b/scope.c
index 3293c48..1ce65ef 100644 (file)
--- a/scope.c
+++ b/scope.c
@@ -50,7 +50,7 @@ Perl_vdefault_protect(pTHX_ volatile JMPENV *pcur_env, int *excpt,
 SV**
 Perl_stack_grow(pTHX_ SV **sp, SV **p, int n)
 {
-#if defined(DEBUGGING) && !defined(USE_THREADS)
+#if defined(DEBUGGING) && !defined(USE_5005THREADS)
     static int growing = 0;
     if (growing++)
       abort();
@@ -61,7 +61,7 @@ Perl_stack_grow(pTHX_ SV **sp, SV **p, int n)
 #else
     av_extend(PL_curstack, (p - PL_stack_base) + (n) + 1);
 #endif
-#if defined(DEBUGGING) && !defined(USE_THREADS)
+#if defined(DEBUGGING) && !defined(USE_5005THREADS)
     growing--;
 #endif
     return PL_stack_sp;
@@ -197,12 +197,13 @@ S_save_scalar_at(pTHX_ SV **sptr)
            MAGIC* mg;
            bool oldtainted = PL_tainted;
            mg_get(osv);                /* note, can croak! */
-           if (PL_tainting && PL_tainted && (mg = mg_find(osv, 't'))) {
+           if (PL_tainting && PL_tainted &&
+                       (mg = mg_find(osv, PERL_MAGIC_taint))) {
                SAVESPTR(mg->mg_obj);
                mg->mg_obj = osv;
            }
            SvFLAGS(osv) |= (SvFLAGS(osv) &
-               (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
+               (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
            PL_tainted = oldtainted;
        }
        SvMAGIC(sv) = SvMAGIC(osv);
@@ -457,7 +458,7 @@ Perl_save_padsv(pTHX_ PADOFFSET off)
 SV **
 Perl_save_threadsv(pTHX_ PADOFFSET i)
 {
-#ifdef USE_THREADS
+#ifdef USE_5005THREADS
     SV **svp = &THREADSV(i);   /* XXX Change to save by offset */
     DEBUG_S(PerlIO_printf(Perl_debug_log, "save_threadsv %"UVuf": %p %p:%s\n",
                          (UV)i, svp, *svp, SvPEEK(*svp)));
@@ -466,7 +467,7 @@ Perl_save_threadsv(pTHX_ PADOFFSET i)
 #else
     Perl_croak(aTHX_ "panic: save_threadsv called in non-threaded perl");
     return 0;
-#endif /* USE_THREADS */
+#endif /* USE_5005THREADS */
 }
 
 void
@@ -504,6 +505,14 @@ Perl_save_freesv(pTHX_ SV *sv)
 }
 
 void
+Perl_save_mortalizesv(pTHX_ SV *sv)
+{
+    SSCHECK(2);
+    SSPUSHPTR(sv);
+    SSPUSHINT(SAVEt_MORTALIZESV);
+}
+
+void
 Perl_save_freeop(pTHX_ OP *o)
 {
     SSCHECK(2);
@@ -690,7 +699,7 @@ Perl_leave_scope(pTHX_ I32 base)
                     SvTYPE(value) != SVt_PVGV)
            {
                SvFLAGS(value) |= (SvFLAGS(value) &
-                                  (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
+                                  (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
                SvMAGICAL_off(value);
                /* XXX this is a leak when we get here because the
                 * mg_get() in save_scalar_at() croaked */
@@ -803,6 +812,10 @@ Perl_leave_scope(pTHX_ I32 base)
            ptr = SSPOPPTR;
            SvREFCNT_dec((SV*)ptr);
            break;
+       case SAVEt_MORTALIZESV:
+           ptr = SSPOPPTR;
+           sv_2mortal((SV*)ptr);
+           break;
        case SAVEt_FREEOP:
            ptr = SSPOPPTR;
            if (PL_comppad)
@@ -870,7 +883,7 @@ Perl_leave_scope(pTHX_ I32 base)
            break;
        case SAVEt_DESTRUCTOR_X:
            ptr = SSPOPPTR;
-           (*SSPOPDXPTR)(aTHXo_ ptr);
+           (*SSPOPDXPTR)(aTHX_ ptr);
            break;
        case SAVEt_REGCONTEXT:
        case SAVEt_ALLOC:
@@ -889,7 +902,7 @@ Perl_leave_scope(pTHX_ I32 base)
            if (ptr) {
                sv = *(SV**)ptr;
                if (sv && sv != &PL_sv_undef) {
-                   if (SvTIED_mg((SV*)av, 'P'))
+                   if (SvTIED_mg((SV*)av, PERL_MAGIC_tied))
                        (void)SvREFCNT_inc(sv);
                    SvREFCNT_dec(av);
                    goto restore_sv;
@@ -907,7 +920,7 @@ Perl_leave_scope(pTHX_ I32 base)
                SV *oval = HeVAL((HE*)ptr);
                if (oval && oval != &PL_sv_undef) {
                    ptr = &HeVAL((HE*)ptr);
-                   if (SvTIED_mg((SV*)hv, 'P'))
+                   if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied))
                        (void)SvREFCNT_inc(*(SV**)ptr);
                    SvREFCNT_dec(hv);
                    SvREFCNT_dec(sv);