From 2bc91a95fc7759e859f697114420f1ac5c7fe915 Mon Sep 17 00:00:00 2001 From: "K.Kosako" Date: Thu, 8 Jun 2017 16:52:10 +0900 Subject: [PATCH] define ANCHOR_HAS_BODY() macro --- src/regcomp.c | 41 +++++------------------------------------ src/regint.h | 35 +++++++++++++++++++---------------- 2 files changed, 24 insertions(+), 52 deletions(-) diff --git a/src/regcomp.c b/src/regcomp.c index d0f2442..82f2dfa 100644 --- a/src/regcomp.c +++ b/src/regcomp.c @@ -2810,14 +2810,8 @@ subexp_inf_recursive_check(Node* node, ScanEnv* env, int head) case NT_ANCHOR: { AnchorNode* an = NANCHOR(node); - switch (an->type) { - case ANCHOR_PREC_READ: - case ANCHOR_PREC_READ_NOT: - case ANCHOR_LOOK_BEHIND: - case ANCHOR_LOOK_BEHIND_NOT: + if (ANCHOR_HAS_BODY(an)) r = subexp_inf_recursive_check(NODE_ANCHOR_BODY(an), env, head); - break; - } } break; @@ -2866,14 +2860,8 @@ subexp_inf_recursive_check_trav(Node* node, ScanEnv* env) case NT_ANCHOR: { AnchorNode* an = NANCHOR(node); - switch (an->type) { - case ANCHOR_PREC_READ: - case ANCHOR_PREC_READ_NOT: - case ANCHOR_LOOK_BEHIND: - case ANCHOR_LOOK_BEHIND_NOT: + if (ANCHOR_HAS_BODY(an)) r = subexp_inf_recursive_check_trav(NODE_ANCHOR_BODY(an), env); - break; - } } break; @@ -2914,14 +2902,8 @@ subexp_recursive_check(Node* node) case NT_ANCHOR: { AnchorNode* an = NANCHOR(node); - switch (an->type) { - case ANCHOR_PREC_READ: - case ANCHOR_PREC_READ_NOT: - case ANCHOR_LOOK_BEHIND: - case ANCHOR_LOOK_BEHIND_NOT: + if (ANCHOR_HAS_BODY(an)) r = subexp_recursive_check(NODE_ANCHOR_BODY(an)); - break; - } } break; @@ -2983,14 +2965,8 @@ subexp_recursive_check_trav(Node* node, ScanEnv* env) case NT_ANCHOR: { AnchorNode* an = NANCHOR(node); - switch (an->type) { - case ANCHOR_PREC_READ: - case ANCHOR_PREC_READ_NOT: - case ANCHOR_LOOK_BEHIND: - case ANCHOR_LOOK_BEHIND_NOT: + if (ANCHOR_HAS_BODY(an)) r = subexp_recursive_check_trav(NODE_ANCHOR_BODY(an), env); - break; - } } break; @@ -3105,15 +3081,8 @@ setup_subexp_call(Node* node, ScanEnv* env) case NT_ANCHOR: { AnchorNode* an = NANCHOR(node); - - switch (an->type) { - case ANCHOR_PREC_READ: - case ANCHOR_PREC_READ_NOT: - case ANCHOR_LOOK_BEHIND: - case ANCHOR_LOOK_BEHIND_NOT: + if (ANCHOR_HAS_BODY(an)) r = setup_subexp_call(NODE_ANCHOR_BODY(an), env); - break; - } } break; diff --git a/src/regint.h b/src/regint.h index 4a3cddd..a7cece5 100644 --- a/src/regint.h +++ b/src/regint.h @@ -394,25 +394,28 @@ typedef struct _BBuf { #define BBUF_GET_BYTE(buf, pos) (buf)->p[(pos)] -#define ANCHOR_BEGIN_BUF (1<<0) -#define ANCHOR_BEGIN_LINE (1<<1) -#define ANCHOR_BEGIN_POSITION (1<<2) -#define ANCHOR_END_BUF (1<<3) -#define ANCHOR_SEMI_END_BUF (1<<4) -#define ANCHOR_END_LINE (1<<5) - -#define ANCHOR_WORD_BOUND (1<<6) -#define ANCHOR_NOT_WORD_BOUND (1<<7) -#define ANCHOR_WORD_BEGIN (1<<8) -#define ANCHOR_WORD_END (1<<9) -#define ANCHOR_PREC_READ (1<<10) -#define ANCHOR_PREC_READ_NOT (1<<11) -#define ANCHOR_LOOK_BEHIND (1<<12) -#define ANCHOR_LOOK_BEHIND_NOT (1<<13) - +/* has body */ +#define ANCHOR_PREC_READ (1<<0) +#define ANCHOR_PREC_READ_NOT (1<<1) +#define ANCHOR_LOOK_BEHIND (1<<2) +#define ANCHOR_LOOK_BEHIND_NOT (1<<3) +/* no body */ +#define ANCHOR_BEGIN_BUF (1<<4) +#define ANCHOR_BEGIN_LINE (1<<5) +#define ANCHOR_BEGIN_POSITION (1<<6) +#define ANCHOR_END_BUF (1<<7) +#define ANCHOR_SEMI_END_BUF (1<<8) +#define ANCHOR_END_LINE (1<<9) +#define ANCHOR_WORD_BOUND (1<<10) +#define ANCHOR_NOT_WORD_BOUND (1<<11) +#define ANCHOR_WORD_BEGIN (1<<12) +#define ANCHOR_WORD_END (1<<13) #define ANCHOR_ANYCHAR_STAR (1<<14) /* ".*" optimize info */ #define ANCHOR_ANYCHAR_STAR_ML (1<<15) /* ".*" optimize info (multi-line) */ +#define ANCHOR_HAS_BODY(a) ((a)->type < ANCHOR_BEGIN_BUF) + + /* operation code */ enum OpCode { OP_FINISH = 0, /* matching process terminator (no more alternative) */ -- 2.40.0