Fix B and ByteLoader to cope with cop_warnings no longer being an SV.
[p5sagit/p5-mst-13.2.git] / ext / ByteLoader / bytecode.h
index a503627..7ba0236 100644 (file)
@@ -31,7 +31,7 @@ typedef char *pvindex;
 #define BGET_PV(arg)   STMT_START {                                    \
        BGET_U32(arg);                                                  \
        if (arg) {                                                      \
-           New(666, bstate->bs_pv.pvx, arg, char);                     \
+           Newx(bstate->bs_pv.pvx, arg, char);                 \
            bl_read(bstate->bs_fdata, bstate->bs_pv.pvx, arg, 1);       \
            bstate->bs_pv.xpv.xpv_len = arg;                            \
            bstate->bs_pv.xpv.xpv_cur = arg - 1;                        \
@@ -63,7 +63,7 @@ typedef char *pvindex;
 #define BGET_op_tr_array(arg) do {                     \
        unsigned short *ary, len;                       \
        BGET_U16(len);                                  \
-       New(666, ary, len, unsigned short);             \
+       Newx(ary, len, unsigned short);         \
        BGET_FREAD(ary, sizeof(unsigned short), len);   \
        arg = (char *) ary;                             \
     } while (0)
@@ -190,7 +190,7 @@ typedef char *pvindex;
                sv = (SV*)newHV();                      \
                break;                                  \
            default:                                    \
-               sv = NEWSV(0,0);                        \
+               sv = newSV(0);                          \
                SvUPGRADE(sv, (arg));                   \
            }
 #define BSET_newsvx(sv, arg) STMT_START {              \
@@ -347,7 +347,20 @@ typedef char *pvindex;
        mg_set(*hv_store(GvHV(gv_fetchpv("SIG", TRUE, SVt_PVHV)),       \
                name, strlen(name), cv, 0))
 
-#define BSET_xhv_name(hv, name)        Perl_hv_name_set(aTHX_ hv, name, strlen(name), 0)
+#define BSET_xhv_name(hv, name)        hv_name_set((HV*)hv, name, strlen(name), 0)
+#define BSET_cop_arybase(c, b) CopARYBASE_set(c, b)
+#define BSET_cop_warnings(c, w) \
+       STMT_START {                                                    \
+           if (specialWARN((STRLEN *)w)) {                             \
+               c->cop_warnings = (STRLEN *)w;                          \
+           } else {                                                    \
+               STRLEN len;                                             \
+               const char *const p = SvPV_const(w, len);               \
+               c->cop_warnings =                                       \
+                   Perl_new_warnings_bitfield(aTHX_ NULL, p, len);     \
+               SvREFCNT_dec(w);                                        \
+           }                                                           \
+       } STMT_END
 
 /* NOTE: the bytecode header only sanity-checks the bytecode. If a script cares about
  * what version of Perl it's being called under, it should do a 'use 5.006_001' or