X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=sv.h;h=8fd4ae7b69cdecae9d9d76b4c31c37c1e9c00b17;hb=ba9a69eb5c6ef856a4e5dc1fa901a88f4e13b198;hp=4d08a9013833fbffd82097bcf75ec6aff4e1456e;hpb=8cf8f3d16d82d8b3561907820401eea7766f2f96;p=p5sagit%2Fp5-mst-13.2.git diff --git a/sv.h b/sv.h index 4d08a90..8fd4ae7 100644 --- a/sv.h +++ b/sv.h @@ -1,6 +1,6 @@ /* sv.h * - * Copyright (c) 1991-2001, Larry Wall + * Copyright (c) 1991-2002, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -12,6 +12,8 @@ #endif /* +=head1 SV Flags + =for apidoc AmU||svtype An enum of flags for Perl types. These are found in the file B in the C enum. Test these flags with the C macro. @@ -98,6 +100,8 @@ struct io { }; /* +=head1 SV Manipulation Functions + =for apidoc Am|U32|SvREFCNT|SV* sv Returns the value of the object's reference count. @@ -351,7 +355,7 @@ struct xpvfm { #endif /* USE_5005THREADS */ cv_flags_t xcv_flags; - I32 xfm_lines; + IV xfm_lines; }; struct xpvio { @@ -378,10 +382,10 @@ struct xpvio { DIR * xiou_dirp; /* for opendir, readdir, etc */ void * xiou_any; /* for alignment */ } xio_dirpu; - long xio_lines; /* $. */ - long xio_page; /* $% */ - long xio_page_len; /* $= */ - long xio_lines_left; /* $- */ + IV xio_lines; /* $. */ + IV xio_page; /* $% */ + IV xio_page_len; /* $= */ + IV xio_lines_left; /* $- */ char * xio_top_name; /* $^ */ GV * xio_top_gv; /* $^ */ char * xio_fmt_name; /* $~ */ @@ -454,7 +458,7 @@ Returns a boolean indicating whether the SV contains an unsigned integer. Returns a boolean indicating whether the SV contains an unsigned integer. =for apidoc Am|void|SvIOK_notUV|SV* sv -Returns a boolean indicating whether the SV contains an signed integer. +Returns a boolean indicating whether the SV contains a signed integer. =for apidoc Am|bool|SvNOK|SV* sv Returns a boolean indicating whether the SV contains a double. @@ -830,24 +834,28 @@ Taints an SV if tainting is enabled /* =for apidoc Am|char*|SvPV_force|SV* sv|STRLEN len -Like but will force the SV into becoming a string (SvPOK). You want -force if you are going to update the SvPVX directly. +Like C but will force the SV into containing just a string +(C). You want force if you are going to update the C +directly. =for apidoc Am|char*|SvPV_force_nomg|SV* sv|STRLEN len -Like but will force the SV into becoming a string (SvPOK). You want -force if you are going to update the SvPVX directly. Doesn't process magic. +Like C but will force the SV into containing just a string +(C). You want force if you are going to update the C +directly. Doesn't process magic. =for apidoc Am|char*|SvPV|SV* sv|STRLEN len -Returns a pointer to the string in the SV, or a stringified form of the SV -if the SV does not contain a string. Handles 'get' magic. See also +Returns a pointer to the string in the SV, or a stringified form of +the SV if the SV does not contain a string. The SV may cache the +stringified version becoming C. Handles 'get' magic. See also C for a version which guarantees to evaluate sv only once. =for apidoc Am|char*|SvPVx|SV* sv|STRLEN len A version of C which guarantees to evaluate sv only once. =for apidoc Am|char*|SvPV_nolen|SV* sv -Returns a pointer to the string in the SV, or a stringified form of the SV -if the SV does not contain a string. Handles 'get' magic. +Returns a pointer to the string in the SV, or a stringified form of +the SV if the SV does not contain a string. The SV may cache the +stringified form becoming C. Handles 'get' magic. =for apidoc Am|IV|SvIV|SV* sv Coerces the given SV to an integer and returns it. See C for a @@ -855,7 +863,7 @@ version which guarantees to evaluate sv only once. =for apidoc Am|IV|SvIVx|SV* sv Coerces the given SV to an integer and returns it. Guarantees to evaluate -sv only once. Use the more efficent C otherwise. +sv only once. Use the more efficient C otherwise. =for apidoc Am|NV|SvNV|SV* sv Coerce the given SV to a double and return it. See C for a version @@ -863,7 +871,7 @@ which guarantees to evaluate sv only once. =for apidoc Am|NV|SvNVx|SV* sv Coerces the given SV to a double and returns it. Guarantees to evaluate -sv only once. Use the more efficent C otherwise. +sv only once. Use the more efficient C otherwise. =for apidoc Am|UV|SvUV|SV* sv Coerces the given SV to an unsigned integer and returns it. See C @@ -871,20 +879,20 @@ for a version which guarantees to evaluate sv only once. =for apidoc Am|UV|SvUVx|SV* sv Coerces the given SV to an unsigned integer and returns it. Guarantees to -evaluate sv only once. Use the more efficent C otherwise. +evaluate sv only once. Use the more efficient C otherwise. =for apidoc Am|bool|SvTRUE|SV* sv Returns a boolean indicating whether Perl would evaluate the SV as true or false, defined or undefined. Does not handle 'get' magic. =for apidoc Am|char*|SvPVutf8_force|SV* sv|STRLEN len -Like C, but converts sv to uft8 first if necessary. +Like C, but converts sv to utf8 first if necessary. =for apidoc Am|char*|SvPVutf8|SV* sv|STRLEN len -Like C, but converts sv to uft8 first if necessary. +Like C, but converts sv to utf8 first if necessary. -=for apidoc Am|char*|SvPVutf8_nolen|SV* sv|STRLEN len -Like C, but converts sv to uft8 first if necessary. +=for apidoc Am|char*|SvPVutf8_nolen|SV* sv +Like C, but converts sv to utf8 first if necessary. =for apidoc Am|char*|SvPVbyte_force|SV* sv|STRLEN len Like C, but converts sv to byte representation first if necessary. @@ -892,27 +900,27 @@ Like C, but converts sv to byte representation first if necessary. =for apidoc Am|char*|SvPVbyte|SV* sv|STRLEN len Like C, but converts sv to byte representation first if necessary. -=for apidoc Am|char*|SvPVbyte_nolen|SV* sv|STRLEN len +=for apidoc Am|char*|SvPVbyte_nolen|SV* sv Like C, but converts sv to byte representation first if necessary. =for apidoc Am|char*|SvPVutf8x_force|SV* sv|STRLEN len -Like C, but converts sv to uft8 first if necessary. -Guarantees to evalute sv only once; use the more efficient C +Like C, but converts sv to utf8 first if necessary. +Guarantees to evaluate sv only once; use the more efficient C otherwise. =for apidoc Am|char*|SvPVutf8x|SV* sv|STRLEN len -Like C, but converts sv to uft8 first if necessary. -Guarantees to evalute sv only once; use the more efficient C +Like C, but converts sv to utf8 first if necessary. +Guarantees to evaluate sv only once; use the more efficient C otherwise. =for apidoc Am|char*|SvPVbytex_force|SV* sv|STRLEN len Like C, but converts sv to byte representation first if necessary. -Guarantees to evalute sv only once; use the more efficient C +Guarantees to evaluate sv only once; use the more efficient C otherwise. =for apidoc Am|char*|SvPVbytex|SV* sv|STRLEN len Like C, but converts sv to byte representation first if necessary. -Guarantees to evalute sv only once; use the more efficient C +Guarantees to evaluate sv only once; use the more efficient C otherwise. @@ -972,29 +980,15 @@ otherwise. #undef SvNV #define SvNV(sv) (SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv)) -#define sv_setsv_macro(dsv, ssv) sv_setsv_flags(dsv, ssv, SV_GMAGIC) +#define sv_setsv(dsv, ssv) sv_setsv_flags(dsv, ssv, SV_GMAGIC) #define sv_setsv_nomg(dsv, ssv) sv_setsv_flags(dsv, ssv, 0) -#define sv_catsv_macro(dsv, ssv) sv_catsv_flags(dsv, ssv, SV_GMAGIC) +#define sv_catsv(dsv, ssv) sv_catsv_flags(dsv, ssv, SV_GMAGIC) #define sv_catsv_nomg(dsv, ssv) sv_catsv_flags(dsv, ssv, 0) -#define sv_catpvn_macro(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC) -#define sv_2pv_macro(sv, lp) sv_2pv_flags(sv, lp, SV_GMAGIC) +#define sv_catpvn(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC) +#define sv_2pv(sv, lp) sv_2pv_flags(sv, lp, SV_GMAGIC) #define sv_2pv_nomg(sv, lp) sv_2pv_flags(sv, lp, 0) -#define sv_pvn_force_macro(sv, lp) sv_pvn_force_flags(sv, lp, SV_GMAGIC) -#define sv_utf8_upgrade_macro(sv) sv_utf8_upgrade_flags(sv, SV_GMAGIC) - -/* function style also available for sourcecompat */ -#undef sv_setsv -#define sv_setsv(dsv, ssv) sv_setsv_macro(dsv, ssv) -#undef sv_catsv -#define sv_catsv(dsv, ssv) sv_catsv_macro(dsv, ssv) -#undef sv_catpvn -#define sv_catpvn(dsv, sstr, slen) sv_catpvn_macro(dsv, sstr, slen) -#undef sv_2pv -#define sv_2pv(sv, lp) sv_2pv_macro(sv, lp) -#undef sv_pvn_force -#define sv_pvn_force(sv, lp) sv_pvn_force_macro(sv, lp) -#undef sv_utf8_upgrade -#define sv_utf8_upgrade(sv) sv_utf8_upgrade_macro(sv) +#define sv_pvn_force(sv, lp) sv_pvn_force_flags(sv, lp, SV_GMAGIC) +#define sv_utf8_upgrade(sv) sv_utf8_upgrade_flags(sv, SV_GMAGIC) #undef SvPV #define SvPV(sv, lp) SvPV_flags(sv, lp, SV_GMAGIC) @@ -1153,6 +1147,8 @@ incremented. /* the following macros update any magic values this sv is associated with */ /* +=head1 Magical Functions + =for apidoc Am|void|SvGETMAGIC|SV* sv Invokes C on an SV if it has 'get' magic. This macro evaluates its argument more than once. @@ -1175,6 +1171,20 @@ Like C, but does any set magic required afterwards. =for apidoc Am|void|SvSetMagicSV_nosteal|SV* dsv|SV* ssv Like C, but does any set magic required afterwards. +=for apidoc Am|void|SvSHARE|SV* sv +Arranges for sv to be shared between threads if a suitable module +has been loaded. + +=for apidoc Am|void|SvLOCK|SV* sv +Arranges for a mutual exclusion lock to be obtained on sv if a suitable module +has been loaded. + +=for apidoc Am|void|SvUNLOCK|SV* sv +Releases a mutual exclusion lock on sv if a suitable module +has been loaded. + +=head1 SV Manipulation Functions + =for apidoc Am|char *|SvGROW|SV* sv|STRLEN len Expands the character buffer in the SV so that it has room for the indicated number of bytes (remember to reserve space for an extra trailing @@ -1184,6 +1194,10 @@ Returns a pointer to the character buffer. =cut */ +#define SvSHARE(sv) CALL_FPTR(PL_sharehook)(aTHX_ sv) +#define SvLOCK(sv) CALL_FPTR(PL_lockhook)(aTHX_ sv) +#define SvUNLOCK(sv) CALL_FPTR(PL_unlockhook)(aTHX_ sv) + #define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END #define SvSETMAGIC(x) STMT_START { if (SvSMAGICAL(x)) mg_set(x); } STMT_END @@ -1215,7 +1229,7 @@ Returns a pointer to the character buffer. #define SvSetMagicSV_nosteal(dst,src) \ SvSetSV_nosteal_and(dst,src,SvSETMAGIC(dst)) -#ifdef DEBUGGING +#if !defined(SKIP_DEBUGGING) #define SvPEEK(sv) sv_peek(sv) #else #define SvPEEK(sv) ""