Patch for Perlbug #4253
[p5sagit/p5-mst-13.2.git] / sv.h
diff --git a/sv.h b/sv.h
index c26da9d..9fe3657 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -188,6 +188,7 @@ perform the upgrade if necessary.  See C<svtype>.
 #define SVp_SCREAM     0x08000000      /* has been studied? */
 
 #define SVf_UTF8        0x20000000      /* SvPV is UTF-8 encoded */
+/* Ensure this value does not clash with the GV_ADD* flags in gv.h */
 
 #define SVf_THINKFIRST (SVf_READONLY|SVf_ROK|SVf_FAKE)
 
@@ -606,6 +607,8 @@ and leaves the UTF-8 status as it was.
 =cut
  */
 
+/* Ensure the return value of this macro does not clash with the GV_ADD* flags
+in gv.h: */
 #define SvUTF8(sv)             (SvFLAGS(sv) & SVf_UTF8)
 #define SvUTF8_on(sv)          (SvFLAGS(sv) |= (SVf_UTF8))
 #define SvUTF8_off(sv)         (SvFLAGS(sv) &= ~(SVf_UTF8))
@@ -1103,6 +1106,7 @@ Like C<sv_catsv> but doesn't process magic.
 #define SV_GMAGIC              2
 #define SV_COW_DROP_PV         4
 #define SV_UTF8_NO_ENCODING    8
+#define SV_NOSTEAL             16
 
 /* We are about to replace the SV's current value. So if it's copy on write
    we need to normalise it. Use the SV_COW_DROP_PV flag hint to say that
@@ -1242,10 +1246,7 @@ Returns a pointer to the character buffer.
 #define SvSetSV_nosteal_and(dst,src,finally) \
        STMT_START {                                    \
            if ((dst) != (src)) {                       \
-               U32 tMpF = SvFLAGS(src) & SVs_TEMP;     \
-               SvTEMP_off(src);                        \
-               sv_setsv(dst, src);                     \
-               SvFLAGS(src) |= tMpF;                   \
+               sv_setsv_flags(dst, src, SV_GMAGIC | SV_NOSTEAL);       \
                finally;                                \
            }                                           \
        } STMT_END