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
#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
\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
\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
#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
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
\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
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
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
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
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
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
\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
#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
#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
\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