]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regint.h
MdeModulePkg RegularExpressionDxe: Update Oniguruma from v6.9.0 to v6.9.3
[mirror_edk2.git] / MdeModulePkg / Universal / RegularExpressionDxe / Oniguruma / regint.h
index acfd1792ef55e23fc2df18aeaf7fe7474208ba2e..87704f2be8952ad62480a77e64aa4d21628dd8ad 100644 (file)
@@ -4,7 +4,7 @@
   regint.h -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
  * Redistribution and use in source and binary forms, with or without\r
 #define PLATFORM_UNALIGNED_WORD_ACCESS\r
 #endif\r
 \r
+#ifdef __GNUC__\r
+#define USE_GOTO_LABELS_AS_VALUES\r
+#endif\r
+\r
 /* config */\r
 /* spec. config */\r
 #define USE_CALL\r
 #define USE_CALLOUT\r
 #define USE_BACKREF_WITH_LEVEL        /* \k<name+n>, \k<name-n> */\r
-#define USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT    /* /(?:()|())*\2/ */\r
+#define USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT     /* /(?:()|())*\2/ */\r
 #define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE     /* /\n$/ =~ "\n" */\r
 #define USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR\r
-\r
 #define USE_RETRY_LIMIT_IN_MATCH\r
+#ifdef USE_GOTO_LABELS_AS_VALUES\r
+#define USE_THREADED_CODE\r
+#define USE_DIRECT_THREADED_CODE\r
+#endif\r
 \r
 /* internal config */\r
 #define USE_OP_PUSH_OR_JUMP_EXACT\r
 #define USE_QUANT_PEEK_NEXT\r
 #define USE_ST_LIBRARY\r
 \r
-#include "regenc.h"\r
-\r
-#ifdef __cplusplus\r
-# ifndef  HAVE_STDARG_PROTOTYPES\r
-#  define HAVE_STDARG_PROTOTYPES 1\r
-# endif\r
-#endif\r
-\r
-/* escape Mac OS X/Xcode 2.4/gcc 4.0.1 problem */\r
-#if defined(__APPLE__) && defined(__GNUC__) && __GNUC__ >= 4\r
-# ifndef  HAVE_STDARG_PROTOTYPES\r
-#  define HAVE_STDARG_PROTOTYPES 1\r
-# endif\r
-#endif\r
-\r
-#ifdef HAVE_STDARG_H\r
-# ifndef  HAVE_STDARG_PROTOTYPES\r
-#  define HAVE_STDARG_PROTOTYPES 1\r
-# endif\r
-#endif\r
+#define USE_WORD_BEGIN_END        /* "\<", "\>" */\r
+#define USE_CAPTURE_HISTORY\r
+#define USE_VARIABLE_META_CHARS\r
+#define USE_POSIX_API_REGION_OPTION\r
+#define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
 \r
+#include "regenc.h"\r
 \r
 #define INIT_MATCH_STACK_SIZE                     160\r
 #define DEFAULT_MATCH_STACK_LIMIT_SIZE              0 /* unlimited */\r
 #undef ONIG_ESCAPE_UCHAR_COLLISION\r
 #endif\r
 \r
-#define USE_WORD_BEGIN_END        /* "\<", "\>" */\r
-#define USE_CAPTURE_HISTORY\r
-#define USE_VARIABLE_META_CHARS\r
-#define USE_POSIX_API_REGION_OPTION\r
-#define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
-\r
 #define xmalloc     malloc\r
 #define xrealloc    realloc\r
 #define xcalloc     calloc\r
 #define xstrcat(dest,src,size)   strcat(dest,src)\r
 #endif\r
 \r
-\r
-// #include <stddef.h>\r
-\r
-#ifdef HAVE_LIMITS_H\r
-#include <limits.h>\r
-#endif\r
-\r
 #if 0\r
-#ifdef HAVE_STDLIB_H\r
+#include <stddef.h>\r
+#include <limits.h>\r
 #include <stdlib.h>\r
-#endif\r
 \r
 #ifdef HAVE_STDINT_H\r
 #include <stdint.h>\r
 #include <alloca.h>\r
 #endif\r
 \r
-#ifdef HAVE_STRING_H\r
-# include <string.h>\r
-#else\r
-# include <strings.h>\r
-#endif\r
+#include <string.h>\r
 \r
 #include <ctype.h>\r
 #ifdef HAVE_SYS_TYPES_H\r
@@ -226,6 +202,7 @@ typedef UINTN uintptr_t;
 #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY\r
 #define NULL_UCHARP                   ((UChar* )0)\r
 \r
+#define CHAR_MAP_SIZE       256\r
 #define INFINITE_LEN        ONIG_INFINITE_DISTANCE\r
 \r
 #ifdef PLATFORM_UNALIGNED_WORD_ACCESS\r
@@ -290,64 +267,6 @@ typedef struct {
 \r
 #endif\r
 \r
-typedef struct {\r
-  const UChar* pattern;\r
-  const UChar* pattern_end;\r
-#ifdef USE_CALLOUT\r
-  void*  tag_table;\r
-  int    callout_num;\r
-  int    callout_list_alloc;\r
-  CalloutListEntry* callout_list;    /* index: callout num */\r
-#endif\r
-} RegexExt;\r
-\r
-#define REG_EXTP(reg)      ((RegexExt* )((reg)->chain))\r
-#define REG_EXTPL(reg)     ((reg)->chain)\r
-\r
-struct re_pattern_buffer {\r
-  /* common members of BBuf(bytes-buffer) */\r
-  unsigned char* p;         /* compiled pattern */\r
-  unsigned int used;        /* used space for p */\r
-  unsigned int alloc;       /* allocated space for p */\r
-\r
-  int num_mem;                   /* used memory(...) num counted from 1 */\r
-  int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */\r
-  int num_null_check;            /* OP_EMPTY_CHECK_START/END id counter */\r
-  int num_comb_exp_check;        /* no longer used (combination explosion check) */\r
-  int num_call;                  /* number of subexp call */\r
-  unsigned int capture_history;  /* (?@...) flag (1-31) */\r
-  unsigned int bt_mem_start;     /* need backtrack flag */\r
-  unsigned int bt_mem_end;       /* need backtrack flag */\r
-  int stack_pop_level;\r
-  int repeat_range_alloc;\r
-  OnigRepeatRange* repeat_range;\r
-\r
-  OnigEncoding      enc;\r
-  OnigOptionType    options;\r
-  OnigSyntaxType*   syntax;\r
-  OnigCaseFoldType  case_fold_flag;\r
-  void*             name_table;\r
-\r
-  /* optimization info (string search, char-map and anchors) */\r
-  int            optimize;          /* optimize flag */\r
-  int            threshold_len;     /* search str-length for apply optimize */\r
-  int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */\r
-  OnigLen   anchor_dmin;       /* (SEMI_)END_BUF anchor distance */\r
-  OnigLen   anchor_dmax;       /* (SEMI_)END_BUF anchor distance */\r
-  int            sub_anchor;        /* start-anchor for exact or map */\r
-  unsigned char *exact;\r
-  unsigned char *exact_end;\r
-  unsigned char  map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */\r
-  int           *int_map;                   /* BM skip for exact_len > 255 */\r
-  int           *int_map_backward;          /* BM skip for backward search */\r
-  OnigLen   dmin;                      /* min-distance of exact or map */\r
-  OnigLen   dmax;                      /* max-distance of exact or map */\r
-\r
-  /* regex_t link chain */\r
-  struct re_pattern_buffer* chain;  /* escape compile-conflict */\r
-};\r
-\r
-\r
 /* stack pop level */\r
 enum StackPopLevel {\r
   STACK_POP_LEVEL_FREE      = 0,\r
@@ -357,12 +276,13 @@ enum StackPopLevel {
 \r
 /* optimize flags */\r
 enum OptimizeType {\r
-  OPTIMIZE_NONE            = 0,\r
-  OPTIMIZE_EXACT           = 1,  /* Slow Search */\r
-  OPTIMIZE_EXACT_BM        = 2,  /* Boyer Moore Search */\r
-  OPTIMIZE_EXACT_BM_NO_REV = 3,  /* BM   (but not simple match) */\r
-  OPTIMIZE_EXACT_IC        = 4,  /* Slow Search (ignore case) */\r
-  OPTIMIZE_MAP             = 5   /* char map */\r
+  OPTIMIZE_NONE = 0,\r
+  OPTIMIZE_STR,                   /* Slow Search */\r
+  OPTIMIZE_STR_FAST,              /* Sunday quick search / BMH */\r
+  OPTIMIZE_STR_FAST_STEP_FORWARD, /* Sunday quick search / BMH */\r
+  OPTIMIZE_STR_CASE_FOLD_FAST,    /* Sunday quick search / BMH (ignore case) */\r
+  OPTIMIZE_STR_CASE_FOLD,         /* Slow Search (ignore case) */\r
+  OPTIMIZE_MAP                    /* char map */\r
 };\r
 \r
 /* bit status */\r
@@ -436,8 +356,8 @@ typedef unsigned int  MemStatusType;
 #define DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag) \\r
   ((case_fold_flag) & ~INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR)\r
 \r
-#define REPEAT_INFINITE         -1\r
-#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)\r
+#define INFINITE_REPEAT         -1\r
+#define IS_INFINITE_REPEAT(n)   ((n) == INFINITE_REPEAT)\r
 \r
 /* bitset */\r
 #define BITS_PER_BYTE      8\r
@@ -475,7 +395,7 @@ typedef struct _BBuf {
   unsigned int alloc;\r
 } BBuf;\r
 \r
-#define BB_INIT(buf,size)    onig_bbuf_init((BBuf* )(buf), (size))\r
+#define BB_INIT(buf,size)    bbuf_init((BBuf* )(buf), (size))\r
 \r
 #define BB_SIZE_INC(buf,inc) do{\\r
   (buf)->alloc += (inc);\\r
@@ -551,32 +471,32 @@ typedef struct _BBuf {
 \r
 \r
 /* has body */\r
-#define ANCHOR_PREC_READ        (1<<0)\r
-#define ANCHOR_PREC_READ_NOT    (1<<1)\r
-#define ANCHOR_LOOK_BEHIND      (1<<2)\r
-#define ANCHOR_LOOK_BEHIND_NOT  (1<<3)\r
+#define ANCR_PREC_READ        (1<<0)\r
+#define ANCR_PREC_READ_NOT    (1<<1)\r
+#define ANCR_LOOK_BEHIND      (1<<2)\r
+#define ANCR_LOOK_BEHIND_NOT  (1<<3)\r
 /* no body */\r
-#define ANCHOR_BEGIN_BUF        (1<<4)\r
-#define ANCHOR_BEGIN_LINE       (1<<5)\r
-#define ANCHOR_BEGIN_POSITION   (1<<6)\r
-#define ANCHOR_END_BUF          (1<<7)\r
-#define ANCHOR_SEMI_END_BUF     (1<<8)\r
-#define ANCHOR_END_LINE         (1<<9)\r
-#define ANCHOR_WORD_BOUNDARY    (1<<10)\r
-#define ANCHOR_NO_WORD_BOUNDARY (1<<11)\r
-#define ANCHOR_WORD_BEGIN       (1<<12)\r
-#define ANCHOR_WORD_END         (1<<13)\r
-#define ANCHOR_ANYCHAR_INF      (1<<14)\r
-#define ANCHOR_ANYCHAR_INF_ML   (1<<15)\r
-#define ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY    (1<<16)\r
-#define ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY (1<<17)\r
-\r
-\r
-#define ANCHOR_HAS_BODY(a)      ((a)->type < ANCHOR_BEGIN_BUF)\r
+#define ANCR_BEGIN_BUF        (1<<4)\r
+#define ANCR_BEGIN_LINE       (1<<5)\r
+#define ANCR_BEGIN_POSITION   (1<<6)\r
+#define ANCR_END_BUF          (1<<7)\r
+#define ANCR_SEMI_END_BUF     (1<<8)\r
+#define ANCR_END_LINE         (1<<9)\r
+#define ANCR_WORD_BOUNDARY    (1<<10)\r
+#define ANCR_NO_WORD_BOUNDARY (1<<11)\r
+#define ANCR_WORD_BEGIN       (1<<12)\r
+#define ANCR_WORD_END         (1<<13)\r
+#define ANCR_ANYCHAR_INF      (1<<14)\r
+#define ANCR_ANYCHAR_INF_ML   (1<<15)\r
+#define ANCR_TEXT_SEGMENT_BOUNDARY    (1<<16)\r
+#define ANCR_NO_TEXT_SEGMENT_BOUNDARY (1<<17)\r
+\r
+\r
+#define ANCHOR_HAS_BODY(a)      ((a)->type < ANCR_BEGIN_BUF)\r
 \r
 #define IS_WORD_ANCHOR_TYPE(type) \\r
-  ((type) == ANCHOR_WORD_BOUNDARY || (type) == ANCHOR_NO_WORD_BOUNDARY || \\r
-   (type) == ANCHOR_WORD_BEGIN || (type) == ANCHOR_WORD_END)\r
+  ((type) == ANCR_WORD_BOUNDARY || (type) == ANCR_NO_WORD_BOUNDARY || \\r
+   (type) == ANCR_WORD_BEGIN || (type) == ANCR_WORD_END)\r
 \r
 /* operation code */\r
 enum OpCode {\r
@@ -605,9 +525,6 @@ enum OpCode {
   OP_CCLASS_NOT,\r
   OP_CCLASS_MB_NOT,\r
   OP_CCLASS_MIX_NOT,\r
-#ifdef USE_OP_CCLASS_NODE\r
-  OP_CCLASS_NODE,       /* pointer to CClassNode node */\r
-#endif\r
 \r
   OP_ANYCHAR,                 /* "."  */\r
   OP_ANYCHAR_ML,              /* "."  multi-line */\r
@@ -625,8 +542,7 @@ enum OpCode {
   OP_WORD_BEGIN,\r
   OP_WORD_END,\r
 \r
-  OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,\r
-  OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,\r
+  OP_TEXT_SEGMENT_BOUNDARY,\r
 \r
   OP_BEGIN_BUF,\r
   OP_END_BUF,\r
@@ -642,6 +558,7 @@ enum OpCode {
   OP_BACKREF_MULTI,\r
   OP_BACKREF_MULTI_IC,\r
   OP_BACKREF_WITH_LEVEL,        /* \k<xxx+n>, \k<xxx-n> */\r
+  OP_BACKREF_WITH_LEVEL_IC,     /* \k<xxx+n>, \k<xxx-n> */\r
   OP_BACKREF_CHECK,             /* (?(n)), (?('name')) */\r
   OP_BACKREF_CHECK_WITH_LEVEL,  /* (?(n-level)), (?('name-level')) */\r
 \r
@@ -657,7 +574,9 @@ enum OpCode {
   OP_PUSH,\r
   OP_PUSH_SUPER,\r
   OP_POP_OUT,\r
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT\r
   OP_PUSH_OR_JUMP_EXACT1,  /* if match exact then push, else jump. */\r
+#endif\r
   OP_PUSH_IF_PEEK_NEXT,    /* if match exact then push, else none. */\r
   OP_REPEAT,               /* {n,m} */\r
   OP_REPEAT_NG,            /* {n,m}? (non greedy) */\r
@@ -704,6 +623,11 @@ enum UpdateVarType {
   UPDATE_VAR_RIGHT_RANGE_INIT         = 4,\r
 };\r
 \r
+enum TextSegmentBoundaryType {\r
+  EXTENDED_GRAPHEME_CLUSTER_BOUNDARY = 0,\r
+  WORD_BOUNDARY = 1,\r
+};\r
+\r
 typedef int RelAddrType;\r
 typedef int AbsAddrType;\r
 typedef int LengthType;\r
@@ -747,13 +671,16 @@ typedef int ModeType;
 \r
 \r
 /* op-code + arg size */\r
+#if 0\r
 #define SIZE_OP_ANYCHAR_STAR            SIZE_OPCODE\r
 #define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT (SIZE_OPCODE + 1)\r
 #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)\r
 #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)\r
 #define SIZE_OP_PUSH_SUPER             (SIZE_OPCODE + SIZE_RELADDR)\r
 #define SIZE_OP_POP_OUT                 SIZE_OPCODE\r
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT\r
 #define SIZE_OP_PUSH_OR_JUMP_EXACT1    (SIZE_OPCODE + SIZE_RELADDR + 1)\r
+#endif\r
 #define SIZE_OP_PUSH_IF_PEEK_NEXT      (SIZE_OPCODE + SIZE_RELADDR + 1)\r
 #define SIZE_OP_REPEAT_INC             (SIZE_OPCODE + SIZE_MEMNUM)\r
 #define SIZE_OP_REPEAT_INC_NG          (SIZE_OPCODE + SIZE_MEMNUM)\r
@@ -786,6 +713,56 @@ typedef int ModeType;
 #define SIZE_OP_CALLOUT_NAME           (SIZE_OPCODE + SIZE_MEMNUM + SIZE_MEMNUM)\r
 #endif\r
 \r
+#else  /* if 0 */\r
+\r
+/* for relative address increment to go next op. */\r
+#define SIZE_INC_OP                     1\r
+\r
+#define SIZE_OP_ANYCHAR_STAR            1\r
+#define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT  1\r
+#define SIZE_OP_JUMP                    1\r
+#define SIZE_OP_PUSH                    1\r
+#define SIZE_OP_PUSH_SUPER              1\r
+#define SIZE_OP_POP_OUT                 1\r
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT\r
+#define SIZE_OP_PUSH_OR_JUMP_EXACT1     1\r
+#endif\r
+#define SIZE_OP_PUSH_IF_PEEK_NEXT       1\r
+#define SIZE_OP_REPEAT                  1\r
+#define SIZE_OP_REPEAT_INC              1\r
+#define SIZE_OP_REPEAT_INC_NG           1\r
+#define SIZE_OP_WORD_BOUNDARY           1\r
+#define SIZE_OP_PREC_READ_START         1\r
+#define SIZE_OP_PREC_READ_NOT_START     1\r
+#define SIZE_OP_PREC_READ_END           1\r
+#define SIZE_OP_PREC_READ_NOT_END       1\r
+#define SIZE_OP_BACKREF                 1\r
+#define SIZE_OP_FAIL                    1\r
+#define SIZE_OP_MEMORY_START            1\r
+#define SIZE_OP_MEMORY_START_PUSH       1\r
+#define SIZE_OP_MEMORY_END_PUSH         1\r
+#define SIZE_OP_MEMORY_END_PUSH_REC     1\r
+#define SIZE_OP_MEMORY_END              1\r
+#define SIZE_OP_MEMORY_END_REC          1\r
+#define SIZE_OP_ATOMIC_START            1\r
+#define SIZE_OP_ATOMIC_END              1\r
+#define SIZE_OP_EMPTY_CHECK_START       1\r
+#define SIZE_OP_EMPTY_CHECK_END         1\r
+#define SIZE_OP_LOOK_BEHIND             1\r
+#define SIZE_OP_LOOK_BEHIND_NOT_START   1\r
+#define SIZE_OP_LOOK_BEHIND_NOT_END     1\r
+#define SIZE_OP_CALL                    1\r
+#define SIZE_OP_RETURN                  1\r
+#define SIZE_OP_PUSH_SAVE_VAL           1\r
+#define SIZE_OP_UPDATE_VAR              1\r
+\r
+#ifdef USE_CALLOUT\r
+#define SIZE_OP_CALLOUT_CONTENTS        1\r
+#define SIZE_OP_CALLOUT_NAME            1\r
+#endif\r
+#endif /* if 0 */\r
+\r
+\r
 #define MC_ESC(syn)               (syn)->meta_char_table.esc\r
 #define MC_ANYCHAR(syn)           (syn)->meta_char_table.anychar\r
 #define MC_ANYTIME(syn)           (syn)->meta_char_table.anytime\r
@@ -837,8 +814,186 @@ typedef int ModeType;
 #define NCCLASS_CLEAR_NOT(nd)   NCCLASS_FLAG_CLEAR(nd, FLAG_NCCLASS_NOT)\r
 #define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)\r
 \r
-extern void onig_add_end_call(void (*func)(void));\r
 \r
+typedef struct {\r
+#ifdef USE_DIRECT_THREADED_CODE\r
+  const void* opaddr;\r
+#else\r
+  enum OpCode opcode;\r
+#endif\r
+  union {\r
+    struct {\r
+      UChar s[16];  /* Now used first 7 bytes only. */\r
+    } exact;\r
+    struct {\r
+      UChar* s;\r
+      LengthType n;   /* number of chars */\r
+    } exact_n; /* EXACTN, EXACTN_IC, EXACTMB2N, EXACTMB3N */\r
+    struct {\r
+      UChar* s;\r
+      LengthType n;   /* number of chars */\r
+      LengthType len; /* char byte length */\r
+    } exact_len_n; /* EXACTMBN */\r
+    struct {\r
+      BitSetRef bsp;\r
+    } cclass;\r
+    struct {\r
+      void*  mb;\r
+    } cclass_mb;\r
+    struct {\r
+      void*  mb; /* mb must be same position with cclass_mb for match_at(). */\r
+      BitSetRef bsp;\r
+    } cclass_mix;\r
+    struct {\r
+      UChar c;\r
+    } anychar_star_peek_next;\r
+    struct {\r
+      ModeType mode;\r
+    } word_boundary; /* OP_WORD_BOUNDARY, OP_NO_WORD_BOUNDARY, OP_WORD_BEGIN, OP_WORD_END */\r
+    struct {\r
+      enum TextSegmentBoundaryType type;\r
+      int not;\r
+    } text_segment_boundary;\r
+    struct {\r
+      union {\r
+        MemNumType  n1; /* num == 1 */\r
+        MemNumType* ns; /* num >  1 */\r
+      };\r
+      int num;\r
+      int nest_level;\r
+    } backref_general; /* BACKREF_MULTI, BACKREF_MULTI_IC, BACKREF_WITH_LEVEL, BACKREF_CHECK, BACKREF_CHECK_WITH_LEVEL, */\r
+    struct {\r
+      MemNumType n1;\r
+    } backref_n; /* BACKREF_N, BACKREF_N_IC */\r
+    struct {\r
+      MemNumType num;\r
+    } memory_start; /* MEMORY_START, MEMORY_START_PUSH */\r
+    struct {\r
+      MemNumType num;\r
+    } memory_end; /* MEMORY_END, MEMORY_END_REC, MEMORY_END_PUSH, MEMORY_END_PUSH_REC */\r
+    struct {\r
+      RelAddrType addr;\r
+    } jump;\r
+    struct {\r
+      RelAddrType addr;\r
+    } push;\r
+    struct {\r
+      RelAddrType addr;\r
+      UChar c;\r
+    } push_or_jump_exact1;\r
+    struct {\r
+      RelAddrType addr;\r
+      UChar c;\r
+    } push_if_peek_next;\r
+    struct {\r
+      MemNumType  id;\r
+      RelAddrType addr;\r
+    } repeat; /* REPEAT, REPEAT_NG */\r
+    struct {\r
+      MemNumType  id;\r
+    } repeat_inc; /* REPEAT_INC, REPEAT_INC_SG, REPEAT_INC_NG, REPEAT_INC_NG_SG */\r
+    struct {\r
+      MemNumType mem;\r
+    } empty_check_start;\r
+    struct {\r
+      MemNumType mem;\r
+    } empty_check_end; /* EMPTY_CHECK_END, EMPTY_CHECK_END_MEMST, EMPTY_CHECK_END_MEMST_PUSH */\r
+    struct {\r
+      RelAddrType addr;\r
+    } prec_read_not_start;\r
+    struct {\r
+      LengthType len;\r
+    } look_behind;\r
+    struct {\r
+      LengthType  len;\r
+      RelAddrType addr;\r
+    } look_behind_not_start;\r
+    struct {\r
+      AbsAddrType addr;\r
+    } call;\r
+    struct {\r
+      SaveType   type;\r
+      MemNumType id;\r
+    } push_save_val;\r
+    struct {\r
+      UpdateVarType type;\r
+      MemNumType id;\r
+    } update_var;\r
+#ifdef USE_CALLOUT\r
+    struct {\r
+      MemNumType num;\r
+    } callout_contents;\r
+    struct {\r
+      MemNumType num;\r
+      MemNumType id;\r
+    } callout_name;\r
+#endif\r
+  };\r
+} Operation;\r
+\r
+typedef struct {\r
+  const UChar* pattern;\r
+  const UChar* pattern_end;\r
+#ifdef USE_CALLOUT\r
+  void*  tag_table;\r
+  int    callout_num;\r
+  int    callout_list_alloc;\r
+  CalloutListEntry* callout_list;    /* index: callout num */\r
+#endif\r
+} RegexExt;\r
+\r
+struct re_pattern_buffer {\r
+  /* common members of BBuf(bytes-buffer) */\r
+  Operation*   ops;\r
+#ifdef USE_DIRECT_THREADED_CODE\r
+  enum OpCode* ocs;\r
+#endif\r
+  Operation*   ops_curr;\r
+  unsigned int ops_used;    /* used space for ops */\r
+  unsigned int ops_alloc;   /* allocated space for ops */\r
+  unsigned char* string_pool;\r
+  unsigned char* string_pool_end;\r
+\r
+  int num_mem;                   /* used memory(...) num counted from 1 */\r
+  int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */\r
+  int num_null_check;            /* OP_EMPTY_CHECK_START/END id counter */\r
+  int num_call;                  /* number of subexp call */\r
+  unsigned int capture_history;  /* (?@...) flag (1-31) */\r
+  unsigned int bt_mem_start;     /* need backtrack flag */\r
+  unsigned int bt_mem_end;       /* need backtrack flag */\r
+  int stack_pop_level;\r
+  int repeat_range_alloc;\r
+  OnigRepeatRange* repeat_range;\r
+\r
+  OnigEncoding      enc;\r
+  OnigOptionType    options;\r
+  OnigSyntaxType*   syntax;\r
+  OnigCaseFoldType  case_fold_flag;\r
+  void*             name_table;\r
+\r
+  /* optimization info (string search, char-map and anchors) */\r
+  int            optimize;          /* optimize flag */\r
+  int            threshold_len;     /* search str-length for apply optimize */\r
+  int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */\r
+  OnigLen        anchor_dmin;       /* (SEMI_)END_BUF anchor distance */\r
+  OnigLen        anchor_dmax;       /* (SEMI_)END_BUF anchor distance */\r
+  int            sub_anchor;        /* start-anchor for exact or map */\r
+  unsigned char *exact;\r
+  unsigned char *exact_end;\r
+  unsigned char  map[CHAR_MAP_SIZE]; /* used as BMH skip or char-map */\r
+  int            map_offset;\r
+  OnigLen        dmin;                      /* min-distance of exact or map */\r
+  OnigLen        dmax;                      /* max-distance of exact or map */\r
+  RegexExt*      extp;\r
+};\r
+\r
+#define COP(reg)            ((reg)->ops_curr)\r
+#define COP_CURR_OFFSET(reg)  ((reg)->ops_used - 1)\r
+#define COP_CURR_OFFSET_BYTES(reg, p)  \\r
+  ((int )((char* )(&((reg)->ops_curr->p)) - (char* )((reg)->ops)))\r
+\r
+\r
+extern void onig_add_end_call(void (*func)(void));\r
 \r
 #ifdef ONIG_DEBUG\r
 \r
@@ -854,13 +1009,12 @@ extern int  onig_print_statistics P_((FILE* f));
 \r
 extern void   onig_warning(const char* s);\r
 extern UChar* onig_error_code_to_format P_((int code));\r
-extern void EFIAPI onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));\r
-extern int    onig_bbuf_init P_((BBuf* buf, int size));\r
+extern void  EFIAPI onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));\r
 extern int    onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo));\r
-extern void   onig_transfer P_((regex_t* to, regex_t* from));\r
 extern int    onig_is_code_in_cc_len P_((int enclen, OnigCodePoint code, void* /* CClassNode* */ cc));\r
 extern RegexExt* onig_get_regex_ext(regex_t* reg);\r
 extern int    onig_ext_set_pattern(regex_t* reg, const UChar* pattern, const UChar* pattern_end);\r
+extern int    onig_positive_int_multiply(int x, int y);\r
 \r
 #ifdef USE_CALLOUT\r
 \r