diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2019-02-28 12:18:55 +0100 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2019-03-01 01:56:17 +0100 |
commit | e116b0f61f87a79fd93beb32c337f5bd9e2d3ab9 (patch) | |
tree | 726356b432c8fb719cc79792087ecf066dda9917 /src/nvim/regexp.c | |
parent | ff98f61601d61dcfd902655e70bba07fb768ce01 (diff) | |
download | rneovim-e116b0f61f87a79fd93beb32c337f5bd9e2d3ab9.tar.gz rneovim-e116b0f61f87a79fd93beb32c337f5bd9e2d3ab9.tar.bz2 rneovim-e116b0f61f87a79fd93beb32c337f5bd9e2d3ab9.zip |
vim-patch:8.1.0973: pattern with syntax error gives threee error messages
Problem: Pattern with syntax error gives threee error messages. (Kuang-che
Wu)
Solution: Remove outdated internal error. Don't fall back to other engine
after an error.
https://github.com/vim/vim/commit/cd62512c5595fa1f7a7f2c6ec1a90ea6bde3ad50
Diffstat (limited to 'src/nvim/regexp.c')
-rw-r--r-- | src/nvim/regexp.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c index 7c8d228d45..3b3ca29dad 100644 --- a/src/nvim/regexp.c +++ b/src/nvim/regexp.c @@ -7090,6 +7090,7 @@ regprog_T *vim_regcomp(char_u *expr_arg, int re_flags) { regprog_T *prog = NULL; char_u *expr = expr_arg; + int save_called_emsg; regexp_engine = p_re; @@ -7116,9 +7117,11 @@ regprog_T *vim_regcomp(char_u *expr_arg, int re_flags) bt_regengine.expr = expr; nfa_regengine.expr = expr; - /* - * First try the NFA engine, unless backtracking was requested. - */ + // + // First try the NFA engine, unless backtracking was requested. + // + save_called_emsg = called_emsg; + called_emsg = false; if (regexp_engine != BACKTRACKING_ENGINE) { prog = nfa_regengine.regcomp(expr, re_flags + (regexp_engine == AUTOMATIC_ENGINE ? RE_AUTO : 0)); @@ -7143,11 +7146,13 @@ regprog_T *vim_regcomp(char_u *expr_arg, int re_flags) // If the NFA engine failed, try the backtracking engine. The NFA engine // also fails for patterns that it can't handle well but are still valid // patterns, thus a retry should work. - if (regexp_engine == AUTOMATIC_ENGINE) { + // But don't try if an error message was given. + if (regexp_engine == AUTOMATIC_ENGINE && !called_emsg) { regexp_engine = BACKTRACKING_ENGINE; prog = bt_regengine.regcomp(expr, re_flags); } } + called_emsg |= save_called_emsg; if (prog != NULL) { // Store the info needed to call regcomp() again when the engine turns out |