X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=op.h;h=4ad2a2bcfcbcfa8f2c79dd8289f396d394b31ba8;hb=3f6d40bd7fe955329c1f574485922604c74d8097;hp=7262afe967004f9829e0a0bd976a66e989d30278;hpb=737ddd9966a0343f74f23dcc8d4025bbf64d3e59;p=p5sagit%2Fp5-mst-13.2.git diff --git a/op.h b/op.h index 7262afe..4ad2a2b 100644 --- a/op.h +++ b/op.h @@ -45,6 +45,8 @@ # define MADPROP_IN_BASEOP #endif +typedef PERL_BITFIELD16 optype; + #ifdef BASEOP_DEFINITION #define BASEOP BASEOP_DEFINITION #else @@ -54,22 +56,29 @@ OP* (CPERLscope(*op_ppaddr))(pTHX); \ MADPROP_IN_BASEOP \ PADOFFSET op_targ; \ - unsigned op_type:9; \ - unsigned op_opt:1; \ - unsigned op_latefree:1; \ - unsigned op_latefreed:1; \ - unsigned op_attached:1; \ - unsigned op_spare:3; \ + PERL_BITFIELD16 op_type:9; \ + PERL_BITFIELD16 op_opt:1; \ + PERL_BITFIELD16 op_latefree:1; \ + PERL_BITFIELD16 op_latefreed:1; \ + PERL_BITFIELD16 op_attached:1; \ + PERL_BITFIELD16 op_spare:3; \ U8 op_flags; \ U8 op_private; #endif +/* If op_type:9 is changed to :10, also change PUSHEVAL in cop.h. + Also, if the type of op_type is ever changed (e.g. to PERL_BITFIELD32) + then all the other bit-fields before/after it should change their + types too to let VC pack them into the same 4 byte integer.*/ + #define OP_GIMME(op,dfl) \ (((op)->op_flags & OPf_WANT) == OPf_WANT_VOID ? G_VOID : \ ((op)->op_flags & OPf_WANT) == OPf_WANT_SCALAR ? G_SCALAR : \ ((op)->op_flags & OPf_WANT) == OPf_WANT_LIST ? G_ARRAY : \ dfl) +#define OP_GIMME_REVERSE(flags) ((flags) & G_WANT) + /* =head1 "Gimme" Values @@ -103,8 +112,6 @@ Deprecated. Use C instead. #define OPf_STACKED 64 /* Some arg is arriving on the stack. */ #define OPf_SPECIAL 128 /* Do something weird for this op: */ /* On local LVAL, don't init local value. */ - /* On OP_CONST, value is the hints hash for - eval, so return a copy from pp_const() */ /* On OP_SORT, subroutine is inlined. */ /* On OP_NOT, inversion was implicit. */ /* On OP_LEAVE, don't restore curpm. */ @@ -184,7 +191,7 @@ Deprecated. Use C instead. #define OPpENTERSUB_DB 16 /* Debug subroutine. */ #define OPpENTERSUB_HASTARG 32 /* Called from OP tree. */ #define OPpENTERSUB_NOMOD 64 /* Immune to mod() for :attrlist. */ - /* OP_RV2CV only */ + /* OP_ENTERSUB and OP_RV2CV only */ #define OPpENTERSUB_AMPER 8 /* Used & form to call. */ #define OPpENTERSUB_NOPAREN 128 /* bare sub call (without parens) */ #define OPpENTERSUB_INARGS 4 /* Lval used as arg to a sub. */ @@ -259,13 +266,6 @@ Deprecated. Use C instead. /* Private for OP_FTXXX */ #define OPpFT_ACCESS 2 /* use filetest 'access' */ #define OPpFT_STACKED 4 /* stacked filetest, as in "-f -x $f" */ -#define OP_IS_FILETEST_ACCESS(op) \ - (((op)->op_type) == OP_FTRREAD || \ - ((op)->op_type) == OP_FTRWRITE || \ - ((op)->op_type) == OP_FTREXEC || \ - ((op)->op_type) == OP_FTEREAD || \ - ((op)->op_type) == OP_FTEWRITE || \ - ((op)->op_type) == OP_FTEEXEC) /* Private for OP_(MAP|GREP)(WHILE|START) */ #define OPpGREP_LEX 2 /* iterate over lexical $_ */ @@ -513,7 +513,9 @@ struct loop { #define cSVOPo_sv cSVOPx_sv(o) #define kSVOP_sv cSVOPx_sv(kid) -#define Nullop ((OP*)NULL) +#ifndef PERL_CORE +# define Nullop ((OP*)NULL) +#endif /* Lowest byte-and-a-bit of PL_opargs */ #define OA_MARK 1