]> granicus.if.org Git - onig/commitdiff
add entry_count into CallNode
authorK.Kosako <kosako@sofnec.co.jp>
Tue, 20 Jun 2017 04:24:06 +0000 (13:24 +0900)
committerK.Kosako <kosako@sofnec.co.jp>
Tue, 20 Jun 2017 04:24:06 +0000 (13:24 +0900)
src/regcomp.c
src/regparse.c
src/regparse.h

index b704c50bf8a7357fd90303728b862f4ed6d228a6..1d9a76a99127de4c5f5b771cfee5f19e8fd996e9 100644 (file)
@@ -3770,6 +3770,8 @@ setup_call2_call(Node* node, ScanEnv* env)
         CallNode* cn = CALL_(node);
         Node* called = NODE_CALL_BODY(cn);
 
+        cn->entry_count++;
+
         NODE_STATUS_ADD(called, NST_CALLED);
         ENCLOSURE_(called)->entry_count++;
         setup_call2_call(called, env);
@@ -3819,8 +3821,10 @@ setup_call(Node* node, ScanEnv* env, int state)
     break;
 
   case NODE_CALL:
-    if ((state & IN_ZERO) != 0)
+    if ((state & IN_ZERO) != 0) {
       NODE_STATUS_ADD(node, NST_IN_ZERO);
+      CALL_(node)->entry_count--;
+    }
 
     r = setup_call_node_call(CALL_(node), env, state);
     break;
index 03c8145069e32c823415194db2b4da2d54277991..18356633ae4255c51bce8287796dc86755c8ced9 100644 (file)
@@ -1268,9 +1268,10 @@ node_new_call(UChar* name, UChar* name_end, int gnum)
   CHECK_NULL_RETURN(node);
 
   SET_NODE_TYPE(node, NODE_CALL);
-  CALL_(node)->name      = name;
-  CALL_(node)->name_end  = name_end;
-  CALL_(node)->group_num = gnum;  /* call by number if gnum != 0 */
+  CALL_(node)->name        = name;
+  CALL_(node)->name_end    = name_end;
+  CALL_(node)->group_num   = gnum;  /* call by number if gnum != 0 */
+  CALL_(node)->entry_count = 1;
   return node;
 }
 #endif
index 4909d6a80fb4f43cf4699852bf3b61af271b0c25..17852cdeca44ce4f19716eefcf2d7badcf3ae5f9 100644 (file)
@@ -242,6 +242,7 @@ typedef struct {
   int     group_num;
   UChar*  name;
   UChar*  name_end;
+  int     entry_count;
 } CallNode;
 
 #endif