⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b.xs

📁 UNIX下perl实现代码
💻 XS
📖 第 1 页 / 共 2 页
字号:
#define LOGOP_other(o)	o->op_otherMODULE = B	PACKAGE = B::LOGOP		PREFIX = LOGOP_B::OPLOGOP_other(o)	B::LOGOP	oMODULE = B	PACKAGE = B::LISTOP		PREFIX = LISTOP_U32LISTOP_children(o)	B::LISTOP	o	OP *		kid = NO_INIT	int		i = NO_INIT    CODE:	i = 0;	for (kid = o->op_first; kid; kid = kid->op_sibling)	    i++;	RETVAL = i;    OUTPUT:        RETVAL#define PMOP_pmreplroot(o)	o->op_pmreplroot#define PMOP_pmreplstart(o)	o->op_pmreplstart#define PMOP_pmnext(o)		o->op_pmnext#define PMOP_pmregexp(o)	o->op_pmregexp#define PMOP_pmflags(o)		o->op_pmflags#define PMOP_pmpermflags(o)	o->op_pmpermflagsMODULE = B	PACKAGE = B::PMOP		PREFIX = PMOP_voidPMOP_pmreplroot(o)	B::PMOP		o	OP *		root = NO_INIT    CODE:	ST(0) = sv_newmortal();	root = o->op_pmreplroot;	/* OP_PUSHRE stores an SV* instead of an OP* in op_pmreplroot */	if (o->op_type == OP_PUSHRE) {	    sv_setiv(newSVrv(ST(0), root ?			     svclassnames[SvTYPE((SV*)root)] : "B::SV"),		     PTR2IV(root));	}	else {	    sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), PTR2IV(root));	}B::OPPMOP_pmreplstart(o)	B::PMOP		oB::PMOPPMOP_pmnext(o)	B::PMOP		oU16PMOP_pmflags(o)	B::PMOP		oU16PMOP_pmpermflags(o)	B::PMOP		ovoidPMOP_precomp(o)	B::PMOP		o	REGEXP *	rx = NO_INIT    CODE:	ST(0) = sv_newmortal();	rx = o->op_pmregexp;	if (rx)	    sv_setpvn(ST(0), rx->precomp, rx->prelen);#define SVOP_sv(o)     cSVOPo->op_sv#define SVOP_gv(o)     ((GV*)cSVOPo->op_sv)MODULE = B	PACKAGE = B::SVOP		PREFIX = SVOP_B::SVSVOP_sv(o)	B::SVOP	oB::GVSVOP_gv(o)	B::SVOP	o#define PADOP_padix(o)	o->op_padix#define PADOP_sv(o)	(o->op_padix ? PL_curpad[o->op_padix] : Nullsv)#define PADOP_gv(o)	((o->op_padix \			  && SvTYPE(PL_curpad[o->op_padix]) == SVt_PVGV) \			 ? (GV*)PL_curpad[o->op_padix] : Nullgv)MODULE = B	PACKAGE = B::PADOP		PREFIX = PADOP_PADOFFSETPADOP_padix(o)	B::PADOP oB::SVPADOP_sv(o)	B::PADOP oB::GVPADOP_gv(o)	B::PADOP oMODULE = B	PACKAGE = B::PVOP		PREFIX = PVOP_voidPVOP_pv(o)	B::PVOP	o    CODE:	/*	 * OP_TRANS uses op_pv to point to a table of 256 shorts	 * whereas other PVOPs point to a null terminated string.	 */	ST(0) = sv_2mortal(newSVpv(o->op_pv, (o->op_type == OP_TRANS) ?				   256 * sizeof(short) : 0));#define LOOP_redoop(o)	o->op_redoop#define LOOP_nextop(o)	o->op_nextop#define LOOP_lastop(o)	o->op_lastopMODULE = B	PACKAGE = B::LOOP		PREFIX = LOOP_B::OPLOOP_redoop(o)	B::LOOP	oB::OPLOOP_nextop(o)	B::LOOP	oB::OPLOOP_lastop(o)	B::LOOP	o#define COP_label(o)	o->cop_label#define COP_stashpv(o)	CopSTASHPV(o)#define COP_stash(o)	CopSTASH(o)#define COP_file(o)	CopFILE(o)#define COP_cop_seq(o)	o->cop_seq#define COP_arybase(o)	o->cop_arybase#define COP_line(o)	CopLINE(o)#define COP_warnings(o)	o->cop_warningsMODULE = B	PACKAGE = B::COP		PREFIX = COP_char *COP_label(o)	B::COP	ochar *COP_stashpv(o)	B::COP	oB::HVCOP_stash(o)	B::COP	ochar *COP_file(o)	B::COP	oU32COP_cop_seq(o)	B::COP	oI32COP_arybase(o)	B::COP	oU16COP_line(o)	B::COP	oB::SVCOP_warnings(o)	B::COP	oMODULE = B	PACKAGE = B::SV		PREFIX = SvU32SvREFCNT(sv)	B::SV	svU32SvFLAGS(sv)	B::SV	svMODULE = B	PACKAGE = B::IV		PREFIX = SvIVSvIV(sv)	B::IV	svIVSvIVX(sv)	B::IV	svUV SvUVX(sv) 	B::IV   sv                      MODULE = B	PACKAGE = B::IV#define needs64bits(sv) ((I32)SvIVX(sv) != SvIVX(sv))intneeds64bits(sv)	B::IV	svvoidpackiv(sv)	B::IV	sv    CODE:	if (sizeof(IV) == 8) {	    U32 wp[2];	    IV iv = SvIVX(sv);	    /*	     * The following way of spelling 32 is to stop compilers on	     * 32-bit architectures from moaning about the shift count	     * being >= the width of the type. Such architectures don't	     * reach this code anyway (unless sizeof(IV) > 8 but then	     * everything else breaks too so I'm not fussed at the moment).	     */#ifdef UV_IS_QUAD	    wp[0] = htonl(((UV)iv) >> (sizeof(UV)*4));#else	    wp[0] = htonl(((U32)iv) >> (sizeof(UV)*4));#endif	    wp[1] = htonl(iv & 0xffffffff);	    ST(0) = sv_2mortal(newSVpvn((char *)wp, 8));	} else {	    U32 w = htonl((U32)SvIVX(sv));	    ST(0) = sv_2mortal(newSVpvn((char *)&w, 4));	}MODULE = B	PACKAGE = B::NV		PREFIX = SvNVSvNV(sv)	B::NV	svNVSvNVX(sv)	B::NV	svMODULE = B	PACKAGE = B::RV		PREFIX = SvB::SVSvRV(sv)	B::RV	svMODULE = B	PACKAGE = B::PV		PREFIX = Svchar*SvPVX(sv)	B::PV	svvoidSvPV(sv)	B::PV	sv    CODE:	ST(0) = sv_newmortal();	sv_setpvn(ST(0), SvPVX(sv), SvCUR(sv));STRLENSvLEN(sv)	B::PV	svSTRLENSvCUR(sv)	B::PV	svMODULE = B	PACKAGE = B::PVMG	PREFIX = SvvoidSvMAGIC(sv)	B::PVMG	sv	MAGIC *	mg = NO_INIT    PPCODE:	for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic)	    XPUSHs(make_mg_object(aTHX_ sv_newmortal(), mg));MODULE = B	PACKAGE = B::PVMGB::HVSvSTASH(sv)	B::PVMG	sv#define MgMOREMAGIC(mg) mg->mg_moremagic#define MgPRIVATE(mg) mg->mg_private#define MgTYPE(mg) mg->mg_type#define MgFLAGS(mg) mg->mg_flags#define MgOBJ(mg) mg->mg_obj#define MgLENGTH(mg) mg->mg_lenMODULE = B	PACKAGE = B::MAGIC	PREFIX = Mg	B::MAGICMgMOREMAGIC(mg)	B::MAGIC	mgU16MgPRIVATE(mg)	B::MAGIC	mgcharMgTYPE(mg)	B::MAGIC	mgU8MgFLAGS(mg)	B::MAGIC	mgB::SVMgOBJ(mg)	B::MAGIC	mgI32 MgLENGTH(mg)	B::MAGIC	mg voidMgPTR(mg)	B::MAGIC	mg    CODE:	ST(0) = sv_newmortal(); 	if (mg->mg_ptr){		if (mg->mg_len >= 0){	    		sv_setpvn(ST(0), mg->mg_ptr, mg->mg_len);		} else {			if (mg->mg_len == HEf_SVKEY)					sv_setsv(ST(0),newRV((SV*)mg->mg_ptr));		}	}MODULE = B	PACKAGE = B::PVLV	PREFIX = LvU32LvTARGOFF(sv)	B::PVLV	svU32LvTARGLEN(sv)	B::PVLV	svcharLvTYPE(sv)	B::PVLV	svB::SVLvTARG(sv)	B::PVLV svMODULE = B	PACKAGE = B::BM		PREFIX = BmI32BmUSEFUL(sv)	B::BM	svU16BmPREVIOUS(sv)	B::BM	svU8BmRARE(sv)	B::BM	svvoidBmTABLE(sv)	B::BM	sv	STRLEN	len = NO_INIT	char *	str = NO_INIT    CODE:	str = SvPV(sv, len);	/* Boyer-Moore table is just after string and its safety-margin \0 */	ST(0) = sv_2mortal(newSVpvn(str + len + 1, 256));MODULE = B	PACKAGE = B::GV		PREFIX = GvvoidGvNAME(gv)	B::GV	gv    CODE:	ST(0) = sv_2mortal(newSVpvn(GvNAME(gv), GvNAMELEN(gv)));boolis_empty(gv)        B::GV   gv    CODE:        RETVAL = GvGP(gv) == Null(GP*);    OUTPUT:        RETVALB::HVGvSTASH(gv)	B::GV	gvB::SVGvSV(gv)	B::GV	gvB::IOGvIO(gv)	B::GV	gvB::CVGvFORM(gv)	B::GV	gvB::AVGvAV(gv)	B::GV	gvB::HVGvHV(gv)	B::GV	gvB::GVGvEGV(gv)	B::GV	gvB::CVGvCV(gv)	B::GV	gvU32GvCVGEN(gv)	B::GV	gvU16GvLINE(gv)	B::GV	gvchar *GvFILE(gv)	B::GV	gvB::GVGvFILEGV(gv)	B::GV	gvMODULE = B	PACKAGE = B::GVU32GvREFCNT(gv)	B::GV	gvU8GvFLAGS(gv)	B::GV	gvMODULE = B	PACKAGE = B::IO		PREFIX = IolongIoLINES(io)	B::IO	iolongIoPAGE(io)	B::IO	iolongIoPAGE_LEN(io)	B::IO	iolongIoLINES_LEFT(io)	B::IO	iochar *IoTOP_NAME(io)	B::IO	ioB::GVIoTOP_GV(io)	B::IO	iochar *IoFMT_NAME(io)	B::IO	ioB::GVIoFMT_GV(io)	B::IO	iochar *IoBOTTOM_NAME(io)	B::IO	ioB::GVIoBOTTOM_GV(io)	B::IO	ioshortIoSUBPROCESS(io)	B::IO	ioMODULE = B	PACKAGE = B::IOcharIoTYPE(io)	B::IO	ioU8IoFLAGS(io)	B::IO	ioMODULE = B	PACKAGE = B::AV		PREFIX = AvSSize_tAvFILL(av)	B::AV	avSSize_tAvMAX(av)	B::AV	av#define AvOFF(av) ((XPVAV*)SvANY(av))->xof_offIVAvOFF(av)	B::AV	avvoidAvARRAY(av)	B::AV	av    PPCODE:	if (AvFILL(av) >= 0) {	    SV **svp = AvARRAY(av);	    I32 i;	    for (i = 0; i <= AvFILL(av); i++)		XPUSHs(make_sv_object(aTHX_ sv_newmortal(), svp[i]));	}MODULE = B	PACKAGE = B::AVU8AvFLAGS(av)	B::AV	avMODULE = B	PACKAGE = B::CV		PREFIX = CvB::HVCvSTASH(cv)	B::CV	cvB::OPCvSTART(cv)	B::CV	cvB::OPCvROOT(cv)	B::CV	cvB::GVCvGV(cv)	B::CV	cvchar *CvFILE(cv)	B::CV	cvlongCvDEPTH(cv)	B::CV	cvB::AVCvPADLIST(cv)	B::CV	cvB::CVCvOUTSIDE(cv)	B::CV	cvvoidCvXSUB(cv)	B::CV	cv    CODE:	ST(0) = sv_2mortal(newSViv(PTR2IV(CvXSUB(cv))));voidCvXSUBANY(cv)	B::CV	cv    CODE:	ST(0) = sv_2mortal(newSViv(CvXSUBANY(cv).any_iv));MODULE = B    PACKAGE = B::CVU16CvFLAGS(cv)      B::CV   cvMODULE = B	PACKAGE = B::HV		PREFIX = HvSTRLENHvFILL(hv)	B::HV	hvSTRLENHvMAX(hv)	B::HV	hvI32HvKEYS(hv)	B::HV	hvI32HvRITER(hv)	B::HV	hvchar *HvNAME(hv)	B::HV	hvB::PMOPHvPMROOT(hv)	B::HV	hvvoidHvARRAY(hv)	B::HV	hv    PPCODE:	if (HvKEYS(hv) > 0) {	    SV *sv;	    char *key;	    I32 len;	    (void)hv_iterinit(hv);	    EXTEND(sp, HvKEYS(hv) * 2);	    while ((sv = hv_iternextsv(hv, &key, &len))) {		PUSHs(newSVpvn(key, len));		PUSHs(make_sv_object(aTHX_ sv_newmortal(), sv));	    }	}

⌨️ 快捷键说明

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