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

📄 regexp.h

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 H
📖 第 1 页 / 共 2 页
字号:
  RXf_SKIPWHITE*/#define RXf_SPLIT           0x08000000#define RXf_USE_INTUIT		(RXf_USE_INTUIT_NOML|RXf_USE_INTUIT_ML)/* Copy and tainted info */#define RXf_COPY_DONE   	0x10000000#define RXf_TAINTED_SEEN	0x20000000#define RXf_TAINTED             0x80000000 /* this pattern is tainted *//* * NOTE: if you modify any RXf flags you should run regen.pl or regcomp.pl * so that regnodes.h is updated with the changes.  * */#define RX_HAS_CUTGROUP(prog) ((prog)->intflags & PREGf_CUTGROUP_SEEN)#define RX_MATCH_TAINTED(prog)	((prog)->extflags & RXf_TAINTED_SEEN)#define RX_MATCH_TAINTED_on(prog) ((prog)->extflags |= RXf_TAINTED_SEEN)#define RX_MATCH_TAINTED_off(prog) ((prog)->extflags &= ~RXf_TAINTED_SEEN)#define RX_MATCH_TAINTED_set(prog, t) ((t) \				       ? RX_MATCH_TAINTED_on(prog) \				       : RX_MATCH_TAINTED_off(prog))#define RX_MATCH_COPIED(prog)		((prog)->extflags & RXf_COPY_DONE)#define RX_MATCH_COPIED_on(prog)	((prog)->extflags |= RXf_COPY_DONE)#define RX_MATCH_COPIED_off(prog)	((prog)->extflags &= ~RXf_COPY_DONE)#define RX_MATCH_COPIED_set(prog,t)	((t) \					 ? RX_MATCH_COPIED_on(prog) \					 : RX_MATCH_COPIED_off(prog))#endif /* PLUGGABLE_RE_EXTENSION *//* Stuff that needs to be included in the plugable extension goes below here */#ifdef PERL_OLD_COPY_ON_WRITE#define RX_MATCH_COPY_FREE(rx) \	STMT_START {if (rx->saved_copy) { \	    SV_CHECK_THINKFIRST_COW_DROP(rx->saved_copy); \	} \	if (RX_MATCH_COPIED(rx)) { \	    Safefree(rx->subbeg); \	    RX_MATCH_COPIED_off(rx); \	}} STMT_END#else#define RX_MATCH_COPY_FREE(rx) \	STMT_START {if (RX_MATCH_COPIED(rx)) { \	    Safefree(rx->subbeg); \	    RX_MATCH_COPIED_off(rx); \	}} STMT_END#endif#define RX_MATCH_UTF8(prog)		((prog)->extflags & RXf_MATCH_UTF8)#define RX_MATCH_UTF8_on(prog)		((prog)->extflags |= RXf_MATCH_UTF8)#define RX_MATCH_UTF8_off(prog)		((prog)->extflags &= ~RXf_MATCH_UTF8)#define RX_MATCH_UTF8_set(prog, t)	((t) \			? (RX_MATCH_UTF8_on(prog), (PL_reg_match_utf8 = 1)) \			: (RX_MATCH_UTF8_off(prog), (PL_reg_match_utf8 = 0)))    #define REXEC_COPY_STR	0x01		/* Need to copy the string. */#define REXEC_CHECKED	0x02		/* check_substr already checked. */#define REXEC_SCREAM	0x04		/* use scream table. */#define REXEC_IGNOREPOS	0x08		/* \G matches at start. */#define REXEC_NOT_FIRST	0x10		/* This is another iteration of //g. */#define ReREFCNT_inc(re) ((void)(re && re->refcnt++), re)#define ReREFCNT_dec(re) CALLREGFREE(re)#define FBMcf_TAIL_DOLLAR	1#define FBMcf_TAIL_DOLLARM	2#define FBMcf_TAIL_Z		4#define FBMcf_TAIL_z		8#define FBMcf_TAIL		(FBMcf_TAIL_DOLLAR|FBMcf_TAIL_DOLLARM|FBMcf_TAIL_Z|FBMcf_TAIL_z)#define FBMrf_MULTILINE	1/* an accepting state/position*/struct _reg_trie_accepted {    U8   *endpos;    U16  wordnum;};typedef struct _reg_trie_accepted reg_trie_accepted;/* some basic information about the current match that is created by * Perl_regexec_flags and then passed to regtry(), regmatch() etc */typedef struct {    regexp *prog;    char *bol;    char *till;    SV *sv;    char *ganch;    char *cutpoint;} regmatch_info; /* structures for holding and saving the state maintained by regmatch() */#ifndef MAX_RECURSE_EVAL_NOCHANGE_DEPTH#define MAX_RECURSE_EVAL_NOCHANGE_DEPTH 1000#endiftypedef I32 CHECKPOINT;typedef struct regmatch_state {    int resume_state;		/* where to jump to on return */    char *locinput;		/* where to backtrack in string on failure */    union {	/* this is a fake union member that matches the first element	 * of each member that needs to store positive backtrack	 * information */	struct {	    struct regmatch_state *prev_yes_state;	} yes;        /* branchlike members */        /* this is a fake union member that matches the first elements         * of each member that needs to behave like a branch */        struct {	    /* this first element must match u.yes */	    struct regmatch_state *prev_yes_state;	    U32 lastparen;	    CHECKPOINT cp;	            } branchlike;        	    	struct {	    /* the first elements must match u.branchlike */	    struct regmatch_state *prev_yes_state;	    U32 lastparen;	    CHECKPOINT cp;	    	    regnode *next_branch; /* next branch node */	} branch;	struct {	    /* the first elements must match u.branchlike */	    struct regmatch_state *prev_yes_state;	    U32 lastparen;	    CHECKPOINT cp;	    reg_trie_accepted *accept_buff; /* accepting states we have seen */	    U32		accepted; /* how many accepting states we have seen */	    U16         *jump;  /* positive offsets from me */	    regnode	*B;	/* node following the trie */	    regnode	*me;	/* Which node am I - needed for jump tries*/	} trie;        /* special types - these members are used to store state for special           regops like eval, if/then, lookaround and the markpoint state */	struct {	    /* this first element must match u.yes */	    struct regmatch_state *prev_yes_state;	    struct regmatch_state *prev_eval;	    struct regmatch_state *prev_curlyx;	    regexp	*prev_rex;	    U32		toggle_reg_flags; /* what bits in PL_reg_flags to					    flip when transitioning between					    inner and outer rexen */	    CHECKPOINT	cp;	/* remember current savestack indexes */	    CHECKPOINT	lastcp;	    U32        close_paren; /* which close bracket is our end */	    regnode	*B;	/* the node following us  */	} eval;	struct {	    /* this first element must match u.yes */	    struct regmatch_state *prev_yes_state;	    I32 wanted;	    I32 logical;	/* saved copy of 'logical' var */	    regnode  *me; /* the IFMATCH/SUSPEND/UNLESSM node  */	} ifmatch; /* and SUSPEND/UNLESSM */		struct {	    /* this first element must match u.yes */	    struct regmatch_state *prev_yes_state;	    struct regmatch_state *prev_mark;	    SV* mark_name;	    char *mark_loc;	} mark;		struct {	    int val;	} keeper;        /* quantifiers - these members are used for storing state for           for the regops used to implement quantifiers */	struct {	    /* this first element must match u.yes */	    struct regmatch_state *prev_yes_state;	    struct regmatch_state *prev_curlyx; /* previous cur_curlyx */	    regnode	*A, *B;	/* the nodes corresponding to /A*B/  */	    CHECKPOINT	cp;	/* remember current savestack index */	    bool	minmod;	    int		parenfloor;/* how far back to strip paren data */	    int		min;	/* the minimal number of A's to match */	    int		max;	/* the maximal number of A's to match */	    /* these two are modified by WHILEM */	    int		count;	/* how many instances of A we've matched */	    char	*lastloc;/* where previous A matched (0-len detect) */	} curlyx;	struct {	    /* this first element must match u.yes */	    struct regmatch_state *prev_yes_state;	    struct regmatch_state *save_curlyx;	    CHECKPOINT	cp;	/* remember current savestack indexes */	    CHECKPOINT	lastcp;	    char	*save_lastloc;	/* previous curlyx.lastloc */	    I32		cache_offset;	    I32		cache_mask;	} whilem;	struct {	    /* this first element must match u.yes */	    struct regmatch_state *prev_yes_state;	    I32 c1, c2;		/* case fold search */	    CHECKPOINT cp;	    I32 alen;		/* length of first-matched A string */	    I32 count;	    bool minmod;	    regnode *A, *B;	/* the nodes corresponding to /A*B/  */	    regnode *me;	/* the curlym node */	} curlym;	struct {	    U32 paren;	    CHECKPOINT cp;	    I32 c1, c2;		/* case fold search */	    char *maxpos;	/* highest possible point in string to match */	    char *oldloc;	/* the previous locinput */	    int count;	    int min, max;	/* {m,n} */	    regnode *A, *B;	/* the nodes corresponding to /A*B/  */	} curly; /* and CURLYN/PLUS/STAR */    } u;} regmatch_state;/* how many regmatch_state structs to allocate as a single slab. * We do it in 4K blocks for efficiency. The "3" is 2 for the next/prev * pointers, plus 1 for any mythical malloc overhead. */ #define PERL_REGMATCH_SLAB_SLOTS \    ((4096 - 3 * sizeof (void*)) / sizeof(regmatch_state))typedef struct regmatch_slab {    regmatch_state states[PERL_REGMATCH_SLAB_SLOTS];    struct regmatch_slab *prev, *next;} regmatch_slab;#define PL_reg_flags		PL_reg_state.re_state_reg_flags#define PL_bostr		PL_reg_state.re_state_bostr#define PL_reginput		PL_reg_state.re_state_reginput#define PL_regeol		PL_reg_state.re_state_regeol#define PL_regoffs		PL_reg_state.re_state_regoffs#define PL_reglastparen		PL_reg_state.re_state_reglastparen#define PL_reglastcloseparen	PL_reg_state.re_state_reglastcloseparen#define PL_reg_start_tmp	PL_reg_state.re_state_reg_start_tmp#define PL_reg_start_tmpl	PL_reg_state.re_state_reg_start_tmpl#define PL_reg_eval_set		PL_reg_state.re_state_reg_eval_set#define PL_reg_match_utf8	PL_reg_state.re_state_reg_match_utf8#define PL_reg_magic		PL_reg_state.re_state_reg_magic#define PL_reg_oldpos		PL_reg_state.re_state_reg_oldpos#define PL_reg_oldcurpm		PL_reg_state.re_state_reg_oldcurpm#define PL_reg_curpm		PL_reg_state.re_state_reg_curpm#define PL_reg_oldsaved		PL_reg_state.re_state_reg_oldsaved#define PL_reg_oldsavedlen	PL_reg_state.re_state_reg_oldsavedlen#define PL_reg_maxiter		PL_reg_state.re_state_reg_maxiter#define PL_reg_leftiter		PL_reg_state.re_state_reg_leftiter#define PL_reg_poscache		PL_reg_state.re_state_reg_poscache#define PL_reg_poscache_size	PL_reg_state.re_state_reg_poscache_size#define PL_regsize		PL_reg_state.re_state_regsize#define PL_reg_starttry		PL_reg_state.re_state_reg_starttry#define PL_nrs			PL_reg_state.re_state_nrsstruct re_save_state {    U32 re_state_reg_flags;		/* from regexec.c */    U32 re_state_reg_start_tmpl;	/* from regexec.c */    I32 re_state_reg_eval_set;		/* from regexec.c */    bool re_state_reg_match_utf8;	/* from regexec.c */    char *re_state_bostr;    char *re_state_reginput;		/* String-input pointer. */    char *re_state_regeol;		/* End of input, for $ check. */    regexp_paren_pair *re_state_regoffs;  /* Pointer to start/end pairs */    U32 *re_state_reglastparen;		/* Similarly for lastparen. */    U32 *re_state_reglastcloseparen;	/* Similarly for lastcloseparen. */    char **re_state_reg_start_tmp;	/* from regexec.c */    MAGIC *re_state_reg_magic;		/* from regexec.c */    PMOP *re_state_reg_oldcurpm;	/* from regexec.c */    PMOP *re_state_reg_curpm;		/* from regexec.c */    char *re_state_reg_oldsaved;	/* old saved substr during match */    STRLEN re_state_reg_oldsavedlen;	/* old length of saved substr during match */    STRLEN re_state_reg_poscache_size;	/* size of pos cache of WHILEM */    I32 re_state_reg_oldpos;		/* from regexec.c */    I32 re_state_reg_maxiter;		/* max wait until caching pos */    I32 re_state_reg_leftiter;		/* wait until caching pos */    U32 re_state_regsize;		/* from regexec.c */    char *re_state_reg_poscache;	/* cache of pos of WHILEM */    char *re_state_reg_starttry;	/* from regexec.c */#ifdef PERL_OLD_COPY_ON_WRITE    SV *re_state_nrs;			/* was placeholder: unused since 5.8.0 (5.7.2 patch #12027 for bug ID 20010815.012). Used to save rx->saved_copy */#endif};#define SAVESTACK_ALLOC_FOR_RE_SAVE_STATE \	(1 + ((sizeof(struct re_save_state) - 1) / sizeof(*PL_savestack)))/* * Local variables: * c-indentation-style: bsd * c-basic-offset: 4 * indent-tabs-mode: t * End: * * ex: set ts=8 sts=4 sw=4 noet: */

⌨️ 快捷键说明

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