In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/c76419315df6965e6d8ba598dad9a8d5169b5859?hp=2e37ca1eef9874492f0bc5157e8b18d05861aef6>

- Log -----------------------------------------------------------------
commit c76419315df6965e6d8ba598dad9a8d5169b5859
Author: David Mitchell <da...@iabyn.com>
Date:   Tue Jul 24 15:11:29 2012 +0100

    lex_grow_linestr(): update re_eval_start
    
    As seen in [perl #114242], the TryCatch test suite triggers this bug.
    lex_grow_linestr() was reallocing the PL_linestr buffer and updating all
    pointers within it, but was failing to update
    PL_sublex_info.re_eval_start.
    
    Unfortunately, lex_grow_linestr() doesn't seem to be used in core outside
    of hereto docs, and due to a separate parser bug, hereto docs can't
    currently be used within /(?{})/, so I can't add tests for it yet.
-----------------------------------------------------------------------

Summary of changes:
 toke.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/toke.c b/toke.c
index f4394b5..19fa195 100644
--- a/toke.c
+++ b/toke.c
@@ -905,7 +905,7 @@ Perl_lex_grow_linestr(pTHX_ STRLEN len)
     SV *linestr;
     char *buf;
     STRLEN bufend_pos, bufptr_pos, oldbufptr_pos, oldoldbufptr_pos;
-    STRLEN linestart_pos, last_uni_pos, last_lop_pos;
+    STRLEN linestart_pos, last_uni_pos, last_lop_pos, re_eval_start_pos;
     linestr = PL_parser->linestr;
     buf = SvPVX(linestr);
     if (len <= SvLEN(linestr))
@@ -917,7 +917,11 @@ Perl_lex_grow_linestr(pTHX_ STRLEN len)
     linestart_pos = PL_parser->linestart - buf;
     last_uni_pos = PL_parser->last_uni ? PL_parser->last_uni - buf : 0;
     last_lop_pos = PL_parser->last_lop ? PL_parser->last_lop - buf : 0;
+    re_eval_start_pos = PL_sublex_info.re_eval_start ?
+                            PL_sublex_info.re_eval_start - buf : 0;
+
     buf = sv_grow(linestr, len);
+
     PL_parser->bufend = buf + bufend_pos;
     PL_parser->bufptr = buf + bufptr_pos;
     PL_parser->oldbufptr = buf + oldbufptr_pos;
@@ -927,6 +931,8 @@ Perl_lex_grow_linestr(pTHX_ STRLEN len)
        PL_parser->last_uni = buf + last_uni_pos;
     if (PL_parser->last_lop)
        PL_parser->last_lop = buf + last_lop_pos;
+    if (PL_sublex_info.re_eval_start)
+        PL_sublex_info.re_eval_start  = buf + re_eval_start_pos;
     return buf;
 }
 

--
Perl5 Master Repository

Reply via email to