summaryrefslogtreecommitdiff
path: root/regparse.h
diff options
context:
space:
mode:
Diffstat (limited to 'regparse.h')
-rw-r--r--regparse.h78
1 files changed, 41 insertions, 37 deletions
diff --git a/regparse.h b/regparse.h
index 4f45e2b72c..65da835a55 100644
--- a/regparse.h
+++ b/regparse.h
@@ -1,11 +1,11 @@
-#ifndef ONIGURUMA_REGPARSE_H
-#define ONIGURUMA_REGPARSE_H
+#ifndef ONIGMO_REGPARSE_H
+#define ONIGMO_REGPARSE_H
/**********************************************************************
regparse.h - Onigmo (Oniguruma-mod) (regular expression library)
**********************************************************************/
/*-
* Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011 K.Takata <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2019 K.Takata <kentkt AT csc DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,9 +32,7 @@
#include "regint.h"
-#if defined __GNUC__ && __GNUC__ >= 4
-#pragma GCC visibility push(default)
-#endif
+RUBY_SYMBOL_EXPORT_BEGIN
/* node type */
#define NT_STR 0
@@ -69,7 +67,11 @@
BIT_NT_CANY | BIT_NT_BREF)) != 0)
#define NTYPE(node) ((node)->u.base.type)
-#define SET_NTYPE(node, ntype) (node)->u.base.type = (ntype)
+#define SET_NTYPE(node, ntype) \
+ do { \
+ int value = ntype; \
+ memcpy(&((node)->u.base.type), &value, sizeof(int)); \
+ } while (0)
#define NSTR(node) (&((node)->u.str))
#define NCCLASS(node) (&((node)->u.cclass))
@@ -93,6 +95,7 @@
#define ENCLOSE_OPTION (1<<1)
#define ENCLOSE_STOP_BACKTRACK (1<<2)
#define ENCLOSE_CONDITION (1<<3)
+#define ENCLOSE_ABSENT (1<<4)
#define NODE_STR_MARGIN 16
#define NODE_STR_BUF_SIZE 24 /* sizeof(CClassNode) - sizeof(int)*4 */
@@ -183,7 +186,7 @@ typedef struct {
int target_empty_info;
struct _Node* head_exact;
struct _Node* next_head_exact;
- int is_refered; /* include called node. don't eliminate even if {0} */
+ int is_referred; /* include called node. don't eliminate even if {0} */
#ifdef USE_COMBINATION_EXPLOSION_CHECK
int comb_exp_check_num; /* 1,2,3...: check, 0: no check */
#endif
@@ -195,8 +198,8 @@ typedef struct {
int type;
int regnum;
OnigOptionType option;
- struct _Node* target;
AbsAddrType call_addr;
+ struct _Node* target;
/* for multiple call reference */
OnigDistance min_len; /* min length (byte) */
OnigDistance max_len; /* max length (byte) */
@@ -298,10 +301,10 @@ typedef struct {
UChar* error;
UChar* error_end;
regex_t* reg; /* for reg->names only */
- int num_call;
#ifdef USE_SUBEXP_CALL
UnsetAddrList* unset_addr_list;
#endif
+ int num_call;
int num_mem;
#ifdef USE_NAMED_GROUP
int num_named;
@@ -315,9 +318,12 @@ typedef struct {
int curr_max_regnum;
int has_recursion;
#endif
+ unsigned int parse_depth;
int warnings_flag;
+#ifdef RUBY
const char* sourcefile;
int sourceline;
+#endif
} ScanEnv;
@@ -330,38 +336,36 @@ typedef struct {
int new_val;
} GroupNumRemap;
-extern int onig_renumber_name_table P_((regex_t* reg, GroupNumRemap* map));
+extern int onig_renumber_name_table(regex_t* reg, GroupNumRemap* map);
#endif
-extern int onig_strncmp P_((const UChar* s1, const UChar* s2, int n));
-extern void onig_strcpy P_((UChar* dest, const UChar* src, const UChar* end));
-extern void onig_scan_env_set_error_string P_((ScanEnv* env, int ecode, UChar* arg, UChar* arg_end));
-extern int onig_scan_unsigned_number P_((UChar** src, const UChar* end, OnigEncoding enc));
-extern void onig_reduce_nested_quantifier P_((Node* pnode, Node* cnode));
-extern void onig_node_conv_to_str_node P_((Node* node, int raw));
-extern int onig_node_str_cat P_((Node* node, const UChar* s, const UChar* end));
-extern int onig_node_str_set P_((Node* node, const UChar* s, const UChar* end));
-extern void onig_node_free P_((Node* node));
-extern Node* onig_node_new_enclose P_((int type));
-extern Node* onig_node_new_anchor P_((int type));
-extern Node* onig_node_new_str P_((const UChar* s, const UChar* end));
-extern Node* onig_node_new_list P_((Node* left, Node* right));
-extern Node* onig_node_list_add P_((Node* list, Node* x));
-extern Node* onig_node_new_alt P_((Node* left, Node* right));
-extern void onig_node_str_clear P_((Node* node));
-extern int onig_free_node_list P_((void));
-extern int onig_names_free P_((regex_t* reg));
-extern int onig_parse_make_tree P_((Node** root, const UChar* pattern, const UChar* end, regex_t* reg, ScanEnv* env));
-extern int onig_free_shared_cclass_table P_((void));
+extern int onig_strncmp(const UChar* s1, const UChar* s2, size_t n);
+extern void onig_strcpy(UChar* dest, const UChar* src, const UChar* end);
+extern void onig_scan_env_set_error_string(ScanEnv* env, int ecode, UChar* arg, UChar* arg_end);
+extern int onig_scan_unsigned_number(UChar** src, const UChar* end, OnigEncoding enc);
+extern void onig_reduce_nested_quantifier(Node* pnode, Node* cnode);
+extern void onig_node_conv_to_str_node(Node* node, int raw);
+extern int onig_node_str_cat(Node* node, const UChar* s, const UChar* end);
+extern int onig_node_str_set(Node* node, const UChar* s, const UChar* end);
+extern void onig_node_free(Node* node);
+extern Node* onig_node_new_enclose(int type);
+extern Node* onig_node_new_anchor(int type);
+extern Node* onig_node_new_str(const UChar* s, const UChar* end);
+extern Node* onig_node_new_list(Node* left, Node* right);
+extern Node* onig_node_list_add(Node* list, Node* x);
+extern Node* onig_node_new_alt(Node* left, Node* right);
+extern void onig_node_str_clear(Node* node);
+extern int onig_names_free(regex_t* reg);
+extern int onig_names_copy(regex_t* reg, regex_t* oreg);
+extern int onig_parse_make_tree(Node** root, const UChar* pattern, const UChar* end, regex_t* reg, ScanEnv* env);
+extern int onig_free_shared_cclass_table(void);
#ifdef ONIG_DEBUG
-#ifdef USE_NAMED_GROUP
+# ifdef USE_NAMED_GROUP
extern int onig_print_names(FILE*, regex_t*);
-#endif
+# endif
#endif
-#if defined __GNUC__ && __GNUC__ >= 4
-#pragma GCC visibility pop
-#endif
+RUBY_SYMBOL_EXPORT_END
-#endif /* ONIGURUMA_REGPARSE_H */
+#endif /* ONIGMO_REGPARSE_H */