add ck_sysread() for better sysread/read/recv sanity
[p5sagit/p5-mst-13.2.git] / opcode.h
index 7ac3895..435b7d2 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -349,10 +349,11 @@ typedef enum {
        OP_GETLOGIN,    /* 342 */
        OP_SYSCALL,     /* 343 */
        OP_LOCK,        /* 344 */
+       OP_THREADSV,    /* 345 */
        OP_max          
 } opcode;
 
-#define MAXO 345
+#define MAXO 346
 
 #ifndef DOINIT
 EXT char *op_name[];
@@ -703,6 +704,7 @@ EXT char *op_name[] = {
        "getlogin",
        "syscall",
        "lock",
+       "threadsv",
 };
 #endif
 
@@ -1055,9 +1057,11 @@ EXT char *op_desc[] = {
        "getlogin",
        "syscall",
        "lock",
+       "per-thread variable",
 };
 #endif
 
+#ifndef PERL_OBJECT
 START_EXTERN_C
 
 OP *   ck_anoncode     _((OP* o));
@@ -1091,6 +1095,7 @@ OP *      ck_spair        _((OP* o));
 OP *   ck_split        _((OP* o));
 OP *   ck_subr         _((OP* o));
 OP *   ck_svconst      _((OP* o));
+OP *   ck_sysread      _((OP* o));
 OP *   ck_trunc        _((OP* o));
 
 OP *   pp_null         _((ARGSproto));
@@ -1438,14 +1443,16 @@ OP *    pp_egrent       _((ARGSproto));
 OP *   pp_getlogin     _((ARGSproto));
 OP *   pp_syscall      _((ARGSproto));
 OP *   pp_lock         _((ARGSproto));
-
+OP *   pp_threadsv     _((ARGSproto));
 
 END_EXTERN_C
+#endif /* PERL_OBJECT */
 
 #ifndef DOINIT
-EXT OP * (*ppaddr[])_((ARGSproto));
+EXT OP * (CPERLscope(*ppaddr)[])(ARGSproto);
 #else
-EXT OP * (*ppaddr[])_((ARGSproto)) = {
+#ifndef PERL_OBJECT
+EXT OP * (CPERLscope(*ppaddr)[])(ARGSproto) = {
        pp_null,
        pp_stub,
        pp_scalar,
@@ -1791,13 +1798,16 @@ EXT OP * (*ppaddr[])_((ARGSproto)) = {
        pp_getlogin,
        pp_syscall,
        pp_lock,
+       pp_threadsv,
 };
+#endif /* PERL_OBJECT */
 #endif
 
 #ifndef DOINIT
-EXT OP * (*check[]) _((OP *op));
+EXT OP * (CPERLscope(*check)[]) _((OP *op));
 #else
-EXT OP * (*check[]) _((OP *op)) = {
+#ifndef PERL_OBJECT
+EXT OP * (CPERLscope(*check)[]) _((OP *op)) = {
        ck_null,        /* null */
        ck_null,        /* stub */
        ck_fun,         /* scalar */
@@ -2000,17 +2010,17 @@ EXT OP * (*check[]) _((OP *op)) = {
        ck_select,      /* sselect */
        ck_select,      /* select */
        ck_eof,         /* getc */
-       ck_fun,         /* read */
+       ck_sysread,     /* read */
        ck_fun,         /* enterwrite */
        ck_null,        /* leavewrite */
        ck_listiob,     /* prtf */
        ck_listiob,     /* print */
        ck_fun,         /* sysopen */
        ck_fun,         /* sysseek */
-       ck_fun,         /* sysread */
+       ck_sysread,     /* sysread */
        ck_fun,         /* syswrite */
        ck_fun,         /* send */
-       ck_fun,         /* recv */
+       ck_sysread,     /* recv */
        ck_eof,         /* eof */
        ck_fun,         /* tell */
        ck_fun,         /* seek */
@@ -2143,7 +2153,9 @@ EXT OP * (*check[]) _((OP *op)) = {
        ck_null,        /* getlogin */
        ck_fun,         /* syscall */
        ck_rfun,        /* lock */
+       ck_null,        /* threadsv */
 };
+#endif /* PERL_OBJECT */
 #endif
 
 #ifndef DOINIT
@@ -2170,8 +2182,8 @@ EXT U32 opargs[] = {
        0x00000140,     /* rv2cv */
        0x00000700,     /* anoncode */
        0x00001c04,     /* prototype */
-       0x00002001,     /* refgen */
-       0x00001006,     /* srefgen */
+       0x00002101,     /* refgen */
+       0x00001106,     /* srefgen */
        0x00009c8c,     /* ref */
        0x00091504,     /* bless */
        0x00000c08,     /* backtick */
@@ -2259,7 +2271,7 @@ EXT U32 opargs[] = {
        0x00009c8e,     /* oct */
        0x00009c8e,     /* abs */
        0x00009c9c,     /* length */
-       0x0091150c,     /* substr */
+       0x0991150c,     /* substr */
        0x0011151c,     /* vec */
        0x0091151c,     /* index */
        0x0091151c,     /* rindex */
@@ -2495,6 +2507,6 @@ EXT U32 opargs[] = {
        0x0000000c,     /* getlogin */
        0x0002151d,     /* syscall */
        0x00001c04,     /* lock */
+       0x00000044,     /* threadsv */
 };
 #endif
-