mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
refactor: move structs from regexp_defs.h to regexp.c (#26899)
These structs are only used in other source files as pointers and their fields aren't accessed in other source files.
This commit is contained in:
@@ -42,6 +42,104 @@
|
|||||||
#include "nvim/types_defs.h"
|
#include "nvim/types_defs.h"
|
||||||
#include "nvim/vim_defs.h"
|
#include "nvim/vim_defs.h"
|
||||||
|
|
||||||
|
enum {
|
||||||
|
/// In the NFA engine: how many braces are allowed.
|
||||||
|
/// TODO(RE): Use dynamic memory allocation instead of static, like here
|
||||||
|
NFA_MAX_BRACES = 20,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
/// In the NFA engine: how many states are allowed.
|
||||||
|
NFA_MAX_STATES = 100000,
|
||||||
|
NFA_TOO_EXPENSIVE = -1,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Which regexp engine to use? Needed for vim_regcomp().
|
||||||
|
/// Must match with 'regexpengine'.
|
||||||
|
enum {
|
||||||
|
AUTOMATIC_ENGINE = 0,
|
||||||
|
BACKTRACKING_ENGINE = 1,
|
||||||
|
NFA_ENGINE = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Structure returned by vim_regcomp() to pass on to vim_regexec().
|
||||||
|
/// This is the general structure. For the actual matcher, two specific
|
||||||
|
/// structures are used. See code below.
|
||||||
|
struct regprog {
|
||||||
|
regengine_T *engine;
|
||||||
|
unsigned regflags;
|
||||||
|
unsigned re_engine; ///< Automatic, backtracking or NFA engine.
|
||||||
|
unsigned re_flags; ///< Second argument for vim_regcomp().
|
||||||
|
bool re_in_use; ///< prog is being executed
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Structure used by the back track matcher.
|
||||||
|
/// These fields are only to be used in regexp.c!
|
||||||
|
/// See regexp.c for an explanation.
|
||||||
|
typedef struct {
|
||||||
|
// These four members implement regprog_T.
|
||||||
|
regengine_T *engine;
|
||||||
|
unsigned regflags;
|
||||||
|
unsigned re_engine;
|
||||||
|
unsigned re_flags;
|
||||||
|
bool re_in_use;
|
||||||
|
|
||||||
|
int regstart;
|
||||||
|
uint8_t reganch;
|
||||||
|
uint8_t *regmust;
|
||||||
|
int regmlen;
|
||||||
|
uint8_t reghasz;
|
||||||
|
uint8_t program[];
|
||||||
|
} bt_regprog_T;
|
||||||
|
|
||||||
|
/// Structure representing a NFA state.
|
||||||
|
/// An NFA state may have no outgoing edge, when it is a NFA_MATCH state.
|
||||||
|
typedef struct nfa_state nfa_state_T;
|
||||||
|
struct nfa_state {
|
||||||
|
int c;
|
||||||
|
nfa_state_T *out;
|
||||||
|
nfa_state_T *out1;
|
||||||
|
int id;
|
||||||
|
int lastlist[2]; ///< 0: normal, 1: recursive
|
||||||
|
int val;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Structure used by the NFA matcher.
|
||||||
|
typedef struct {
|
||||||
|
// These four members implement regprog_T.
|
||||||
|
regengine_T *engine;
|
||||||
|
unsigned regflags;
|
||||||
|
unsigned re_engine;
|
||||||
|
unsigned re_flags;
|
||||||
|
bool re_in_use;
|
||||||
|
|
||||||
|
nfa_state_T *start; ///< points into state[]
|
||||||
|
|
||||||
|
int reganch; ///< pattern starts with ^
|
||||||
|
int regstart; ///< char at start of pattern
|
||||||
|
uint8_t *match_text; ///< plain text to match with
|
||||||
|
|
||||||
|
int has_zend; ///< pattern contains \ze
|
||||||
|
int has_backref; ///< pattern contains \1 .. \9
|
||||||
|
int reghasz;
|
||||||
|
char *pattern;
|
||||||
|
int nsubexp; ///< number of ()
|
||||||
|
int nstate;
|
||||||
|
nfa_state_T state[];
|
||||||
|
} nfa_regprog_T;
|
||||||
|
|
||||||
|
struct regengine {
|
||||||
|
/// bt_regcomp or nfa_regcomp
|
||||||
|
regprog_T *(*regcomp)(uint8_t *, int);
|
||||||
|
/// bt_regfree or nfa_regfree
|
||||||
|
void (*regfree)(regprog_T *);
|
||||||
|
/// bt_regexec_nl or nfa_regexec_nl
|
||||||
|
int (*regexec_nl)(regmatch_T *, uint8_t *, colnr_T, bool);
|
||||||
|
/// bt_regexec_mult or nfa_regexec_mult
|
||||||
|
int (*regexec_multi)(regmmatch_T *, win_T *, buf_T *, linenr_T, colnr_T, proftime_T *, int *);
|
||||||
|
// uint8_t *expr;
|
||||||
|
};
|
||||||
|
|
||||||
// Structure used to save the current input state, when it needs to be
|
// Structure used to save the current input state, when it needs to be
|
||||||
// restored after trying a match. Used by reg_save() and reg_restore().
|
// restored after trying a match. Used by reg_save() and reg_restore().
|
||||||
// Also stores the length of "backpos".
|
// Also stores the length of "backpos".
|
||||||
|
@@ -59,92 +59,6 @@ typedef enum {
|
|||||||
MAGIC_ALL = 4, ///< "\v" very magic
|
MAGIC_ALL = 4, ///< "\v" very magic
|
||||||
} magic_T;
|
} magic_T;
|
||||||
|
|
||||||
enum {
|
|
||||||
/// In the NFA engine: how many braces are allowed.
|
|
||||||
/// TODO(RE): Use dynamic memory allocation instead of static, like here
|
|
||||||
NFA_MAX_BRACES = 20,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
/// In the NFA engine: how many states are allowed.
|
|
||||||
NFA_MAX_STATES = 100000,
|
|
||||||
NFA_TOO_EXPENSIVE = -1,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Which regexp engine to use? Needed for vim_regcomp().
|
|
||||||
/// Must match with 'regexpengine'.
|
|
||||||
enum {
|
|
||||||
AUTOMATIC_ENGINE = 0,
|
|
||||||
BACKTRACKING_ENGINE = 1,
|
|
||||||
NFA_ENGINE = 2,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Structure returned by vim_regcomp() to pass on to vim_regexec().
|
|
||||||
/// This is the general structure. For the actual matcher, two specific
|
|
||||||
/// structures are used. See code below.
|
|
||||||
struct regprog {
|
|
||||||
regengine_T *engine;
|
|
||||||
unsigned regflags;
|
|
||||||
unsigned re_engine; ///< Automatic, backtracking or NFA engine.
|
|
||||||
unsigned re_flags; ///< Second argument for vim_regcomp().
|
|
||||||
bool re_in_use; ///< prog is being executed
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Structure used by the back track matcher.
|
|
||||||
/// These fields are only to be used in regexp.c!
|
|
||||||
/// See regexp.c for an explanation.
|
|
||||||
typedef struct {
|
|
||||||
// These four members implement regprog_T.
|
|
||||||
regengine_T *engine;
|
|
||||||
unsigned regflags;
|
|
||||||
unsigned re_engine;
|
|
||||||
unsigned re_flags;
|
|
||||||
bool re_in_use;
|
|
||||||
|
|
||||||
int regstart;
|
|
||||||
uint8_t reganch;
|
|
||||||
uint8_t *regmust;
|
|
||||||
int regmlen;
|
|
||||||
uint8_t reghasz;
|
|
||||||
uint8_t program[];
|
|
||||||
} bt_regprog_T;
|
|
||||||
|
|
||||||
/// Structure representing a NFA state.
|
|
||||||
/// An NFA state may have no outgoing edge, when it is a NFA_MATCH state.
|
|
||||||
typedef struct nfa_state nfa_state_T;
|
|
||||||
struct nfa_state {
|
|
||||||
int c;
|
|
||||||
nfa_state_T *out;
|
|
||||||
nfa_state_T *out1;
|
|
||||||
int id;
|
|
||||||
int lastlist[2]; ///< 0: normal, 1: recursive
|
|
||||||
int val;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Structure used by the NFA matcher.
|
|
||||||
typedef struct {
|
|
||||||
// These four members implement regprog_T.
|
|
||||||
regengine_T *engine;
|
|
||||||
unsigned regflags;
|
|
||||||
unsigned re_engine;
|
|
||||||
unsigned re_flags;
|
|
||||||
bool re_in_use;
|
|
||||||
|
|
||||||
nfa_state_T *start; ///< points into state[]
|
|
||||||
|
|
||||||
int reganch; ///< pattern starts with ^
|
|
||||||
int regstart; ///< char at start of pattern
|
|
||||||
uint8_t *match_text; ///< plain text to match with
|
|
||||||
|
|
||||||
int has_zend; ///< pattern contains \ze
|
|
||||||
int has_backref; ///< pattern contains \1 .. \9
|
|
||||||
int reghasz;
|
|
||||||
char *pattern;
|
|
||||||
int nsubexp; ///< number of ()
|
|
||||||
int nstate;
|
|
||||||
nfa_state_T state[];
|
|
||||||
} nfa_regprog_T;
|
|
||||||
|
|
||||||
/// Structure to be used for single-line matching.
|
/// Structure to be used for single-line matching.
|
||||||
/// Sub-match "no" starts at "startp[no]" and ends just before "endp[no]".
|
/// Sub-match "no" starts at "startp[no]" and ends just before "endp[no]".
|
||||||
/// When there is no match, the pointer is NULL.
|
/// When there is no match, the pointer is NULL.
|
||||||
@@ -165,18 +79,6 @@ typedef struct {
|
|||||||
uint8_t *matches[NSUBEXP];
|
uint8_t *matches[NSUBEXP];
|
||||||
} reg_extmatch_T;
|
} reg_extmatch_T;
|
||||||
|
|
||||||
struct regengine {
|
|
||||||
/// bt_regcomp or nfa_regcomp
|
|
||||||
regprog_T *(*regcomp)(uint8_t *, int);
|
|
||||||
/// bt_regfree or nfa_regfree
|
|
||||||
void (*regfree)(regprog_T *);
|
|
||||||
/// bt_regexec_nl or nfa_regexec_nl
|
|
||||||
int (*regexec_nl)(regmatch_T *, uint8_t *, colnr_T, bool);
|
|
||||||
/// bt_regexec_mult or nfa_regexec_mult
|
|
||||||
int (*regexec_multi)(regmmatch_T *, win_T *, buf_T *, linenr_T, colnr_T, proftime_T *, int *);
|
|
||||||
// uint8_t *expr;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Flags used by vim_regsub() and vim_regsub_both()
|
/// Flags used by vim_regsub() and vim_regsub_both()
|
||||||
enum {
|
enum {
|
||||||
REGSUB_COPY = 1,
|
REGSUB_COPY = 1,
|
||||||
|
Reference in New Issue
Block a user