regexec: handle \G ourself, rather than in callers
authorDavid Mitchell <davem@iabyn.com>
Sun, 23 Jun 2013 12:30:59 +0000 (13:30 +0100)
committerDavid Mitchell <davem@iabyn.com>
Sun, 28 Jul 2013 09:33:36 +0000 (10:33 +0100)
commit03c83e260b8bf6c564b49840536ccd6f47a794ac
tree330552035f00d63622becfc5766a0c2cac9839bd
parent8fe3c67a9d33417c317107b8f5a56ca88d4153a9
regexec: handle \G ourself, rather than in callers

Normally a /g match starts its processing at the previous pos() (or at
char 0 if pos is not set); however in the case of something like /abc\G/
we actually need to start 3 characters before pos. This has been handled
by the *callers* of regexec() subtracting prog->gofs from the stringarg
arg before calling it, or by setting stringarg to strbeg for floating,
such as /\w+\G/.

This is clearly wrong: the callers of regexec() shouldn't need to worry
about the details of getting \G right: move this code into regexec()
itself.

(Note that although this commit passes all tests, it quite possibly isn't
logically correct. It will get fixed up further during the next few
commits)
pp_ctl.c
pp_hot.c
regexec.c
regexp.h