use &dl_error rather than &dl_load_file as the guard for calling
[p5sagit/p5-mst-13.2.git] / ext / ByteLoader / bytecode.h
index abab1e4..1621fed 100644 (file)
@@ -8,8 +8,8 @@ typedef OP *opindex;
 typedef IV IV64;
 
 #define BGET_FREAD(argp, len, nelem)   \
-        bs.fread((char*)(argp),(len),(nelem),bs.data)
-#define BGET_FGETC() bs.fgetc(bs.data)
+        bs.pfread((char*)(argp),(len),(nelem),bs.data)
+#define BGET_FGETC() bs.pfgetc(bs.data)
 
 #define BGET_U32(arg)  \
        BGET_FREAD(&arg, sizeof(U32), 1); arg = PerlSock_ntohl((U32)arg)
@@ -22,7 +22,7 @@ typedef IV IV64;
 #define BGET_PV(arg)   STMT_START {    \
        BGET_U32(arg);                  \
        if (arg)                        \
-           bs.freadpv(arg, bs.data, &bytecode_pv);     \
+           bs.pfreadpv(arg, bs.data, &bytecode_pv);    \
        else {                          \
            bytecode_pv.xpv_pv = 0;             \
            bytecode_pv.xpv_len = 0;            \
@@ -30,8 +30,22 @@ typedef IV IV64;
        }                               \
     } STMT_END
 
-#define BGET_comment_t(arg) \
+#ifdef BYTELOADER_LOG_COMMENTS
+#  define BGET_comment_t(arg) \
+    STMT_START {                                                       \
+       char buf[1024];                                                 \
+       int i = 0;                                                      \
+       do {                                                            \
+           arg = BGET_FGETC();                                         \
+           buf[i++] = (char)arg;                                       \
+       } while (arg != '\n' && arg != EOF);                            \
+       buf[i] = '\0';                                                  \
+       PerlIO_printf(PerlIO_stderr(), "%s", buf);                      \
+    } STMT_END
+#else
+#  define BGET_comment_t(arg) \
        do { arg = BGET_FGETC(); } while (arg != '\n' && arg != EOF)
+#endif
 
 /*
  * In the following, sizeof(IV)*4 is just a way of encoding 32 on 64-bit-IV
@@ -43,7 +57,7 @@ typedef IV IV64;
        BGET_U32(hi);                                   \
        BGET_U32(lo);                                   \
        if (sizeof(IV) == 8)                            \
-           arg = (IV) (hi << (sizeof(IV)*4) | lo);     \
+           arg = ((IV)hi << (sizeof(IV)*4) | (IV)lo);  \
        else if (((I32)hi == -1 && (I32)lo < 0)         \
                 || ((I32)hi == 0 && (I32)lo >= 0)) {   \
            arg = (I32)lo;                              \
@@ -70,10 +84,10 @@ typedef IV IV64;
        arg = PL_tokenbuf;                      \
     } STMT_END
 
-#define BGET_double(arg) STMT_START {  \
+#define BGET_NV(arg) STMT_START {      \
        char *str;                      \
        BGET_strconst(str);             \
-       arg = atof(str);                \
+       arg = Atof(str);                \
     } STMT_END
 
 #define BGET_objindex(arg, type) STMT_START {  \
@@ -111,9 +125,10 @@ typedef IV IV64;
 #define BSET_pv_free(pv)       Safefree(pv.xpv_pv)
 #define BSET_pregcomp(o, arg) \
        ((PMOP*)o)->op_pmregexp = arg ? \
-               CALLREGCOMP(arg, arg + bytecode_pv.xpv_cur, ((PMOP*)o)) : 0
+               CALLREGCOMP(aTHX_ arg, arg + bytecode_pv.xpv_cur, ((PMOP*)o)) : 0
 #define BSET_newsv(sv, arg)    sv = NEWSV(666,0); SvUPGRADE(sv, arg)
-#define BSET_newop(o, arg)     o = (OP*)safemalloc(optype_size[arg])
+#define BSET_newop(o, arg)     ((o = (OP*)safemalloc(optype_size[arg])), \
+                                memzero((char*)o,optype_size[arg]))
 #define BSET_newopn(o, arg) STMT_START {       \
        OP *oldop = o;                          \
        BSET_newop(o, arg);                     \
@@ -132,12 +147,15 @@ typedef IV IV64;
            arg = OP_GREPSTART;                 \
        o->op_ppaddr = PL_ppaddr[arg];          \
     } STMT_END
-#define BSET_op_ppaddr(o, arg) croak("op_ppaddr not yet implemented")
+#define BSET_op_ppaddr(o, arg) Perl_croak(aTHX_ "op_ppaddr not yet implemented")
 #define BSET_curpad(pad, arg) STMT_START {     \
        PL_comppad = (AV *)arg;                 \
        pad = AvARRAY(arg);                     \
     } STMT_END
+#define BSET_cop_file(cop, arg)                CopFILE_set(cop,arg)
+#define BSET_cop_line(cop, arg)                CopLINE_set(cop,arg)
+#define BSET_cop_stashpv(cop, arg)     CopSTASHPV_set(cop,arg)
 
 #define BSET_OBJ_STORE(obj, ix)                \
        (I32)ix > bytecode_obj_list_fill ?      \
-       bset_obj_store(obj, (I32)ix) : (bytecode_obj_list[ix] = obj)
+       bset_obj_store(aTHXo_ obj, (I32)ix) : (bytecode_obj_list[ix] = obj)