In perl.git, the branch smoke-me/nicholas/parse_start has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/60310164f39556e126b3f7cb5c3d2e52c632d41d?hp=ed15f089efe23c3c8ff3a832c0eb38cea446b2fc>

- Log -----------------------------------------------------------------
commit 60310164f39556e126b3f7cb5c3d2e52c632d41d
Author: Nicholas Clark <n...@ccl4.org>
Date:   Wed Jun 5 12:15:57 2013 +0200

    In regcomp.c, Set_Node_Cur_Length() uses parse_start, so explicitly pass it.
    
    The macro Set_Node_Cur_Length() had been referring to the variable
    parse_start within its body. This somewhat secret reference is potentially
    risky, as it was always taking a parameter node, hence one might assume that
    that was all that it used, and change the value stored in parse_start.
    (Specifically, one place that assigns RExC_parse - 1 to parse_start, and 
later
    uses parse_start + 1, which looks like an obvious cleanup candidate)
    
    So make parse_start an explicit parameter.
    
    Also, eliminate the never-used macro Set_Cur_Node_Length. This was added as
    part of commit fac927409d5ddf11 (April 2001) but never used.
-----------------------------------------------------------------------

Summary of changes:
 regcomp.c |   21 ++++++++++-----------
 1 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/regcomp.c b/regcomp.c
index 8caa415..8e4dcb9 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -634,7 +634,7 @@ static const scan_data_t zero_scan_data =
 #define Set_Cur_Node_Offset
 #define Set_Node_Length_To_R(node,len)
 #define Set_Node_Length(node,len)
-#define Set_Node_Cur_Length(node)
+#define Set_Node_Cur_Length(node,start)
 #define Node_Offset(n) 
 #define Node_Length(n) 
 #define Set_Node_Offset_Length(node,offset,len)
@@ -673,9 +673,8 @@ static const scan_data_t zero_scan_data =
 
 #define Set_Node_Length(node,len) \
     Set_Node_Length_To_R((node)-RExC_emit_start, len)
-#define Set_Cur_Node_Length(len) Set_Node_Length(RExC_emit, len)
-#define Set_Node_Cur_Length(node) \
-    Set_Node_Length(node, RExC_parse - parse_start)
+#define Set_Node_Cur_Length(node, start)                \
+    Set_Node_Length(node, RExC_parse - start)
 
 /* Get offsets and lengths */
 #define Node_Offset(n) (RExC_offsets[2*((n)-RExC_emit_start)-1])
@@ -8828,7 +8827,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 
*flagp,U32 depth)
                     *flagp |= HASWIDTH;
 
                     Set_Node_Offset(ret, parse_start+1);
-                    Set_Node_Cur_Length(ret); /* MJD */
+                    Set_Node_Cur_Length(ret, parse_start);
 
                     nextchar(pRExC_state);
                     return ret;
@@ -9478,7 +9477,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 
*flagp,U32 depth)
            if (paren == '>')
                node = SUSPEND, flag = 0;
            reginsert(pRExC_state, node,ret, depth+1);
-           Set_Node_Cur_Length(ret);
+            Set_Node_Cur_Length(ret, parse_start);
            Set_Node_Offset(ret, parse_start + 1);
            ret->flags = flag;
             REGTAIL_STUDY(pRExC_state, ret, reg_node(pRExC_state, TAIL));
@@ -9702,7 +9701,7 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, 
U32 depth)
                RExC_naughty += 2 + RExC_naughty / 2;
                reginsert(pRExC_state, CURLY, ret, depth+1);
                 Set_Node_Offset(ret, parse_start+1); /* MJD */
-                Set_Node_Cur_Length(ret);
+                Set_Node_Cur_Length(ret, parse_start);
            }
            else {
                regnode * const w = reg_node(pRExC_state, WHILEM);
@@ -10584,7 +10583,7 @@ tryagain:
                RExC_parse--;
 
                Set_Node_Offset(ret, parse_start + 2);
-               Set_Node_Cur_Length(ret);
+                Set_Node_Cur_Length(ret, parse_start);
                nextchar(pRExC_state);
            }
            break;
@@ -10648,7 +10647,7 @@ tryagain:
 
                 /* override incorrect value set in reganode MJD */
                 Set_Node_Offset(ret, parse_start+1);
-                Set_Node_Cur_Length(ret); /* MJD */
+                Set_Node_Cur_Length(ret, parse_start);
                 nextchar(pRExC_state);
 
             }
@@ -10725,7 +10724,7 @@ tryagain:
 
                     /* override incorrect value set in reganode MJD */
                     Set_Node_Offset(ret, parse_start+1);
-                    Set_Node_Cur_Length(ret); /* MJD */
+                    Set_Node_Cur_Length(ret, parse_start);
                    RExC_parse--;
                    nextchar(pRExC_state);
                }
@@ -11350,7 +11349,7 @@ tryagain:
             }
 
            RExC_parse = p - 1;
-            Set_Node_Cur_Length(ret); /* MJD */
+            Set_Node_Cur_Length(ret, parse_start);
            nextchar(pRExC_state);
            {
                /* len is STRLEN which is unsigned, need to copy to signed */

--
Perl5 Master Repository

Reply via email to