This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
eliminate PL_reg_start_tmp, PL_reg_start_tmpl
authorDavid Mitchell <davem@iabyn.com>
Tue, 15 May 2012 20:01:39 +0000 (21:01 +0100)
committerDavid Mitchell <davem@iabyn.com>
Wed, 13 Jun 2012 12:32:53 +0000 (13:32 +0100)
commitb3fd53f35858a4ca5c7226ba0fa5a9e864378c38
tree760a9af83086fb9a5c529c6a50974adbb1d1bf11
parentb93070ed2e35b0430327cc866a4fcf4042014513
eliminate PL_reg_start_tmp, PL_reg_start_tmpl

PL_reg_start_tmp is a global array of temporary parentheses start
positions. An element is set when a '(' is first encountered,
while when a ')' is seen, the per-regex offs array is updated with the
start and end position: the end derived from the position where the ')'
was encountered, and the start position derived from PL_reg_start_tmp[n].
This allows us to differentiate between pending and fully-processed
captures.

Change it so that the tmp start value becomes a third field in the offs
array (.start_tmp), along with the existing .start and .end fields. This
makes the value now per regex rather than global. Although it uses a bit
more memory (the start_tmp values aren't needed after the match has
completed), it simplifies the code, and will make it easier to make a
(??{}) switch to the new regex without having to dump everything on the
save stack.
perl.c
regcomp.c
regexec.c
regexp.h
scope.c
sv.c