From d90c2fe9999d368bf40e2ab9142a028d0a1b7f91 Mon Sep 17 00:00:00 2001 From: "K.Kosako" Date: Mon, 19 Jun 2017 16:56:39 +0900 Subject: [PATCH] add entry_count memberr into EnclosureNode --- src/regcomp.c | 21 ++++++++++++--------- src/regparse.c | 11 ++++++----- src/regparse.h | 1 + 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/regcomp.c b/src/regcomp.c index efc9d43..ec88b63 100644 --- a/src/regcomp.c +++ b/src/regcomp.c @@ -3766,10 +3766,11 @@ setup_call2_call(Node* node, ScanEnv* env) case NODE_CALL: { CallNode* cn = CALL_(node); + Node* called = NODE_CALL_BODY(cn); - NODE_STATUS_ADD(NODE_CALL_BODY(cn), NST_CALLED); - - setup_call2_call(NODE_CALL_BODY(cn), env); + NODE_STATUS_ADD(called, NST_CALLED); + ENCLOSURE_(called)->entry_count++; + setup_call2_call(called, env); } break; @@ -3799,15 +3800,17 @@ setup_call(Node* node, ScanEnv* env, int state) break; case NODE_ANCHOR: - if (! ANCHOR_HAS_BODY(ANCHOR_(node))) { + if (ANCHOR_HAS_BODY(ANCHOR_(node))) + r = setup_call(NODE_BODY(node), env, state); + else r = 0; - break; - } - /* fall */ + break; + case NODE_ENCLOSURE: - if ((state & IN_ZERO) != 0) + if ((state & IN_ZERO) != 0) { NODE_STATUS_ADD(node, NST_IN_ZERO); - + ENCLOSURE_(node)->entry_count--; + } r = setup_call(NODE_BODY(node), env, state); break; diff --git a/src/regparse.c b/src/regparse.c index 663d6fd..03c8145 100644 --- a/src/regparse.c +++ b/src/regparse.c @@ -1306,11 +1306,12 @@ node_new_enclosure(int type) CHECK_NULL_RETURN(node); SET_NODE_TYPE(node, NODE_ENCLOSURE); - ENCLOSURE_(node)->type = type; - ENCLOSURE_(node)->regnum = 0; - ENCLOSURE_(node)->option = 0; - ENCLOSURE_(node)->call_addr = -1; - ENCLOSURE_(node)->opt_count = 0; + ENCLOSURE_(node)->type = type; + ENCLOSURE_(node)->regnum = 0; + ENCLOSURE_(node)->option = 0; + ENCLOSURE_(node)->call_addr = -1; + ENCLOSURE_(node)->entry_count = 1; + ENCLOSURE_(node)->opt_count = 0; return node; } diff --git a/src/regparse.h b/src/regparse.h index 6089d75..4909d6a 100644 --- a/src/regparse.h +++ b/src/regparse.h @@ -213,6 +213,7 @@ typedef struct { int regnum; OnigOptionType option; AbsAddrType call_addr; + int entry_count; /* for multiple call reference */ OnigLen min_len; /* min length (byte) */ OnigLen max_len; /* max length (byte) */ -- 2.40.0