]> granicus.if.org Git - onig/commitdiff
add UPDATE_VAR_RIGHT_RANGE_INIT (UpdateVarType)
authorK.Kosako <kkosako0@gmail.com>
Sun, 30 Jul 2017 08:17:10 +0000 (17:17 +0900)
committerK.Kosako <kkosako0@gmail.com>
Sun, 30 Jul 2017 08:17:10 +0000 (17:17 +0900)
src/regexec.c
src/regint.h

index 94850e671f1c15db5d015999f922684fed602dd6..a817e0b5bb15f15c56033014f97b94ce0a7036d6 100644 (file)
@@ -1225,6 +1225,11 @@ static int string_cmp_ic(OnigEncoding enc, int case_fold_flag,
 #define DATA_ENSURE_CHECK(n)   (s + (n) <= right_range)
 #define DATA_ENSURE(n)         if (s + (n) > right_range) goto fail
 
+#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
+#define INIT_RIGHT_RANGE    right_range = (UChar* )in_right_range
+#else
+#define INIT_RIGHT_RANGE    right_range = (UChar* )end
+#endif
 
 #ifdef USE_CAPTURE_HISTORY
 static int
@@ -1519,11 +1524,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   STACK_PUSH_ENSURED(STK_ALT, FinishCode);  /* bottom stack */
   best_len = ONIG_MISMATCH;
   keep = s = (UChar* )sstart;
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
-  right_range = (UChar* )in_right_range;
-#else
-  right_range = (UChar* )end;
-#endif
+  INIT_RIGHT_RANGE;
 
   while (1) {
 #ifdef ONIG_DEBUG_MATCH
@@ -3003,6 +3004,9 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         case UPDATE_VAR_RIGHT_RANGE_FROM_STACK:
          STACK_GET_SAVE_VAL_TYPE_LAST_ID(SAVE_RIGHT_RANGE, mem, right_range);
           break;
+        case UPDATE_VAR_RIGHT_RANGE_INIT:
+          INIT_RIGHT_RANGE;
+          break;
         case UPDATE_VAR_RIGHT_RANGE_SPREV:
           right_range = sprev;
           break;
index b96b073db6aa095e1e46bee5c0c084701771cdec..a96d7ec0a18419bf76018f6281f13e1315220da4 100644 (file)
@@ -568,7 +568,8 @@ enum UpdateVarType {
   UPDATE_VAR_S_FROM_STACK             = 1,
   UPDATE_VAR_RIGHT_RANGE_FROM_STACK   = 2,
   UPDATE_VAR_RIGHT_RANGE_FROM_S_STACK = 3,
-  UPDATE_VAR_RIGHT_RANGE_SPREV        = 4,
+  UPDATE_VAR_RIGHT_RANGE_INIT         = 4,
+  UPDATE_VAR_RIGHT_RANGE_SPREV        = 5,
 };
 
 typedef int RelAddrType;