typedef enum opcode {
OP_NULL,
OP_STUB,
OP_SCALAR,
OP_PUSHMARK,
OP_WANTARRAY,
OP_CONST,
OP_GVSV,
OP_GV,
OP_GELEM,
OP_PADSV,
OP_PADAV,
OP_PADHV,
OP_PADANY,
OP_PUSHRE,
OP_RV2GV,
OP_RV2SV,
OP_AV2ARYLEN,
OP_RV2CV,
OP_ANONCODE,
OP_PROTOTYPE,
OP_REFGEN,
OP_SREFGEN,
OP_REF,
OP_BLESS,
OP_BACKTICK,
OP_GLOB,
OP_READLINE,
OP_RCATLINE,
OP_REGCMAYBE,
OP_REGCRESET,
OP_REGCOMP,
OP_MATCH,
OP_QR,
OP_SUBST,
OP_SUBSTCONT,
OP_TRANS,
OP_SASSIGN,
OP_AASSIGN,
OP_CHOP,
OP_SCHOP,
OP_CHOMP,
OP_SCHOMP,
OP_DEFINED,
OP_UNDEF,
OP_STUDY,
OP_POS,
OP_PREINC,
OP_I_PREINC,
OP_PREDEC,
OP_I_PREDEC,
OP_POSTINC,
OP_I_POSTINC,
OP_POSTDEC,
OP_I_POSTDEC,
OP_POW,
OP_MULTIPLY,
OP_I_MULTIPLY,
OP_DIVIDE,
OP_I_DIVIDE,
OP_MODULO,
OP_I_MODULO,
OP_REPEAT,
OP_ADD,
OP_I_ADD,
OP_SUBTRACT,
OP_I_SUBTRACT,
OP_CONCAT,
OP_STRINGIFY,
OP_LEFT_SHIFT,
OP_RIGHT_SHIFT,
OP_LT,
OP_I_LT,
OP_GT,
OP_I_GT,
OP_LE,
OP_I_LE,
OP_GE,
OP_I_GE,
OP_EQ,
OP_I_EQ,
OP_NE,
OP_I_NE,
OP_NCMP,
OP_I_NCMP,
OP_SLT,
OP_SGT,
OP_SLE,
OP_SGE,
OP_SEQ,
OP_SNE,
OP_SCMP,
OP_BIT_AND,
OP_BIT_XOR,
OP_BIT_OR,
OP_NEGATE,
OP_I_NEGATE,
OP_NOT,
OP_COMPLEMENT,
OP_ATAN2,
OP_SIN,
OP_COS,
OP_RAND,
OP_SRAND,
OP_EXP,
OP_LOG,
OP_SQRT,
OP_INT,
OP_HEX,
OP_OCT,
OP_ABS,
OP_LENGTH,
OP_SUBSTR,
OP_VEC,
OP_INDEX,
OP_RINDEX,
OP_SPRINTF,
OP_FORMLINE,
OP_ORD,
OP_CHR,
OP_CRYPT,
OP_UCFIRST,
OP_LCFIRST,
OP_UC,
OP_LC,
OP_QUOTEMETA,
OP_RV2AV,
OP_AELEMFAST,
OP_AELEM,
OP_ASLICE,
OP_EACH,
OP_VALUES,
OP_KEYS,
OP_DELETE,
OP_EXISTS,
OP_RV2HV,
OP_HELEM,
OP_HSLICE,
OP_UNPACK,
OP_PACK,
OP_SPLIT,
OP_JOIN,
OP_LIST,
OP_LSLICE,
OP_ANONLIST,
OP_ANONHASH,
OP_SPLICE,
OP_PUSH,
OP_POP,
OP_SHIFT,
OP_UNSHIFT,
OP_SORT,
OP_REVERSE,
OP_GREPSTART,
OP_GREPWHILE,
OP_MAPSTART,
OP_MAPWHILE,
OP_RANGE,
OP_FLIP,
OP_FLOP,
OP_AND,
OP_OR,
OP_XOR,
OP_COND_EXPR,
OP_ANDASSIGN,
OP_ORASSIGN,
OP_METHOD,
OP_ENTERSUB,
OP_LEAVESUB,
OP_LEAVESUBLV,
OP_CALLER,
OP_WARN,
OP_DIE,
OP_RESET,
OP_LINESEQ,
OP_NEXTSTATE,
OP_DBSTATE,
OP_UNSTACK,
OP_ENTER,
OP_LEAVE,
OP_SCOPE,
OP_ENTERITER,
OP_ITER,
OP_ENTERLOOP,
OP_LEAVELOOP,
OP_RETURN,
OP_LAST,
OP_NEXT,
OP_REDO,
OP_DUMP,
OP_GOTO,
OP_EXIT,
OP_OPEN,
OP_CLOSE,
OP_PIPE_OP,
OP_FILENO,
OP_UMASK,
OP_BINMODE,
OP_TIE,
OP_UNTIE,
OP_TIED,
OP_DBMOPEN,
OP_DBMCLOSE,
OP_SSELECT,
OP_SELECT,
OP_GETC,
OP_READ,
OP_ENTERWRITE,
OP_LEAVEWRITE,
OP_PRTF,
OP_PRINT,
OP_SYSOPEN,
OP_SYSSEEK,
OP_SYSREAD,
OP_SYSWRITE,
OP_SEND,
OP_RECV,
OP_EOF,
OP_TELL,
OP_SEEK,
OP_TRUNCATE,
OP_FCNTL,
OP_IOCTL,
OP_FLOCK,
OP_SOCKET,
OP_SOCKPAIR,
OP_BIND,
OP_CONNECT,
OP_LISTEN,
OP_ACCEPT,
OP_SHUTDOWN,
OP_GSOCKOPT,
OP_SSOCKOPT,
OP_GETSOCKNAME,
OP_GETPEERNAME,
OP_LSTAT,
OP_STAT,
OP_FTRREAD,
OP_FTRWRITE,
OP_FTREXEC,
OP_FTEREAD,
OP_FTEWRITE,
OP_FTEEXEC,
OP_FTIS,
OP_FTEOWNED,
OP_FTROWNED,
OP_FTZERO,
OP_FTSIZE,
OP_FTMTIME,
OP_FTATIME,
OP_FTCTIME,
OP_FTSOCK,
OP_FTCHR,
OP_FTBLK,
OP_FTFILE,
OP_FTDIR,
OP_FTPIPE,
OP_FTLINK,
OP_FTSUID,
OP_FTSGID,
OP_FTSVTX,
OP_FTTTY,
OP_FTTEXT,
OP_FTBINARY,
OP_CHDIR,
OP_CHOWN,
OP_CHROOT,
OP_UNLINK,
OP_CHMOD,
OP_UTIME,
OP_RENAME,
OP_LINK,
OP_SYMLINK,
OP_READLINK,
OP_MKDIR,
OP_RMDIR,
OP_OPEN_DIR,
OP_READDIR,
OP_TELLDIR,
OP_SEEKDIR,
OP_REWINDDIR,
OP_CLOSEDIR,
OP_FORK,
OP_WAIT,
OP_WAITPID,
OP_SYSTEM,
OP_EXEC,
OP_KILL,
OP_GETPPID,
OP_GETPGRP,
OP_SETPGRP,
OP_GETPRIORITY,
OP_SETPRIORITY,
OP_TIME,
OP_TMS,
OP_LOCALTIME,
OP_GMTIME,
OP_ALARM,
OP_SLEEP,
OP_SHMGET,
OP_SHMCTL,
OP_SHMREAD,
OP_SHMWRITE,
OP_MSGGET,
OP_MSGCTL,
OP_MSGSND,
OP_MSGRCV,
OP_SEMGET,
OP_SEMCTL,
OP_SEMOP,
OP_REQUIRE,
OP_DOFILE,
OP_ENTEREVAL,
OP_LEAVEEVAL,
OP_ENTERTRY,
OP_LEAVETRY,
OP_GHBYNAME,
OP_GHBYADDR,
OP_GHOSTENT,
OP_GNBYNAME,
OP_GNBYADDR,
OP_GNETENT,
OP_GPBYNAME,
OP_GPBYNUMBER,
OP_GPROTOENT,
OP_GSBYNAME,
OP_GSBYPORT,
OP_GSERVENT,
OP_SHOSTENT,
OP_SNETENT,
OP_SPROTOENT,
OP_SSERVENT,
OP_EHOSTENT,
OP_ENETENT,
OP_EPROTOENT,
OP_ESERVENT,
OP_GPWNAM,
OP_GPWUID,
OP_GPWENT,
OP_SPWENT,
OP_EPWENT,
OP_GGRNAM,
OP_GGRGID,
OP_GGRENT,
OP_SGRENT,
OP_EGRENT,
OP_GETLOGIN,
OP_SYSCALL,
OP_LOCK,
OP_THREADSV,
OP_SETSTATE,
OP_METHOD_NAMED,
OP_CUSTOM,
OP_max
} opcode;
#define MAXO 352
#define OP_phoney_INPUT_ONLY -1
#define OP_phoney_OUTPUT_ONLY -2
#define OP_IS_SOCKET(op) \
((op) == OP_ACCEPT || \
(op) == OP_BIND || \
(op) == OP_CONNECT || \
(op) == OP_GETPEERNAME || \
(op) == OP_GETSOCKNAME || \
(op) == OP_GSOCKOPT || \
(op) == OP_LISTEN || \
(op) == OP_RECV || \
(op) == OP_SEND || \
(op) == OP_SHUTDOWN || \
(op) == OP_SOCKET || \
(op) == OP_SOCKPAIR || \
(op) == OP_SSOCKOPT)
#define OP_IS_FILETEST(op) \
((op) == OP_FTATIME || \
(op) == OP_FTBINARY || \
(op) == OP_FTBLK || \
(op) == OP_FTCHR || \
(op) == OP_FTCTIME || \
(op) == OP_FTDIR || \
(op) == OP_FTEEXEC || \
(op) == OP_FTEOWNED || \
(op) == OP_FTEREAD || \
(op) == OP_FTEWRITE || \
(op) == OP_FTFILE || \
(op) == OP_FTIS || \
(op) == OP_FTLINK || \
(op) == OP_FTMTIME || \
(op) == OP_FTPIPE || \
(op) == OP_FTREXEC || \
(op) == OP_FTROWNED || \
(op) == OP_FTRREAD || \
(op) == OP_FTRWRITE || \
(op) == OP_FTSGID || \
(op) == OP_FTSIZE || \
(op) == OP_FTSOCK || \
(op) == OP_FTSUID || \
(op) == OP_FTSVTX || \
(op) == OP_FTTEXT || \
(op) == OP_FTTTY || \
(op) == OP_FTZERO)