sv.h

来自「MSYS在windows下模拟了一个类unix的终端」· C头文件 代码 · 共 1,102 行 · 第 1/3 页

H
1,102
字号
     * union trick (as suggested by Gurusamy Sarathy).     * For further information see Geir Johansen's problem report titled       [ID 20000612.002] Perl problem on Cray system     * The any pointer (known as IoANY()) will also be a good place     * to hang any IO disciplines to.     */    union {	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;	/* $- */    char *	xio_top_name;	/* $^ */    GV *	xio_top_gv;	/* $^ */    char *	xio_fmt_name;	/* $~ */    GV *	xio_fmt_gv;	/* $~ */    char *	xio_bottom_name;/* $^B */    GV *	xio_bottom_gv;	/* $^B */    short	xio_subprocess;	/* -| or |- */    char	xio_type;    char	xio_flags;};#define xio_dirp	xio_dirpu.xiou_dirp#define xio_any		xio_dirpu.xiou_any#define IOf_ARGV	1	/* this fp iterates over ARGV */#define IOf_START	2	/* check for null ARGV and substitute '-' */#define IOf_FLUSH	4	/* this fp wants a flush after write op */#define IOf_DIDTOP	8	/* just did top of form */#define IOf_UNTAINT	16	/* consider this fp (and its data) "safe" */#define IOf_NOLINE	32	/* slurped a pseudo-line from empty file */#define IOf_FAKE_DIRP	64	/* xio_dirp is fake (source filters kludge) *//* The following macros define implementation-independent predicates on SVs. *//*=for apidoc Am|bool|SvNIOK|SV* svReturns a boolean indicating whether the SV contains a number, integer ordouble.=for apidoc Am|bool|SvNIOKp|SV* svReturns a boolean indicating whether the SV contains a number, integer ordouble.  Checks the B<private> setting.  Use C<SvNIOK>.=for apidoc Am|void|SvNIOK_off|SV* svUnsets the NV/IV status of an SV.=for apidoc Am|bool|SvOK|SV* svReturns a boolean indicating whether the value is an SV.=for apidoc Am|bool|SvIOKp|SV* svReturns a boolean indicating whether the SV contains an integer.  Checksthe B<private> setting.  Use C<SvIOK>.=for apidoc Am|bool|SvNOKp|SV* svReturns a boolean indicating whether the SV contains a double.  Checks theB<private> setting.  Use C<SvNOK>.=for apidoc Am|bool|SvPOKp|SV* svReturns a boolean indicating whether the SV contains a character string.Checks the B<private> setting.  Use C<SvPOK>.=for apidoc Am|bool|SvIOK|SV* svReturns a boolean indicating whether the SV contains an integer.=for apidoc Am|void|SvIOK_on|SV* svTells an SV that it is an integer.=for apidoc Am|void|SvIOK_off|SV* svUnsets the IV status of an SV.=for apidoc Am|void|SvIOK_only|SV* svTells an SV that it is an integer and disables all other OK bits.=for apidoc Am|void|SvIOK_only_UV|SV* svTells and SV that it is an unsigned integer and disables all other OK bits.=for apidoc Am|void|SvIOK_UV|SV* svReturns a boolean indicating whether the SV contains an unsigned integer.=for apidoc Am|void|SvIOK_notUV|SV* svReturns a boolean indicating whether the SV contains an signed integer.=for apidoc Am|bool|SvNOK|SV* svReturns a boolean indicating whether the SV contains a double.=for apidoc Am|void|SvNOK_on|SV* svTells an SV that it is a double.=for apidoc Am|void|SvNOK_off|SV* svUnsets the NV status of an SV.=for apidoc Am|void|SvNOK_only|SV* svTells an SV that it is a double and disables all other OK bits.=for apidoc Am|bool|SvPOK|SV* svReturns a boolean indicating whether the SV contains a characterstring.=for apidoc Am|void|SvPOK_on|SV* svTells an SV that it is a string.=for apidoc Am|void|SvPOK_off|SV* svUnsets the PV status of an SV.=for apidoc Am|void|SvPOK_only|SV* svTells an SV that it is a string and disables all other OK bits.=for apidoc Am|bool|SvOOK|SV* svReturns a boolean indicating whether the SvIVX is a valid offset value forthe SvPVX.  This hack is used internally to speed up removal of charactersfrom the beginning of a SvPV.  When SvOOK is true, then the start of theallocated string buffer is really (SvPVX - SvIVX).=for apidoc Am|bool|SvROK|SV* svTests if the SV is an RV.=for apidoc Am|void|SvROK_on|SV* svTells an SV that it is an RV.=for apidoc Am|void|SvROK_off|SV* svUnsets the RV status of an SV.=for apidoc Am|SV*|SvRV|SV* svDereferences an RV to return the SV.=for apidoc Am|IV|SvIVX|SV* svReturns the integer which is stored in the SV, assuming SvIOK istrue.=for apidoc Am|UV|SvUVX|SV* svReturns the unsigned integer which is stored in the SV, assuming SvIOK istrue.=for apidoc Am|NV|SvNVX|SV* svReturns the double which is stored in the SV, assuming SvNOK istrue.=for apidoc Am|char*|SvPVX|SV* svReturns a pointer to the string in the SV.  The SV must contain astring.=for apidoc Am|STRLEN|SvCUR|SV* svReturns the length of the string which is in the SV.  See C<SvLEN>.=for apidoc Am|STRLEN|SvLEN|SV* svReturns the size of the string buffer in the SV, not including any partattributable to C<SvOOK>.  See C<SvCUR>.=for apidoc Am|char*|SvEND|SV* svReturns a pointer to the last character in the string which is in the SV.See C<SvCUR>.  Access the character as *(SvEND(sv)).=for apidoc Am|HV*|SvSTASH|SV* svReturns the stash of the SV.=for apidoc Am|void|SvCUR_set|SV* sv|STRLEN lenSet the length of the string which is in the SV.  See C<SvCUR>.=cut*/#define SvNIOK(sv)		(SvFLAGS(sv) & (SVf_IOK|SVf_NOK))#define SvNIOKp(sv)		(SvFLAGS(sv) & (SVp_IOK|SVp_NOK))#define SvNIOK_off(sv)		(SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK| \						  SVp_IOK|SVp_NOK|SVf_IVisUV))#define SvOK(sv)		(SvFLAGS(sv) & SVf_OK)#define SvOK_off(sv)		(SvFLAGS(sv) &=	~(SVf_OK|SVf_AMAGIC|	\						  SVf_IVisUV|SVf_UTF8),	\							SvOOK_off(sv))#define SvOK_off_exc_UV(sv)	(SvFLAGS(sv) &=	~(SVf_OK|SVf_AMAGIC|	\						  SVf_UTF8),		\							SvOOK_off(sv))#define SvOKp(sv)		(SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK))#define SvIOKp(sv)		(SvFLAGS(sv) & SVp_IOK)#define SvIOKp_on(sv)		((void)SvOOK_off(sv), SvFLAGS(sv) |= SVp_IOK)#define SvNOKp(sv)		(SvFLAGS(sv) & SVp_NOK)#define SvNOKp_on(sv)		(SvFLAGS(sv) |= SVp_NOK)#define SvPOKp(sv)		(SvFLAGS(sv) & SVp_POK)#define SvPOKp_on(sv)		(SvFLAGS(sv) |= SVp_POK)#define SvIOK(sv)		(SvFLAGS(sv) & SVf_IOK)#define SvIOK_on(sv)		((void)SvOOK_off(sv), \				    SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))#define SvIOK_off(sv)		(SvFLAGS(sv) &= ~(SVf_IOK|SVp_IOK|SVf_IVisUV))#define SvIOK_only(sv)		((void)SvOK_off(sv), \				    SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))#define SvIOK_only_UV(sv)	((void)SvOK_off_exc_UV(sv), \				    SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))#define SvIOK_UV(sv)		((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV))	\				 == (SVf_IOK|SVf_IVisUV))#define SvIOK_notUV(sv)		((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV))	\				 == SVf_IOK)#define SvIsUV(sv)		(SvFLAGS(sv) & SVf_IVisUV)#define SvIsUV_on(sv)		(SvFLAGS(sv) |= SVf_IVisUV)#define SvIsUV_off(sv)		(SvFLAGS(sv) &= ~SVf_IVisUV)#define SvNOK(sv)		(SvFLAGS(sv) & SVf_NOK)#define SvNOK_on(sv)		(SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))#define SvNOK_off(sv)		(SvFLAGS(sv) &= ~(SVf_NOK|SVp_NOK))#define SvNOK_only(sv)		((void)SvOK_off(sv), \				    SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))/*=for apidoc Am|void|SvUTF8|SV* svReturns a boolean indicating whether the SV contains UTF-8 encoded data.=for apidoc Am|void|SvUTF8_on|SV *svTells an SV that it is a string and encoded in UTF8.  Do not use frivolously.=for apidoc Am|void|SvUTF8_off|SV *svUnsets the UTF8 status of an SV.=for apidoc Am|void|SvPOK_only_UTF8|SV* svTells an SV that it is a UTF8 string (do not use frivolously)and disables all other OK bits.  =cut */#define SvUTF8(sv)		(SvFLAGS(sv) & SVf_UTF8)#define SvUTF8_on(sv)		(SvFLAGS(sv) |= (SVf_UTF8))#define SvUTF8_off(sv)		(SvFLAGS(sv) &= ~(SVf_UTF8))#define SvPOK(sv)		(SvFLAGS(sv) & SVf_POK)#define SvPOK_on(sv)		(SvFLAGS(sv) |= (SVf_POK|SVp_POK))#define SvPOK_off(sv)		(SvFLAGS(sv) &= ~(SVf_POK|SVp_POK))#define SvPOK_only(sv)		(SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC|	\						  SVf_IVisUV|SVf_UTF8),	\				    SvFLAGS(sv) |= (SVf_POK|SVp_POK))#define SvPOK_only_UTF8(sv)	(SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC|	\						  SVf_IVisUV),		\				    SvFLAGS(sv) |= (SVf_POK|SVp_POK))#define SvOOK(sv)		(SvFLAGS(sv) & SVf_OOK)#define SvOOK_on(sv)		((void)SvIOK_off(sv), SvFLAGS(sv) |= SVf_OOK)#define SvOOK_off(sv)		(SvOOK(sv) && sv_backoff(sv))#define SvFAKE(sv)		(SvFLAGS(sv) & SVf_FAKE)#define SvFAKE_on(sv)		(SvFLAGS(sv) |= SVf_FAKE)#define SvFAKE_off(sv)		(SvFLAGS(sv) &= ~SVf_FAKE)#define SvROK(sv)		(SvFLAGS(sv) & SVf_ROK)#define SvROK_on(sv)		(SvFLAGS(sv) |= SVf_ROK)#define SvROK_off(sv)		(SvFLAGS(sv) &= ~(SVf_ROK|SVf_AMAGIC))#define SvMAGICAL(sv)		(SvFLAGS(sv) & (SVs_GMG|SVs_SMG|SVs_RMG))#define SvMAGICAL_on(sv)	(SvFLAGS(sv) |= (SVs_GMG|SVs_SMG|SVs_RMG))#define SvMAGICAL_off(sv)	(SvFLAGS(sv) &= ~(SVs_GMG|SVs_SMG|SVs_RMG))#define SvGMAGICAL(sv)		(SvFLAGS(sv) & SVs_GMG)#define SvGMAGICAL_on(sv)	(SvFLAGS(sv) |= SVs_GMG)#define SvGMAGICAL_off(sv)	(SvFLAGS(sv) &= ~SVs_GMG)#define SvSMAGICAL(sv)		(SvFLAGS(sv) & SVs_SMG)#define SvSMAGICAL_on(sv)	(SvFLAGS(sv) |= SVs_SMG)#define SvSMAGICAL_off(sv)	(SvFLAGS(sv) &= ~SVs_SMG)#define SvRMAGICAL(sv)		(SvFLAGS(sv) & SVs_RMG)#define SvRMAGICAL_on(sv)	(SvFLAGS(sv) |= SVs_RMG)#define SvRMAGICAL_off(sv)	(SvFLAGS(sv) &= ~SVs_RMG)#define SvAMAGIC(sv)		(SvFLAGS(sv) & SVf_AMAGIC)#define SvAMAGIC_on(sv)		(SvFLAGS(sv) |= SVf_AMAGIC)#define SvAMAGIC_off(sv)	(SvFLAGS(sv) &= ~SVf_AMAGIC)#define SvGAMAGIC(sv)           (SvFLAGS(sv) & (SVs_GMG|SVf_AMAGIC)) /*#define Gv_AMG(stash) \        (HV_AMAGICmb(stash) && \         ((!HV_AMAGICbad(stash) && HV_AMAGIC(stash)) || Gv_AMupdate(stash)))*/#define Gv_AMG(stash)           (PL_amagic_generation && Gv_AMupdate(stash))#define SvWEAKREF(sv)		((SvFLAGS(sv) & (SVf_ROK|SVprv_WEAKREF)) \				  == (SVf_ROK|SVprv_WEAKREF))#define SvWEAKREF_on(sv)	(SvFLAGS(sv) |=  (SVf_ROK|SVprv_WEAKREF))#define SvWEAKREF_off(sv)	(SvFLAGS(sv) &= ~(SVf_ROK|SVprv_WEAKREF))#define SvTHINKFIRST(sv)	(SvFLAGS(sv) & SVf_THINKFIRST)#define SvPADBUSY(sv)		(SvFLAGS(sv) & SVs_PADBUSY)#define SvPADTMP(sv)		(SvFLAGS(sv) & SVs_PADTMP)#define SvPADTMP_on(sv)		(SvFLAGS(sv) |= SVs_PADTMP|SVs_PADBUSY)#define SvPADTMP_off(sv)	(SvFLAGS(sv) &= ~SVs_PADTMP)#define SvPADMY(sv)		(SvFLAGS(sv) & SVs_PADMY)#define SvPADMY_on(sv)		(SvFLAGS(sv) |= SVs_PADMY|SVs_PADBUSY)#define SvTEMP(sv)		(SvFLAGS(sv) & SVs_TEMP)#define SvTEMP_on(sv)		(SvFLAGS(sv) |= SVs_TEMP)#define SvTEMP_off(sv)		(SvFLAGS(sv) &= ~SVs_TEMP)#define SvOBJECT(sv)		(SvFLAGS(sv) & SVs_OBJECT)#define SvOBJECT_on(sv)		(SvFLAGS(sv) |= SVs_OBJECT)#define SvOBJECT_off(sv)	(SvFLAGS(sv) &= ~SVs_OBJECT)#define SvREADONLY(sv)		(SvFLAGS(sv) & SVf_READONLY)#define SvREADONLY_on(sv)	(SvFLAGS(sv) |= SVf_READONLY)#define SvREADONLY_off(sv)	(SvFLAGS(sv) &= ~SVf_READONLY)#define SvSCREAM(sv)		(SvFLAGS(sv) & SVp_SCREAM)#define SvSCREAM_on(sv)		(SvFLAGS(sv) |= SVp_SCREAM)#define SvSCREAM_off(sv)	(SvFLAGS(sv) &= ~SVp_SCREAM)#define SvCOMPILED(sv)		(SvFLAGS(sv) & SVpfm_COMPILED)#define SvCOMPILED_on(sv)	(SvFLAGS(sv) |= SVpfm_COMPILED)#define SvCOMPILED_off(sv)	(SvFLAGS(sv) &= ~SVpfm_COMPILED)#define SvEVALED(sv)		(SvFLAGS(sv) & SVrepl_EVAL)#define SvEVALED_on(sv)		(SvFLAGS(sv) |= SVrepl_EVAL)#define SvEVALED_off(sv)	(SvFLAGS(sv) &= ~SVrepl_EVAL)#define SvTAIL(sv)		(SvFLAGS(sv) & SVpbm_TAIL)#define SvTAIL_on(sv)		(SvFLAGS(sv) |= SVpbm_TAIL)#define SvTAIL_off(sv)		(SvFLAGS(sv) &= ~SVpbm_TAIL)#define SvVALID(sv)		(SvFLAGS(sv) & SVpbm_VALID)#define SvVALID_on(sv)		(SvFLAGS(sv) |= SVpbm_VALID)#define SvVALID_off(sv)		(SvFLAGS(sv) &= ~SVpbm_VALID)#define SvRV(sv) ((XRV*)  SvANY(sv))->xrv_rv#define SvRVx(sv) SvRV(sv)#define SvIVX(sv) ((XPVIV*)  SvANY(sv))->xiv_iv#define SvIVXx(sv) SvIVX(sv)#define SvUVX(sv) ((XPVUV*)  SvANY(sv))->xuv_uv#define SvUVXx(sv) SvUVX(sv)#define SvNVX(sv)  ((XPVNV*)SvANY(sv))->xnv_nv#define SvNVXx(sv) SvNVX(sv)#define SvPVX(sv)  ((XPV*)  SvANY(sv))->xpv_pv#define SvPVXx(sv) SvPVX(sv)#define SvCUR(sv) ((XPV*)  SvANY(sv))->xpv_cur#define SvLEN(sv) ((XPV*)  SvANY(sv))->xpv_len#define SvLENx(sv) SvLEN(sv)#define SvEND(sv)(((XPV*)  SvANY(sv))->xpv_pv + ((XPV*)SvANY(sv))->xpv_cur)#define SvENDx(sv) ((PL_Sv = (sv)), SvEND(PL_Sv))#define SvMAGIC(sv)	((XPVMG*)  SvANY(sv))->xmg_magic#define SvSTASH(sv)	((XPVMG*)  SvANY(sv))->xmg_stash#define SvIV_set(sv, val) \	STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \		(((XPVIV*)  SvANY(sv))->xiv_iv = val); } STMT_END#define SvNV_set(sv, val) \	STMT_START { assert(SvTYPE(sv) == SVt_NV || SvTYPE(sv) >= SVt_PVNV); \		(((XPVNV*)  SvANY(sv))->xnv_nv = val); } STMT_END#define SvPV_set(sv, val) \	STMT_START { assert(SvTYPE(sv) >= SVt_PV); \		(((XPV*)  SvANY(sv))->xpv_pv = val); } STMT_END#define SvCUR_set(sv, val) \	STMT_START { assert(SvTYPE(sv) >= SVt_PV); \		(((XPV*)  SvANY(sv))->xpv_cur = val); } STMT_END#define SvLEN_set(sv, val) \	STMT_START { assert(SvTYPE(sv) >= SVt_PV); \		(((XPV*)  SvANY(sv))->xpv_len = val); } STMT_END#define SvEND_set(sv, val) \	STMT_START { assert(SvTYPE(sv) >= SVt_PV); \		(((XPV*)  SvANY(sv))->xpv_cur = val - SvPVX(sv)); } STMT_END#define BmRARE(sv)	((XPVBM*)  SvANY(sv))->xbm_rare

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?