X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=sv.h;h=b5f119352645a2fe1976317a788e59dc285952a1;hb=d6802e4345360e741b212b52b6af4a704cfce207;hp=5f4a262eb891aa8e28ab8d61295c8101bc3231d1;hpb=e4305a6302fd35f8f8c1a7e612369beaaea58a4a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/sv.h b/sv.h index 5f4a262..b5f1193 100644 --- a/sv.h +++ b/sv.h @@ -69,11 +69,11 @@ struct STRUCT_SV { /* struct sv { */ U32 sv_refcnt; /* how many references to us */ U32 sv_flags; /* what we are */ union { - IV sv_iv; - UV sv_uv; - SV* sv_rv; /* pointer to another SV */ - char* sv_pv; /* pointer to malloced string */ - SV** sv_array; + IV svu_iv; + UV svu_uv; + SV* svu_rv; /* pointer to another SV */ + char* svu_pv; /* pointer to malloced string */ + SV** svu_array; } sv_u; #ifdef DEBUG_LEAKING_SCALARS unsigned sv_debug_optype:9; /* the type of OP that allocated us */ @@ -89,11 +89,11 @@ struct gv { U32 sv_refcnt; /* how many references to us */ U32 sv_flags; /* what we are */ union { - IV sv_iv; - UV sv_uv; - SV* sv_rv; - char* sv_pv; - SV** sv_array; + IV svu_iv; + UV svu_uv; + SV* svu_rv; + char* svu_pv; + SV** svu_array; } sv_u; }; @@ -102,11 +102,11 @@ struct cv { U32 sv_refcnt; /* how many references to us */ U32 sv_flags; /* what we are */ union { - IV sv_iv; - UV sv_uv; - SV* sv_rv; - char* sv_pv; - SV** sv_array; + IV svu_iv; + UV svu_uv; + SV* svu_rv; + char* svu_pv; + SV** svu_array; } sv_u; }; @@ -115,11 +115,11 @@ struct av { U32 sv_refcnt; /* how many references to us */ U32 sv_flags; /* what we are */ union { - IV sv_iv; - UV sv_uv; - SV* sv_rv; - char* sv_pv; /* pointer to first array element */ - SV** sv_array; + IV svu_iv; + UV svu_uv; + SV* svu_rv; + char* svu_pv; /* pointer to first array element */ + SV** svu_array; } sv_u; }; @@ -128,11 +128,11 @@ struct hv { U32 sv_refcnt; /* how many references to us */ U32 sv_flags; /* what we are */ union { - IV sv_iv; - UV sv_uv; - SV* sv_rv; - char* sv_pv; - SV** sv_array; + IV svu_iv; + UV svu_uv; + SV* svu_rv; + char* svu_pv; + SV** svu_array; } sv_u; }; @@ -141,11 +141,11 @@ struct io { U32 sv_refcnt; /* how many references to us */ U32 sv_flags; /* what we are */ union { - IV sv_iv; - UV sv_uv; - SV* sv_rv; - char* sv_pv; - SV** sv_array; + IV svu_iv; + UV svu_uv; + SV* svu_rv; + char* svu_pv; + SV** svu_array; } sv_u; }; @@ -275,28 +275,37 @@ perform the upgrade if necessary. See C. #define SVpav_REIFY 0x80000000 /* can become real */ struct xpv { - STRLEN xpv_cur; /* length of sv_pv as a C string */ + IV xpv_dummy; /* This isn't allocated. */ + STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ }; -struct xpviv { - STRLEN xpv_cur; /* length of sv_pv as a C string */ +#if 0 +typedef struct xpv xpv_allocated; +#else +typedef struct { + STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ +} xpv_allocated; +#endif + +struct xpviv { IV xiv_iv; /* integer value or pv offset */ + STRLEN xpv_cur; /* length of svu_pv as a C string */ + STRLEN xpv_len; /* allocated size */ }; struct xpvuv { - STRLEN xpv_cur; /* length of sv_pv as a C string */ - STRLEN xpv_len; /* allocated size */ UV xuv_uv; /* unsigned value or pv offset */ + STRLEN xpv_cur; /* length of svu_pv as a C string */ + STRLEN xpv_len; /* allocated size */ }; struct xpvnv { - STRLEN xpv_cur; /* length of sv_pv as a C string */ - STRLEN xpv_len; /* allocated size */ IV xiv_iv; /* integer value or pv offset */ + STRLEN xpv_cur; /* length of svu_pv as a C string */ + STRLEN xpv_len; /* allocated size */ union { - NV xnvu_nv; /* numeric value, if any */ struct { void *xnv_p1; union { @@ -304,6 +313,7 @@ struct xpvnv { IV xnv_i2; } xnv_u2; } xnv_s; + NV xnvu_nv; /* numeric value, if any */ } xnv_u; }; @@ -311,11 +321,10 @@ struct xpvnv { /* These structure must match the beginning of struct xpvhv in hv.h. */ struct xpvmg { - STRLEN xpv_cur; /* length of sv_pv as a C string */ - STRLEN xpv_len; /* allocated size */ IV xiv_iv; /* integer value or pv offset */ + STRLEN xpv_cur; /* length of svu_pv as a C string */ + STRLEN xpv_len; /* allocated size */ union { - NV xnvu_nv; /* numeric value, if any */ struct { void *xnv_p1; union { @@ -323,17 +332,17 @@ struct xpvmg { IV xnv_i2; } xnv_u2; } xnv_s; + NV xnvu_nv; /* numeric value, if any */ } xnv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ }; struct xpvlv { - STRLEN xpv_cur; /* length of sv_pv as a C string */ - STRLEN xpv_len; /* allocated size */ IV xiv_iv; /* integer value or pv offset */ + STRLEN xpv_cur; /* length of svu_pv as a C string */ + STRLEN xpv_len; /* allocated size */ union { - NV xnvu_nv; /* numeric value, if any */ struct { void *xnv_p1; union { @@ -341,6 +350,7 @@ struct xpvlv { IV xnv_i2; } xnv_u2; } xnv_s; + NV xnvu_nv; /* numeric value, if any */ } xnv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ @@ -360,11 +370,10 @@ struct xpvlv { }; struct xpvgv { - STRLEN xpv_cur; /* length of sv_pv as a C string */ - STRLEN xpv_len; /* allocated size */ IV xiv_iv; /* integer value or pv offset */ + STRLEN xpv_cur; /* length of svu_pv as a C string */ + STRLEN xpv_len; /* allocated size */ union { - NV xnvu_nv; /* numeric value, if any */ struct { void *xnv_p1; union { @@ -372,6 +381,7 @@ struct xpvgv { IV xnv_i2; } xnv_u2; } xnv_s; + NV xnvu_nv; /* numeric value, if any */ } xnv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ @@ -384,11 +394,10 @@ struct xpvgv { }; struct xpvbm { - STRLEN xpv_cur; /* length of sv_pv as a C string */ - STRLEN xpv_len; /* allocated size */ IV xiv_iv; /* integer value or pv offset */ + STRLEN xpv_cur; /* length of svu_pv as a C string */ + STRLEN xpv_len; /* allocated size */ union { - NV xnvu_nv; /* numeric value, if any */ struct { void *xnv_p1; union { @@ -396,6 +405,7 @@ struct xpvbm { IV xnv_i2; } xnv_u2; } xnv_s; + NV xnvu_nv; /* numeric value, if any */ } xnv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ @@ -410,11 +420,10 @@ struct xpvbm { typedef U16 cv_flags_t; struct xpvfm { - STRLEN xpv_cur; /* length of sv_pv as a C string */ - STRLEN xpv_len; /* allocated size */ IV xiv_iv; /* integer value or pv offset */ + STRLEN xpv_cur; /* length of svu_pv as a C string */ + STRLEN xpv_len; /* allocated size */ union { - NV xnvu_nv; /* numeric value, if any */ struct { void *xnv_p1; union { @@ -422,6 +431,7 @@ struct xpvfm { IV xnv_i2; } xnv_u2; } xnv_s; + NV xnvu_nv; /* numeric value, if any */ } xnv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ @@ -444,11 +454,10 @@ struct xpvfm { }; struct xpvio { - STRLEN xpv_cur; /* length of sv_pv as a C string */ - STRLEN xpv_len; /* allocated size */ IV xiv_iv; /* integer value or pv offset */ + STRLEN xpv_cur; /* length of svu_pv as a C string */ + STRLEN xpv_len; /* allocated size */ union { - NV xnvu_nv; /* numeric value, if any */ struct { void *xnv_p1; union { @@ -456,6 +465,7 @@ struct xpvio { IV xnv_i2; } xnv_u2; } xnv_s; + NV xnvu_nv; /* numeric value, if any */ } xnv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ @@ -632,31 +642,35 @@ See C. Access the character as *(SvEND(sv)). Returns the stash of the SV. =for apidoc Am|void|SvIV_set|SV* sv|IV val -Set the value of the IV pointer in sv to val. +Set the value of the IV pointer in sv to val. It is possible to perform +the same function of this macro with an lvalue assignment to C. +With future Perls, however, it will be more efficient to use +C instead of the lvalue assignment to C. =for apidoc Am|void|SvNV_set|SV* sv|NV val -Set the value of the IV pointer in sv to val. +Set the value of the NV pointer in sv to val. See C. =for apidoc Am|void|SvPV_set|SV* sv|char* val -Set the value of the PV pointer in sv to val. +Set the value of the PV pointer in sv to val. See C. =for apidoc Am|void|SvUV_set|SV* sv|UV val -Set the value of the PV pointer in sv to val. +Set the value of the UV pointer in sv to val. See C. =for apidoc Am|void|SvRV_set|SV* sv|SV* val -Set the value of the RV pointer in sv to val. +Set the value of the RV pointer in sv to val. See C. =for apidoc Am|void|SvMAGIC_set|SV* sv|MAGIC* val -Set the value of the MAGIC pointer in sv to val. +Set the value of the MAGIC pointer in sv to val. See C. =for apidoc Am|void|SvSTASH_set|SV* sv|STASH* val -Set the value of the STASH pointer in sv to val. +Set the value of the STASH pointer in sv to val. See C. =for apidoc Am|void|SvCUR_set|SV* sv|STRLEN len -Set the current length of the string which is in the SV. See C. +Set the current length of the string which is in the SV. See C +and C. =for apidoc Am|void|SvLEN_set|SV* sv|STRLEN len -Set the actual length of the string which is in the SV. +Set the actual length of the string which is in the SV. See C. =cut */ @@ -855,9 +869,9 @@ in gv.h: */ #endif #ifdef PERL_DEBUG_COW -#define SvRV(sv) (0 + (sv)->sv_u.sv_rv) +#define SvRV(sv) (0 + (sv)->sv_u.svu_rv) #else -#define SvRV(sv) ((sv)->sv_u.sv_rv) +#define SvRV(sv) ((sv)->sv_u.svu_rv) #endif #define SvRVx(sv) SvRV(sv) @@ -865,10 +879,10 @@ in gv.h: */ #define SvIVX(sv) (0 + ((XPVIV*) SvANY(sv))->xiv_iv) #define SvUVX(sv) (0 + ((XPVUV*) SvANY(sv))->xuv_uv) #define SvNVX(sv) (0 + ((XPVNV*) SvANY(sv))->xnv_nv) -#define SvPVX(sv) (0 + (sv)->sv_u.sv_pv) +#define SvPVX(sv) (0 + (sv)->sv_u.svu_pv) #define SvCUR(sv) (0 + ((XPV*) SvANY(sv))->xpv_cur) #define SvLEN(sv) (0 + ((XPV*) SvANY(sv))->xpv_len) -#define SvEND(sv) ((sv)->sv_u.sv_pv + ((XPV*)SvANY(sv))->xpv_cur) +#define SvEND(sv) ((sv)->sv_u.svu_pv + ((XPV*)SvANY(sv))->xpv_cur) #ifdef DEBUGGING # ifdef PERL_IN_SV_C @@ -890,10 +904,10 @@ in gv.h: */ #define SvIVX(sv) ((XPVIV*) SvANY(sv))->xiv_iv #define SvUVX(sv) ((XPVUV*) SvANY(sv))->xuv_uv #define SvNVX(sv) ((XPVNV*) SvANY(sv))->xnv_nv -#define SvPVX(sv) ((sv)->sv_u.sv_pv) +#define SvPVX(sv) ((sv)->sv_u.svu_pv) #define SvCUR(sv) ((XPV*) SvANY(sv))->xpv_cur #define SvLEN(sv) ((XPV*) SvANY(sv))->xpv_len -#define SvEND(sv) ((sv)->sv_u.sv_pv + ((XPV*)SvANY(sv))->xpv_cur) +#define SvEND(sv) ((sv)->sv_u.svu_pv + ((XPV*)SvANY(sv))->xpv_cur) #ifdef DEBUGGING #define SvMAGIC(sv) (*(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*) SvANY(sv))->xmg_magic)) @@ -927,13 +941,13 @@ in gv.h: */ (((XPVNV*)SvANY(sv))->xnv_nv = (val)); } STMT_END #define SvPV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PV); \ - ((sv)->sv_u.sv_pv = (val)); } STMT_END + ((sv)->sv_u.svu_pv = (val)); } STMT_END #define SvUV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVUV*)SvANY(sv))->xuv_uv = (val)); } STMT_END #define SvRV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ - ((sv)->sv_u.sv_rv = (val)); } STMT_END + ((sv)->sv_u.svu_rv = (val)); } STMT_END #define SvMAGIC_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*)SvANY(sv))->xmg_magic = (val)); } STMT_END @@ -1257,7 +1271,7 @@ Like C but doesn't process magic. ? (({XPV *nxpv = (XPV*)SvANY(sv); \ nxpv && \ (nxpv->xpv_cur > 1 || \ - (nxpv->xpv_cur && *(sv)->sv_u.sv_pv != '0')); }) \ + (nxpv->xpv_cur && *(sv)->sv_u.svu_pv != '0')); }) \ ? 1 \ : 0) \ : \ @@ -1285,7 +1299,7 @@ Like C but doesn't process magic. : SvPOK(sv) \ ? ((PL_Xpv = (XPV*)SvANY(PL_Sv = (sv))) && \ (PL_Xpv->xpv_cur > 1 || \ - (PL_Xpv->xpv_cur && *PL_Sv->sv_u.sv_pv != '0')) \ + (PL_Xpv->xpv_cur && *PL_Sv->sv_u.svu_pv != '0')) \ ? 1 \ : 0) \ : \ @@ -1487,3 +1501,13 @@ struct clone_params { UV flags; PerlInterpreter *proto_perl; }; + +/* + * Local variables: + * c-indentation-style: bsd + * c-basic-offset: 4 + * indent-tabs-mode: t + * End: + * + * ex: set ts=8 sts=4 sw=4 noet: + */