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

📄 cop.h

📁 MSYS在windows下模拟了一个类unix的终端
💻 H
📖 第 1 页 / 共 2 页
字号:
#define blk_sub		cx_u.cx_blk.blk_u.blku_sub#define blk_eval	cx_u.cx_blk.blk_u.blku_eval#define blk_loop	cx_u.cx_blk.blk_u.blku_loop/* Enter a block. */#define PUSHBLOCK(cx,t,sp) CXINC, cx = &cxstack[cxstack_ix],		\	cx->cx_type		= t,					\	cx->blk_oldsp		= sp - PL_stack_base,			\	cx->blk_oldcop		= PL_curcop,				\	cx->blk_oldmarksp	= PL_markstack_ptr - PL_markstack,	\	cx->blk_oldscopesp	= PL_scopestack_ix,			\	cx->blk_oldretsp	= PL_retstack_ix,			\	cx->blk_oldpm		= PL_curpm,				\	cx->blk_gimme		= gimme;				\	DEBUG_l( PerlIO_printf(Perl_debug_log, "Entering block %ld, type %s\n",	\		    (long)cxstack_ix, PL_block_type[CxTYPE(cx)]); )/* Exit a block (RETURN and LAST). */#define POPBLOCK(cx,pm) cx = &cxstack[cxstack_ix--],			\	newsp		 = PL_stack_base + cx->blk_oldsp,		\	PL_curcop	 = cx->blk_oldcop,				\	PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp,		\	PL_scopestack_ix = cx->blk_oldscopesp,				\	PL_retstack_ix	 = cx->blk_oldretsp,				\	pm		 = cx->blk_oldpm,				\	gimme		 = cx->blk_gimme;				\	DEBUG_l( PerlIO_printf(Perl_debug_log, "Leaving block %ld, type %s\n",		\		    (long)cxstack_ix+1,PL_block_type[CxTYPE(cx)]); )/* Continue a block elsewhere (NEXT and REDO). */#define TOPBLOCK(cx) cx  = &cxstack[cxstack_ix],			\	PL_stack_sp	 = PL_stack_base + cx->blk_oldsp,		\	PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp,		\	PL_scopestack_ix = cx->blk_oldscopesp,				\	PL_retstack_ix	 = cx->blk_oldretsp,				\	PL_curpm         = cx->blk_oldpm/* substitution context */struct subst {    I32		sbu_iters;    I32		sbu_maxiters;    I32		sbu_rflags;    I32		sbu_oldsave;    bool	sbu_once;    bool	sbu_rxtainted;    char *	sbu_orig;    SV *	sbu_dstr;    SV *	sbu_targ;    char *	sbu_s;    char *	sbu_m;    char *	sbu_strend;    void *	sbu_rxres;    REGEXP *	sbu_rx;};#define sb_iters	cx_u.cx_subst.sbu_iters#define sb_maxiters	cx_u.cx_subst.sbu_maxiters#define sb_rflags	cx_u.cx_subst.sbu_rflags#define sb_oldsave	cx_u.cx_subst.sbu_oldsave#define sb_once		cx_u.cx_subst.sbu_once#define sb_rxtainted	cx_u.cx_subst.sbu_rxtainted#define sb_orig		cx_u.cx_subst.sbu_orig#define sb_dstr		cx_u.cx_subst.sbu_dstr#define sb_targ		cx_u.cx_subst.sbu_targ#define sb_s		cx_u.cx_subst.sbu_s#define sb_m		cx_u.cx_subst.sbu_m#define sb_strend	cx_u.cx_subst.sbu_strend#define sb_rxres	cx_u.cx_subst.sbu_rxres#define sb_rx		cx_u.cx_subst.sbu_rx#define PUSHSUBST(cx) CXINC, cx = &cxstack[cxstack_ix],			\	cx->sb_iters		= iters,				\	cx->sb_maxiters		= maxiters,				\	cx->sb_rflags		= r_flags,				\	cx->sb_oldsave		= oldsave,				\	cx->sb_once		= once,					\	cx->sb_rxtainted	= rxtainted,				\	cx->sb_orig		= orig,					\	cx->sb_dstr		= dstr,					\	cx->sb_targ		= targ,					\	cx->sb_s		= s,					\	cx->sb_m		= m,					\	cx->sb_strend		= strend,				\	cx->sb_rxres		= Null(void*),				\	cx->sb_rx		= rx,					\	cx->cx_type		= CXt_SUBST;				\	rxres_save(&cx->sb_rxres, rx)#define POPSUBST(cx) cx = &cxstack[cxstack_ix--];			\	rxres_free(&cx->sb_rxres)struct context {    U32		cx_type;	/* what kind of context this is */    union {	struct block	cx_blk;	struct subst	cx_subst;    } cx_u;};#define CXTYPEMASK	0xff#define CXt_NULL	0#define CXt_SUB		1#define CXt_EVAL	2#define CXt_LOOP	3#define CXt_SUBST	4#define CXt_BLOCK	5#define CXt_FORMAT	6/* private flags for CXt_EVAL */#define CXp_REAL	0x00000100	/* truly eval'', not a lookalike */#define CXp_TRYBLOCK	0x00000200	/* eval{}, not eval'' or similar */#ifdef USE_ITHREADS/* private flags for CXt_LOOP */#  define CXp_PADVAR	0x00000100	/* itervar lives on pad, iterdata					   has pad offset; if not set,					   iterdata holds GV* */#  define CxPADLOOP(c)	(((c)->cx_type & (CXt_LOOP|CXp_PADVAR))		\			 == (CXt_LOOP|CXp_PADVAR))#endif#define CxTYPE(c)	((c)->cx_type & CXTYPEMASK)#define CxREALEVAL(c)	(((c)->cx_type & (CXt_EVAL|CXp_REAL))		\			 == (CXt_EVAL|CXp_REAL))#define CxTRYBLOCK(c)	(((c)->cx_type & (CXt_EVAL|CXp_TRYBLOCK))	\			 == (CXt_EVAL|CXp_TRYBLOCK))#define CXINC (cxstack_ix < cxstack_max ? ++cxstack_ix : (cxstack_ix = cxinc()))/* "gimme" values *//*=for apidoc AmU||G_SCALARUsed to indicate scalar context.  See C<GIMME_V>, C<GIMME>, andL<perlcall>.=for apidoc AmU||G_ARRAYUsed to indicate list context.  See C<GIMME_V>, C<GIMME> andL<perlcall>.=for apidoc AmU||G_VOIDUsed to indicate void context.  See C<GIMME_V> and L<perlcall>.=for apidoc AmU||G_DISCARDIndicates that arguments returned from a callback should be discarded.  SeeL<perlcall>.=for apidoc AmU||G_EVALUsed to force a Perl C<eval> wrapper around a callback.  SeeL<perlcall>.=for apidoc AmU||G_NOARGSIndicates that no arguments are being sent to a callback.  SeeL<perlcall>.=cut*/#define G_SCALAR	0#define G_ARRAY		1#define G_VOID		128	/* skip this bit when adding flags below *//* extra flags for Perl_call_* routines */#define G_DISCARD	2	/* Call FREETMPS. */#define G_EVAL		4	/* Assume eval {} around subroutine call. */#define G_NOARGS	8	/* Don't construct a @_ array. */#define G_KEEPERR      16	/* Append errors to $@, don't overwrite it */#define G_NODEBUG      32	/* Disable debugging at toplevel.  */#define G_METHOD       64       /* Calling method. *//* flag bits for PL_in_eval */#define EVAL_NULL	0	/* not in an eval */#define EVAL_INEVAL	1	/* some enclosing scope is an eval */#define EVAL_WARNONLY	2	/* used by yywarn() when calling yyerror() */#define EVAL_KEEPERR	4	/* set by Perl_call_sv if G_KEEPERR */#define EVAL_INREQUIRE	8	/* The code is being required. *//* Support for switching (stack and block) contexts. * This ensures magic doesn't invalidate local stack and cx pointers. */#define PERLSI_UNKNOWN		-1#define PERLSI_UNDEF		0#define PERLSI_MAIN		1#define PERLSI_MAGIC		2#define PERLSI_SORT		3#define PERLSI_SIGNAL		4#define PERLSI_OVERLOAD		5#define PERLSI_DESTROY		6#define PERLSI_WARNHOOK		7#define PERLSI_DIEHOOK		8#define PERLSI_REQUIRE		9struct stackinfo {    AV *		si_stack;	/* stack for current runlevel */    PERL_CONTEXT *	si_cxstack;	/* context stack for runlevel */    I32			si_cxix;	/* current context index */    I32			si_cxmax;	/* maximum allocated index */    I32			si_type;	/* type of runlevel */    struct stackinfo *	si_prev;    struct stackinfo *	si_next;    I32			si_markoff;	/* offset where markstack begins for us.					 * currently used only with DEBUGGING,					 * but not #ifdef-ed for bincompat */};typedef struct stackinfo PERL_SI;#define cxstack		(PL_curstackinfo->si_cxstack)#define cxstack_ix	(PL_curstackinfo->si_cxix)#define cxstack_max	(PL_curstackinfo->si_cxmax)#ifdef DEBUGGING#  define	SET_MARK_OFFSET \    PL_curstackinfo->si_markoff = PL_markstack_ptr - PL_markstack#else#  define	SET_MARK_OFFSET NOOP#endif#define PUSHSTACKi(type) \    STMT_START {							\	PERL_SI *next = PL_curstackinfo->si_next;			\	if (!next) {							\	    next = new_stackinfo(32, 2048/sizeof(PERL_CONTEXT) - 1);	\	    next->si_prev = PL_curstackinfo;				\	    PL_curstackinfo->si_next = next;				\	}								\	next->si_type = type;						\	next->si_cxix = -1;						\	AvFILLp(next->si_stack) = 0;					\	SWITCHSTACK(PL_curstack,next->si_stack);			\	PL_curstackinfo = next;						\	SET_MARK_OFFSET;						\    } STMT_END#define PUSHSTACK PUSHSTACKi(PERLSI_UNKNOWN)/* POPSTACK works with PL_stack_sp, so it may need to be bracketed by * PUTBACK/SPAGAIN to flush/refresh any local SP that may be active */#define POPSTACK \    STMT_START {							\	dSP;								\	PERL_SI *prev = PL_curstackinfo->si_prev;			\	if (!prev) {							\	    PerlIO_printf(Perl_error_log, "panic: POPSTACK\n");		\	    my_exit(1);							\	}								\	SWITCHSTACK(PL_curstack,prev->si_stack);			\	/* don't free prev here, free them all at the END{} */		\	PL_curstackinfo = prev;						\    } STMT_END#define POPSTACK_TO(s) \    STMT_START {							\	while (PL_curstack != s) {					\	    dounwind(-1);						\	    POPSTACK;							\	}								\    } STMT_END

⌨️ 快捷键说明

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