]> granicus.if.org Git - onig/commitdiff
update parse_callout_of_code()
authorK.Kosako <kosako@sofnec.co.jp>
Wed, 21 Feb 2018 02:32:48 +0000 (11:32 +0900)
committerK.Kosako <kosako@sofnec.co.jp>
Wed, 21 Feb 2018 04:22:59 +0000 (13:22 +0900)
src/regint.h
src/regparse.c

index fb9515f842b7e28089fbc31ff719d1f51fa41c4e..0d7720e0dcab46dfab489cc5071d3e3f70fe7990 100644 (file)
@@ -269,11 +269,12 @@ typedef struct {
   CalloutType   type;
   union {
     struct {
-      UChar* start;
-      UChar* end;
+      int start;
+      int end;
     } content;
     struct {
       int num;   /* real passed num */
+      OnigType  types[ONIG_CALLOUT_MAX_ARG_NUM];
       OnigValue vals[ONIG_CALLOUT_MAX_ARG_NUM];
     } arg;
   } u;
index 693a785aade8bb8cbdc41f1a9362a73210987966..4119060c1b135d642a44515ed877ac647536a35c 100644 (file)
@@ -6342,17 +6342,16 @@ parse_callout_of_code(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en
 {
   int r;
   int i;
-  int dirs;
+  int in;
   int num;
   OnigCodePoint c;
   UChar* code_start;
   UChar* code_end;
   int brace_nest;
+  CalloutListEntry* e;
   OnigEncoding enc = env->enc;
   UChar* p = *src;
 
-  //PFETCH_READY;
-
   if (PEND) return ONIGERR_INVALID_CALLOUT_PATTERN;
 
   brace_nest = 0;
@@ -6362,7 +6361,7 @@ parse_callout_of_code(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en
     if (PEND) return ONIGERR_INVALID_CALLOUT_PATTERN;
   }
 
-  dirs = ONIG_CALLOUT_IN_PROGRESS;
+  in = ONIG_CALLOUT_IN_PROGRESS;
   code_start = p;
   while (1) {
     if (PEND) return ONIGERR_INVALID_CALLOUT_PATTERN;
@@ -6384,12 +6383,12 @@ parse_callout_of_code(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en
   if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
   PFETCH_S(c);
   if (c == '+') {
-    dirs |= ONIG_CALLOUT_IN_RETRACTION;
+    in |= ONIG_CALLOUT_IN_RETRACTION;
     if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
     PFETCH_S(c);
   }
   else if (c == '-') {
-    dirs = ONIG_CALLOUT_IN_RETRACTION;
+    in = ONIG_CALLOUT_IN_RETRACTION;
     if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
     PFETCH_S(c);
   }
@@ -6400,7 +6399,7 @@ parse_callout_of_code(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en
   r = reg_callout_list_entry(env, &num);
   if (r != 0) return r;
 
-  r = node_new_callout(np, ONIG_CALLOUT_OF_CODE, num, -1, dirs, 0, env);
+  r = node_new_callout(np, ONIG_CALLOUT_OF_CODE, num, ONIG_NO_NAME_ID, in, 0, env);
   if (r != 0) return r;
 
   if (code_start != code_end) {
@@ -6408,6 +6407,12 @@ parse_callout_of_code(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en
     GIMMICK_(*np)->code_end   = (int )(code_end   - env->pattern);
   }
 
+  e = reg_callout_list_at(env, num);
+  e->of = ONIG_CALLOUT_OF_CODE;
+  e->in = in;
+  e->u.content.start = (int )(code_start - env->pattern);
+  e->u.content.end   = (int )(code_end   - env->pattern);
+
   *src = p;
   return 0;
 }