Permalink
Browse files

patch 8.0.0020

Problem:    The regexp engines are not reentrant.
Solution:   Add regexec_T and save/restore the state when needed.
  • Loading branch information...
1 parent 2ec618c commit 6100d02aab7c8294b581cb299250eea164b50e9d @brammool brammool committed Oct 2, 2016
Showing with 466 additions and 408 deletions.
  1. +2 −3 runtime/doc/change.txt
  2. +7 −4 runtime/doc/eval.txt
  3. +357 −305 src/regexp.c
  4. +95 −94 src/regexp_nfa.c
  5. +3 −2 src/testdir/test_expr.vim
  6. +2 −0 src/version.c
@@ -1,4 +1,4 @@
-*change.txt* For Vim version 8.0. Last change: 2016 Sep 11
+*change.txt* For Vim version 8.0. Last change: 2016 Oct 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -913,8 +913,7 @@ Exceptions:
Substitute with an expression *sub-replace-expression*
*sub-replace-\=* *s/\=*
When the substitute string starts with "\=" the remainder is interpreted as an
-expression. This does not work recursively: a |substitute()| function inside
-the expression cannot use "\=" for the substitute string.
+expression.
The special meaning for characters as mentioned at |sub-replace-special| does
not apply except for "<CR>". A <NL> character is used as a line break, you
View
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 8.0. Last change: 2016 Sep 28
+*eval.txt* For Vim version 8.0. Last change: 2016 Oct 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -6168,9 +6168,9 @@ range({expr} [, {max} [, {stride}]]) *range()*
*readfile()*
readfile({fname} [, {binary} [, {max}]])
Read file {fname} and return a |List|, each line of the file
- as an item. Lines broken at NL characters. Macintosh files
- separated with CR will result in a single long line (unless a
- NL appears somewhere).
+ as an item. Lines are broken at NL characters. Macintosh
+ files separated with CR will result in a single long line
+ (unless a NL appears somewhere).
All NUL characters are replaced with a NL character.
When {binary} contains "b" binary mode is used:
- When the last line ends in a NL an extra empty list item is
@@ -7390,6 +7390,9 @@ submatch({nr}[, {list}]) *submatch()* *E935*
|substitute()| this list will always contain one or zero
items, since there are no real line breaks.
+ When substitute() is used recursively only the submatches in
+ the current (deepest) call can be obtained.
+
Example: >
:s/\d\+/\=submatch(0) + 1/
< This finds the first number in the line and adds one to it.
Oops, something went wrong.

0 comments on commit 6100d02

Please sign in to comment.