X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=op.h;h=e38c578c48b4579cbdfefac52c56b91afade3cce;hb=9061c4b923969fe4301d8ee29f5fc13aad24f9f7;hp=e687f42d22acd5481dec41236aab985b5811d2dd;hpb=0d863452f5cac86322a90184dc68dbf446006ed7;p=p5sagit%2Fp5-mst-13.2.git diff --git a/op.h b/op.h index e687f42..e38c578 100644 --- a/op.h +++ b/op.h @@ -36,6 +36,12 @@ #define OPCODE U16 #endif +#ifdef PERL_MAD +# define MADPROP_IN_BASEOP MADPROP* op_madprop; +#else +# define MADPROP_IN_BASEOP +#endif + #ifdef BASEOP_DEFINITION #define BASEOP BASEOP_DEFINITION #else @@ -43,6 +49,7 @@ OP* op_next; \ OP* op_sibling; \ OP* (CPERLscope(*op_ppaddr))(pTHX); \ + MADPROP_IN_BASEOP \ PADOFFSET op_targ; \ unsigned op_type:9; \ unsigned op_opt:1; \ @@ -105,7 +112,8 @@ Deprecated. Use C instead. /* On pushre, re is /\s+/ imp. by split " " */ /* On regcomp, "use re 'eval'" was in scope */ /* On OP_READLINE, was <$filehandle> */ - /* On RV2[SG]V, don't create GV--in defined()*/ + /* On RV2[ACGHS]V, don't create GV--in + defined()*/ /* On OP_DBSTATE, indicates breakpoint * (runtime property) */ /* On OP_AELEMFAST, indiciates pad var */ @@ -139,6 +147,7 @@ Deprecated. Use C instead. /* Private for OP_SASSIGN */ #define OPpASSIGN_BACKWARDS 64 /* Left & right switched. */ +#define OPpASSIGN_CV_TO_GV 128 /* Possible optimisation for constants. */ /* Private for OP_MATCH and OP_SUBST{,CONST} */ #define OPpRUNTIME 64 /* Pattern coming in on the stack */ @@ -180,6 +189,14 @@ Deprecated. Use C instead. #define OPpMAYBE_LVSUB 8 /* We might be an lvalue to return */ /* for OP_RV2?V, lower bits carry hints (currently only HINT_STRICT_REFS) */ + /* OP_RV2GV only */ +#define OPpDONT_INIT_GV 8 /* Call gv_fetchpv with GV_NOINIT */ +/* (Therefore will return whatever is currently in the symbol table, not + guaranteed to be a PVGV) */ + + /* OP_RV2CV only */ +#define OPpMAY_RETURN_CONSTANT 1 /* If a constant sub, return the constant */ + /* Private for OPs with TARGLEX */ /* (lower bits may carry MAXARG) */ #define OPpTARGET_MY 16 /* Target is PADMY. */ @@ -215,6 +232,9 @@ Deprecated. Use C instead. #define OPpSORT_REVERSE 4 /* Reversed sort */ #define OPpSORT_INPLACE 8 /* sort in-place; eg @a = sort @a */ #define OPpSORT_DESCEND 16 /* Descending sort */ +#define OPpSORT_QSORT 32 /* Use quicksort (not mergesort) */ +#define OPpSORT_STABLE 64 /* Use a stable algorithm */ + /* Private for OP_THREADSV */ #define OPpDONE_SVREF 64 /* Been through newSVREF once */ @@ -342,13 +362,13 @@ struct pmop { # define PmopSTASHPV_set(o,pv) (PmopSTASHPV(o) = savesharedpv(pv)) # define PmopSTASH(o) (PmopSTASHPV(o) \ ? gv_stashpv(PmopSTASHPV(o),GV_ADD) : NULL) -# define PmopSTASH_set(o,hv) PmopSTASHPV_set(o, ((hv) ? HvNAME_get(hv) : Nullch)) +# define PmopSTASH_set(o,hv) PmopSTASHPV_set(o, ((hv) ? HvNAME_get(hv) : NULL)) # define PmopSTASH_free(o) PerlMemShared_free(PmopSTASHPV(o)) #else # define PmopSTASH(o) ((o)->op_pmstash) # define PmopSTASH_set(o,hv) ((o)->op_pmstash = (hv)) -# define PmopSTASHPV(o) (PmopSTASH(o) ? HvNAME_get(PmopSTASH(o)) : Nullch) +# define PmopSTASHPV(o) (PmopSTASH(o) ? HvNAME_get(PmopSTASH(o)) : NULL) /* op_pmstash is not refcounted */ # define PmopSTASHPV_set(o,pv) PmopSTASH_set((o), gv_stashpv(pv,GV_ADD)) # define PmopSTASH_free(o) @@ -509,7 +529,7 @@ struct loop { #endif #define OpREFCNT_set(o,n) ((o)->op_targ = (n)) -#define OpREFCNT_inc(o) ((o) ? (++(o)->op_targ, (o)) : Nullop) +#define OpREFCNT_inc(o) ((o) ? (++(o)->op_targ, (o)) : NULL) #define OpREFCNT_dec(o) (--(o)->op_targ) /* flags used by Perl_load_module() */ @@ -536,3 +556,25 @@ struct loop { (var = (OP*)safemalloc(size), memzero(var, size)) #define FreeOp(p) Safefree(p) #endif + +#ifdef PERL_MAD +# define MAD_NULL 1 +# define MAD_PV 2 +# define MAD_OP 3 +# define MAD_SV 4 + +struct madprop { + MADPROP* mad_next; + void *mad_val; + U32 mad_vlen; +/* short mad_count; */ + char mad_key; + char mad_type; +}; + +struct token { + I32 tk_type; + YYSTYPE tk_lval; + MADPROP* tk_mad; +}; +#endif