]> granicus.if.org Git - onig/commitdiff
refactoring
authorK.Kosako <kosako@sofnec.co.jp>
Mon, 5 Feb 2018 06:13:50 +0000 (15:13 +0900)
committerK.Kosako <kosako@sofnec.co.jp>
Mon, 5 Feb 2018 06:13:50 +0000 (15:13 +0900)
src/regexec.c

index 5f19a1d1616cd5242586d2f356964a2d4a651567..3a1c0bbb41551a6af19bfb46359175784ce6fbc3 100644 (file)
@@ -1466,11 +1466,11 @@ stack_double(int is_alloca, char** arg_alloc_base,
   }\
 } while(0)
 
-#define STACK_POP_TIL_ALT_PREC_READ_NOT  do {\
+#define POP_TIL_BODY(aname, til_type) do {\
   while (1) {\
     stk--;\
-    STACK_BASE_CHECK(stk, "STACK_POP_TIL_ALT_PREC_READ_NOT"); \
-    if (stk->type == STK_ALT_PREC_READ_NOT) break;\
+    STACK_BASE_CHECK(stk, (aname));\
+    if (stk->type == (til_type)) break;\
     else if (stk->type == STK_MEM_START) {\
       mem_start_stk[stk->id] = stk->u.mem.start;\
       mem_end_stk[stk->id]   = stk->u.mem.end;\
@@ -1485,25 +1485,15 @@ stack_double(int is_alloca, char** arg_alloc_base,
   }\
 } while(0)
 
+#define STACK_POP_TIL_ALT_PREC_READ_NOT  do {\
+  POP_TIL_BODY("STACK_POP_TIL_ALT_PREC_READ_NOT", STK_ALT_PREC_READ_NOT);\
+} while(0)
+
 #define STACK_POP_TIL_ALT_LOOK_BEHIND_NOT  do {\
-  while (1) {\
-    stk--;\
-    STACK_BASE_CHECK(stk, "STACK_POP_TIL_ALT_LOOK_BEHIND_NOT"); \
-    if (stk->type == STK_ALT_LOOK_BEHIND_NOT) break;\
-    else if (stk->type == STK_MEM_START) {\
-      mem_start_stk[stk->id] = stk->u.mem.start;\
-      mem_end_stk[stk->id]   = stk->u.mem.end;\
-    }\
-    else if (stk->type == STK_REPEAT_INC) {\
-      STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\
-    }\
-    else if (stk->type == STK_MEM_END) {\
-      mem_start_stk[stk->id] = stk->u.mem.start;\
-      mem_end_stk[stk->id]   = stk->u.mem.end;\
-    }\
-  }\
+  POP_TIL_BODY("STACK_POP_TIL_ALT_LOOK_BEHIND_NOT", STK_ALT_LOOK_BEHIND_NOT);\
 } while(0)
 
+
 #define STACK_EXEC_TO_VOID(k) do {\
   k = stk;\
   while (1) {\